跟我學(xué)51單片機(jī)(六):?jiǎn)纹瑱C(jī)外部中斷及紅外遙控器解碼
出處:nxzp12348 發(fā)布于:2011-07-29 16:54:32
一、內(nèi)容提要
上講介紹并應(yīng)用了單片機(jī)動(dòng)態(tài)掃描驅(qū)動(dòng)數(shù)碼管,并給出了實(shí)例。這一講將重點(diǎn)介紹單片機(jī)如何通過(guò)捕獲來(lái)實(shí)現(xiàn)對(duì)紅外遙控器解碼。通過(guò)該講,讀者可以掌握紅外遙控器的編碼原理以及如何通過(guò)單片機(jī)對(duì)遙控器進(jìn)行解碼。
二、原理簡(jiǎn)介
隨著家用電器、視聽(tīng)產(chǎn)品的普及,紅外線遙控器已被廣泛使用在各種類(lèi)型的家電產(chǎn)品上(如遙控開(kāi)關(guān)、智能開(kāi)關(guān)等)。其具有體積小、抗干擾能力強(qiáng)、功耗低、功能強(qiáng)、成本低等特點(diǎn),在工業(yè)設(shè)備中也得到廣泛應(yīng)用。
一般而言,一個(gè)通用的紅外遙控系統(tǒng)由發(fā)射和接收兩大部分組成,如圖1 所示:

圖1 紅外遙控系統(tǒng)框圖
其中發(fā)射部分主要包括鍵盤(pán)矩陣、編碼調(diào)制、紅外發(fā)射管;接收部分包括光、電信號(hào)的轉(zhuǎn)換以及放大、解調(diào)、解碼電路。舉例來(lái)說(shuō),通常我們家電遙控器信號(hào)的發(fā)射,就是將相應(yīng)按鍵所對(duì)應(yīng)的控制指令和系統(tǒng)碼( 由0 和1 組成的序列),調(diào)制在32~56kHz 范圍內(nèi)的載波上,然后經(jīng)放大、驅(qū)動(dòng)紅外發(fā)射管將信號(hào)發(fā)射出去。此外,現(xiàn)在流行的控制方法是應(yīng)用編/ 解碼專(zhuān)用集成電路芯片來(lái)實(shí)現(xiàn)(如下文提到的SAA3010 紅外編碼芯片和HS0038 紅外接收頭)。
不同公司的遙控芯片,采用的遙控碼格式也不一樣。在此介紹目前廣泛使用較普遍的兩種,一種是NEC Protocol 的PWM( 脈沖寬度調(diào)制) 標(biāo)準(zhǔn),一種是Philips RC-5 Protocol 的PPM( 脈沖位置調(diào)制) 標(biāo)準(zhǔn)。
NEC 標(biāo)準(zhǔn):遙控載波的頻率為38kHz( 占空比為1:3) ;當(dāng)某個(gè)按鍵按下時(shí),系統(tǒng)首先發(fā)射一個(gè)完整的全碼,然后經(jīng)延時(shí)再發(fā)射一系列簡(jiǎn)碼,直到按鍵松開(kāi)即停止發(fā)射。簡(jiǎn)碼重復(fù)為延時(shí)108ms,即兩個(gè)引導(dǎo)脈沖上升沿之間的間隔都是108ms。一個(gè)完整的全碼如圖2所示。

圖2 NEC標(biāo)準(zhǔn)下的全碼表示
其中,引導(dǎo)碼高電平4.5ms,低電平4.5ms ;用戶(hù)碼8 位,數(shù)據(jù)碼8 位,共32 位;數(shù)據(jù)0 可用“高電平0.56ms +低電平0.56ms”表示,數(shù)據(jù)1 可用“高電平0.56ms +低電平1.68ms”表示,如圖3 所示。一個(gè)簡(jiǎn)碼可等同于引導(dǎo)碼、系統(tǒng)碼位0 的反碼和結(jié)束位(0.56ms) 高電平時(shí)間總和。

圖3 NEC標(biāo)準(zhǔn)下的數(shù)據(jù)0和1的表示
PHILIPS 標(biāo)準(zhǔn):載波頻率為38kHz ;沒(méi)有簡(jiǎn)碼,點(diǎn)按鍵時(shí),控制碼在1 和0 之間切換,若持續(xù)按鍵,則控制碼不變。一個(gè)全碼可等同于起始碼、控制碼、系統(tǒng)碼、數(shù)據(jù)碼的時(shí)間總和,如圖4 所示。

