📄 学习型电话网络远程控制器源程序.asm.txt
字号:
;定时器T1中断服务子程序
INT_T1: SETB TOF1
RETI
;**************************************************************************
;按键处理子程序
KEY_IN: CLR EX0
MOV C,KEY_ON
JNC KEY_ON1 ;有按键按下为低电平
MOV C,KEY_OFF
JNC KEY_OFF1
MOV C,KEY_SEC
JNC KEY_SEC1
JMP KEY_BACK ;无键按下返回
KEY_ON1: MOV R1,#5
KEY_ON10: LCALL DEL_20MS
DJNZ R1,KEY_ON10
MOV C,KEY_ON
JC KEY_BACK ;延时100MS去抖动
SETB GV_XSFLAG
MOV GV_XS,#3
KEY_ON2: MOV C,KEY_ON
JC KEY_1 ;<3S为K1
LCALL DEL_20MS
MOV C,GV_XSFLAG
JNC KEY_3 ;>3S为K3
AJMP KEY_ON2
KEY_OFF1: MOV R1,#5
KEY_OFF10: LCALL DEL_20MS
DJNZ R1,KEY_OFF10
MOV C,KEY_OFF
JC KEY_BACK
SETB GV_XSFLAG
MOV GV_XS,#3
KEY_OFF2: MOV C,KEY_OFF
JC KEY_2 ;<3S为K2
LCALL DEL_20MS
MOV C,GV_XSFLAG
JNC KEY_4 ;>3S为K4
AJMP KEY_OFF2
KEY_SEC1: MOV R1,#150
KEY_SEC10: LCALL DEL_20MS
DJNZ R1,KEY_SEC10
MOV C,KEY_SEC
JC KEY_BACK
JNC KEY_5
KEY_BACK: CLR GV_XSFLAG
SETB EX0
RET
;*************************************************************************
;按键执行子程序
KEY_1: CLR GV_XSFLAG
LCALL KEY_10
RET
KEY_2: CLR GV_XSFLAG
LCALL KEY_20
RET
KEY_3: LCALL KEY_30
RET
KEY_4: LCALL KEY_40
RET
KEY_5: LCALL KEY_50
RET
;-------------------------------------------------------------------------
;发射开关信号
KEY_10: CLR LED1
LCALL BZ_800 ;BZ0.5秒
MOV R1,RDATA_PO
CJNE R1,#3,KEY_11
MOV RCVDAT,#30H
MOV SUBADR,#20H ;RCV BUFFER ADR 20H
LCALL RCV_2402 ;从2402接收数据
LCALL DEL_20MS
MOV RCVDAT,#40H
MOV SUBADR,#30H ;RCV BUFFER ADR 20H
CALL RCV_2402 ;从2402接收数据
LCALL DEL_20MS
MOV A,RDATA_LCON ;数据脉冲高电平计数为0退出
JZ KEY_13
JMP KEY_12
KEY_11: SETB ON_OFF ;取当前开机数据
LCALL DM2
KEY_12: LCALL EMIT
KEY_13: SETB LED1
RET
KEY_20: CLR LED1
LCALL BZ_800 ;BZ0.5秒
MOV R1,RDATA_PO
CJNE R1,#3,KEY_21
MOV RCVDAT,#30H
MOV SUBADR,#40H ;RCV BUFFER ADR 20H
LCALL RCV_2402 ;从2402接收数据
LCALL DEL_20MS
MOV RCVDAT,#40H
MOV SUBADR,#50H ;RCV BUFFER ADR 20H
CALL RCV_2402 ;从2402接收数据
LCALL DEL_20MS
MOV A,RDATA_LCON ;数据脉冲高电平计数为0退出
JZ KEY_23
JMP KEY_22
KEY_21: CLR ON_OFF ;取当前关机数据
LCALL DM2
KEY_22: LCALL EMIT
KEY_23: SETB LED1
RET
;-------------------------------------------------------------------------
;学习开关信号
KEY_30: SETB PIK_HANG
CLR P3.4
CLR LED1
LCALL BZ_800 ;长鸣2S
LCALL BZ_800
LCALL BZ_800
LCALL BZ_800
CLR STUDY_OK
SETB GV_XSFLAG
MOV GV_XS,#5
KEY_31: JNB RED_REC,KEY_32 ;有信号学习
MOV C,GV_XSFLAG
JC KEY_31
LCALL BZ_800 ;5S内无信号退出
LCALL BZ_800 ;BZ一秒
JMP KEY_3BACK
KEY_32: LCALL STUDY
JNB STUDY_OK,KEY_3BACK
MOV SUBADR,#20H ;2402 BYTE ADR 20H
MOV XMTDAT,#30H
LCALL STR_2402 ;发送数据到2402
LCALL DEL_20MS
MOV SUBADR,#28H
MOV XMTDAT,#38H
LCALL STR_2402 ;发送数据到2402
LCALL DEL_20MS
MOV SUBADR,#30H
MOV XMTDAT,#40H
LCALL STR_2402 ;发送数据到2402
LCALL DEL_20MS
MOV SUBADR,#38H
MOV XMTDAT,#48H
LCALL STR_2402 ;发送数据到2402
LCALL DEL_20MS
KEY_3BACK: CLR PIK_HANG
SETB P3.4
SETB LED1
RET
KEY_40: SETB PIK_HANG
CLR P3.4
CLR LED1
LCALL BZ_800 ;长鸣2S
LCALL BZ_800
LCALL BZ_800
LCALL BZ_800
CLR STUDY_OK
SETB GV_XSFLAG
MOV GV_XS,#5
KEY_41: JNB RED_REC,KEY_42 ;有信号学习
MOV C,GV_XSFLAG
JC KEY_41
LCALL BZ_800 ;5S内无信号退出
LCALL BZ_800 ;BZ一秒
JMP KEY_4BACK
KEY_42: LCALL STUDY
JNB STUDY_OK,KEY_4BACK
MOV SUBADR,#40H ;2402 BYTE ADR 20H
MOV XMTDAT,#30H
LCALL STR_2402 ;发送数据到2402
LCALL DEL_20MS
MOV SUBADR,#48H
MOV XMTDAT,#38H
LCALL STR_2402 ;发送数据到2402
LCALL DEL_20MS
MOV SUBADR,#50H
MOV XMTDAT,#40H
LCALL STR_2402 ;发送数据到2402
LCALL DEL_20MS
MOV SUBADR,#58H
MOV XMTDAT,#48H
LCALL STR_2402 ;发送数据到2402
LCALL DEL_20MS
KEY_4BACK: CLR PIK_HANG
SETB P3.4
SETB LED1
RET
;-------------------------------------------------------------------------
;自动搜索
KEY_50: MOV R1,#5
KEY_51: LCALL BZ_800 ;一长声
DJNZ R1,KEY_51
LCALL AUTO_SEARCH
RET
;----------------------------------------------------------------------
;学习子程序
STUDY: MOV RDATA_HWH1,#00H
MOV RDATA_HWL1,#00H
MOV RDATA_HWH2,#00H
MOV RDATA_HWL2,#00H
MOV RDATA_HWH3,#00H
MOV RDATA_HWL3,#00H
CLR ET0
CLR STUDY_OK ;清学习成功标志
MOV TMOD,#00010001B
MOV TH1,#00H
MOV TL1,#00H
SETB TR1
MOV R2,#30
STUDY1: MOV R1,#250
STUDY2: JB RED_REC,STUDY3 ;高电平转下一步
DJNZ R1,STUDY2
DJNZ R2,STUDY1
JMP STUDY_BACK1 ;超过30MS错误退出
STUDY3: CLR TR1
LCALL BC2
MOV RLEAD_LWH,TH1 ;存引导脉冲低电平宽度
MOV RLEAD_LWL,TL1
MOV TH1,#00H
MOV TL1,#00H
SETB TR1
MOV R2,#30
STUDY4: MOV R1,#250
STUDY5: JNB RED_REC,STUDY6 ;低电平转下一步
DJNZ R1,STUDY5
DJNZ R2,STUDY4
JMP STUDY_BACK1 ;超过30MS错误退出
STUDY6: CLR TR1
LCALL BC1
MOV RLEAD_HWH,TH1 ;存引导脉冲高电平宽度
MOV RLEAD_HWL,TL1
MOV RDATA_LCON,#00H ;数据位计数
MOV R0,#40H ;8个数据位,从2F--36H
STUDY7: MOV R5,#08H ;输入数据
STUDY8: MOV TH1,#00H
MOV TL1,#00H
SETB TR1
MOV R2,#10
STUDY9: MOV R1,#250
STUDY10: JB RED_REC,STUDY11 ;高电平转下一步
DJNZ R1,STUDY10
DJNZ R3,STUDY9
JMP STUDY_BACK1 ;超过10MS错误退出
STUDY11: CLR TR1
LCALL BC2
MOV RDATA_LWH,TH1 ;存数据脉冲第低电平宽度
MOV RDATA_LWL,TL1
MOV TH1,#00H
MOV TL1,#00H
SETB TR1
MOV R2,#10
STUDY12: MOV R1,#250
STUDY13: JNB RED_REC,STUDY14 ;低电平转下一步
DJNZ R1,STUDY13
DJNZ R2,STUDY12
JMP STUDY_BACK2 ;超10ms过正确退出
STUDY14: CLR TR1
LCALL BC1
MOV A,RDATA_HWL1
JZ STUDY15 ;第1位低位宽度为0,不比较直接存储宽度
MOV A,TH1
CJNE A,RDATA_HWH1,STUDY16 ;与第一次存储高位宽度比较,不等则另行存储
;只比较高字节
STUDY15: MOV RDATA_HWH1,TH1
MOV RDATA_HWL1,TL1 ;记做1
SETB C
JMP STUDY19
STUDY16: MOV A,RDATA_HWL2 ;第2位低位宽度为0,不比较直接存储宽度
JZ STUDY17
MOV A,TH1
CJNE A,RDATA_HWH2,STUDY18 ;与第一次存储高位宽度比较,不等则另行存储
STUDY17: MOV RDATA_HWH2,TH1
MOV RDATA_HWL2,TL1 ;记做0
CLR C
JMP STUDY19
STUDY18: MOV RDATA_HWH3,TH1
MOV RDATA_HWL3,TL1
CLR C
STUDY19: MOV A,@R0
RLC A ;低位在前
MOV @R0,A
INC RDATA_LCON
DJNZ R5,STUDY8
INC R0
JMP STUDY7
STUDY_BACK1: MOV R3,#3
STUDY_B11: ACALL BZ_800 ;学习失败,3声短促音
MOV R4,#30
STUDY_B12: LCALL DEL_20MS
DJNZ R4,STUDY_B12
DJNZ R3,STUDY_B11
CLR GV_XSFLAG
SETB ET0
JMP STUDY_B23
STUDY_BACK2: MOV A,R5 ;R5不为0对齐数据
JZ STUDY_B22
STUDY_B21: MOV A,R4
MOV R0,A
MOV A,@R0
RLC A
MOV @R0,A
DJNZ R5,STUDY_B21
STUDY_B22: LCALL BZ_MU ;学习成功,5声短低音
CLR GV_XSFLAG
SETB STUDY_OK ;置学习成功标志
SETB ET0
STUDY_B23: RET
;----------------------------------------------------------------------
;补偿+145US
BC1: MOV A,TL1
CLR C
ADDC A,#140
MOV TL1,A
CLR A
RLC A
ADD A,TH1
MOV TH1,A
RET
;----------------------------------------------------------------------
;补偿-75US
BC2: SETB RS0
MOV A,TL1
CLR C
SUBB A,#70
MOV TL1,A
CLR A
RLC A
MOV R0,A
MOV A,TH1
SUBB A,R0
MOV TH1,A
CLR RS0
RET
;----------------------------------------------------------------------
;补偿-10US
BC3: SETB RS0
MOV A,TL1
CLR C
SUBB A,#120
MOV TL1,A
CLR A
RLC A
MOV R0,A
MOV A,TH1
SUBB A,R0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -