在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 peripheral window while debugging
目标设备89S52-基于8051的微控制器
答案 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