📄 8250.asm
字号:
;*******************************************
;程序功能:采用查询方式,实现串口自发自收功能及自检功能
;******************************************
CODE SEGMENT
ASSUME CS:CODE
START: MOV AL,10000000B ;8250初始化,设DLAB=1
MOV DX,3FBH
OUT DX,AL
MOV AX,30H
MOV DX,3F8H
OUT DX,AL ;写入除数低字节
MOV AL,AH
MOV DX,3F9H
OUT DX,AL ;写入除数高字节
MOV AL,00001010B ;7位数据,1位停止,奇校验
MOV DX,3FBH
OUT DX,AL ;写入线路控制寄存器
MOV AL,00001111B
MOV DX,3FCH ;写入Modem寄存器
OUT DX,AL
MOV AL,0
MOV DX,3F9H
OUT DX,AL ;写中断控制寄存器,屏蔽所有中断
WAIT_FOR: MOV DX,3FDH
IN AL,DX
TEST AL,00011110B ;出错否
JNZ ERROR
TEST AL,00000001B ;接收数据就绪否
JNZ RECEIVE
TEST AL,01000000B ;移位寄存器空否,不空,返回等待
JZ WAIT_FOR
MOV AH,1
INT 21H ;读键盘
MOV DX,3F8H ;发送数据
OUT DX,AL
JMP WAIT_FOR
RECEIVE: MOV DX,3F8H
IN AL,DX
AND AL,01111111B ;保留7位数据
CMP AL,03H ;是Ctrl-C?
JNZ CHAR
MOV AH,4CH ;返回DOS
INT 21H
CHAR: PUSH AX
MOV DL,AL
MOV AH,02H ;显示接收字符
INT 21H
POP AX
JMP WAIT_FOR
ERROR: MOV DX,3FDH ;出错则清除线路状态寄存器
IN AL,DX
MOV DL,'?'
MOV AH,02H
INT 21H
JMP WAIT_FOR
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -