新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 跟我學(xué)51單片機(jī)(六):?jiǎn)纹瑱C(jī)外部中斷及紅外遙控器解碼

跟我學(xué)51單片機(jī)(六):?jiǎn)纹瑱C(jī)外部中斷及紅外遙控器解碼

作者: 時(shí)間:2013-02-06 來源:網(wǎng)絡(luò) 收藏

PHILIPS 標(biāo)準(zhǔn):載波頻率為38kHz ;沒有簡(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 這款紅外遙控器(見圖6(a)),其符合常見的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)氧樹脂封裝,不受日光、熒光燈等光源干擾,內(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)



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