我用STC15系列的单片机 keil编程
最近调试一个程序的时候,用串口通信,通信的协议是模拟红外解码的形式,就是每次通信有四个码,分别是用户码,用户反码,数据码,数据反码
之前试了是可以正常通信的,但有一个码很特殊,当我的数据码定义为0x88的时候,串口接收端判断数据码正常,判断数据反码就进不去了
我定义的方式是先用#define定义再调用
#define code1 0x88
。。。
if((uart[0]==code1)&&(uart[1]==~code1))
{
........
}
类似于这样子
后来我用串口把收到的uart[1]发回到电脑上,是0x77正常,但判断就是不成立
然后我又直接把那个~code1写成0x77,判断正常
然后又改回来,把code1定义成别的,像0x08,判断也是正常的
也就是说,如果把code1定义为0x88,后面的判断语句是写成uart[1]==~code1,判断就会出错,原因不明。。。
如果定义成其他码,就一切正常
查了keil编译出来的汇编语言,发现确实是有不一样的地方,但是本人看不懂汇编,不知啥意思,不过好像是先把寄存器清零再写入的操作,然后判断的时候刚好被清零一样
有没有高手帮忙验证一下!!!!
|