在 Keil C51 中检查这两种情况,并在两种情况下在调试器中观察 P0 外设选项。两种情况结果不同。为什么P0=0xFF;指令不会产生相同的结果?
情况1)
main()
{P0=0x00;
P0=0xFF;
while(1);
}
案例2)
main()
{
P0=0xFF;
while(1);
}
目标设备 89S52 -- 基于 8051 的微控制器
在 Keil C51 中检查这两种情况,并在两种情况下在调试器中观察 P0 外设选项。两种情况结果不同。为什么P0=0xFF;指令不会产生相同的结果?
情况1)
main()
{P0=0x00;
P0=0xFF;
while(1);
}
案例2)
main()
{
P0=0xFF;
while(1);
}
目标设备 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(寄存器中对应于 1 的位保持不变)
P0=0x13;
P0=0xC3;
结果:P0 引脚 = 0x03 ,P0 寄存器 = 0xC3