串行通信接口 8251A 的应用编程,通过 TXD 发送一帧异步通信的数据,若 CPU 采 用查询方式向 8251A 发送数据。假定要发送的数据放在 5000H 开始的数据区,且要发 送的数据字节数是 180H。8251A 数据端口地址为 3F8H,控制/状态寄存器端口地址为 3F9H。若波特率系数 K=16。编程完成数据传送(要有初始化)
时间: 2024-02-09 17:11:03 浏览: 116
8251A串行的异步发送
以下是通过TXD发送一帧异步通信的数据,采用查询方式向8251A发送数据的示例代码,假定要发送的数据放在5000H开始的数据区,且要发送的数据字节数是180H,8251A数据端口地址为3F8H,控制/状态寄存器端口地址为3F9H,波特率系数K=16:
```
; 初始化8251A
MOV AL, 00100000B ; 选择数据位为8位
OUT 3F8H, AL ; 向数据端口地址发送控制字节
MOV AL, 00011011B ; 选择1位停止位、无校验位、启用DTR、RTS、TXD和接收中断
OUT 3F9H, AL ; 向控制/状态寄存器端口地址发送控制字节
; 循环发送数据
MOV CX, 0180H ; 要发送的数据字节数
MOV SI, 5000H ; 数据存储在5000H开始的数据区
SEND_LOOP:
; 等待TXD准备好
WAIT_TXD:
IN AL, 3F9H ; 读取控制/状态寄存器的状态字节
TEST AL, 00100000B ; 检查TXRDY位是否为1
JZ WAIT_TXD ; 如果TXRDY位为0,则继续等待
; 发送数据
MOV AL, [SI] ; 从数据区读取一个字节
OUT 3F8H, AL ; 发送数据到8251A的数据端口地址
INC SI ; 指向下一个字节
LOOP SEND_LOOP ; 继续发送下一个字节
; 等待所有数据发送完成
WAIT_ALL_SENT:
IN AL, 3F9H ; 读取控制/状态寄存器的状态字节
TEST AL, 00001000B ; 检查TRMT位是否为1
JZ WAIT_ALL_SENT ; 如果TRMT位为0,则继续等待
; 发送完成
```
阅读全文