紅外遙控NEC協議使用總結

最近做了一個除錯紅外遙控三色燈的實習,花了一個多月的時間研究基於NEC協議的紅外遙控,下面是這次實習技術方面的總結。

一、NEC協議特徵:

  1. 8位地址和8位命令長度
  2. 每次傳輸兩遍地址(使用者碼)和命令(按鍵值)
  3. 通過脈衝串之間的時間間隔來實現訊號的調製(PPM)
  4. 38Khz載波
  5. 每位的週期為1.12ms(低電平)或者2.25ms(高電平)

二、NEC協議的典型脈衝鏈:

上圖所示為NEC協議的典型脈衝鏈。協議規定低位首先傳送。首先傳送9ms 4.5ms的引導碼,接下來是兩位元組使用者碼,第三位元組是資料碼,用來判斷按鍵值,第四位元組是資料反碼,可以用來校驗,提高按鍵的準確性。

三、NEC協議脈衝鏈的其他圖片

除了引導碼、使用者碼和資料碼以外,協議最後還有一個1bit的停止位,用於資料傳送完畢判斷。另外在NEC協議中,似乎沒有說明停止位的高低電平持續時間。

四、NEC協議的高低電平辨別方式

使用者碼和資料碼中的‘0’和‘1’是利用脈衝的時間間隔來區分,這種編碼方式稱為脈衝位置調製方式(PPM)。

其中位0首先為0.56ms的高電平,然後是0.565ms的低電平;位1首先是0.56ms的高電平,然後是1.69ms的低電平。

五、程式設計注意事項

1.紅外接收頭引腳訊號是相反的電平

以上電平是從發射頭角度來看,紅外接收頭引腳輸出的是相反的電平。

如圖,即沒有資料傳輸時,P3.2引腳保持為高電平,當接收到資料時,首先是引導碼,9ms的低電平和4.5ms的高電平,然後是32位資料和1位停止位。一般來說,P3.2與微控制器的某中斷引腳相連,當接收資料時,低電平會觸發中斷。

2.資料從LSB(低位)開始傳送,所以選擇右移方式接收資料。

四個位元組的資料都是先傳送D0,最後傳送D7。所以接收到1位資料後,給變數的最高位賦值,右移。或者先右移,再給變數的最高位賦值。

3.可以用一個陣列儲存32個資料的持續時間,用於後面判斷高低電平。

用定時器對兩個資料(中斷)之間的時間計時,並儲存這個持續時間用於以後判斷是位1還是位0。

4.可以用2位元組,4位元組變數儲存32個資料,以節省程式碼空間

可以用兩個16位的int型變數儲存資料,第一個int變數儲存使用者碼,第二個儲存資料碼和資料反碼。也可以用一個32位long型的變數儲存所有資料。

5.判斷停止位

接收到停止位後可以遮蔽紅外引腳的中斷,防止後面資料的干擾,解碼成功後在開啟中斷。