📄 ircode.asm
字号:
;*******************************************************************
; iR TOSHIBA Code -> iR NEC Code
; V1.0 Dying ----- 2006.01.25
;*******************************************************************
ORG 0000H
; Baud DATA 0FEH ; 9600baudrate/second 12MHz
DMA_Custom DATA 00H ; NEC Cunstom
nDMA_Custom DATA 0FFH ;
PowerCode DATA 1FH
; TV input custom is 18H
InCustomData_TV DATA 18H
nInCustomData_TV DATA 18H
; DMA Inpout custom is 10H
InCustomData_DMA DATA 08H
nInCustomData_DMA DATA 08H
In_Custom DATA 00H ;
nIn_Custom DATA 00H ;
iROut BIT P1.7
Power BIT P1.4
INPUTCustom EQU 27H
INPUTnCustom EQU 28H
INPUTDATA EQU 29H
INPUTnDATA EQU 2AH
OUTPUTCustom EQU 2BH
OUTPUTnCustom EQU 2CH
OUTPUTData EQU 2DH
OUTPUTnData EQU 2EH
DelayCounter0 EQU 2FH
DelayCounter1 EQU 30H
NECDataCode EQU 31H
nNECDataCode EQU 32H
Bit0Counter EQU 33H
Bit1Counter EQU 34H
RepeatFlag BIT 30H
OutCodeFlag BIT 31H
noFirstEdgeFlag BIT 32H
CustomSmapleFlag BIT 33H
; 26H--3FH ; no used
; 40H--7FH ; If use the AT89C1051U without this RAM
;*********************************************************************
SJMP START
ORG 0003H
AJMP INT_Int0
ORG 000BH
AJMP INT_T0
ORG 001BH
AJMP INT_T1
;----------------------------------------------------------------------
ORG 0030H
START:
CLR Power
;TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan
; SETB Power ;康研台湾产品
;TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan
SETB iROut
CLR A ;clean RAM
MOV R0,#7FH
CleanRAM:
MOV @R0,A
DJNZ R0,CleanRAM
MOV TH0,A
MOV TL0,A
MOV TH1,#0C9H
MOV TL0,A
MOV R0,#27H
Initialization:
MOV IE,#0BH
MOV TMOD,#19H ;T1 : GATE1 = 0 T0: GATE = 1
; C/T = 0 C/T = 0
; M1M0 =01 M1M0 = 01
MOV TCON,#01H
MOV IP,#00H
CLR TR0
CLR TR1
SETB EA
;-----------------------------------------------------------------------
MainLoop:
JNB RepeatFlag,NaturalData ;Repeat code
CLR EA
CLR iRout
NOP
NOP
ACALL Delay9000uS
SETB iRout
ACALL Delay2250uS
CLR iRout
MOV R6,#00H
MOV R6,#00H
ACALL Delay560uS
SETB iRout
CLR RepeatFlag
SETB EA
NaturalData:
JNB OutCodeFlag,MainLoop
;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
MOV A,INPUTDATA ;红外电源控制
CJNE A,#PowerCode,StartOutputNEC
MOV A,INPUTCustom
CJNE A,#InCustomData_DMA,StartOutputNEC
;TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan
; AJMP InputDataError ;康研台湾产品
; CLR Power ;2008年7月29日
; SJMP $
;TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan TaiWan
CPL Power
;......................................................
StartOutputNEC:
CLR EA
CLR iRout ;Output lead code
ACALL Delay9000uS
SETB iRout
;??????????????????????????????????????????????????????????
MOV A,INPUTCustom
; CJNE A,#InCustomData_TV,InputDataError
CJNE A,#InCustomData_DMA,InputDataError
; CJNE A,#nInCustomData,InputDataError
CustomDataRight:
;???????????????????????????????????????????????????????????
MOV A,INPUTDATA
MOV OUTPUTData,A
CPL A
; CJNE A,INPUTnDATA,InputDataError
MOV Bit0Counter,#00H
MOV Bit1Counter,#00H
MOV OUTPUTnData,A
MOV OUTPUTCustom,#DMA_Custom
MOV OUTPUTnCustom,#nDMA_Custom
ACALL Delay4500uS
MOV R1,#2BH
LoopNextByte:
MOV R6,#08H
CustomLoop:
CLR iRout
ACALL Delay560uS
SETB iRout
MOV A,@R1
RRC A
JNC Custom_High_0
Custom_High_1:
ACALL Delay1135uS ;1690uS-565uS=1135uS
INC Bit1Counter
Custom_High_0:
ACALL Delay565uS
MOV @R1,A
DJNZ R6,CustomLoop
INC R1
CJNE R1,#2FH,LoopNextByte
CLR iRout
ACALL Delay560uS
SETB iRout
CPL P3.7
;108/1.125=96
;96-44=52
/*
MOV A,#52
SUBB A,Bit1Counter
MOV R6,A
DyingDelay:
ACALL Delay1125uS
DJNZ R6,DyingDelay
CLR iRout
NOP
NOP
ACALL Delay9000uS
SETB iRout
ACALL Delay2250uS
CLR iRout
MOV R6,#00H
MOV R6,#00H
ACALL Delay560uS
SETB iRout
CLR RepeatFlag
*/
InputDataError:
CLR OutCodeFlag
SETB EA
AJMP MainLoop
;************************************************************************
Delay9000uS:
MOV DelayCounter0,#44
MOV DelayCounter0,#44
MOV DelayCounter0,#44
MOV DelayCounter0,#44
Delay9000:
MOV DelayCounter1,#100
DJNZ DelayCounter1,$
DJNZ DelayCounter0,Delay9000
RET
;------------------------------------------------
Delay4500uS:
MOV DelayCounter0,#22
Delay4500:
MOV DelayCounter1,#100
DJNZ DelayCounter1,$
DJNZ DelayCounter0,Delay4500
RET
;----------------------------------------------
Delay2250uS:
NOP
NOP
MOV DelayCounter0,#11
Delay2250:
MOV DelayCounter1,#100
DJNZ DelayCounter1,$
DJNZ DelayCounter0,Delay2250
RET
;------------------------------------------
Delay1135uS:
MOV DelayCounter1,#56
DJNZ DelayCounter1,$
DJNZ DelayCounter1,$
DJNZ DelayCounter1,$
RET
;------------------------------------------
Delay1125uS:
MOV DelayCounter1,#0
; DJNZ DelayCounter1,$
DJNZ DelayCounter1,$
DJNZ DelayCounter1,$
RET
;------------------------------------------
Delay565uS:
MOV DelayCounter1,#16
MOV DelayCounter1,#16
MOV DelayCounter1,#16
MOV DelayCounter1,#16
MOV DelayCounter1,#26
DJNZ DelayCounter1,$
DJNZ DelayCounter1,$
RET
;---------------------------------------------
Delay560uS:
MOV DelayCounter1,#100
DJNZ DelayCounter1,$
DJNZ DelayCounter1,$
RET
;-----------------------------------------------------------------------
INT_Int0:
PUSH ACC
JB noFirstEdgeFlag,noFirstEdge
TheFirstEdge:
MOV TH1,#0C9H
MOV TL1,#4FH
SETB TR1 ;Start smaple code
SETB TR0
SETB noFirstEdgeFlag
MOV TH0,#00H
MOV TL0,#00H
POP ACC
RETI
noFirstEdge:
JB CustomSmapleFlag,CustomSmapleDo
CLR TR1
MOV R4,TL1
MOV TL1,#0EEH ;这个基数是为了出现错误时恢复用的,利用T1的中断
;这个基数与开始为不同
MOV R5,TH1
MOV TH1,#0C9H
SETB TR1
; CLR TR0
CJNE R5,#0ECH,LeadError ;23+C9 ; 9000 = 2328H
NOP
CJNE R4,#0B0H,LeadLowGood ; 2300H < T1 Counter < 2350H Lead code is good
LeadLowGood:
JNC LeadError ; > 2350H Error
;????????????????????????????????????????????
; CJNE R4,#20H,LeadLowGoodxx
;LeadLowGoodxx:
; JC LeadError
;?????????????????????????????????????????????
NOP
MOV R4,TH0
CJNE R4,#11H,LeadError ; 4500 = 1194H
MOV R4,TL0
CJNE R4,#0C0H,LeadHighGood0 ;0E8 ; 1150H < T0 Counter < 11C8H lead code High good
LeadHighGood0:
JNC LeadError
;; CJNE R4,#20H,LeadHighGood1
;;LeadHighGood1:
;; JC LeadError
MOV TH0,#00H
MOV TL0,#00H
; SETB TR0
SETB CustomSmapleFlag
MOV R7,#08H
POP ACC
RETI
LeadError:
CLR TR1
CLR TR0
MOV TH1,#0C9H
MOV TL1,#4FH
MOV TH0,#00H
MOV TL0,#00H
CLR noFirstEdgeFlag
CLR CustomSmapleFlag
MOV R0,#27H
POP ACC
RETI
CustomSmapleDo:
CLR TR1
MOV R4,TL1
MOV TL1,#0EEH
MOV R5,TH1
MOV TH1,#0C9H
SETB TR1
CJNE R5,#0CEH,CycleBit1 ;04+C9 ; 1125 = 0465H
CycleBit0: ; 0410H < "0" < 04C9H
;; CJNE R4,#90H,Cyclemuch0
;;Cyclemuch0:
;; JNC LeadError ; > 04C9H Error
; CJNE R4,#5FH,Cyclemuch1
;Cyclemuch1:
; JC LeadError ; < 0410H Error
;???????????????????????????????????????????
; MOV R4,TH0 ; 0201H < "0" high < 0265H
; CJNE R4,#01H,LeadError ; the high <> 02FFH Error
; MOV R4,TL0
;; CJNE R4,#50H,Cyclemuch00
;;Cyclemuch00:
;; JNC LeadError ; the high >0235H Error
; CJNE R4,#0B0H,Cyclemuch11
;Cyclemuch11:
; JC LeadError ; < 0201H Error
;??????????????????????????????????????????
CLR C
WaitNextDataInput:
MOV A,@R0
RRC A
MOV @R0,A
MOV TH0,#00H
MOV TL0,#00H
DJNZ R7,WaitNextInt
MOV R7,#08H
CJNE R0,#29H,WaitNextInt1 ;由于时间不足只采集了3个字节
SETB OutCodeFlag
SJMP LeadError
WaitNextInt1:
INC R0
WaitNextInt:
POP ACC
RETI
CycleBit1:
CJNE R5,#0D2H,LeadError ;08+C9 ; 2250 = 08CAH
; CJNE R4,#04FH,Cyclemuch2 ; 086AH < "1" < 08FFH
;Cyclemuch2:
; JNC LeadError ; > 08FFH Error
;; CJNE R4,#04FH,Cyclemuch3
;;Cyclemuch3:
;; JC LeadError ; < 086AH Error
;?????????????????????????????????????????????
; MOV R4,TH0 ; 066AH < "1" high < 06CAH
; CJNE R4,#06H,LeadError ; <>06xx Error
; MOV R4,TL0
; CJNE R4,#090H,Cyclemuch22
;Cyclemuch22:
; JNC LeadError ; the high > 06CAH Error
; CJNE R4,#50H,Cyclemuch33
;Cyclemuch33:
; JC LeadError ; the high < 066AH Error
;???????????????????????????????????????????????
SETB C
SJMP WaitNextDataInput
;-----------------------------------------------------------------------
INT_T1:
CJNE R7,#07H,NotRepeatCode
SETB RepeatFlag
NotRepeatCode:
CLR TR1
CLR TR0
MOV TH1,#0C9H
MOV TL1,#4FH
MOV TH0,#00H
MOV TL0,#00H
CLR noFirstEdgeFlag
CLR CustomSmapleFlag
MOV R0,#27H
RETI
;------------------------------------------------------------------------
INT_T0:
CLR TR1
CLR TR0
MOV TH1,#0C9H
MOV TL1,#4FH
MOV TH0,#00H
MOV TL0,#00H
CLR noFirstEdgeFlag
CLR CustomSmapleFlag
MOV R0,#27H
RETI
;********************************** END *********************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -