📄 发射.asm
字号:
MOV A,#11 ;*
LCALL SEND8880
MOV A,#3 ;3
LCALL SEND8880
MOV A,#12 ;#
LCALL SEND8880
MOV A,ADDR ;分机号码
LCALL SEND8880
MOV A,ADDR ;分机号码
LCALL SEND8880
MOV A,ADDR ;分机号码
LCALL SEND8880
CLR MODEM
CLR SOUND
RET
;****************************************
;初始化数据缓存单元
BEG3040H:
PUSH 07H
PUSH 00H
MOV R7,#32
MOV R0,#CZRDATA
MOV A,#99H
BEG30401H: MOV @R0,A
INC R0
DJNZ R7,BEG30401H
POP 00H
POP 07H
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;串口收
CKS: PUSH ACC
PUSH PSW
JNB RI,CKEND ;判断是否由接收引起的中断
MOV A,SBUF
MOV 17H,16H
MOV 16H,15H
MOV 15H,14H
MOV 14H,13H
MOV 13H,12H
MOV 12H,11H
MOV 11H,A
MOV A,17H
CJNE A,#'A',CKEND
MOV A,16H
CJNE A,#'T',CKEND
MOV A,15H
CJNE A,#'&',CKEND
MOV A,14H
CJNE A,#'T',CKEND
MOV A,13H
CJNE A,#'0',CKEND
MOV A,11H
ANL A,#0FH
MOV 11H,A
MOV A,12H
CJNE A,#'1',CKEND1
MOV ADDR,11H
CLR ES ;收到准备发数据信号,关串口
CLR SOUND ;发双音到收关闭接收的声音输出
LCALL SENDSJ ;通知对方准备接收数据
SETB MODEM
SETB ES
CKEND: CLR RI
POP PSW
POP ACC
RETI
CKEND1: CJNE A,#'2',CKEND2 ;数据发完信号
MOV ADDR,11H
CLR ES ;收到数据发完信号
CLR SOUND ;关闭声音,数据
CLR MODEM
LCALL SENDSJ_END
SETB ES
AJMP CKEND
CKEND2: CJNE A,#'3',CKEND3 ;收到准备发声音信号
MOV ADDR,11H
CLR ES ;收到发语音信号
CLR SOUND ;发双音到收打开接收的声音输出
CLR MODEM
LCALL SENDYY
SETB SOUND
CLR MODEM
SETB ES
AJMP CKEND
CKEND3: CJNE A,#'4',CKEND
MOV ADDR,11H
CLR SOUND ;收到声音发完信号
CLR MODEM
LCALL SENDYY_END ; 关闭声音,数据
AJMP CKEND
CRAB: MOV P0,#01011000B ;写CRA
SETB P0.7
CLR P0.7
MOV P0,#01010001B ;写CRB 双音模式
SETB P0.7
CLR P0.7
RET
;写TDR为“7”输出
MOV P0,#00010111B
SETB P0.7
CLR P0.7
;***********************************
;将A中内容通过8880发送出去
SEND8880: ADD A,#10H
MOV P0,A ;发
SETB P0.7
CLR P0.7
ACALL FSY ;发双音
ACALL TFSY ;停发双音
ACALL D20MS
RET
;*************************************
FSY: MOV P0,#01010001B ;发双音50MS
SETB P0.7
CLR P0.7
ACALL D50MS
RET
;*************************************
TFSY: MOV P0,#01010000B ;双音停发
SETB P0.7
CLR P0.7
RET
;************************************
D100MS: MOV TIMER2,#200 ;1MS
D100MS1:MOV TIMER1,#228 ;0.5MS
DJNZ TIMER1,$
DJNZ TIMER2,D100MS1
RET
;************************************
D50MS: MOV TIMER2,#82 ;1MS
D50MS1: MOV TIMER1,#228 ;0.5MS
DJNZ TIMER1,$
DJNZ TIMER2,D50MS1
RET
;************************************
D20MS: MOV TIMER2,#40 ;1MS
D20MS1: MOV TIMER1,#228 ;0.5MS
DJNZ TIMER1,$
DJNZ TIMER2,D20MS1
RET
;************************************
D1MS: MOV TIMER2,#2 ;1MS
D1MS1: MOV TIMER1,#228 ;0.5MS
DJNZ TIMER1,$
DJNZ TIMER2,D1MS1
RET
;************************************
D1S: MOV TIMER3,#100 ;1S
D1S1: MOV TIMER2,#20 ;10MS
D1S2: MOV TIMER1,#229 ;0.5MS
DJNZ TIMER1,$
DJNZ TIMER2,D1S2
DJNZ TIMER3,D1S1
RET
;***********************************************
;高7位显示子程序,将缓冲区5BH-5FH中的内容显示出来
LCDXSH: PUSH ACC
MOV A,#0C2H ;写第11个字符
MOV P1,A
LCALL WAIT
MOV A,#20H ;写空格
MOV P1,A
LCALL DISP
;写第12个字符
MOV A,5BH
MOV P1,A
LCALL DISP
;写第13个字符
MOV A,5CH
MOV P1,A
LCALL DISP
;写第14个字符
MOV A,5DH
MOV P1,A
LCALL DISP
;写第15个字符
MOV A,5EH
MOV P1,A
LCALL DISP
;写第16个字符
MOV A,5FH
MOV P1,A
LCALL DISP
POP ACC
RET
;***********************************************
;低10位显示子程序,将缓冲区50H-59H中的内容显示出来
LCDXSL: PUSH ACC
LCALL CLEARL ;清显示屏低10位
MOV A,#80H ;写1-8字符
MOV P1,A
LCALL WAIT
MOV R0,#50H
MOV R7,#8
LCDXSL1:
MOV A,@R0
CJNE A,#99H,LCDXSL2
AJMP LCDXSL3
LCDXSL2: MOV P1,A
LCALL DISP
INC R0
DJNZ R7,LCDXSL1
MOV A,#0C0H ;写第9个字符
MOV P1,A
LCALL WAIT
MOV A,58H
CJNE A,#99H,LCDXSL21
AJMP LCDXSL3
LCDXSL21: MOV P1,A
LCALL DISP
MOV A,59H
CJNE A,#99H,LCDXSL22
AJMP LCDXSL3
LCDXSL22: MOV P1,A
LCALL DISP
LCDXSL3: POP ACC
RET
;***********************************************
;清显示屏高7位子程序
CLEARH: PUSH ACC
MOV A,#0C2H ;写第11个字符
MOV P1,A
LCALL WAIT
MOV A,#20H ;写空格
MOV P1,A
LCALL DISP
LCALL DISP
LCALL DISP
LCALL DISP
LCALL DISP
LCALL DISP
POP ACC
RET
;***********************************************
;清显示屏低10位子程序
CLEARL:
MOV A,#80H ;
MOV P1,A
LCALL WAIT
MOV A,#20H
MOV R7,#8
CLEAR1: MOV P1,A
LCALL DISP
DJNZ R7,CLEAR1
MOV A,#0C0H ;
MOV P1,A
LCALL WAIT
MOV A,#20H
MOV P1,A
LCALL DISP
LCALL DISP
RET
;LCD初始化**********************************************************
LCDREST: LCALL D100MS
MOV P1,#38H
CLR RS
CLR RW
MOV R2,#3
LCDREST1: SETB E
CLR E
LCALL D1MS
DJNZ R2,LCDREST1
MOV A,#38H ;功能设置:8位数据,2行
ACALL WAIT
MOV A,#06H ;输入增量设置:AC自动加1
ACALL WAIT
MOV A,#0EH ;显示方式:显示光标,开显示,不闪烁
ACALL WAIT
RET
;*************************************
WAIT: LCALL BF ;判忙
CLR RS
CLR RW
SETB E
MOV P1,A ;将指令传至P1口
LCALL DELAY2MS
CLR E
NOP
RET
DISP: LCALL BF
SETB RS
CLR RW
SETB E
MOV P1,A ;将数据传至P1
LCALL DELAY2MS
CLR E
RET
BF: PUSH ACC
BF1: CLR RS ;读P1口上的忙/闲状态
SETB RW
SETB E
NOP
MOV A,P1
NOP
NOP
CLR E
JB ACC.7,BF1
POP ACC
RET
;***************************
DELAY2MS: Push 07h
Mov 07h,#7fh
Delay2ms1: Nop
Djnz 07h,Delay2ms1
Pop 07h
Ret
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -