📄 遥控解调器程序.asm
字号:
P_IR DATA 60H
State DATA 61H
Search DATA 62H
NCheck DATA 63H
TIME_N DATA 64H
SubA DATA 65H
ADB DATA 66H
DB1 DATA 67H
DB2 DATA 68H
CB DATA 69H
PB DATA 6AH
STB DATA 6BH
Temp DATA 6CH
MIR EQU 70H
scl equ p3.0
sda equ p3.1
IR EQU P3.3
FI1256 EQU 0C0H
AT24C02 EQU 0A0H
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP TIME
ORG 0013H
AJMP INT
ORG 0030H
MAIN: MOV R4,#0F0H
DJNZ R4,$
ACALL INIF
SETB IT1
SETB EX1
SETB EA
loop: MOV A,P_IR
JZ loop
ACALL YKDATA
AJMP loop
YKDATA: CLR EX1
ZT0: MOV A,#00H
CJNE A,State,ZT1
MOV A,MIR
JNZ NFZ
MOV R0,#MIR
MOV R2,#01H
ACALL MOVE
ACALL display
AJMP EX
NFZ: CLR C
MOV A,P_IR
SUBB A,#06H
JC ZTEX0
ACALL display
MOV R3,#08H
MOV DPTR,#TAB
ZT0_LOOP:MOV A,R3
DEC A
MOV B,#06H
MUL AB
MOV R1,A
MOV R2,#06H
ACALL COMP
JZ ZT0_0
DJNZ R3,ZT0_LOOP
AJMP ZT0_1
ZT0_0:MOV A,R3
MOV B,#08H
MUL AB
MOV SUBA,A
MOV A,#7FH
ZTA:RL A
DJNZ R3,ZTA
MOV P1,A
MOV State,#01H
CLR P3.7
ZT0_1: MOV R0,#MIR
MOV R2,#06H
ACALL MOVE
ZTEX0: AJMP EX
ZT1: MOV A,#01H
CJNE A,State,ZTExit
CLR C
MOV A,P_IR
SUBB A,#05H
JC ZTEX1
MOV DPTR,#TabExit
MOV R1,#00H
MOV R2,#05H
ACALL COMP
JZ ZTExit
MOV DPTR,#TabUp
MOV R1,#00H
MOV R2,#05H
ACALL COMP
MOV Search,#01H
JZ ZT2
MOV DPTR,#TabDown
MOV R1,#00H
MOV R2,#05H
ACALL COMP
MOV Search,#00H
JZ ZT2
ZT1_1: MOV Adb,#0C0H
MOV CB,#88H
ACALL BHML
JNZ ZT1_2
MOV R1,#DB1
MOV R2,#04H
MOV A,#FI1256
ACALL Write
ACALL YS10MS
MOV R1,#SUBA
MOV R2,#06H
MOV A,#AT24C02
ACALL Write
ZT1_2:ACALL display
MOV R0,#MIR
MOV R2,#05H
ACALL MOVE
ZTEX1:AJMP EX
ZT2: ACALL display
MOV TIME_N,#05H
MOV TMOD,#01H
MOV TL0,#0B0H
MOV TH0,#3CH
SETB TR0
SETB ET0
ACALL AUTO
CLR TR0
CLR ET0
CLR P3.7
MOV R0,#MIR
MOV R2,#05H
ACALL MOVE
AJMP EX
ZTExit:MOV P1,#0FFH
MOV P_IR,#00H
MOV State,#00H
SETB P3.7
AJMP EX
EX: SETB EX1
RET
INIF: MOV P_IR,#00H
MOV State,#00H
MOV P1,#0FFH
MOV P3,#0FFH
MOV NCheck,#00H
MOV R4,#08H
INIF0: MOV A,R4
MOV B,#08H
MUL AB
MOV SUBA,A
MOV R1,#SUBA
MOV R2,#01H
MOV A,#AT24C02
ACALL Write
MOV R1,#Adb
MOV R2,#05H
MOV A,#AT24C02
ACALL READ
ACALL YS10MS
JZ AAA
ACALL DISPLAY
INC NCheck
AAA: MOV A,R4
MOV R3,A
MOV A,#7FH
INIF1:RL A
DJNZ R3,INIF1
MOV P1,A
MOV R1,#DB1
MOV R2,#04H
MOV A,#FI1256
ACALL Write
ACALL YS10MS
JZ BBB
ACALL DISPLAY
INC NCheck
BBB: DJNZ R4,INIF0
MOV P1,#0FFH
MOV A,NCheck
CJNE A,#00H,CCC
CPL P3.7
MOV R6,#255
D6:MOV R7,#255
DJNZ R7,$
DJNZ R6,D6
CPL P3.7
CCC: RET
display:CPL P3.7
MOV R6,#255
MOV R7,#255
DJNZ R7,$
DJNZ R6,D6
CPL P3.7
RET
AUTO: MOV R1,#SUBA
MOV R2,#01H
MOV A,#AT24C02
ACALL Write
MOV R1,#Adb
MOV R2,#05H
MOV A,#AT24C02
ACALL READ
fine1: MOV A,Search
CJNE A,#00H,FADD
CLR C
MOV A,DB2
SUBB A,#01H
MOV DB2,A
MOV A,DB1
SUBB A,#00H
MOV DB1,A
AJMP FOK
FADD: MOV A,DB2
ADD A,#01H
MOV DB2,A
MOV A,DB1
ADDC A,#00H
MOV DB1,A
FOK: ACALL Band
JNZ Fine3
ACALL YS10MS
MOV R1,#DB1
MOV R2,#04H
MOV A,#FI1256
ACALL Write
ACALL YS10MS
MOV R1,#STB
MOV R2,#01H
MOV A,#FI1256
ACALL Read
MOV A,STB
ANL A,#07H
CJNE A,#02,fine1
ACALL IsTure
JNZ fine1
Fine2: MOV R1,#SUBA
MOV R2,#06H
MOV A,#AT24C02
ACALL Write
Fine3:RET
IsTure: MOV R4,DB1
MOV R5,DB2
CLR C
MOV A,DB2
SUBB A,#02H
MOV DB2,A
MOV A,DB1
SUBB A,#00H
MOV DB1,A
ACALL YS10MS
MOV R1,#DB1
MOV R2,#03H
MOV A,#FI1256
ACALL Write
ACALL YS10MS
MOV R1,#STB
MOV R2,#01H
MOV A,#FI1256
ACALL Read
MOV DB1,R4
MOV DB2,R5
ACALL YS10MS
MOV R1,#DB1
MOV R2,#02H
MOV A,#FI1256
ACALL Write
MOV A,STB
ANL A,#07H
SUBB A,#03H
JNC IsOK
MOV A,#01H
RET
IsOK: MOV A,#00H
RET
COMP: MOV R0,#MIR
COMP1: MOV A,R1
MOVC A,@A+DPTR
XRL A,@R0
JNZ CEXIT
INC R0
INC R1
DJNZ R2,COMP1
CEXIT: RET
MOVE: MOV A,R2
MOV R3,A
ADD A,R0
MOV R1,A
MOV A,#16
CLR C
SUBB A,R2
MOV R2,A
M1: MOV A,@R1
MOV @R0,A
INC R0
INC R1
DJNZ R2,M1
MOV A,P_IR
SUBB A,R3
MOV P_IR,A
RET
BHML: MOV R0,#MIR
MOV A,@R0
MOV B,#100
MUL AB
MOV DB2,A
MOV DB1,B
INC R0
MOV A,@R0
MOV B,#10
MUL AB
ADD A,DB2
MOV DB2,A
MOV A,B
ADDC A,DB1
MOV DB1,A
INC R0
MOV A,@R0
ADD A,DB2
MOV DB2,A
MOV A,#0
ADDC A,DB1
MOV DB1,A
MOV A,#20
MOV B,DB2
MUL AB
MOV DB2,A
MOV R1,B
MOV A,#20
MOV B,DB1
MUL AB
ADD A,R1
MOV DB1,A
MOV A,#0AH
ADD A,DB2
MOV DB2,A
MOV A,#03H
ADDC A,DB1
MOV DB1,A
INC R0
MOV A,@R0
RL A
RL A
RL A
RL A
INC R0
XCHD A,@R0
BHD: MOV R2,#8
BHD0: ADD A,ACC
DA A
XCH A,R3
RLC A
XCH A,R3
DJNZ R2,BHD0
ADD A,#0B0H
JNC BHD1
INC R3
BHD1: MOV A,R3
MOV B,#20
MUL AB
MOV A,B
ADD A,DB2
MOV DB2,A
MOV A,#00
ADDC A,DB1
MOV DB1,A
ACALL Band
RET
Band: CLR C
MOV A,DB2
SUBB A,#8AH
MOV A,DB1
SUBB A,#46H
JC BH
AJMP BFH
BH: CLR C
MOV A,DB2
SUBB A,#32H
MOV A,DB1
SUBB A,#26H
JC BM
MOV PB,#30H
AJMP BOK
BM: CLR C
MOV A,DB2
SUBB A,#52H
MOV A,DB1
SUBB A,#10H
JC BL
MOV PB,#90H
AJMP BOK
BL: CLR C
MOV A,DB2
SUBB A,#0CAH
MOV A,DB1
SUBB A,#06H
JC BFL
MOV PB,#0A0H
BOK: MOV A,#00H
RET
BFH: MOV A,#02H
RET
BFL: MOV A,#01H
RET
TAB: DB 05H,05H,07H,08H,00h,01h
DB 05H,05H,07H,08H,00h,02h
DB 05H,05H,07H,08H,00h,03h
DB 05H,05H,07H,08H,00h,04h
DB 05H,05H,07H,08H,00h,05h
DB 05H,05H,07H,08H,00h,06h
DB 05H,05H,07H,08H,00h,07h
DB 05H,05H,07H,08H,00h,08h
TabExit: DB 00H,00H,00H,00H,00H,00H
TabDown: DB 08H,08H,08H,08H,08H,08H
TabUp: DB 09H,09H,09H,09H,09H,09H
TIME: MOV TL0,#0B0H
MOV TH0,#3CH
DJNZ TIME_N,T_LOOP
MOV TIME_N,#05H
CPL P3.7
T_LOOP: RETI
INT: CLR EA
PUSH ACC
PUSH 00H
PUSH 01H
PUSH 02H
PUSH 03H
PUSH 04H
PUSH 05H
MOV R4,#10
SB: ACALL YS882
JB IR,EXIT
DJNZ R4, SB
JNB IR, $
ACALL YS4740
MOV R1,#Temp
MOV R2,#4
PP: MOV R3,#8
JJJJ: JNB IR,$
LCALL YS882
MOV C,IR
JNC UUU
LCALL YS1000
UUU: MOV A,@R1
RRC A
MOV @R1,A
DJNZ R3,JJJJ
INC R1
DJNZ R2,PP
MOV R1,#Temp
INC R1
INC R1
MOV A, @R1
MOV R2,A
CPL A
INC R1
XRL A,@R1
JNZ EXIT
MOV A,P_IR
XRL A,#0Fh
JZ EXIT
SAVE: MOV A,R2
CLR C
SUBB A,#10
JNC EXIT
MOV A,#MIR
ADD A,P_IR
MOV R1,A
MOV A,R2
MOV @R1, A
INC P_IR
CPL P3.7
ACALL YS1S
CPL P3.7
EXIT:
POP 05H
POP 04H
POP 03H
POP 02H
POP 01H
POP 00H
POP ACC
SETB EA
RETI
YS882: MOV R6,#2
D1: MOV R7,#133
DJNZ R7,$
DJNZ R6,D1
RET
YS4740: MOV R6,#30
D2: MOV R7,#52
DJNZ R7,$
DJNZ R6,D2
RET
YS1000: MOV R6,#2
D3:MOV R7,#165
DJNZ R7,$
DJNZ R6,D3
RET
YS10ms:MOV R6,#20
D4: MOV R7,#165
DJNZ R7,$
DJNZ R6,D4
RET
YS1S: MOV R6,#200
D5:MOV R7,#100
DJNZ R7,$
DJNZ R6,D5
RET
Write: ACALL START
ACALL SEND
JC Write1
Write0: MOV A,@R1
ACALL SEND
JC Write1
INC R1
DJNZ R2,Write0
MOV A,#00H
AJMP Write2
Write1: MOV A,#01H
Write2: ACALL STOP
RET ;
READ: ACALL START
INC A
ACALL SEND
JC Read1;
Read0: ACALL REV
MOV @R1,A
INC R1
DJNZ R2,READ0
MOV A,#00H
AJMP Read2
Read1: MOV A,#01H
Read2: ACALL STOP
RET
START: setb sda
ACALL DELAY
setb scl
ACALL DELAY
clr sda
ACALL DELAY
clr scl
ACALL DELAY
ret
STOP: clr sda
ACALL DELAY
setb scl
ACALL DELAY
setb sda
ACALL DELAY
ret
Send: mov r0,#08h
Send0: rlc a
mov sda,c
ACALL DELAY
setb scl
ACALL DELAY
clr scl
ACALL DELAY
djnz r0,Send0
setb sda
ACALL DELAY
setb scl
ACALL DELAY
MOV C,SDA
clr scl
ACALL DELAY
RET
REV: MOV R0,#08H
REV0: SETB SDA
ACALL DELAY
SETB SCL
ACALL DELAY
MOV C,SDA
RLC A
CLR SCL
ACALL DELAY
DJNZ R0,REV0
CJNE R2,#01H,REV1
SETB SDA
ACALL DELAY
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
RET
REV1: CLR SDA
ACALL DELAY
SETB SCL
ACALL DELAY
CLR SCL
ACALL DELAY
RET
DELAY: NOP
NOP
NOP
NOP
RET
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -