📄 5r.asm
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; 两台PC机间RS-232串口通信 ;;;
;;; 接收程序 ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATA SEGMENT
;COM1 EQU 3F8H-3FFH ;PC机上自带的两个串口地址
;COM2 EQU 2F8H-2FFH
IO8250TR EQU 3F8H ;发送端数据寄存器地址
IO8250RR EQU 3F8H ;接受端数据寄存器地址
IO8250DIVL EQU 3F8H ;除数寄存器低字节地址
IO8250DIVH EQU 3F9H ;除数寄存器高字节地址
IO8250IER EQU 3F9H ;中断允许寄存器地址
IO8250IIR EQU 3FAH ;中断识别寄存器地址
IO8250LCR EQU 3FBH ;线路控制寄存器地址
IO8250MCR EQU 3FCH ;MODEM控制寄存器地址
IO8250LSR EQU 3FDH ;线路状态寄存器地址
IO8250MSR EQU 3FEH ;MODEM状态寄存器地址
ERR DB 'ERROR!$' ;提示错误信息
DATA ENDS
STACK1 SEGMENT STACK
DB 100 DUP(?)
STACK1 ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK1
START: MOV AX,DATA
MOV DS,AX
MOV AL,10000000B ;8250初始化,设DLAB=1
MOV DX,IO8250LCR
OUT DX,AL
MOV AX,30H ;波特率2400 kb/s
MOV DX,IO8250DIVL
OUT DX,AL ;写入除数低字节
MOV AL,AH
MOV DX,IO8250DIVH
OUT DX,AL ;写入除数高字节
MOV AL,00001011B ;8位数据,1位停止,奇校验
MOV DX,IO8250LCR
OUT DX,AL ;写入线路控制寄存器
MOV AL,00000011B ;自检关闭,请求发送
MOV DX,3FCH
OUT DX,AL ;写入MODEM控制寄存器
MOV AL,0
MOV DX,IO8250IER
OUT DX,AL ;禁止中断
MOV DX,IO8250RR
IN AL,DX ;空读一次
REC: MOV DX,IO8250LSR ;读线路状态寄存器
IN AL,DX
TEST AL,00000001B ;接收数据就绪否
JZ REC ;没有的话继续查询
TEST AL,00011110B ;出错否
JNZ ERROR ;出错的话转
MOV DX,IO8250RR ;读接收数据
IN AL,DX
CMP AL,21H ;判断是否是字符'!'
JZ EN ;是的话结束接受
MOV DL,AL
MOV AH,2 ;显示接受字符
INT 21H
JMP REC
ERROR:MOV DX,OFFSET ERR ;显示‘?’
MOV AH,09H
INT 21H
JMP REC
EN: MOV AH,4CH
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -