-1

在 Keil C51 中检查这两种情况,并在两种情况下在调试器中观察 P0 外设选项。两种情况结果不同。为什么P0=0xFF;指令不会产生相同的结果?

情况1)

main()
{P0=0x00;
 P0=0xFF;
 while(1);
}

案例2)

main()
{
 P0=0xFF;
 while(1);
}

案例 1 程序
案例 1 调试时的外围窗口

案例2程序

案例 2 调试时的外围窗口

目标设备 89S52 -- 基于 8051 的微控制器

4

1 回答 1

1

在写入 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

于 2018-09-12T04:45:23.633 回答