;采用脈寬調制的串行碼,以脈寬為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
;;***************************************************