void EXTI9_5_IRQnHandler(void)
{
u8 Data;
u8 Tim = 0;
u8 OK = 0;
u8 Num = 0;
while(1)
{
if(EXTI_GetITStatus(EXTI_Line9)!=RESET)
{
Tim = Remote_Scan();//高电平时间
if(Tim >= 250) break;
if(Tim >= 200 && Tim < 250)
{
OK = 1;//红外起始信号
}
else if(Tim >= 60 && Tim < 90)
{
Data = 1;//数据为1
}
else if(Tim >= 10 && Tim < 50)
{
Data = 0;//数据为0
}
if(OK == 1)
{
hw_jsm <<= 1;
hw_jsm += Data;
if(Num >= 32)
{
hw_jsbz = 1;
break;
}
}
Num ++;
}
}
EXTI_ClearITPendingBit(EXTI_Line9);
}
红外数据接收处理终端函数,PB9红外上拉输入。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
已经解决了,中断入口函数多了个n
{
while(1)
{
//
}
EXTI_ClearITPendingBit(EXTI_Line9);
}
感觉应该是这样
获取高电平时间
u8 Remote_Scan(void)
{
u8 sta=0;
//u8 t1,t2;
while(GPIO_ReadInputDataBit(GPIOB,GPIO_Pin_9) == 1)
{
sta++;
delay_us(20);
if(sta>=250) return sta;
}
return sta;
}
一周热门 更多>