原子的战舰版,程序进入中断后出不来,这是什么情况,有大神鞥呢解决的吗?

2019-07-21 05:55发布

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红外上拉输入。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
7条回答
hj911024
2019-07-22 00:33
ZDawn 发表于 2019-1-15 11:22
Remote_Scan();是什么功能?从定时器那里获取时间值吗?如果是这样的话,定时器的中断优先级有没有比外部中 ...

获取高电平时间
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;
}

一周热门 更多>