串行通信接口8251A的应用编程,通过TXD接收一帧异步通信的数据,接收的字符格式包括8位数据,一位奇校验位,二位停止位。若波特率系数K=64。若CPU采用查询方式从8251A接收数据。假定要接收的数据放在5000H开始的数据区,且要接收的数据字节数是180H。8251A数据端口地址为3F8H,控制/状态寄存器端口地址为3F9H。编程完成数据传送(要有初始化)。
时间: 2024-02-05 11:11:59 浏览: 130
以下是8251A串行通信接口的应用编程,通过TXD接收一帧异步通信的数据,接收的字符格式包括8位数据,一位奇校验位,二位停止位。假设波特率系数K=64,CPU采用查询方式从8251A接收数据,要接收的数据放在5000H开始的数据区,且要接收的数据字节数是180H。8251A数据端口地址为3F8H,控制/状态寄存器端口地址为3F9H。
```assembly
ORG 100H
START:
MOV AX, 0003H ; 将 AX 寄存器设置为串口通信的波特率系数 K=64.
MOV DX, 3F9H ; 将 DX 寄存器设置为控制/状态寄存器端口地址.
OUT DX, AL ; 将波特率系数写入控制寄存器.
MOV DX, 3F8H ; 将 DX 寄存器设置为数据端口地址.
MOV CX, 0180H ; 将 CX 寄存器设置为需要接收的数据字节数.
MOV DI, 5000H ; 将 DI 寄存器设置为数据存储区的起始地址.
RECEIVE:
IN AL, DX ; 从数据端口读取一个字节的数据.
PUSH AX ; 将读取的数据压入栈中,以便进行奇偶校验.
XOR AH, AH ; 将 AH 寄存器清零.
MOV BL, 08H ; 将 BL 寄存器设置为 8,用于循环计数器.
CHECK_PARITY:
SHR AX, 1 ; 将 AX 寄存器中的数据右移一位.
JC SKIP ; 如果最低位为 1,跳转到 SKIP 标签.
DEC BL ; 如果最低位为 0,将循环计数器 BL 减 1.
JNZ CHECK_PARITY; 如果循环计数器 BL 不为零,继续进行奇偶校验.
JMP ERROR ; 如果循环计数器 BL 为零,跳转到 ERROR 标签.
SKIP:
DEC BL ; 循环计数器 BL 减 1.
JNZ CHECK_PARITY; 继续进行奇偶校验.
POP AX ; 弹出栈顶元素,恢复原来的数据.
MOV [DI], AL ; 将读取的数据存储到数据存储区中.
INC DI ; 将 DI 寄存器加 1,指向下一个存储位置.
MOV CX, 0002H ; 将 CX 寄存器设置为 2,用于等待两个停止位.
WAIT_STOP_BITS:
IN AL, DX ; 等待两个停止位.
LOOP WAIT_STOP_BITS
LOOP RECEIVE ; 继续接收下一个字节的数据.
; 在此处可以添加接收完成后的代码.
ERROR:
; 在此处可以添加错误处理代码.
JMP START ; 重新开始接收数据.
END START
```
以上是通过TXD接收一帧异步通信的数据,接收的字符格式包括8位数据,一位奇校验位,二位停止位的8251A串行通信接口应用编程。
阅读全文