|
本帖最后由 Gestrand 于 2021-5-21 08:43 編輯
使用STM8眾拳開發板代碼做的NEC協議遙控器,遙控碼正常,但是會出現以下問題:被物體擋住,一直按著遙控器,物體挪開,再去按遙控器,定時器計數值(It_tim)發生錯誤,可如圖所示,需要按多幾次(It_tim)才恢復正常計數值。這是什么現象?
單片機源程序如下:
- void PT2222_Recv_Handle(void)
- {
- u16 It_tim=0;
- switch(PT2222_Status)
- {
- case 0:
- {
- PT2222_Status=1;
- TIM1_Cmd(ENABLE);//開定時器
- TIM1_SetCounter(0);
- }break;
- case 1:
- {
- TIM1_Cmd(DISABLE);
- It_tim=TIM1_GetCounter();
- TIM1_SetCounter(0);
- TIM1_Cmd(ENABLE);//開定時器
- if(It_tim>=12500 && It_tim<=14500)//起始碼 14.40ms
- {
- PT2222_Status=2;
- //LED_STBY_R;//測試
- }
- else if(It_tim>=10250 && It_tim<=12250)//重復碼 12.00ms
- {
- IR_Long=1;
- PT2222_Recv_OK=1;
- PT2222_Status=0;
- PT2222_Recv_Count=0;
- //LED_STBY_R;//測試
- }
- else
- {
- PT2222_Status=0;
- IR_Val=0;
- PT2222_Recv_Count=0;
- LED_STBY_R;//測試
- }
- }break;
- case 2://用戶碼、數據碼
- {
- TIM1_Cmd(DISABLE);
- It_tim=TIM1_GetCounter();
- TIM1_SetCounter(0);
- TIM1_Cmd(ENABLE);//開定時器
- if(It_tim>=1000 && It_tim<=1300) //0
- {
- IR_Val=IR_Val<<1;
- PT2222_Recv_Count++;
- }
- else if(It_tim>=2000 && It_tim<=2600) //1
- {
- IR_Val=IR_Val<<1;
- IR_Val=IR_Val+1;
- PT2222_Recv_Count++;
- }
- else
- {
- PT2222_Status=0;
- IR_Val=0;
- PT2222_Recv_Count=0;
- //LED_STBY_R;//測試
- }
- if(PT2222_Recv_Count>=32)
- {
- PT2222_Recv_OK=1;
- PT2222_Status=0;
- PT2222_Recv_Count=0;
- }
- }break;
- default:
- {
- PT2222_Status=0;
- }break;
- }
- }
復制代碼
|
|