在Keil C51中检查这两种情况,并在两种情况下在调试器中观察P0外设选项。结果在两种情况下有所不同。为什么P0 = 0xFF;指令不会产生相同的结果?
情况1)
main()
{P0=0x00;
P0=0xFF;
while(1);
}
案例2)
main()
{
P0=0xFF;
while(1);
}
case 1 program case 1 peripheral window while debugging
case 2 peripheral window while debugging
目标设备89S52 - 8051基于微控制器
在写入0xFF之前,我检查了P0的不同值而不是0x00。在所有情况下,在最后阶段读取先前的值。
P0=0x10;
P0=0xFF;
结果:P0引脚= 0x10,P0寄存器= 0xFF
由于P0没有用于I / O操作的上拉电阻,当我们写入0xFF时,引脚处于高阻态。因此,在软件调试器中,对应于P0引脚值的变量包含前一个值。它不会改变。但在硬件中,具有同步锁存值1的引脚将浮动。
检查了不同的案例
P0=0x07;
P0=0xF1;
结果:P0引脚= 0x01,P0寄存器= 0xF1(寄存器中对应1s的位保持相同)
P0=0x13;
P0=0xC3;
结果:P0引脚= 0x03,P0寄存器= 0xC3