當前位置:編程學習大全網 - 編程語言 - 51單片機紅外接收端的程序怎麽寫,我想知道寫的方法和原理,最好有壹個具體的模版,好讓我參考.

51單片機紅外接收端的程序怎麽寫,我想知道寫的方法和原理,最好有壹個具體的模版,好讓我參考.

這是采用STC12C5A60S2單片機的紅外解碼程序及其說明。

;采用脈寬調制的串行碼,以脈寬為0.565ms、間隔0.56ms、周期為1.125ms的組合表示二進制的"0";

;以脈寬為0.565ms、間隔1.685ms、周期為2.25ms的組合表示二進制的"1

;上述"0"和"1"組成的32位二進制碼經38kHz的載頻進行二次調制以提高發射效率,

;達到降低電源功耗的目的。然後再通過紅外發射二極管產生紅外線向空間發射

;遙控編碼是連續的32位二進制碼組,其中前16位為用戶識別碼,能區別不同的電器設備,

;防止不同機種遙控碼互相幹擾。該芯片的用戶識別碼固定為十六進制01H

;後16位為8位操作碼(功能碼)及其反碼。

;當壹個鍵按下超過36ms,振蕩器使芯片激活,將發射壹組108ms的編碼脈沖,這108ms發射代碼由壹個起始碼(9ms),

;壹個結果碼(4.5ms),低8位地址碼(9ms~18ms),高8位地址碼(9ms~18ms),8位數據碼(9ms~18ms)

;和這8位數據的反碼(9ms~18ms)組成。如果鍵按下超過108ms仍未松開,

;接下來發射的代碼(連發代碼)將僅由起始碼(9ms)和結束碼(2.5ms)組成。

;解碼的關鍵是如何識別"0"和"1",接收端而言,"0"是0.56ms的高+0.56ms的低。"1"是1.68ms的高+0.56ms的低。

;所以可以根據高電平的寬度區別"0"和"1"。當高電平出現時開始延時,0.56ms以後,若讀到的電平為低,

;說明該位為"0",反之則為"1",為了可靠起見,延時必須比0.56ms長些,但又不能超過1.12ms,否則如果該位為"0",

;讀到的已是下壹位的高電平,因此取(1.12ms+0.56ms)/2=0.84ms最為可靠,壹般取0.84ms左右均可。

;為了***用引導部分延時程序,這裏用0.9ms延時。

;-------------紅外解碼程序---------------------------

EXINT0:

PUSH ACC

PUSH PSW

PUSH 1

PUSH 2

PUSH 6

CLR EA ;暫時關閉中斷請求

MOV R6,#10

EXINT10:

LCALL DELAY09MS ;調用900us延時子程序

JB IRIN,INTOUT1 ;判斷P3.2是否有高電平,如果有就退出解碼程序

DJNZ R6,EXINT10 ;循環10次,檢測在900微妙中是否存在高電平。以上完成對遙控信號的9000微秒的初始低電平信號的識別。

JNB IRIN,$ ;等待高電平避開9毫秒低電平引導脈沖

LCALL DELAY45MS ;延時4.5毫秒

;-------------接受32位代碼--------------------------

MOV R1,#IRUSERL

MOV R2,#04H

EXINT101:

MOV R6,#08H ;每組數據位8位

EXINT102:

JNB IRIN,$ ;等待地址碼第壹組數據的高電平信號

LCALL DELAY09MS ;高電平開始後延時判斷信號此時的高/低狀態

MOV C,IRIN ;將P3.2引腳此時的電平狀態0或1存入C中

JNC INT1OUT ;如果為0跳出

LCALL DELAY1MS

INT1OUT:

MOV A,@R1

RRC A ;將C中的數據0/1移入A中最低位

MOV @R1,A ;將A中的數據暫存在R1

DJNZ R6,EXINT102 ;接受完8位代碼

INC R1

DJNZ R2,EXINT101 ;接受完4組32位代碼

;--------------數據碼比較-------------------------------

MOV A,IRDATAL

; LCALL SENDRXDAT

MOV A,IRDATAL

CPL A

CJNE A,IRDATAH,INTOUT1 ;判斷數碼正誤,不等退出

MOV IR_DAT,IRDATAL ;相等則保存正確數據

MOV A,IR_DAT

; LCALL SENDRXDAT

SETB IRBIT

INTOUT1:

LCALL DELAY45MS

SETB EA ;允許中斷

POP 6

POP 2

POP 1

POP PSW

POP ACC

RETI

;;*****************11.0592*900=9953******************

DELAY09MS: ;6

PUSH 4 ;4

PUSH 3 ;4

MOV R4,#20 ;2

DLY900:

MOV R3,#122 ;2

DJNZ R3,$ ;4

DJNZ R4,DLY900 ;4

MOV R4,#11 ;2

DJNZ R4,$ ;4

POP 3 ;3

POP 4 ;3

RET ;4

;TOTAL=9952

;;*****************11.0592*560=6193******************

DELAY056: ;6

PUSH 4 ;4

PUSH 3 ;4

MOV R4,#12 ;2

DLY5600:

MOV R3,#122 ;2

DJNZ R3,$ ;4

DJNZ R4,DLY5600 ;4

MOV R4,#71 ;2

DJNZ R4,$ ;4

POP 3 ;3

POP 4 ;3

RET ;4

;TOTAL=6194

;;*****************11.0592*4500=49766****************

DELAY45MS: ;6

PUSH 4 ;4

PUSH 3 ;4

MOV R4,#52 ;2

DLY45:

MOV R3,#236 ;2

DJNZ R3,$ ;4

DJNZ R4,DLY45 ;4

MOV R4,#85 ;2

DJNZ R4,$ ;4

POP 3 ;3

POP 4 ;3

RET ;4

;;TOTAL=49768

;;*****************11.0592*1000=11059****************

DELAY1MS: ;6

PUSH 4 ;4

PUSH 3 ;4

MOV R4,#20 ;2

DLY1MS:

MOV R3,#136 ;2

DJNZ R3,$ ;4

DJNZ R4,DLY1MS ;4

MOV R4,#8 ;2

DJNZ R4,$ ;4

POP 3 ;3

POP 4 ;3

RET ;4

;TOTAL=11060

;;***************************************************

DELAY100US: ;6

PUSH 4 ;4

MOV R4,#140 ;2

DJNZ R4,$ ;4

MOV R4,#131 ;2

DJNZ R4,$ ;4

POP 4 ;3

RET ;4

;TOTAL=1105

;;***************************************************

  • 上一篇:做安卓軟件開發需要學習什麽技術?
  • 下一篇:周傑倫的詳細資料
  • copyright 2024編程學習大全網