以下是我排查的一点步骤:
红外接收管接收到信号会输出低电平,即将单片机的io口置0
由此特性,先判断是否接收到低电平:
- while(1)
- {
- if(P32==0){led1=~led1;}
- }
复制代码
在main中添加语句,判断当p32口低电平时,led灯翻转提示。经测试可行,说明io口接收到了对应的低电平。
然后进入判断数据帧语句,如果接收到数据帧,使led翻转,经测试不行,说明此函数有问题。
- while(1)
- {
- if(IR_GetDataFlag()) //如果收到数据帧
- {
- led1=~led1;}}
复制代码
然后前往此函数的定义:
- unsigned char IR_GetDataFlag(void)
- {
- if(IR_DataFlag)
- {
- IR_DataFlag=0;
- return 1;
- }
- return 0;
- }
复制代码
此函数是判断是否有信号进入,如IR_DataFlag=1则返回1
在中断函数中,只有当判断整个数据码完整时才会IR_DataFlag=1
根据中断函数内容,只有完整接收码后才IR_DataFlag=1,因此判断中断内容有误。
|