📄 ars232b.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;程序-------------------RS232B.ASM(调试程序)
;日期-------------------1997年08月24日
;作者-------------------胡丙龙
;功能-------------------1. 从串口接收数据,命令
; 2. 从串口发送数据
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
D_COUNT EQU 40H
D_FLAG EQU 5fH
RW_FLAG EQU 60H
;
ORG 2000H
LJMP MAIN
ORG 2023H
LJMP COMI
;
ORG 2030H
MAIN: CLR RS0
CLR RS1 ;选择寄存器组0
MOV SP,#30H ;堆栈
MOV TMOD,#20H ;设置T1方式2
MOV SCON,#70H ;串口工作方式1,允许接收,SM2=0
MOV PCON,#80H ;SMOD=1
MOV TH1,#0FDH
MOV TL1,#0FDH ;波特率=9600BPS
SETB TR1
SETB EA
SETB ES
MOV D_COUNT,#00H ;通讯数据计数器
MOV D_FLAG,#00H
MOV 70H,#00H
MOV DPTR,#3000H ;数据存放区首址
LOOP: MOV A,D_FLAG
JZ LOOP
CLR ES
LJMP 0000H ;循环等待
;
;
ORG 2080H
COMI: CLR ES
PUSH B
PUSH A
PUSH PSW
JBC RI,COMI_R ;识别中断源,是接收中断,转
CLR TI ;是发送中断,清标志退出
AJMP COMI_RET
;
COMI_RET: POP PSW
POP A
POP B
SETB ES
RETI
;
COMI_R: MOV A,SBUF ;取数据
MOV B,A
INC D_COUNT ;接收计数器加1
MOV A,D_COUNT
CJNE A,#01H,RNEXT1 ;接收到第一个字节,#80
ACALL COMI_T ;立即送回作为应答
AJMP COMI_RET
RNEXT1: CJNE A,#02H,RNEXT2 ;接收到第二个字节,机台号
ACALL COMI_T ;立即回送作为应答
AJMP COMI_RET
RNEXT2: CJNE A,#03H,RNEXT3 ;接收到第三个字节,工件号
ACALL COMI_T ;立即回送作为应答
AJMP COMI_RET
RNEXT3: CJNE A,#04H,RNEXT4 ;接收到第四个字节,命令
MOV RW_FLAG,B ;保存命令
MOV A,RW_FLAG
CJNE A,#01H,RNEXT6 ;RW_FLAG=2,不作应答,开始上送数据到PC机
ACALL COMI_T ;RW_FLAG=1,立即送回作为应答
AJMP COMI_RET
RNEXT4: MOV A,RW_FLAG
CJNE A,#01H,RNEXT6 ;RW_FLAG=2,上送数据到PC机
MOV A,D_COUNT ;RW_FLAG=1,由PC机送入数据
CJNE A,#0CDH,RNEXT5 ;判数据传送完,4+C8+1=CDH,最后为0XFF,无须应答
MOV D_FLAG,#01H ;结束通讯标志置1
AJMP COMI_RET
RNEXT5: MOV A,B
LCALL 0C22H ;数据存储
INC DPTR
ACALL COMI_T ;回送作为应答
AJMP COMI_RET
RNEXT6: MOV A,D_COUNT
CJNE A,#0CDH,RNEXT7 ;判数据传送完,4+C8+1=CDH,最后为0XFF,无须应答
MOV D_FLAG,#01H ;结束通讯标志置1
AJMP COMI_RET
RNEXT7: MOVX A,@DPTR ;上送数据到PC机
MOV B,A
ACALL COMI_T
INC DPTR
AJMP COMI_RET
;
COMI_T: MOV A,B
MOV SBUF,A
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -