【问题标题】:Keil C51 8051 Port 0 I/OKeil C51 8051 端口 0 I/O
【发布时间】:2019-02-13 14:28:55
【问题描述】:

在 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 program

case 2 peripheral window while debugging

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

【问题讨论】:

    标签: keil 8051 c51


    【解决方案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-18
      • 2015-05-26
      • 2011-02-17
      • 2013-01-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多