<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > uc/OS-II下ARM7定時(shí)器捕獲實(shí)現紅外解碼

uc/OS-II下ARM7定時(shí)器捕獲實(shí)現紅外解碼

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò ) 收藏
今天下午的時(shí)候,調試努力之下,終于把紅外解碼弄出來(lái)了。其實(shí)以前有次比賽的時(shí)候就已經(jīng)用到了紅外,只是那次用的是51單片機,用的是外部中斷和延時(shí)檢測脈寬來(lái)進(jìn)行解碼,因為51的時(shí)鐘這些比較簡(jiǎn)單,所以解碼很容易就正確了。但是現在換到了ARM7平臺下,由于對它的不是很熟悉,怎么用普通語(yǔ)句實(shí)現精確延時(shí)對我來(lái)說(shuō)是個(gè)難點(diǎn)。最后考慮用兩個(gè)方案來(lái)實(shí)現紅外的解碼。方案一是用外部中斷加定時(shí)器延時(shí)檢測脈寬進(jìn)行解碼,但是結果并沒(méi)有我想的那樣美好,調試了半天也沒(méi)有實(shí)現正確的解碼,個(gè)人認為是任務(wù)節拍的影響,但是確實(shí)不知道該怎么修改,最后放棄方案一,改用方案二,用定時(shí)器捕獲實(shí)現紅外的解碼,并最終實(shí)現。

LPC2103芯片帶有定時(shí)器捕獲,可以設置為下降沿,上升沿或雙邊沿捕獲中斷。因為結合到此款紅外編碼方式,所以采用下降沿進(jìn)行捕獲。定時(shí)器0因為用作了系統節拍定時(shí)器,所以我選擇了定時(shí)器1的捕獲。

本文引用地址:http://dyxdggzs.com/article/201611/319111.htm

定時(shí)器1進(jìn)行如下的初始化。

[plain]view plaincopy
print?
  1. voidSetTimer(void)
  2. {
  3. T1TCR=0x02;//關(guān)閉復位定時(shí)器1
  4. T1PR=10;//11分頻,約1us計時(shí)一次(外設時(shí)鐘11.0592MHZ)
  5. T1CCR=0x06;//下降沿捕獲并產(chǎn)生中斷
  6. T1IR=0x10;//清除定時(shí)器1捕獲0中斷
  7. T1TCR=0x01;//開(kāi)啟定時(shí)器1
  8. VICVectAddr1=(uint32)Timer1_Handler;//中斷向量相關(guān)設置
  9. VICVectCntl1=(0x20|0x05);
  10. VICIntEnable|=(1<<5);
  11. }



然后在定時(shí)器1中斷服務(wù)函數里,就算出相鄰兩次下降沿之間的差值。然后通過(guò)消息郵箱把消息發(fā)送到脈寬檢測任務(wù)進(jìn)行處理。

[plain]view plaincopy
print?
  1. voidTimer1_Exception()
  2. {
  3. staticuint32tOld;//保存舊的下降沿捕獲值
  4. uint32tNew;//保存新的下降沿捕獲值
  5. statici;
  6. OS_ENTER_CRITICAL();
  7. T1IR=0x10;//清除定時(shí)器1捕獲0中斷
  8. tNew=T1CR0;
  9. tValue=tNew-tOld;//得到兩次下降沿之間的差值
  10. tOld=tNew;//以便下次中斷處理
  11. OSMboxPost(Msg,(void*)tValue);//發(fā)送消息郵箱,行為同步
  12. OS_EXIT_CRITICAL();
  13. VICVectAddr=0x00;
  14. }

在檢測脈寬任務(wù)里,我只需要根據測定脈寬與本來(lái)編碼原有的脈寬進(jìn)行比較判斷,然后進(jìn)行相關(guān)移位數據操作,得到數據碼值。

因為我的遙控器有點(diǎn)不同,地址碼與地址反碼不互反,所以不能進(jìn)行地址的判斷,所以濾除掉了引導碼與地址碼,直接進(jìn)行了數據碼的處理。

只要數據碼與數據反碼取反相同,則調試LED閃爍一下。

當然我還沒(méi)有具體知道遙控器按鍵對應的具體碼制是多少,而且還沒(méi)有檢測到連發(fā)碼,留待下次把碼制通過(guò)串口發(fā)送到上位機進(jìn)行顯示。

[plain]view plaincopy
print?

[plain]view plaincopy
print?
  1. 這是檢測脈寬任務(wù)的核心代碼:

    while(1)
  2. {
  3. OSMboxPend(Msg,0,&err);//等待脈寬檢測消息
  4. if(tValue>2145&&tValue<2345)//進(jìn)行脈寬檢測
  5. {
  6. ucTemp=1;//邏輯1
  7. }
  8. elseif(tValue>1025&&tValue<1225)
  9. {
  10. ucTemp=0;//邏輯0
  11. }
  12. elseif(tValue>13400&&tValue<13600)
  13. {
  14. ucCounter=0;//引導碼
  15. usData0=0;
  16. usData1=0;
  17. flag=1;
  18. }
  19. else
  20. {
  21. continue;
  22. }
  23. if(flag)//數據處理過(guò)程
  24. {
  25. ucCounter++;
  26. if(ucCounter<16)
  27. {
  28. usData0|=(uint16)ucTemp;
  29. usData0<<=1;
  30. }
  31. elseif(ucCounter==16)
  32. {
  33. usData0|=(uint16)ucTemp;
  34. }
  35. elseif(ucCounter<32)
  36. {
  37. usData1|=(uint16)ucTemp;
  38. usData1<<=1;
  39. }
  40. elseif(ucCounter==32)
  41. {
  42. usData1|=(uint16)ucTemp;
  43. flag=0;
  44. OSSemPost(Sem);//發(fā)送信號量,進(jìn)行碼制轉換任務(wù),我的任務(wù)只是簡(jiǎn)單的實(shí)現了判斷解碼是否成功。
  45. }
  46. }
  47. }



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>