圖4 PHILIPS標(biāo)準(zhǔn)下的全碼表示
數(shù)據(jù)0 用“低電平0. 889ms +高電平0. 889ms”
表示;數(shù)據(jù)1 用“ 高電平0. 889ms + 低電平0.
889ms”表示(圖5)。連續(xù)碼重復(fù)延時(shí)114ms。

圖5 PHILIPS標(biāo)準(zhǔn)下的數(shù)據(jù)0和1的表示
在本講中采用的是SAA3010 這款紅外遙控器(見(jiàn)圖6(a)),其符合常見(jiàn)的PHILIPS 標(biāo)準(zhǔn)中的RC-5 編碼格式,其一幀碼序列是由2 位控制碼,1 位翻轉(zhuǎn)碼,5 為地址碼,6 位數(shù)據(jù)碼,結(jié)束碼組成。其數(shù)據(jù)位時(shí)間長(zhǎng)度是1.688ms。連續(xù)碼重復(fù)延時(shí)為108ms,即在每按鍵一直被按下時(shí)延時(shí)為108ms 再輸出同樣的一幀數(shù)據(jù)。

圖6 (a) SAA3010遙控器外觀圖 (b) SAA3010的數(shù)據(jù)位 (c) SAA3010的數(shù)據(jù)重復(fù)周期
從圖6 中可以看出,SAA3010 的位傳送方式是采用雙相位,位1 和位0 的相位正好相反。在解碼時(shí)可以用定時(shí)采樣的方式進(jìn)行解碼,一個(gè)位采樣二次,分別在位波形的四分之一和四分之三處進(jìn)行采樣,如位1 用這種方法采樣的值就是0 和1。當(dāng)然也可以只采樣,例如在波形的四分之一處進(jìn)行采樣,然后定時(shí)一個(gè)波形的周期再采樣,這樣位1 采樣的值就是0(本講的實(shí)例即是采用這種方法)。
三、電路詳解
如圖7 (a) 中所示,紅外接收頭解碼電路非常簡(jiǎn)單,采用的是一體化紅外線接收頭,一體化的紅外接收頭將遙控信號(hào)的接收、放大、檢波、整形集于一身,并且輸出可以讓單片機(jī)識(shí)別的TTL 信號(hào),這樣大大簡(jiǎn)化了接收電路的復(fù)雜程度和電路的設(shè)計(jì)工作,方便使用。在本講中采用的是紅外一體化接收頭HS0038,其外觀圖如7(b) 所示。其為黑色環(huán)氧樹(shù)脂封裝,不受日光、熒光燈等光源干擾,內(nèi)附磁屏蔽,功耗低,靈敏度高。在用小功率發(fā)射管發(fā)射信號(hào)情況下,接收距離可達(dá)30m。它能與TTL、COMS 電路兼容。HS0038 為直立側(cè)面收光型。它接收紅外信號(hào)頻率為38 kHz, 周期約26μs,同時(shí)能對(duì)信號(hào)進(jìn)行放大、檢波、整形,得到TTL 電平的編碼信號(hào)。

