📄 从机接收子程序.asm
字号:
myself EQU 31H;本机地址
sadd EQU 32H;接收数据地址指针
bitlong EQU 33H;数据块长度
ORG 0000H
AJMP START
ORG 0023H
LJMP INSER0
ORG 0030H
START: MOV SP, #60H
MOV TMOD, #20H ;定时/计数器1,工作方式2
MOV TH1, #0F3H;波特率2400
MOV TL1, #0F3H
MOV PCON, #80H ;设置SMOD=1
MOV SCON, #0F0H;设置串行方式3,允许接收,SM2=1
SETB EA ;开中断
SETB TR1 ;启动定时/计数器1
SETB ES ;允许串行中断
MOV 08H, #SADD
MOV 0CH, #BITLONG
SETB 20H.0
SETB 20H.1
MAIN: SJMP MAIN
;******接收中断程序******
INSER0:CLR RI
PUSH A
PUSH DPH
PUSH DPL
PUSH PSW
MOV PSW, #80H;在第二个工作区
JB 2FH.0, ISADDR
JB 2FH.1, ISBYTE
;*******接收数据********
ISDATA:MOV R0, #SADD;接收数据地址指针
MOV A, SBUF
MOV @R0, A
INC R0
DJNZ R4, RETURN
SETB 2FH.0H
SETB 2FH.1H
SJMP RETURN
;*******验证本机地址*******
ISADDR:MOV A, SBUF
CJNE A, #MYSELF, RETURN
CLR 2FH.0H
CLR SM2 ;设置为可接收数据状态,
SJMP RETURN
;*******接收数据桢长度*****
ISBYTE:MOV A, SBUF
MOV BITLONG, A;数据块长度
CLR 2FH.1
;*************************
RETURN:POP PSW
POP DPL
POP DPH
POP A
RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -