📄 t13f.asm
字号:
NAME T13F ;双机通讯实验(发送程序)
CSEG AT 0000H
LJMP START
CSEG AT 4100H
PORT EQU 0CFE8H
START: MOV DPTR,#PORT+1 ;8279命令字
MOV A,#0D1H ;清除
MOVX @DPTR,A
WAIT: MOVX A,@DPTR
JB ACC.7,WAIT ;等待清除完毕
MOV TMOD,#20H
MOV TH1,#0F2H
MOV TL1,#0F2H
SETB TR1
MOV SCON,#50H
MOV 87H,#80H
MOV 50H,#00H
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
MOV 55H,#00H
LOOP1: MOVX A,@DPTR
ANL A,#0FH
JZ LOOP1 ;有键按下?
MOV A,#0A0H ;显示消隐命令
MOVX @DPTR,A
MOV DPTR,#PORT ;读键值
MOVX A,@DPTR
ANL A,#3FH
MOV R7,A ;状态保存
MOV 50H,51H
MOV 51H,52H
MOV 52H,53H
MOV 53H,54H
MOV 54H,55H
LOP: MOV A,R7
MOV DPTR,#TAB1
MOVC A,@A+DPTR ;查取数字键的字型码
MOV 55H,A
mov 40h,a
SUBB A,#80H
JZ ERROR ;非数字键则跳转
ACALL DISP
SJMP TXACK
DISP: MOV DPTR,#PORT+1
MOV A,#90H
MOVX @DPTR,A
MOV R6,#06H
MOV R1,#50H
MOV DPTR,#PORT
DL0: MOV A,@R1
MOVX @DPTR,A
INC R1
DJNZ R6,DL0
RET
TXACK: MOV A,#06H ;发呼叫信号"06"
MOV SBUF,A
WAIT1: JBC TI,RXYES ;等待发送完一个字节
SJMP WAIT1
RXYES: JBC RI,NEXT1 ;等待乙机回答
SJMP RXYES
NEXT1: MOV A,SBUF ;判断乙机是否同意接收,不同意继续呼叫
CJNE A,#00H,TXACK
MOV A,40H
MOV SBUF,A
WAIT2: JBC TI,TXNEWS
SJMP WAIT2
TXNEWS: JBC RI,IF0DDH
SJMP TXNEWS
IF0DDH: MOV A,SBUF
CJNE A,#0FH,TXACK ;判断乙机是否接收正确,不正确继续呼叫
MOV DPTR,#0CFE9H
LJMP LOOP1
ERROR: MOV 50H,#79H
MOV 51H,#31H
MOV 52H,#31H
MOV 53H,#5CH
MOV 54H,#31H
MOV 55H,#80H
LCALL DISP
DD: MOV DPTR,#PORT+1
MOVX A,@DPTR
ANL A,#0FH
JZ DD ;有键按下?
MOV A,#0A0H ;显示消隐命令
MOVX @DPTR,A
MOV DPTR,#0CFE8H ;读键值
MOVX A,@DPTR
ANL A,#3FH
MOV R7,A ;状态保存
MOV 50H,#00H
MOV 51H,#00H
MOV 52H,#00H
MOV 53H,#00H
MOV 54H,#00H
LJMP LOP
TAB1: DB 3FH,06H,5BH,4FH,80H,80H ;键值字型码表
DB 66H,6DH,7DH,07H,80H,80H
DB 7FH,6FH,77H,7CH,80H,80H
DB 39H,5EH,79H,71H,80H,80H
DB 80H,80H,80H,80H
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -