DOS环境下PC机的串行通信
STACK_SEG SEGMENT PARA STACK
DB 32 DUP(0)
STACK_SEG ENDS
CODE_SEG SEGMENT
ASSUMECS:CODE_SEG
ASSUMESS:STACK_SEG
START:
PUSHDS
XORAX,AX
PUSHAX
INIT: ;初始化8250
MOVDX,0 ;串口1
MOVAH,0
MOVAL,11100011B ;波特率9600,无校验,1位停止位,8位数据位
INT14H
REC: MOVAH,1
INT16H ;无输入,转RECV
JZ RECV ;读键盘输入值到AL
MOVAH,0
INT16H
CMPAL,1BH
JZ EXIT ;为"ESC"键,退出程序
RECV: MOVDX,0 ;串口1
MOVAH,03H
INT14H ;读状态
TESTAH,1 ;测试是否接收到数据
JZREC ; 没有接收到数据,转REC
MOVDX,0 ;串口1
MOVAH,02H
INT14H ;接收数据
TESTAH,080H ;测试是否接收错误
JNZERROR
XS: ;显示接收的数据
MOVAH,0EH ;BIOS INT 10H的功能调用0EH,写字符
MOVBX,0
INT10H
JMPREC
ERROR: ;错误处理
MOVAL,'*'
MOVAH,0EH
MOVBX,0
INT10H
JMPREC
EXIT: POPAX
POPDS
MOV AH,4CH ;DOS功能调用4CH,退出程序
MOVAL,0
INT21H
RET
CODE_SEG ENDS
ENDSTART