51微控制器紅外通訊

2021-09-25 20:12:54 字數 3395 閱讀 6902

本文是武漢市海聯天下物聯網****技術團隊內部學習筆記,將詳細講解紅外遙控的基本原理以及51微控制器如何利用外部中斷和定時器0對紅外訊號進行解碼。——技術部 張傲

使用紅外遙控器對準hl-stc51開發板紅外置收頭,按下不同的按鍵,在開發板數碼管上將顯示對應按鍵的數字。

8位位址碼,8位命令碼

完整發射兩次位址碼和命令碼,以提高可靠性

脈衝時間長短調製方式

38khz載波頻率;

位時間1.12ms(邏輯0)或2.25ms(邏輯0);

nec協議根據脈衝時間長短解碼。每個脈衝為560us長的38khz載波(約32個載波週期)。邏輯「1」脈衝時間為2.25ms,邏輯「0」脈衝時間為1.12ms。推薦的載波週期為1/4或者1/3。

nec協議規定低位首先傳送,如上圖所示的情況,傳送的位址碼為「59」,命令碼為「16」。每次傳送的資訊首先是用於調整紅外置收器增益的9ms agc(自動增益控制)高電平脈衝,接著是4.5ms的低電平,接下來便是位址碼和命令碼。位址碼和命令碼傳送兩次,第二次傳送的是反碼(如:1111 0000的反碼是0000 1111),用於驗證接收的資訊的準確性。

sbit ir=p3

^2;sbit smg_duan =p3^

4;

ir與數碼管段顯示可根據原理圖來定義:

紅外置收管的輸入引腳與微控制器p32引腳相連,而p32又是微控制器外部中斷0引腳。使用數碼管第一位顯示解碼的提示資訊,數碼管第一位的使能腳與微控制器p34引腳相連,檢視原理圖定義引腳後,便於理解接下來的**。

使用定時器0作為紅外置收端脈衝寬度檢測計數器,將定時器0初始化為工作方式2,8位自動過載。定時器初值為0,則256個計數週期產生溢位中斷,定時器每計數1次的時間為=1s/(sysclk/12)=1.085us;因此每次溢位的時間為=1.085us*256=0.277ms。

void

tim0init

(void

)//定時器0初始化

定時器0中斷服務函式,中斷服務函式中對全域性變數irtime進行++操作,由上面的分析可知,irtime每加1表示的時間長度為0.277ms,即irtime*0.277則表示測量到的時間長度。

void

tim0_isr

(void

) interrupt 1 using 1

因此,對於紅外引導碼的檢測可以使用如下函式進行:

if

(irtime <

63&& irtime >=33)

//引導碼 tc9012的頭碼,9ms+4.5ms

...

在下圖中可以觀察到紅外每次傳送會有9ms+4.5ms的頭碼,if語句中的作用就是判斷是否接收到引導碼,irtime>=33等價於定時時長=33*0.28ms=9.24ms,同理irtime<17.64ms。

注意:紅外發射訊號與紅外置收訊號極性是相反的,微控制器解碼的訊號時紅外置收頭接收到的訊號!

一體化紅外置收頭與微控制器p32引腳(外部中斷引腳)相連。外部中斷初始化為下降沿觸發。紅外置收頭預設為高電平,在檢測到38k紅外遙控載波訊號時輸出低電平,微控制器外部中斷引腳加測到外部有高到低的變化(下降沿)則觸發中斷,使進入中斷處理函式。

外部中斷0初始化函式

void

ex0init

(void

)

外部中斷服務函式

void

ex0_isr

(void

) interrupt 0

//外部中斷0 服務函式

}else

}

第一次觸發外部中斷後,startflag初始值為0,進入else語句,初始化irtime的值並將startflag置1,引導碼結束時下降沿觸發第二次中斷,因為startflag已經置1,則直接進入if條件句,此時的irtime剛好為引導碼的時間(引導碼的實際時間存在偏差),如果irtime的值介於33和63之間,則把i置0,並將irtime的值寫入irdata陣列中的第一位,此時正式開始接收位址碼和命令碼,位址碼和命令碼的下降沿引發中斷,每次中斷會將irtime置0,且將i+1,依次把位址碼和命令碼填入irdata陣列中,直到填滿33個,33個是由引導碼加上位址碼、位址碼反碼、命令碼、命令碼反碼構成的,位址碼和命令碼每個位元組含有8位。當i==33時,表示接收完,微控制器進入資料處理。

void

ircordpro

(void

)//紅外碼值處理函式

k++;//迴圈8次得到乙個完整的位元組

} ircord[i]

= value;

//將讀到的完整位元組賦值給ircord陣列

value =0;

} irpro_ok =1;

//處理完畢標誌位置1

}

陣列ircord中ircord[2]是接收到的命令碼,根據紅外遙控器的鍵碼值判斷按下的是哪個鍵,從而控制數碼管進行顯示:

void

ir_work

(void

)//紅外鍵值轉數碼管顯示

break

;case

0x18

:break

;case

0x5e

:break

;case

0x08

:break

;case

0x1c

:break

;case

0x5a

:break

;case

0x42

:break

;case

0x52

:break

;case

0x4a

:break

;default

:break;}

irpro_ok =0;

//處理完成標誌

}

微控制器 紅外通訊

人的眼睛能看到的可見光按波長從長到短排列,依次為紅 橙 黃 綠 青 藍 紫。其中紅光的波長範圍為0.62 0.76 m 紫光的波長範圍為0.38 0.46 m。比紫光波長還短的光叫紫外線,比紅光波長還長的光叫紅外線.紅外線遙控就是利用波長為0.76 1.5 m之間的近紅外線來傳送控制訊號的。紅外線遙...

51微控制器 紅外遙控

紅外遙控系統主要由紅外發射裝置和紅外置收裝置構成。紅外發射裝置主要由鍵盤電路 紅外編碼晶元 電源和紅外發射電路組成 比如遙控器 如圖 紅外置收裝置主要由紅外置收電路 紅外解碼晶元 電源和應用電路組成,在微控制器開發板上有紅外置收電路,而且微控制器充當解碼晶元。人的眼睛能看到的可見光按波長從長到短排列...

51微控制器 紅外解碼

nec協議的資料格式包括 引導碼 使用者碼 使用者碼 使用者反碼 按鍵碼 按鍵碼 按鍵反碼 最後乙個停止位。停止位只要起隔離作用,一般不進行判斷,程式中可以不予理會。資料編碼共4個位元組32位,分別為 使用者碼 使用者碼 使用者反碼 按鍵碼 按鍵碼 按鍵反碼 具體是原始碼還是反碼由生產商決定,反碼可...