DOS环境下PC机的串行通信

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