daihui713:
中斷查詢解碼————意思就是 邊解碼 邊PWM循環, 例如:以50us的時基礎作為定時中斷,時間一到就去中斷里面解碼,以累計的方式判斷什么引導碼用戶碼數據碼反碼等, 中斷函數里面最多也就是++,判斷,循環存放之類的語句,占用不了多少時間,最多十幾uS就退出中斷了,這樣就不用一直在那里等電平的變化。退出后又接著繼續主函數中的PWM循環,十幾US的執行時間根本不影響PWM調光的視覺暫留效應,這樣就看不到閃。 給你個參考——利用定時器的固定時基來查詢紅外脈沖的寬度,從而進行解碼!可以自己去分析,至于中間的高電平是多少時間,低電平是多少時間都不用去管,只需計算兩個下降沿間隔時間就可以判斷0和1,同時也可以判斷是否是引導碼,或是結束碼,或是連續碼定時器查看時間設置為125us,執行定時器中斷程序一次voidTimer0interrupt1() { irTime++; if(irTime==240)//ir解碼后碼值存放時間,240*125us=30ms { irTime--; codeCnt=0x3f; } if(IR_IO) Irprot_LastState=1;//記錄IO狀態 elseif(Irprot_LastState) //有下降沿 { Irprot_LastState=0; //下降沿后IO狀態記錄為0 if(irTime>3]>3]++; //大于15*125us=1.875ms的間隔為數據1 } irTime=0; //下降沿處理完成,將時間清0 }}