Keil C51 8051端口0 I / O

时间:2018-09-08 13:59:33

标签: keil 8051 c51

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

案例1)

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

情况2)

 function  passwordMatch(input: FormControl) { 
  if(input.root != undefined){
  let passwordInput = input.root.controls.password,
  passwordConfirmationInput = input.root.controls.cpassword;
  if (passwordInput.value !== passwordConfirmationInput.value) {
   return passwordConfirmationInput.setErrors({notequal: true})
  }
  else {
    return passwordConfirmationInput.setErrors(null);
  }
 }

case 1 program
case 1 peripheral window while debugging

case 2 program

case 2 peripheral window while debugging

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

1 个答案:

答案 0 :(得分: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