新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于AVR單片機捕獲中斷實現紅外線解碼的方法介紹

        基于AVR單片機捕獲中斷實現紅外線解碼的方法介紹

        作者: 時間:2011-09-27 來源:網絡 收藏

        4 軟件編程

          基于來實現紅外編碼的軟件程序流程如圖4所示。下面是其C語言程序代碼:C程序代碼:

          

         基于AVR單片機的捕獲中斷來實現紅外編碼的軟件程序流程

          *pragma interrupt_handler IceInt:6 //中斷程序說明

          void ICEInit(void) //T/C1初始化

          {

          TIMSK=0X20; //使能

          TCCR1A=0X00; //T/C1時鐘與系統相同,本文使用系統AVR內部自帶1MHz振蕩源.T/C1時鐘周期為1μs

          TCCR1B=0X81; //使能噪音抑制,下降沿觸發中斷

          }

          void IceInt(void)

          {

          static nint oldFall;

          uint temp,newFall;

          newFall=ICR1;

          temp=newFall-oldFall; //計算脈沖加間隔的時間

          oldFall=newFall;

          if(temp>1024 temp1225) // "0"信號

          {

          temp=0;

          }

          else if(temp>2145 temp2345) //“1”信號

          {

          temp=1;

          }

          else if(temp>13400 temp13600) //header信號

          {

          bitcnt=0;

          data0=0;

          data1=0'

          return; //返回,等待下次開始接收

          }

          else ///干擾信號

          {

          return;

          }

          bitcnt++;

          if(bitcnt16) //開始接收前16位

          {

          data0=data0|(uint)temp;

          data0=data01;

          }

          else if(bitcnt==16)

          {

          data0=data0|(uint)temp;

          }

          else if(bitcnt32) //開始接收后16位

          {

          data1=data1|(uint)temp;

          data1=data11;

          }

          else if(bitcnt==32) //接收完最后一位

          }

          data1=data1|(uint)temp;

          }

          }

          該單片機的主循環程序中含有一些代碼檢測bitcnt,當bitcnt=32時,表明一幀數據已接收完成,并將bitcnt設置為0xff,然后對接收的數據進行相應的處理。程序調試最好配合串行通訊來進行,這樣可以在PC上顯示數據或者畫出波形以方便驗證。If(temp>1025 temp1225)這條語句是辨識“0”的代碼.

          需要補充的是當鍵盤按下長達108ms時,發射端開始發送連續信號,與單次發送一樣,只是header信號是由9ms的間隔加2.5ms的脈沖組成的。

        紅外遙控器相關文章:紅外遙控器原理

        上一頁 1 2 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 六安市| 安丘市| 盘锦市| 江孜县| 临泉县| 咸宁市| 揭西县| 郑州市| 白山市| 洛南县| 无极县| 孝昌县| 南江县| 南开区| 巨鹿县| 罗山县| 兰坪| 丽水市| 江西省| 武宣县| 库车县| 长兴县| 晋城| 龙游县| 巢湖市| 平利县| 邹平县| 白城市| 龙泉市| 石门县| 清河县| 镇巴县| 公主岭市| 浏阳市| 玛沁县| 鄂托克前旗| 海伦市| 平乐县| 堆龙德庆县| 土默特右旗| 桂平市|