📄 学习型电话网络远程控制器源程序.asm.txt
字号:
MOV TH1,A
CLR RS0
RET
;----------------------------------------------------------------------
;自动搜索
AUTO_SEARCH: MOV RDATA_PO,#00H ;清指针
CLR SE_STOP
SETB ON_OFF
MOV R1,#50
AUTO_DEL: LCALL DEL_20MS
DJNZ R1,AUTO_DEL
AU_SE0: CLR LED1
LCALL BZ_800
LCALL DM2
LCALL EMIT
SETB LED1
SETB GV_XSFLAG
MOV GV_XS,#3
AU_SE1: LCALL KEY_SE
JB SE_STOP,AU_SE5
JB GV_XSFLAG,AU_SE1
INC RDATA_PO
MOV R1,RDATA_PO
CJNE R1,#3,AU_SE0
MOV R1,#5
AU_SE4: LCALL BZ_800 ;失败一长声
DJNZ R1,AU_SE4
JMP AU_SE6
AU_SE5: LCALL BZ_MU ;成功声
AU_SE6: RET
;----------------------------------------------------------------------
;
KEY_SE: JB KEY_SEC,KEY_SE1
LCALL DEL_20MS
LCALL DEL_20MS
JB KEY_SEC,KEY_SE1
SETB SE_STOP
KEY_SE1: RET
;---------------------------------------------------------------
;空调遥控器代码读取
DM2: MOV A,RDATA_PO
MOV B,#64
MUL AB ;开信号地址
JB ON_OFF,DM21
ADD A,#32 ;关信号地址
DM21: MOV R0,A
MOV R1,#30H
MOV R2,#32 ;32字节
MOV DPTR,#TAB
DM22: MOV A,R0
MOVC A,@A+DPTR
MOV @R1,A
INC R0
INC R1
DJNZ R2,DM22
RET
TAB: DB 019H,055H,01EH,07AH,002H,0ABH,010H,00EH ;388ON
DB 005H,0D4H,01EH,0CEH,031H,000H,000H,000H
DB 0F7H,008H,0E1H,01EH,054H,0ABH,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 019H,055H,01EH,07AH,002H,0ABH,010H,00EH ;388OFF
DB 005H,0D4H,01EH,0CEH,031H,000H,000H,000H
DB 0F7H,008H,0F1H,00EH,054H,0ABH,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 00DH,030H,006H,0E0H,002H,03BH,004H,0B0H ;09ON
DB 001H,05DH,01EH,0D6H,071H,000H,000H,000H
DB 0C4H,0D3H,064H,080H,000H,024H,010H,0E0H
DB 000H,000H,000H,000H,000H,012H,000H,000H
DB 00DH,030H,006H,0E0H,002H,03BH,004H,0B0H ;09OFF
DB 001H,05DH,01EH,0D6H,071H,000H,000H,000H
DB 0C4H,0D3H,064H,080H,000H,004H,010H,0E0H
DB 000H,000H,000H,000H,000H,022H,000H,000H
DB 00DH,030H,006H,0E0H,002H,03BH,004H,0B0H ;2GJON
DB 001H,05DH,01EH,0D6H,071H,000H,000H,000H
DB 088H,088H,088H,088H,088H,024H,0C0H,060H
DB 038H,000H,000H,000H,000H,079H,000H,000H
DB 00DH,030H,006H,0E0H,002H,03BH,004H,0B0H ;2GJON
DB 001H,05DH,01EH,0D6H,071H,000H,000H,000H
DB 088H,088H,088H,088H,088H,004H,0C0H,060H
DB 038H,000H,000H,000H,000H,059H,000H,000H
;-------------------------------------------------------------------------
;发射子程序,数据放在20-3F
EMIT: SETB ES_END
CLR ES_END
MOV IE,#10001000B ;仅允许T1中断
MOV TMOD,#00010001B ;T1--16位定时方式
MOV TH1,#00H
MOV TL1,#00H
CLR TR1
MOV A,RDATA_HWL3 ;数据脉冲高电平宽度3不位0
JZ EMIT1
MOV A,RDATA_HWH3
JZ EMIT1
SETB ES_END ;特殊结束位标志
EMIT1: MOV A,#0FFH ;引导脉冲1
CLR C
SUBB A,RLEAD_LWH
MOV TH1,A
MOV A,#0FFH
CLR C
SUBB A,RLEAD_LWL
MOV TL1,A
SETB TR1
CLR TOF1
LCALL E38KHZ
CLR TR1
MOV A,#0FFH ;引导脉冲2
CLR C
SUBB A,RLEAD_HWH
MOV TH1,A
MOV A,#0FFH
CLR C
SUBB A,RLEAD_HWL
MOV TL1,A
SETB TR1
CLR TOF1
JNB TOF1,$
CLR TOF1
CLR TR1
EMIT2: MOV R0,#40H ;调数据位地址
MOV R7,RDATA_LCON
JNB ES_END,EMIT3
DEC R7 ;数据脉冲底电平计数放在R7
EMIT3: MOV R6,#8
EMIT4: MOV A,#0FFH ;数据脉冲底电平
CLR C
SUBB A,RDATA_LWH
MOV TH1,A
MOV A,#0FFH
CLR C
SUBB A,RDATA_LWL
MOV TL1,A
SETB TR1
CLR TOF1
LCALL E38KHZ
CLR TR1
CLR C
MOV A,@R0
RLC A
MOV @R0,A
JNC EMIT5
MOV A,#0FFH ;数据脉冲1高电平1
CLR C
SUBB A,RDATA_HWH1
MOV TH1,A
MOV A,#0FFH
CLR C
SUBB A,RDATA_HWL1
MOV TL1,A
SETB TR1
CLR TOF1
JNB TOF1,$
CLR TOF1
CLR TR1
JMP EMIT6
EMIT5: MOV A,#0FFH ;数据脉冲0高电平2
CLR C
SUBB A,RDATA_HWH2
MOV TH1,A
MOV A,#0FFH
CLR C
SUBB A,RDATA_HWL2
MOV TL1,A
SETB TR1
CLR TOF1
JNB TOF1,$
CLR TOF1
CLR TR1
EMIT6: DEC R7
MOV A,R7
JZ EMIT_END
DJNZ R6,EMIT4
INC R0
JMP EMIT3
EMIT_END: MOV A,#0FFH ;附加数据脉冲底电平1
CLR C
SUBB A,RDATA_LWH
MOV TH1,A
MOV A,#0FFH
CLR C
SUBB A,RDATA_LWL
MOV TL1,A
SETB TR1
CLR TOF1
LCALL E38KHZ
CLR TR1
JNB ES_END,EMIT_END1
MOV A,#0FFH ;发射特殊结束位
CLR C
SUBB A,RDATA_HWH3
MOV TH1,A
MOV A,#0FFH
CLR C
SUBB A,RDATA_HWL3
MOV TL1,A
SETB TR1
CLR TOF1
JNB TOF1,$
CLR TOF1
CLR TR1
MOV A,#0FFH ;附加数据脉冲底电平2
CLR C
SUBB A,RDATA_LWH
MOV TH1,A
MOV A,#0FFH
CLR C
SUBB A,RDATA_LWL
MOV TL1,A
SETB TR1
CLR TOF1
LCALL E38KHZ
CLR TR1
EMIT_END1: MOV IE,#0FFH
SETB RED_EMI
MOV R4,#30
EMIT_END2: LCALL DEL_20MS
DJNZ R4,EMIT_END2
LCALL BZ_800 ;BZ0.5秒
RET
;-----------------------------------------------------
;发射38KHZ调制脉冲
E38KHZ: CPL RED_EMI
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
JNB TOF1,E38KHZ
CLR TOF1
SETB RED_EMI
RET
;*********************************************************************************
;发送数据到2402子程序
STR_2402:
MOV BYTECNT,#8 ;发送8位数据
MOV SLAADR,#EEPROM ;数据地址
LCALL SENDDATA
JB F0,STR_OUT
STR_OUT: RET
;*********************************************************************************
;从2402接收数据子程序
RCV_2402:
MOV BYTECNT,#16 ;接收16位数据
MOV SLAADR,#EEPROM ;数据地址
LCALL RCVDATA
JB F0,RCV_OUT
RCV_OUT: RET
;*********************************************************************************
;发送数据到2402子程序
SENDDATA:
LCALL START ;起始位
MOV A,SLAADR ;2402器件地址
LCALL SENTBYTE
JB F0,SENDRETURN
MOV A,SUBADR ;2402字节地址
LCALL SENTBYTE
JB F0,SENDRETURN
MOV R0,XMTDAT
SENTNEXT:
MOV A,@R0
LCALL SENTBYTE ;发送一个字节
JB F0,SENDRETURN
INC R0
DJNZ BYTECNT,SENTNEXT
LCALL STOP ;停止位
DELAY10:
MOV R7,#30H ;延时10毫秒
D1:
MOV R6,#34H
D2:
DJNZ R6,D2
DJNZ R7,D1
SENDRETURN:
RET
;2***************************************
;从2402接收数据子程序
RCVDATA:
LCALL START ;起始位
MOV A,SLAADR ;2402器件地址
LCALL SENTBYTE
JB F0,RCVRETURN
MOV A,SUBADR ;2402字节地址
LCALL SENTBYTE
JB F0,RCVRETURN
LCALL START ;重发起始位
MOV A,SLAADR
SETB ACC.0 ;读信号
LCALL SENTBYTE
JB F0,RCVRETURN
CLR ACK
MOV R0,RCVDAT
DJNZ BYTECNT,RCVNEXT
SJMP RCVLAST
RCVNEXT:
LCALL RCVBYTE
MOV @R0,A
INC R0
DJNZ BYTECNT,RCVNEXT
RCVLAST:
SETB ACK ;设置应答位
LCALL RCVBYTE
MOV @R0,A
LCALL STOP
RCVRETURN:
RET
;3********************************************
;起始位
;3.1------------------------------------------
START:
SETB SDA
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
NOP
CLR SCL
RET
;3.2-------------------------------------------------------
;停止位
STOP:
CLR SDA
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
RET
;3.3------------------------------------------------------
;发送1个字节数据
SENTBYTE:
MOV BITCNT,#08H
SENTB:
RLC A
JC SENT1
CLR SDA
SJMP SENT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -