專利名稱:用串口接收紅外遙控信號的方法
技術領域:
本發(fā)明涉及紅外遙控技術,具體地說,是涉及用串口接收紅外遙控信號 的方法。
背景技術:
紅外遙控技術目前已較為成熟,具有使用方便、功耗低、抗干擾能力強 和成本低等優(yōu)點,在家電中得到了廣泛的應用,也在智能儀器系統(tǒng)中受到重 視。 一般的紅外遙控系統(tǒng)是由紅外遙控信號發(fā)射器、紅外遙控信號接收器和
微控制器及其外圍電路等3部分構成的。由遙控編碼器產生遙控編碼脈沖,
驅動紅外發(fā)射管輸出紅外遙控信號,遙控接收頭完成對遙控信號的^L大、檢 波、整形,解調出遙控編碼脈沖。遙控編碼脈沖不能直接被程序識別,還需 要對編碼脈沖進行解碼,獲得包含用戶信息的二進制碼。
從遙控編碼脈沖解出包含用戶信息的二進制碼可以用兩種方法, 一種是
用專用的解碼芯片,完全交給硬件處理;還有一種是用軟件按照遙控編碼脈 沖的格式進行解碼。采用硬件解碼來說,對系統(tǒng)的負擔小,而且出錯概率小, 但是成本比較高;用軟件解碼成本低,但是增加了系統(tǒng)負擔,常規(guī)軟件解碼 占用了系統(tǒng)外部中斷資源和內部定時器資源,特別是在系統(tǒng)其它中斷任務重 的時候出錯概率較大。
因此,需要提供一種新的紅外遙控信號接收方法,來解決現(xiàn)有技術中的 上述矛盾。
發(fā)明內容
本發(fā)明所要解決的技術問題是在于需要提供一種使用串口接收紅外遙 控信號來完成軟件解碼遙控信號脈沖的方法,避免了現(xiàn)有技術軟件解碼占用
系統(tǒng)額外的外部中斷資源。
為了解決上述技術問題,本發(fā)明提供了一種用串口接收紅外遙控信號的 方法,包括步驟
(1 )將紅外遙控接收器OUT引腳與所述串口的RXD引腳相連,并將 所述紅外遙控接收器與所述串口均接地;
(2) 根據當前使用遙控器的脈沖寬度計算串口波特率,并設置包括所 述串口波特率在內的串口屬性;
(3) 獲取符合當前使用遙控器前導碼和用戶識別碼的串口數(shù)據,并保 存所述串口數(shù)據及相應的串口狀態(tài)寄存器的值;
(4 )根據保存遙控器按鍵與串口數(shù)據和串口狀態(tài)寄存器的值對應關系 的遙控器按鍵映射表,將步驟(3)中的串口數(shù)據轉換為遙控按鍵值。
上述方法中,所述紅外遙控接收器OUT引腳與所述串口 RXD引腳之間, 可以進一步包括電平轉換單元,用來實現(xiàn)電平轉換。
上述方法中,步驟(2)中所述串口波特率的范圍,可以為紅外遙控信 號波形最短高電平持續(xù)時間對應的波特率與紅外遙控信號波形最短低電平 持續(xù)時間對應的波特率之間。進一步地,所述串口波特率可以設置為紅外遙 控信號波形最短高電平持續(xù)時間和最短低電平持續(xù)時間中較小者對應的波特率。
上述方法步驟(2)中,所述串口屬性可以包括串口的數(shù)據位、停止位 和才交-驗方式。進一步地,所述lt據位可以為8位;所述停止位可以為l位; 所述校驗方式可以包括校驗或偶檢驗。
上述方法步驟(3)包括,可以拋棄不符合前導碼和用戶識別碼的用戶 數(shù)據碼。
上述方法步驟(3)中,獲取當前使用遙控器前導碼和用戶識別碼對應 的串口數(shù)據,可以包括對當前遙控器上不同按鍵對應的串口數(shù)據進行分析, 或對串口傳輸數(shù)據格式和遙控編碼脈沖格式進行分析來獲得。
上述方法步驟(3)中,所述串口狀態(tài)寄存器的值,可以是遙控碼數(shù)據 的一部分。
上述方法步驟(4)中,所述遙控器按鍵映射表的制作方式可以包括, 按遙控器上的按鍵,記錄每個按鍵對應的串口數(shù)據和串口狀態(tài)寄存器的值, 由此獲得所述遙控器按鍵映射表。
上述方法中,可以通過改變串口的數(shù)據位個數(shù)來規(guī)避不同遙控器的紅外 遙控信號解為同一個遙控碼。
與現(xiàn)有技術相比,本發(fā)明使用串口接收紅外遙控的做法來達到軟件解碼 遙控編碼脈沖,不占用系統(tǒng)額外的外部中斷資源,而且在其它中斷負擔重的 時候也可以減少出錯概率。用串口接收紅外遙控的方法不同于常規(guī)紅外遙控 接收方法,可以保證在中斷任務重的系統(tǒng)中不出現(xiàn)誤碼、減少系統(tǒng)資源的占 用。硬件連接方法和軟件解碼方法都比較簡單,可以省去額外的紅外解碼芯 片,降低系統(tǒng)成本,特別適合用于嵌入式系統(tǒng)。本發(fā)明不占用系統(tǒng)額外的外 部中斷資源,在其他中斷負擔重的時候也可以減少出錯概率,而且降低了系 統(tǒng)成本。
圖1串口和紅外遙控接收器連接示意圖。
圖2是串口初始化步驟示意圖。
圖3是本發(fā)明軟件收取遙控碼數(shù)據的串口處理步驟示意圖。 圖4是NEC格式遙控碼波形示意圖。 圖5是本發(fā)明方法步驟示意圖。
具體實施例方式
以下結合附圖和對本發(fā)明作進一步的詳細說明。
紅外線遙控是目前使用最廣的一種遙控手段。紅外線遙控裝置具有體積 小、功耗低、功能強、成本低等特點而被大量使用。本發(fā)明方法的思路是, 使用串口連接紅外遙控接收器,通過從串口讀取數(shù)據,并對數(shù)據進行分析, 轉換成相應的遙控碼,從而實現(xiàn)對接收到的遙控碼進行解碼。硬件連接方法 參見附圖1,紅外遙控接收器OUT引腳與串口 RXD引腳相連,如果需要進
行電平轉化的話,則紅外遙控信號從紅外遙控接收器OUT引腳輸出之后, 經過一電平轉換單元轉換電平,再傳輸至串口 RXD引腳;串口通過GND 引腳接地,同時紅外遙控接收器也需要接地。至于串口的TXD引腳本發(fā)明 并不涉及,可以懸空。另外,紅外遙控接收器由電源VCC1提供電能支持, 串口由電源VCC2提供電能支持。
使用CPU的通用異步收發(fā)器(UART)(或UART芯片)接口的接收 引腳連接紅外遙控接收器輸出引腳,將紅外遙控接收器收到的編碼脈沖信號 送給串口,通過設置適當串口波特率、數(shù)據位、停止位、校驗方式,將從串 口收到數(shù)據進行適當解碼后即可得到遙控碼。串口初始化的步驟如圖2所 示,包括
步驟201, 設置串口波特率、數(shù)據位、停止位和校驗方式; 步驟202,設置中斷處理程序和中斷類型; 步驟203,允許串口接收中斷,串口初始化結束。
在軟件處理上,需要處理正常串口接收中斷(接收數(shù)據就緒)。正常中 斷處理方法是從串口的先進先出(FIFO)緩沖區(qū)收取數(shù)據,同時讀取并保 存串口的中斷狀態(tài)寄存器的內容,將串口中斷狀態(tài)寄存器的值作為遙控碼數(shù)
據的一部分,這樣可以減少不同紅外遙控編碼脈沖信號對應同 一遙控碼的概 率。串口的異常中斷(奇偶校驗錯誤、幀錯誤、FIFO溢出、break中斷)可 以不處理。當從串口收到了一系列數(shù)據后就需要對數(shù)據進行過濾,對于同一 個遙控器來說,遙控碼中的前導碼和用戶識別碼是相同的,只有用戶碼部分 不同,因此可以使用前導碼和用戶識別碼對收到的數(shù)據序列進行過濾,只有 符合前導碼和用戶識別碼對應的串口數(shù)據序列才是正確的遙控碼序列,序列 中用戶碼對應的串口數(shù)據和這些串口數(shù)據相應的中斷狀態(tài)寄存器值的數(shù)據
集合就是解碼遙控器的按鍵值,這里收到的遙控碼鍵值和實際的遙控碼定義 的值是不一樣的,但是存在一個映射關系可以區(qū)分不同的遙控器按鍵。軟件 收^Jt控碼數(shù)據的串口中斷處理流程,請參加附圖3,包括步驟
步驟301,判斷接收FIFO是否為空,如果為空則退出中斷處理(步驟 3011 ),否則l丸行步驟302;
步驟302,讀取接收FIFO數(shù)據和串口狀態(tài);
步驟303,檢查當前接收狀態(tài),如果當前為檢查引導碼,則轉步驟304, 如果當前為檢查用戶識別碼,轉步驟305,如果當前為讀取用戶數(shù)據碼,轉 步驟310;
步驟304,判斷序列是否為引導碼序列,是則轉步驟306,否則轉步驟
307;
步驟305,判斷序列是否為用戶識別碼序列,是則轉步驟308,否則轉 步驟309;
步驟306,設置當前狀態(tài)為4企查用戶識別碼,并返回步驟301重新執(zhí)行; 步驟307,拋棄這一錯誤序列,并返回步驟301重新執(zhí)行; 步驟308,設置當前狀態(tài)為讀取用戶數(shù)據,并返回步驟301重新執(zhí)行; 步驟309,設置當前狀態(tài)為檢查引導碼,并返回步驟301重新執(zhí)行; 步驟310,讀fl串口數(shù)據、狀態(tài);
步驟311,將串口數(shù)據轉換為遙控按鍵碼,并保存或送出,之后返回步 驟301重新執(zhí)行。
以下從原理層面詳細闡述本發(fā)明。遙控器發(fā)出的紅外信號采用的是帶 38KHz或56KHz載波的脈沖調制信號,該信號由3部分組成前導碼、用 戶識別碼、數(shù)據碼,波形示意圖見圖4,該信號被紅外遙控接收器接收后慮 掉載波,整形得到原來的編碼波形。
如圖4所示, 一段NEC格式遙控碼的幀長為108ms,其中前導碼的長 度為13.5ms (9ms + 4.5ms),用戶識別碼的長度為27ms,數(shù)據碼的長度也 為27ms。重復碼的長度為11.5ms,其中高電平為9ms,低電平為2.5ms。位 "0"的總長度為1.125ms,其中高電平為0.56ms;位"l"的總長度為2.25ms, 其中高電平也為0.56ms。
串口每傳送一個字節(jié)是以一個起始位開始,5 ~ 8個數(shù)據位和1 ~2個停 止位結束,無數(shù)據前接收信號線上是高電平, 一旦變?yōu)榈碗娖綍r則說明有數(shù) 據傳送,相當于用下降沿做觸發(fā),中間依靠定時釆樣來判斷數(shù)據位為'0, 還是'1,。這正好和遙控碼波形格式有相同之處,因此只需要把串口的波
特率調整到和紅外遙控碼波形中最小脈沖對應波特率一致就可以用來接收 遙控碼數(shù)據,串口波特率設置公式如下
串口波特率=1/最小脈沖時間。
最d、脈沖時間為高電平和低電平持續(xù)時間中最短的那個時間,也即將串 口波特率設置為紅外遙控信號波形最短高電平持續(xù)時間和最短低電平持續(xù)
時間中較小者的倒數(shù)。例如NEC遙控碼中格式中,高電平持續(xù)時間最短為 0.56ms,低電平持續(xù)時間最短為0.565ms,取最短時間為0.56ms,那么串口 波特率應該設置為l/(0.56 x 10-3)=1786 bps??紤]到實際會有誤差,可以 采用取最短高電平持續(xù)時間對應波特率和最短低電平持續(xù)時間對應波特率 中間的值即1770 ~ 1786 bps之間的值,需要根據實際情況進行小范圍調整。
除了設置串口波特率外,還需要設置串口的數(shù)據位和停止位以及校驗 方式,數(shù)據位可以設置為可允許設置值中的任意一種;停止為設置為l位; 校驗方式可以用奇校驗或偶校驗,不能設置為無校驗,因為串口的接收狀態(tài) 也是接收遙控碼中的數(shù)據;另外不需要設置流控方式。
在軟件處理上,需要處理串口接收中斷和鍵碼映射的工作。串口接收中 斷的處理過程就是對接收到的數(shù)據序列進行識別,找到符合條件的序列,保 存該序列中的用戶識別碼對應的串口數(shù)據和串口狀態(tài)數(shù)據,這個過程可以使 用狀態(tài)轉移圖的方法實現(xiàn)。處理鍵碼映射是將保存的有效串口數(shù)據和串口狀 態(tài)數(shù)據轉換成某個遙控器按鍵的過程,使用查表的方法就可以實現(xiàn)。
本發(fā)明所描述的方法不是一種通用的接收方法,從原理上說,本發(fā)明描 述的方法不能適用于接收所有遙控器發(fā)出的信號,可能出現(xiàn)不同的遙控調制 脈沖信號解出同一個遙控碼。為了解決這種情況帶來的問題,除了之前所述
的將串口中斷狀態(tài)寄存器的值作為遙控碼數(shù)據的一部分的方法之外,還可以 改變串口的數(shù)據位個數(shù)進行規(guī)避不同遙控器的紅外遙控信號解為同一個遙 控碼,或者在設計遙控器的時候就將所有遙控器設計為不同遙控器的紅外遙 控信號解為不同的遙控碼。
以下通過一個實施例,來說明本發(fā)明方法的具體實現(xiàn)。如圖5所示,本 發(fā)明方法的步驟包括
步驟501 ,連接紅外遙控接收器與串口 ;
步驟502,測量當前使用遙控器最小脈沖寬度,計算串口應該設置的波 特率,計算波特率可以使用公式"串口波特率=l/最小脈沖時間",并
根據實際情況,在此基礎上小范圍調整;
步驟503,設置串口屬性,串口波特率設置為步驟502獲得的波特率值, l位停止位,無流控方式,奇或偶校驗,串口允許的數(shù)據位,推薦使用8位 數(shù)據位;
步驟504,獲取當前使用遙控器前導碼和用戶識別碼對應的串口數(shù)據, 可以在打印出按遙控器上不同按鍵對應的串口數(shù)據,找到這些數(shù)據中前面相 同的序列,這些序列就是前導碼和用戶識別碼序列,不同的部分即為數(shù)據碼 序列,也可以根據串口傳輸數(shù)據格式和遙控編碼脈沖格式分析得到;
步驟505,調整中斷處理程序,只保存符合前導碼和用戶識別碼的串口 數(shù)據序列后面的數(shù)據序列和相應的串口狀態(tài)寄存器的值,對不符合序列的串 口數(shù)據進行拋棄;
步驟506,根據保存遙控器按鍵與串口數(shù)據和串口狀態(tài)寄存器的值對應 關系的遙控器按鍵映射表,將串口數(shù)據轉換為遙控按鍵值;也即對于收到的 串口數(shù)據,在遙控器按鍵映射表中進行查找,取出和其相同數(shù)據所對應的遙 控按鍵值。
上述步驟506中的遙控器按鍵映射表,是在前述步驟505的基礎上制作 而成。通過按遙控器上的按鍵,記錄每個按鍵對應的串口數(shù)據和串口狀態(tài)寄 存器的值,由此即可制作出一張串口數(shù)據和串口狀態(tài)寄存器的值與遙控器按 鍵一一對應的遙控器按鍵映射表。
值得注意的是,步驟502、步驟504和步驟506均為試驗測量得到,對 于不同型號的遙控器所測量的數(shù)據可能不同,但只要測量好后就不需要修 改,其它步驟均相同。
本發(fā)明所述的用串口接收紅外遙控的方法可以用在嵌入式系統(tǒng)領域,與 傳統(tǒng)使用紅外遙控解碼芯片相比,本發(fā)明可以省去解碼芯片;與常規(guī)用外部 中斷方式接收紅外遙控信號相比,在系統(tǒng)中斷負擔重的情況下,常規(guī)接收紅
外遙控信號的方法可能由于其它中斷占用時間長或關畢中斷時間長等原因, 導致接收紅外遙控中斷不能及時響應而產生誤碼,而使用本方法,采用串口 內部的接收FIFO緩沖區(qū)就可以緩存收到的遙控信號,避免了誤碼的生產。
從軟件復雜度上講,用串口接收紅外遙控的方法省去了測量紅外遙控信 號的時間、對收到中斷序列進行復雜解碼過程,只是簡單地從串口收取數(shù)據, 轉換成遙控碼,降低了軟件復雜度,也降低了系統(tǒng)負擔。
權利要求
1、一種用串口接收紅外遙控信號的方法,其特征在于,包括步驟(1)將紅外遙控接收器OUT引腳與所述串口的RXD引腳相連,并將所述紅外遙控接收器與所述串口均接地;(2)根據當前使用遙控器的脈沖寬度計算串口波特率,并設置包括所述串口波特率在內的串口屬性;(3)獲取符合當前使用遙控器前導碼和用戶識別碼的串口數(shù)據,并保存所述串口數(shù)據及相應的串口狀態(tài)寄存器的值;(4)根據保存遙控器按鍵與串口數(shù)據和串口狀態(tài)寄存器的值對應關系的遙控器按鍵映射表,將步驟(3)中的串口數(shù)據轉換為遙控按鍵值。
2、 如權利要求l所述的方法,其特征在于,所述紅外遙控接收器OUT 引腳與所述串口 RXD引腳之間,進一步包括電平轉換單元,用來實現(xiàn)電平 轉換。
3、 如權利要求l所述的方法,其特征在于,步驟(2)中所述串口波特 率的范圍,為紅外遙控信號波形最短高電平持續(xù)時間對應的波特率與紅外遙 控信號波形最短低電平持續(xù)時間對應的波特率之間。
4、 如權利要求3所述的方法,其特征在于,所述串口波特率設置為紅 外遙控信號波形最短高電平持續(xù)時間和最短低電平持續(xù)時間中較小者對應 的波特率。
5、 如權利要求l所述的方法,其特征在于,步驟(2)中所述串口屬性 包括串口的數(shù)據位、停止位和校驗方式。
6、 如權利要求5所述的方法,其特征在于,所述數(shù)據位為8位。
7、 如權利要求5所述的方法,其特征在于,所述停止位為l位。
8、 如權利要求5所述的方法,其特征在于,所述校驗方式包括校驗或 偶檢驗。
9、 如權利要求l所述的方法,其特征在于,步驟(3)包括,拋棄不符 合前導碼和用戶識別碼的用戶數(shù)據碼。
10、 如權利要求1所述的方法,其特征在于,步驟(3)中獲耳又當前使 用遙控器前導碼和用戶識別碼對應的串口數(shù)據,包括對當前遙控器上不同按 鍵對應的串口數(shù)據進行分析,或對串口傳輸數(shù)據格式和遙控編碼脈沖格式進 行分析來獲得。
11、 如權利要求1所述的方法,其特征在于,步驟(3)中所述串口狀 態(tài)寄存器的值,是遙控碼數(shù)據的一部分。
12、 如權利要求1所述的方法,其特征在于,步驟(4)中所述遙控器 按鍵映射表的制作方式包括,按遙控器上的按鍵,記錄每個按鍵對應的串口 數(shù)據和串口狀態(tài)寄存器的值,由此獲得所述遙控器按鍵映射表。
13、 如權利要求l所述的方法,其特征在于,通過改變串口的數(shù)據位個 數(shù)來規(guī)避不同遙控器的紅外遙控信號解為同一個遙控碼。
全文摘要
本發(fā)明公開了一種使用串口接收紅外遙控信號來完成軟件解碼遙控信號脈沖的方法,旨在減少軟件解碼占用系統(tǒng)額外的外部中斷資源,主要在于將紅外遙控接收器OUT引腳與串口的RXD引腳相連;根據當前使用遙控器的脈沖寬度計算串口波特率,并設置包括串口波特率在內的串口屬性;獲取符合當前使用遙控器前導碼和用戶識別碼的串口數(shù)據,并保存串口數(shù)據及相應的串口狀態(tài)寄存器的值;根據保存遙控器按鍵與串口數(shù)據和串口狀態(tài)寄存器的值對應關系的遙控器按鍵映射表,將串口數(shù)據轉換為遙控按鍵值。本發(fā)明方法不占用系統(tǒng)額外的外部中斷資源,而且在其它中斷負擔重的時候也可以減少出錯概率。
文檔編號G08C23/04GK101110159SQ20071014336
公開日2008年1月23日 申請日期2007年8月21日 優(yōu)先權日2007年8月21日
發(fā)明者丁元欣, 于京濤, 朱曉斌, 華 李, 軍 苗, 笑 譚 申請人:中興通訊股份有限公司