1 紅外遙控原理
紅外遙控是一種無線、非接觸控制技術,包括發送端和接收端兩部分;發送端由專用單片機芯片,采用一定頻率(如38KHz)的載波實現二進制編碼,然后通過發射頭將二進制信息發出。接收端的紅外遙控接收頭將接收到的紅外載波信號通過濾波、整形等處理轉換成TTL電平,供接收端的8位單片機進行采樣解碼。
2 紅外遙控信號波形說明
紅外遙控信號通常由引導碼、功能碼和校驗碼構成,具體可見圖2-1,引導碼表示紅外遙控信號的開始,功能碼和校驗碼由二進制“0”和“1”組成,功能碼用于傳遞控制信息,校驗碼用于驗證接收端接收到的信息是否被干擾或錯誤,只有校驗碼正確,才認為本次接收到的紅外遙控信號有效。
二進制“0”和“1”信號采用TTL高低電平組合而成,在接收端單片機I/O口測試的“0”和“1”TTL電平波形可參見圖1。
3 紅外遙控信號解碼方法
正如前所表述,紅外遙控單片機接收端I/O接收到信號波形由TTL高低電平組成,因此要實現紅外遙控信號接收,接收端的單片機首先要實現TTL高低電平采樣,并轉換成“0”和“1”信號,此過程也稱為紅外遙控信號解碼。
紅外遙控信號解碼時,通常引導碼的高、低電平分開采樣判斷;由高低電平組合而成的功能碼和校驗碼中的“0”和“1”,采取高低電平時間寬度統一判斷的方式,例如圖2-2中“0”的判斷依據是總時間寬度t1+t0,“1”的判斷依據是總時間寬度t2+t0。
現就以8位單片機為基礎,參照圖2-1紅外遙控信號波形示意圖,來闡述兩種常用的紅外遙控信號檢測方法。
3.1輸入捕捉中斷
采用輸入捕捉中斷的方式解碼,需要一個16位定時器資源配合,并要求輸入捕捉中斷具有上升沿和下降沿觸發功能。
在無紅外遙控信號時,如果出現干擾信號可能會導致單片機重復進入輸入捕捉中斷,影響單片機的工作效率。因此通常對引導碼的低電平考慮先采用查詢的方式判斷,即只有紅外遙控接收I/O口連續一定時間檢測到低電平時,才認為可能出現紅外遙控信號,此時再開啟輸入捕捉中斷,進行引導碼低電平的剩下時間寬度判斷。引導碼低電平檢測完成后,再檢測引導碼的高電平和“0”、“1”。圖2為開啟輸入捕捉中斷后解碼流程簡圖。
輸入捕捉中斷最大的優勢在于高效率和高精度,在引導碼的高電平和“0”、“1”的寬度判斷時,因采用16位定時器計時,假設定時器以1us為單位計時,相對于一般的紅外遙控信號“0”和“1”的寬度都是毫秒數量級來講,可保證足夠高的采樣精度,但在使用中要注意考慮定時器是否有溢出的可能性。

輸入捕捉中斷缺點是要求單片機必須提供一個輸入捕捉中斷I/O口和一個16位定時器,對于目前市面上部分比較低端的8位單片機,并不一定都能夠這些資源,尤其是專用于紅外遙控解碼16位定時器。
3.2查詢方式
查詢解碼原理是通過單片機不斷讀取紅外遙控接收I/O口電平,當相鄰兩次讀取的I/O口電平發生變化時,即可間接的做出上升沿和下降沿的判斷,上升沿和下降沿確定后,查詢解碼方式的其它邏輯基本與輸入捕捉中斷的紅外遙控接收處理邏輯一致,在此不一一重述。
查詢判斷要求單片機能提供一個時基t的中斷,每進一次時基t中斷讀取I/O口的電平,當第0次讀取紅外遙控接收I/O口電平為低電平,第1次讀取的電平為高電平,則即可確認紅外遙控接收I/O口出現上升沿,同理通過第2次和第3次采樣到的紅外遙控接收I/O口電平對比可確認下降沿。
查詢方式首先要選擇好參數時基t,依據引導碼高、低電平、“0”和“1”的寬度,保證通過每個時基中斷t對紅外遙控接收I/O口讀取的電平,不會出現漏判或錯判上升沿和下降沿;時基t也不能太短,否則會導致單片機在運行過程中頻繁進入時基t中斷,影響單片機主程序的執行效率,時基t太長會影響引導碼高、低電平、“0”和“1”的檢測精度,因此實現過程中需找到兩者的平衡點。

查詢方式的最大優勢在于對單片機的資源要求較低,無需專門的16位定時器和輸入捕捉中斷I/O口,只需普通I/O口和8位定時器產生一個時基t中斷即可,其檢測精度無法與輸入捕捉中斷比擬,但對于現有市場上部分比較低端、資源匱乏的8位單片機查詢方式還是很有優勢。
4 總結語
基于8位單片機的輸入捕捉中斷和查詢兩種紅外遙控解碼方式,各有千秋,實際運用過程中可根據8位單片機所具備的資源、采樣精度要求等,選擇其中的一種進行紅外遙控解碼。