1. 程式人生 > >NEC協議紅外遙控器

NEC協議紅外遙控器


從圖上可以看出,先是 9ms 載波加 4.5ms 空閒的起始碼,資料碼是低位在前,高位在後,資料碼第一個位元組是 8 組 560us 的載波加 560us 的空閒,也就是 0x00,第二個位元組是 8 組 560us的載波加 1.68ms 的空閒,可以看出來是 0xFF,這兩個位元組就是使用者碼和使用者碼的反碼。按鍵的鍵碼二進位制是 0x0C,反碼就是 0xF3,最後跟了一個 560us 載波停止位。對於我們的遙控器來說,不同的按鍵,就是鍵碼和鍵碼反碼的區分,使用者碼是一樣的。這樣我們就可以通過微控制器的程式,把當前的按鍵的鍵碼給解析出來。

我們前邊學習中斷的時候,學到 51 微控制器有外部中斷 0 和外部中斷 1 這兩個外部中斷。我們的紅外接收引腳接到了 P3.3 引腳上,這個引腳的第二功能就是外部中斷 1。在暫存器TCON 中的 bit3 和 bit2 這兩位,是和外部中斷 1 相關的兩位。其中 IE1 是外部中斷標誌位,當外部中斷髮生後,這一位被自動置 1,和定時器中斷標誌位 TF 相似,進入中斷後會自動清零,也可以軟體清零。bit2 是設定外部中斷型別的,如果 bit2 為 0,那麼只要 P3.3 為低電平就可以觸發中斷,如果 bit2 為 1,那麼 P3.3 從高電平到低電平的下降沿發生才可以觸發中斷。此外,外部中斷 1 使能位是 EX1。那下面我們就把程式寫出來,使用數碼管把遙控器的使用者碼和鍵碼顯示出來。


Infrared.c 檔案主要是用來檢測紅外通訊的,當發生外部中斷後,進入外部中斷,通過定時器 1 定時,首先對引導碼判斷,而後對資料碼的每個位逐位獲取高低電平的時間,從而得知每一位是 0 還是 1,最終把資料碼解出來。雖然最終實現的功能很簡單,但因為編碼本身的複雜性,使得紅外接收的中斷程式在邏輯上顯得就比較複雜,那麼我們首先提供出中斷函式的程式流程圖,大家可以對照流程圖來理解程式程式碼,如圖 16-9 所示。