430程I2C通信问题
今天在调试EEPROM过程中,发现了一个奇怪的问题,读取EEPROM数据时 这样的语句,判断SDA是不是高电平,然后组成数据,2种写法
1
ddata|=(P4IN&0x20);//这样的写法在51单片机上试过,可行;但在430单片机上就会产生错位
2
if(P4IN&0x20)
{
ddata+=1; //这种写法就完全正确
}
反汇编出来我也没看出区别:
发现问题了。原来是ddata|=(P4IN&0x20);这条语句的问题,只有P4IN&0x01时才会正确,否则如果为1的话,不是从最低位得到1,而是0x20;希望大家不会犯类似的问题
页:
[1]