專利名稱::電視接收機(jī)中遙控命令碼轉(zhuǎn)發(fā)方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及遙控電視接收機(jī)中主MCU控制其它法家附加功能模塊,特別涉及遙控命令轉(zhuǎn)發(fā)的實(shí)現(xiàn)方法。
背景技術(shù):
:在電視接收機(jī),有很多新增加功能如流媒體播放,電子相框,內(nèi)置DVD,內(nèi)置數(shù)字電視接收等等模塊。一般來說需要將電視接收機(jī)作為主控MCU,來控制相應(yīng)的功能模塊的MCU。但是主控MCU的資源限制,控制方式采用遙控命令轉(zhuǎn)發(fā)方式實(shí)現(xiàn)。而實(shí)現(xiàn)遙控命令的轉(zhuǎn)發(fā)方式一般采用在外部中斷服務(wù)子程序中或者在主循環(huán)程序中進(jìn)行。一,在外部中斷服務(wù)子程序?qū)崿F(xiàn)遙控轉(zhuǎn)發(fā)命令碼,由于外部中斷是最高中斷級別,采用空操作來延時,這樣做,很好地保證了輸出遙控命令轉(zhuǎn)發(fā)波形的時序,但是極大地影響了主程序的運(yùn)行和紅外遙控信號的接收。二,在主循環(huán)程序?qū)崿F(xiàn)遙控命令碼轉(zhuǎn)發(fā),由于外部中斷和定時中斷的干擾,使得遙控命令轉(zhuǎn)發(fā)波形的時序極不穩(wěn)定,導(dǎo)致其他模塊接收問題。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題是,提供一種用基于定時中斷的遙控命令碼轉(zhuǎn)發(fā)方法。本發(fā)明為解決上述技術(shù)問題所采用的技術(shù)方案是,電視接收機(jī)中遙控命令碼轉(zhuǎn)發(fā)方法,其特征在于,基于定時中斷轉(zhuǎn)發(fā)遙控命令碼,包括以下步驟a、初始化MCU的I/0端口,將MCU的一個定時器的基準(zhǔn)時間隔設(shè)定為遙控碼的基本時間間隔;b、MCU中每隔所述基準(zhǔn)時間隔進(jìn)入定時中斷轉(zhuǎn)發(fā),當(dāng)進(jìn)入定時中斷轉(zhuǎn)發(fā)時進(jìn)入步驟c;c、MCU判斷是否有轉(zhuǎn)發(fā)標(biāo)志存在,如是,則退出定時中斷轉(zhuǎn)發(fā),返回步驟b;如是,則進(jìn)入步驟d;d、MCU控制命令轉(zhuǎn)發(fā)計數(shù)器加1,并判斷狀態(tài)機(jī)的狀態(tài),進(jìn)入相應(yīng)狀態(tài),通過I/0端口轉(zhuǎn)發(fā)一個基本時間間隔的數(shù)據(jù),通過命令轉(zhuǎn)發(fā)計數(shù)器判斷是否到該狀態(tài)所對應(yīng)的間隔時間;如否,則退出定時中斷轉(zhuǎn)發(fā),返回步驟b;如是,將命令轉(zhuǎn)發(fā)計數(shù)器清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟b;當(dāng)遙控命令碼轉(zhuǎn)發(fā)完畢,MCU還需將轉(zhuǎn)發(fā)標(biāo)志清零后,退出定時中斷轉(zhuǎn)發(fā),返回步驟b。本發(fā)明的有益效果是,將MCU的一個定時器設(shè)定為遙控碼的基本時間間隔或者其頻率的倍數(shù),通過不同的狀態(tài)機(jī)變換來改變I/0端口輸出的時間間隔,來實(shí)現(xiàn)遙控碼輸出,保證輸出遙控命令轉(zhuǎn)發(fā)波形的時序。由于在主程序循環(huán)中,只需要設(shè)定發(fā)送的相應(yīng)的控制,發(fā)送每個步驟通過定時中斷自動完成。這樣極大地減少干涉主循環(huán)的運(yùn)行時間,易于在不同的硬件系統(tǒng)移植。圖l是本發(fā)明的MCU主程序工作流程圖。圖2是本發(fā)明的MCU中轉(zhuǎn)發(fā)命令控制函數(shù)工作流程圖。圖3是本發(fā)明的MCU中定時中斷服務(wù)子程序工作流程圖。圖4是本發(fā)明的狀態(tài)機(jī)轉(zhuǎn)換圖。具體實(shí)施例方式本發(fā)明提出的遙控命令轉(zhuǎn)發(fā)方法包括以下內(nèi)容(1)確定的遙控編碼方式(2)MCU的定時器資源以及設(shè)置(3)轉(zhuǎn)發(fā)命令狀態(tài)機(jī)(4)定時中斷服務(wù)子程序(5)轉(zhuǎn)發(fā)命令碼映射表(6)轉(zhuǎn)發(fā)命令控制函數(shù)由于紅外遙控編碼方式比較多,必須首先確定其編碼方式規(guī)范。并根據(jù)MCU的資源,使用空閑的定時器,按照遙控編碼規(guī)范,確定最小的時間間隔為定時器的基準(zhǔn)時間隔(定時基準(zhǔn)),并設(shè)置該定時器的中斷級別高于其他中斷。定時器的基準(zhǔn)時間隔為每隔該基準(zhǔn)時間隔,定時器控制MCU進(jìn)入中斷服務(wù)子程序。如果沒有多余的定時器,那么必須清理該定時中斷服務(wù)子程序,使用新的定時基準(zhǔn),來實(shí)現(xiàn)其他定時狀態(tài)和時鐘的準(zhǔn)確性。MCU的定時器的設(shè)置一般在主程序的MCU初始化的函數(shù)中實(shí)現(xiàn),同時也定義作為轉(zhuǎn)發(fā)命令的i/o端口。在定時中斷服務(wù)子程序中,有一個轉(zhuǎn)發(fā)標(biāo)志控制,該轉(zhuǎn)發(fā)標(biāo)志是啟動命令轉(zhuǎn)發(fā)流程的開關(guān),并且設(shè)置一個命令轉(zhuǎn)發(fā)計數(shù)器,用于確定基于基準(zhǔn)時鐘的定時個數(shù),以便計算時間間隔。狀態(tài)機(jī)按照編碼規(guī)范設(shè)定數(shù)據(jù)頭碼,數(shù)據(jù)碼,連續(xù)碼以及結(jié)束碼等狀態(tài),根據(jù)不同的狀態(tài)和命令轉(zhuǎn)發(fā)計數(shù)器來精確地控制I/0端口的電平狀態(tài)和時間間隔。轉(zhuǎn)發(fā)命令控制函數(shù)是一個使主程序與定時中斷服務(wù)子程序產(chǎn)生關(guān)系的接口函數(shù),它包括了啟動遙控命令轉(zhuǎn)發(fā)控制,確定的遙控轉(zhuǎn)發(fā)命令數(shù)據(jù)內(nèi)容,連續(xù)碼控制,以及對上次未發(fā)完的遙控碼的保護(hù)。而在主程序流程中會在需要的地方根據(jù)轉(zhuǎn)發(fā)命令碼映射表直接調(diào)用轉(zhuǎn)發(fā)命令控制函數(shù)。實(shí)施例本實(shí)例使用NEC遙控編碼方式。根據(jù)NEC遙控碼規(guī)范,引導(dǎo)頭是9ms低+4.5ms高;數(shù)據(jù)碼是4個字節(jié)計32位,為系統(tǒng)碼+系統(tǒng)反碼+數(shù)據(jù)碼+數(shù)據(jù)反碼,"1"碼是O.5625ms低+1.68751113高,"0"碼是O.5625ms低加上0.5625ms高;連續(xù)碼是2.25msd低;每個遙控碼總長為108ms,結(jié)束碼是碼總長減去引導(dǎo)碼減去數(shù)據(jù)碼得出的時間。如圖l所示為主程序工作流程,該程序需要初始化MCU定時器與I/0端口。當(dāng)接收到按鍵后,判斷該按鍵命令是否需要轉(zhuǎn)發(fā),如需要,根據(jù)轉(zhuǎn)發(fā)命令碼映射表直接調(diào)用轉(zhuǎn)發(fā)命令控制函數(shù);如不需要,則執(zhí)行該按鍵命令。例如按照NEC遙控編碼方式,基準(zhǔn)時間隔可以設(shè)為0.5625ms或者更小,所述更小的基準(zhǔn)時間隔可以是一些遙控碼基本頻率的倍數(shù)的倒數(shù)。設(shè)為0.5625ms計算比較方便,例如計算引導(dǎo)碼9ms/0.5625=16,也就是16個定時間隔;"0"碼是相當(dāng)于1+1個定時間隔。按NEC編碼方式,以O(shè).5625ms為基準(zhǔn),不同狀態(tài)的間隔個數(shù)見下表<table>tableseeoriginaldocumentpage6</column></row><table>圖2是本發(fā)明的轉(zhuǎn)發(fā)命令控制函數(shù)工作流程,為了防止上次的命令轉(zhuǎn)發(fā)動作沒有完成,需要在開始等待轉(zhuǎn)發(fā)標(biāo)志結(jié)束,然后根據(jù)需要按照轉(zhuǎn)發(fā)命令碼映射表轉(zhuǎn)換鍵值,將準(zhǔn)備發(fā)送的命令放入數(shù)據(jù)緩沖區(qū),設(shè)置轉(zhuǎn)發(fā)狀態(tài)機(jī)起始狀態(tài),計算發(fā)送數(shù)據(jù)的所需的時間,啟動轉(zhuǎn)發(fā)標(biāo)志,命令轉(zhuǎn)發(fā)計數(shù)器清零。由于在主程序的系統(tǒng)初始化設(shè)置了定時參數(shù),確定系統(tǒng)每隔0.5625ms定時中斷一次。定時中斷服務(wù)子程序首先判斷轉(zhuǎn)發(fā)標(biāo)志,該標(biāo)志由轉(zhuǎn)發(fā)命令控制函數(shù)設(shè)置。每次中斷的進(jìn)入轉(zhuǎn)發(fā)計數(shù)器加l數(shù)。本發(fā)明將轉(zhuǎn)發(fā)狀態(tài)分為發(fā)送頭碼狀態(tài)一,發(fā)送頭碼狀態(tài)二,數(shù)據(jù)碼狀態(tài),連續(xù)碼狀態(tài)以及結(jié)束碼狀態(tài)。轉(zhuǎn)發(fā)狀態(tài)機(jī)是用switch-case語句來實(shí)現(xiàn)的,每次中斷都只會進(jìn)入狀態(tài)機(jī)確定的狀態(tài)處理;每個狀態(tài)處理完后,轉(zhuǎn)發(fā)狀態(tài)改變,等下個定時中斷就會進(jìn)入下一個狀態(tài),直到進(jìn)入結(jié)束碼狀態(tài),見圖4的狀態(tài)機(jī)轉(zhuǎn)換的一般情況為頭碼狀態(tài)一,發(fā)送頭碼狀態(tài)二,數(shù)據(jù)碼狀態(tài),結(jié)束碼狀態(tài);或者,頭碼狀態(tài)一,發(fā)送頭碼狀態(tài)二,連續(xù)碼狀態(tài),結(jié)束碼狀態(tài);其中在數(shù)據(jù)碼狀態(tài),主要使用數(shù)據(jù)位計數(shù)依次判斷每個數(shù)據(jù)位地值,再確定發(fā)送"1"碼或者"0"碼。定時中斷服務(wù)子程序工作流程如圖3所示1、初始化MCU的I/0端口,將MCU的一個定時器的基準(zhǔn)時間隔設(shè)定為遙控碼的基本時間間隔或者基本頻率的倍數(shù);2、MCU每隔O.5625ms進(jìn)入定時中斷轉(zhuǎn)發(fā),當(dāng)進(jìn)入定時中斷轉(zhuǎn)發(fā)時進(jìn)入步驟3;3、MCU判斷是否有轉(zhuǎn)發(fā)標(biāo)志存在,如是,則退出定時中斷轉(zhuǎn)發(fā),返回步驟2;如是,則進(jìn)入步驟4;4、MCU控制命令轉(zhuǎn)發(fā)計數(shù)器加1,并判斷狀態(tài)機(jī)的狀態(tài),進(jìn)入相應(yīng)狀態(tài),通過I/0端口轉(zhuǎn)發(fā)一個基本時間間隔的數(shù)據(jù),通過命令轉(zhuǎn)發(fā)計數(shù)器判斷是否到該狀態(tài)所對應(yīng)的間隔時間4.1、當(dāng)狀態(tài)機(jī)的狀態(tài)為頭碼狀態(tài)一,MCU控制其I/0端口輸出一個0.5625ms的電平,通過命令轉(zhuǎn)發(fā)計數(shù)器判斷是否到數(shù)據(jù)頭狀態(tài)的間隔時間,即判斷命令轉(zhuǎn)發(fā)計數(shù)器是否計算達(dá)到16;如否,則退出定時中斷轉(zhuǎn)發(fā),返回步驟2;如是,將狀態(tài)機(jī)的狀態(tài)設(shè)為頭碼狀態(tài)二,命令轉(zhuǎn)發(fā)計數(shù)器清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟2;4.2、當(dāng)狀態(tài)機(jī)的狀態(tài)為頭碼狀態(tài)二,MCU控制其I/0端口輸出一個0.5625ms的高電平,通過命令轉(zhuǎn)發(fā)計數(shù)器判斷是否到數(shù)據(jù)頭狀態(tài)的間隔時間,即判斷命令轉(zhuǎn)發(fā)計數(shù)器是否計算達(dá)到8;如否,則退出定時中斷轉(zhuǎn)發(fā),返回步驟2;如是,MCU判斷是否設(shè)置了連續(xù)碼,如設(shè)置有,則將狀態(tài)機(jī)的狀態(tài)設(shè)為連續(xù)碼狀態(tài)控制,命令轉(zhuǎn)發(fā)計數(shù)器清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟2;如沒有設(shè)置,則將狀態(tài)機(jī)的狀態(tài)設(shè)為數(shù)據(jù)碼狀態(tài),控制命令轉(zhuǎn)發(fā)計數(shù)器清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟2;4.3、當(dāng)狀態(tài)機(jī)的狀態(tài)為連續(xù)碼狀態(tài),MCU控制其I/0端口輸出一個0.5625ms的低電平,通過命令轉(zhuǎn)發(fā)計數(shù)器判斷是否到連續(xù)碼狀態(tài)的間隔時間,即判斷命令轉(zhuǎn)發(fā)計數(shù)器是否計算達(dá)到4;如否,則退出定時中斷轉(zhuǎn)發(fā),返回步驟2;如是,將狀態(tài)機(jī)的狀態(tài)設(shè)為結(jié)束碼狀態(tài),控制命令轉(zhuǎn)發(fā)計數(shù)器清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟2;4.4、當(dāng)狀態(tài)機(jī)的狀態(tài)為數(shù)據(jù)碼狀態(tài),MCU先判斷數(shù)據(jù)位計數(shù)是否結(jié)束,如是,將狀態(tài)機(jī)的狀態(tài)設(shè)為結(jié)束碼狀態(tài),控制命令轉(zhuǎn)發(fā)計數(shù)器與數(shù)據(jù)位計數(shù)清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟2;如否,控制I/0端口輸出一個0.5625ms的數(shù)據(jù)碼數(shù)據(jù)(高電平或低電平),數(shù)據(jù)位計數(shù)加l并退出定時中斷轉(zhuǎn)發(fā),返回步驟2;4.5、當(dāng)狀態(tài)機(jī)的狀態(tài)為結(jié)束碼狀態(tài),MCU控制其I/0端口輸出一個0.5625ms的高電平,通過命令轉(zhuǎn)發(fā)計數(shù)器判斷是否到結(jié)束碼狀態(tài)的間隔時間;如否,則退出定時中斷轉(zhuǎn)發(fā),返回步驟2;如是,將轉(zhuǎn)發(fā)標(biāo)志清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟2。權(quán)利要求1.電視接收機(jī)中遙控命令碼轉(zhuǎn)發(fā)方法,其特征在于,基于定時中斷轉(zhuǎn)發(fā)遙控命令碼,包括以下步驟a、初始化MCU的I/O端口,將MCU的一個定時器的基準(zhǔn)時間隔設(shè)定為遙控碼的基本時間間隔;b、MCU每隔所述基準(zhǔn)時間隔進(jìn)入定時中斷轉(zhuǎn)發(fā),當(dāng)進(jìn)入定時中斷轉(zhuǎn)發(fā)時進(jìn)入步驟c;c、MCU判斷是否有轉(zhuǎn)發(fā)標(biāo)志存在,如是,則退出定時中斷轉(zhuǎn)發(fā),返回步驟b;如是,則進(jìn)入步驟d;d、MCU控制命令轉(zhuǎn)發(fā)計數(shù)器加1,并判斷狀態(tài)機(jī)的狀態(tài),進(jìn)入相應(yīng)狀態(tài),通過I/O端口轉(zhuǎn)發(fā)一個基本時間間隔的數(shù)據(jù),通過命令轉(zhuǎn)發(fā)計數(shù)器判斷是否到該狀態(tài)所對應(yīng)的間隔時間;如否,則退出定時中斷轉(zhuǎn)發(fā),返回步驟b;如是,將命令轉(zhuǎn)發(fā)計數(shù)器清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟b;當(dāng)遙控命令碼轉(zhuǎn)發(fā)完畢,MCU還需將轉(zhuǎn)發(fā)標(biāo)志清零后,退出定時中斷轉(zhuǎn)發(fā),返回步驟b。2.如權(quán)利要求l所述電視接收機(jī)中遙控命令碼轉(zhuǎn)發(fā)方法,其特征在于,所述狀態(tài)機(jī)的狀態(tài)包括數(shù)據(jù)頭狀態(tài)、連續(xù)碼狀態(tài)、數(shù)據(jù)碼狀態(tài)、結(jié)束碼狀態(tài);狀態(tài)機(jī)的初始狀態(tài)為頭狀態(tài)一;所述步驟d中判斷狀態(tài)機(jī)的狀態(tài),進(jìn)入相應(yīng)狀態(tài),通過I/0端口轉(zhuǎn)發(fā)一個基本時間間隔的數(shù)據(jù),通過命令轉(zhuǎn)發(fā)計數(shù)器判斷是否到該狀態(tài)所對應(yīng)的間隔時間,具體包括以下步驟dl、當(dāng)狀態(tài)機(jī)的狀態(tài)為數(shù)據(jù)頭狀態(tài),MCU控制其I/0端口輸出一個基本時間間隔的數(shù)據(jù)頭數(shù)據(jù),通過命令轉(zhuǎn)發(fā)計數(shù)器判斷是否到數(shù)據(jù)頭狀態(tài)的間隔時間;如否,則退出定時中斷轉(zhuǎn)發(fā),返回步驟b;如是,MCU判斷是否設(shè)置了連續(xù)碼,如設(shè)置有,則將狀態(tài)機(jī)的狀態(tài)設(shè)為連續(xù)碼狀態(tài)控制,命令轉(zhuǎn)發(fā)計數(shù)器清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟b;如沒有設(shè)置,則將狀態(tài)機(jī)的狀態(tài)設(shè)為數(shù)據(jù)碼狀態(tài),控制命令轉(zhuǎn)發(fā)計數(shù)器清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟b;d2、當(dāng)狀態(tài)機(jī)的狀態(tài)為連續(xù)碼狀態(tài),MCU控制其I/0端口輸出一個基本時間間隔的連續(xù)碼數(shù)據(jù),通過命令轉(zhuǎn)發(fā)計數(shù)器判斷是否到連續(xù)碼狀態(tài)的間隔時間;如否,則退出定時中斷轉(zhuǎn)發(fā),返回步驟b;如是,將狀態(tài)機(jī)的狀態(tài)設(shè)為結(jié)束碼狀態(tài),控制命令轉(zhuǎn)發(fā)計數(shù)器清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟b;d3、當(dāng)狀態(tài)機(jī)的狀態(tài)為數(shù)據(jù)碼狀態(tài),MCU先判斷數(shù)據(jù)位計數(shù)是否結(jié)束,如是,將狀態(tài)機(jī)的狀態(tài)設(shè)為結(jié)束碼狀態(tài),控制命令轉(zhuǎn)發(fā)計數(shù)器與數(shù)據(jù)位計數(shù)清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟b;如否,控制l/0端口輸出一個基本時間間隔的敷據(jù)碼數(shù)據(jù),數(shù)據(jù)位計數(shù)加l并退出定時中斷轉(zhuǎn)發(fā),返回步驟b;d4、當(dāng)狀態(tài)機(jī)的狀態(tài)為結(jié)束碼狀態(tài),MCU控制其I/0端口輸出一個基本時間間隔的結(jié)束碼數(shù)據(jù),通過命令轉(zhuǎn)發(fā)計數(shù)器判斷是否到結(jié)束碼狀態(tài)的間隔時間;如否,則退出定時中斷轉(zhuǎn)發(fā),返回步驟b;如是,將轉(zhuǎn)發(fā)標(biāo)志清零并退出定時中斷轉(zhuǎn)發(fā),返回步驟b。3.如權(quán)利要求2所述電視接收機(jī)中遙控命令碼轉(zhuǎn)發(fā)方法,其特征在于,所述數(shù)據(jù)頭狀態(tài)由頭狀態(tài)一、頭狀態(tài)二組成,頭狀一數(shù)據(jù)為16個基本時間間隔的低電平,頭狀態(tài)二數(shù)據(jù)為8個基本時間間隔的高電平,連續(xù)碼數(shù)據(jù)為4個基本時間間隔的低電平;所述數(shù)據(jù)碼由O碼和1碼組成,所述O碼為1個基本時間間隔的低電平與1個基本時間間隔的高電平,所述l碼為l個基本時間間隔的低電平與3個基本時間間隔的高電平,所述結(jié)束碼為168減數(shù)據(jù)碼或連續(xù)碼總長個基本時間間隔的高電平。4.如權(quán)利要求3所述電視接收機(jī)中遙控命令碼轉(zhuǎn)發(fā)方法,其特征在于,所述一個基本時間間隔為O.5625ms。全文摘要本發(fā)明涉及遙控命令轉(zhuǎn)發(fā)的實(shí)現(xiàn)方法,提供一種用基于定時中斷的遙控命令碼轉(zhuǎn)發(fā)方法,將MCU的一個定時器設(shè)定為遙控碼的基本時間間隔或者其頻率的倍數(shù),通過不同的狀態(tài)機(jī)變換來改變I/O端口輸出的時間間隔,來實(shí)現(xiàn)遙控碼輸出,保證輸出遙控命令轉(zhuǎn)發(fā)波形的時序。由于在主程序循環(huán)中,只需要設(shè)定發(fā)送的相應(yīng)的控制,發(fā)送每個步驟通過定時中斷自動完成。本發(fā)明極大地減少干涉主循環(huán)的運(yùn)行時間,易于在不同的硬件系統(tǒng)移植。文檔編號H04N5/44GK101365078SQ20081030453公開日2009年2月11日申請日期2008年9月17日優(yōu)先權(quán)日2008年9月17日發(fā)明者何向,謝綠峰申請人:四川長虹電器股份有限公司