一、NEC協議特徵:
- 8位地址和8位命令長度
- 每次傳輸兩遍地址(用戶碼)和命令(按鍵值)
- 通過脈衝串之間的時間間隔來實現信號的調製(PPM)
- 38Khz載波
- 每位的週期爲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.判斷停止位。
接收到停止位後可以屏蔽紅外引腳的中斷,防止後面數據的干擾,解碼成功後在開啓中斷。