在avr编程中不知这句if(status&(1<<FE)|(1<<DOR)|(1<<PE))是什么意思,请路过的大侠指教
在avr编程中不知这句if(status&(1<<FE)|(1<<DOR)|(1<<PE))是什么意思,请路过的大侠指教,不知“|”符号实干什么用的...
在avr编程中不知这句if(status&(1<<FE)|(1<<DOR)|(1<<PE))是什么意思,请路过的大侠指教,不知“|”符号实干什么用的
展开
2个回答
展开全部
首先这个|是位或,楼上讲的正确。
FE,DOR和PE是AVR单片机的USART相关UCSRA寄存器中的状态位。
FE是帧错误,DOR是数据溢出错误,PE奇偶校验错误。
如果你想直接在程序里用上面的IF,应该先定义这个三个值,加在程序前面
#define FE 4
#define DOR 3
#define PE 2
这三个寄存器位就可以直接用了。
status我不知道你怎么用的,这个IF的解释是,如果status的值与三个错误中的任意一个一致则条件成立。这应该是用来监控串口通信状态用的。
FE,DOR和PE是AVR单片机的USART相关UCSRA寄存器中的状态位。
FE是帧错误,DOR是数据溢出错误,PE奇偶校验错误。
如果你想直接在程序里用上面的IF,应该先定义这个三个值,加在程序前面
#define FE 4
#define DOR 3
#define PE 2
这三个寄存器位就可以直接用了。
status我不知道你怎么用的,这个IF的解释是,如果status的值与三个错误中的任意一个一致则条件成立。这应该是用来监控串口通信状态用的。
展开全部
或运算符号:
如果上面的FE = 0x01;DOR = 0x02;PE = 0x04;
则
(1<<FE)|(1<<DOR)|(1<<PE)就可以变为:
(1<<0x01) | (1<<0x02) | (1<<0x04)
1<<0x01 = 0x02;
1<<0x02 = 0x04;
1<<0x04 = 0x10;
所以三个 或运算结果就是0x02|0x04|0x10 = 0x16;
if(status&(1<<FE)|(1<<DOR)|(1<<PE))
就可以是if(status&0x16)的意思了。
如果上面的FE = 0x01;DOR = 0x02;PE = 0x04;
则
(1<<FE)|(1<<DOR)|(1<<PE)就可以变为:
(1<<0x01) | (1<<0x02) | (1<<0x04)
1<<0x01 = 0x02;
1<<0x02 = 0x04;
1<<0x04 = 0x10;
所以三个 或运算结果就是0x02|0x04|0x10 = 0x16;
if(status&(1<<FE)|(1<<DOR)|(1<<PE))
就可以是if(status&0x16)的意思了。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询