圖7 (a) 紅外接收頭解碼電路 (b) HS0038外觀圖
其三個(gè)管腳分別是地、電源正、解調(diào)信號(hào)輸出端。
為了響應(yīng)速度,紅外接收頭的解碼信號(hào)輸出接入到單片機(jī)P3.3(外部中斷1)端口上,這樣一旦有紅外解碼信號(hào)輸出就可觸發(fā)進(jìn)去中斷。此外,電容C7 用于電源去耦濾波,保證紅外接收頭穩(wěn)定工作。
四、程序設(shè)計(jì)
本講設(shè)計(jì)的程序如下:
void time0() interrupt 1 ( 1)
bit in = ~IR_Input; ( 2)
TH0 = 0XFF; ( 3)
TL0 = 0X83; ( 4)
IR_Data[IR_sign] = IR_Data[IR_sign] | in; ( 5)
IR_count++; ( 6)
if(IR_count == 1 || IR_count == 2) ( 7)
{
if(in == 0) ( 8)
{
TR0 = 0; ( 9)
EX1 = 1; ( 10)
return; ( 11)
}
}
if(IR_count == 3) ( 12)
{
IR_sign = 1; ( 13)
}
else if(IR_count == 8) ( 14)
{
if(IR_Data[1] != 0) ( 15)
{
TR0 = 0; ( 16)
EX1 = 1;
return;
}
IR_sign = 2; ( 17)
}
else if(IR_count == 14) ( 18)
{
IR_sign = 3; ( 19)
}
else if(IR_sign == 3) ( 20)
{
TR0 = 0; ( 21)
IR_Success(); ( 22)
return; ( 23)
}
else
IR_Data[IR_sign] = IR_Data[IR_sign] 《 1; ( 24)
程序詳細(xì)說(shuō)明:
?。?)定時(shí)器中斷0 服務(wù)函數(shù),紅外接收頭解碼數(shù)據(jù)觸發(fā)外部中斷1 后,引發(fā)定時(shí)器中斷,從而進(jìn)行捕獲解碼。
(2)解碼時(shí), 將載頻部分變?yōu)榈碗娖剑?即低電平實(shí)際為1, 高電平實(shí)際為0。
?。?)設(shè)置定時(shí)器0 高八位初值,因?yàn)橐〞r(shí)間長(zhǎng)度為一個(gè)數(shù)據(jù)位周期。
?。?) 設(shè)置定時(shí)器0 低八位初值。經(jīng)過(guò)實(shí)測(cè),SAA3010 的位時(shí)間在1.655ms 左右。
?。?)將紅外數(shù)據(jù)放入位。
?。?)紅外計(jì)數(shù)沒(méi)進(jìn)定時(shí)器中斷就加1。
?。?)如果當(dāng)前是第1 次和第2 次進(jìn)入定時(shí)器中斷。
?。?)如果此時(shí)in 的值為0,即如果發(fā)現(xiàn)起始兩位不全是1 的情況。
?。?)關(guān)閉定時(shí)器0。
?。?0)重新打開(kāi)外部中斷進(jìn)行接收。即起始兩位必須都為1。
(11)退出返回。
(12)如果接收完起始位(2 位)和控制位(1 位)。
(13)IR_sign 置1,即將接收到的紅外系統(tǒng)碼放到IR_Data[1] 中。
?。?4)如果當(dāng)前計(jì)數(shù)達(dá)到第8 次,即接收完5 位系統(tǒng)碼。
?。?5)如果接收到的系統(tǒng)碼不為0,即要求系統(tǒng)碼全為0 才正確。
?。?6)則關(guān)閉定時(shí)器和重開(kāi)外部中斷并返回。
(17)IR_sign 置2,將接收到的紅外數(shù)據(jù)位放到IR_Data[2] 中。
?。?8)如果當(dāng)前計(jì)數(shù)達(dá)到第14 次,即接收完6 位數(shù)據(jù)碼。
?。?9)IR_sign 置3,表示數(shù)據(jù)碼接收成功。
?。?0)如果IR_sign 等于3,即表示如果接收完成。
(21)接收完成,關(guān)閉定時(shí)器0,不再捕獲。
(22)接收完成后跳轉(zhuǎn)到執(zhí)行IR_Success() 函數(shù),進(jìn)行顯示以及重新初始化等。
?。?3)返回。
?。?4)將數(shù)據(jù)左移一位, 以便將一下位數(shù)據(jù)并于位。
五、調(diào)試要點(diǎn)與實(shí)驗(yàn)現(xiàn)象
接好硬件,通過(guò)冷啟動(dòng)方式將程序所生成的。hex 文件到單片機(jī)運(yùn)行后,打開(kāi)串口調(diào)試助手軟件,設(shè)置好波特率9600,復(fù)位單片機(jī),然后按下SAA3010 遙控器上的相應(yīng)按鍵,可以觀察到在接收窗口有接收到的數(shù)據(jù)顯示見(jiàn)圖8,此外電路板上的串行通信指示燈也會(huì)閃爍,P0 口也會(huì)將所接到的數(shù)據(jù)顯示在LED 燈上。
值得注意的是,不同紅外遙控器的編碼格式不同,即便是同一型號(hào)的紅外遙控器,其發(fā)射出來(lái)的碼值也可能稍有微小的區(qū)別,例如筆者手里所用的SAA3010 紅外遙控器,其位時(shí)間實(shí)測(cè)在1.655ms 左右,而不是在標(biāo)稱(chēng)的1.688ms,因此,有條件的讀者可以用示波器或者邏輯分析儀之類(lèi)的儀表對(duì)遙控器發(fā)射出來(lái)的碼值進(jìn)行測(cè)量,從而相應(yīng)的修改所捕獲的時(shí)間,確保無(wú)誤。此外,紅外的穿透能力較弱,例如我們用手遮擋住遙控器的發(fā)射頭或者接收頭時(shí),此時(shí)難以收到數(shù)據(jù)或者引入干擾。
六、總結(jié)
本講介紹了51 單片機(jī)如何利用外部中斷觸發(fā)和內(nèi)部定時(shí)器捕獲的方式進(jìn)行紅外遙控器解碼,現(xiàn)簡(jiǎn)單總結(jié)如下:
要對(duì)紅外遙控器解碼,首先應(yīng)當(dāng)知道遙控器的編碼標(biāo)準(zhǔn),無(wú)論是本文中所介紹的NEC 標(biāo)準(zhǔn)和PHILIPS 標(biāo)準(zhǔn),還是其他編碼格式,因?yàn)椴涣私饩幋a格式,難以對(duì)編碼進(jìn)行判斷,從而造成解錯(cuò)碼。其次,由于晶振(如遙控器內(nèi)部和單片機(jī)晶振)本身的不穩(wěn)定性等,為保證解碼的準(zhǔn)確性,應(yīng)對(duì)每位碼長(zhǎng)時(shí)間經(jīng)行測(cè)量,如利用儀表或者使用單片機(jī)本身,從而得到準(zhǔn)備結(jié)果。下講將講述單片機(jī)驅(qū)動(dòng)字符型液晶1602 模塊的原理與實(shí)例,敬請(qǐng)期待。
版權(quán)與免責(zé)聲明
凡本網(wǎng)注明“出處:維庫(kù)電子市場(chǎng)網(wǎng)”的所有作品,版權(quán)均屬于維庫(kù)電子市場(chǎng)網(wǎng),轉(zhuǎn)載請(qǐng)必須注明維庫(kù)電子市場(chǎng)網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。
本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性,不承擔(dān)此類(lèi)作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個(gè)人從本網(wǎng)轉(zhuǎn)載時(shí),必須保留本網(wǎng)注明的作品出處,并自負(fù)版權(quán)等法律責(zé)任。
如涉及作品內(nèi)容、版權(quán)等問(wèn)題,請(qǐng)?jiān)谧髌钒l(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。
- 單片機(jī)技術(shù)特性與嵌入式開(kāi)發(fā)實(shí)踐指南2026/1/7 10:00:02
- 單片機(jī)(MCU)與數(shù)字信號(hào)處理器(DSP)分類(lèi)及選型技術(shù)指南2025/12/30 10:02:37
- 工業(yè)級(jí)DSP信號(hào)處理系統(tǒng):硬件適配與抗干擾工程方案2025/12/15 14:41:00
- HOLTEK推出HT32F65533G/733G內(nèi)建N/N預(yù)驅(qū)電機(jī)專(zhuān)用SoC單片機(jī)2025/11/26 14:11:41
- 什么是C51數(shù)據(jù)類(lèi)型擴(kuò)充定義2025/10/27 13:59:22
- 編碼器的工作原理及作用1
- 超強(qiáng)整理!PCB設(shè)計(jì)之電流與線寬的關(guān)系2
- 三星(SAMSUNG)貼片電容規(guī)格對(duì)照表3
- 電腦藍(lán)屏代碼大全4
- 國(guó)標(biāo)委發(fā)布《電動(dòng)汽車(chē)安全要求第3部分:人員觸電防護(hù)》第1號(hào)修改單5
- 通俗易懂談上拉電阻與下拉電阻6
- 繼電器的工作原理以及驅(qū)動(dòng)電路7
- 電容單位8
- 跟我學(xué)51單片機(jī)(三):?jiǎn)纹瑱C(jī)串口通信實(shí)例9
- 一種三極管開(kāi)關(guān)電路設(shè)計(jì)10
- 高速PCB信號(hào)完整性(SI)設(shè)計(jì)核心實(shí)操規(guī)范
- 鎖相環(huán)(PLL)中的環(huán)路濾波器:參數(shù)計(jì)算與穩(wěn)定性分析
- MOSFET反向恢復(fù)特性對(duì)系統(tǒng)的影響
- 電源IC在惡劣環(huán)境中的防護(hù)設(shè)計(jì)
- 連接器耐腐蝕性能測(cè)試方法
- PCB電磁兼容(EMC)設(shè)計(jì)與干擾抑制核心實(shí)操規(guī)范
- 用于相位噪聲測(cè)量的低通濾波器設(shè)計(jì)與本振凈化技術(shù)
- MOSFET在高頻開(kāi)關(guān)中的EMI問(wèn)題
- 電源IC在便攜式設(shè)備中的設(shè)計(jì)要點(diǎn)
- 連接器結(jié)構(gòu)設(shè)計(jì)常見(jiàn)問(wèn)題分析









