串行通信接口8251A的应用编程,通过TXD发送一帧异步通信的数据,若CPU采用查询方式向8251A发送数据。假定要发送的数据放在5000H开始的数据区,且要发送的数据字节数是180H。8251A数据端口地址为3F8H,控制/状态寄存器端口地址为3F9H。若波特率系数K=16。编程完成数据传送(要有初始化)
时间: 2023-12-06 08:45:16 浏览: 32
以下是8251A串行通信接口的初始化代码:
```assembly
MOV AL, 80H ; 使能8251A,选择异步通信
OUT 3F9H, AL ; 将控制字节写入控制/状态寄存器端口
MOV AL, 0C0H ; 设置数据格式为8位数据位、无校验位、1位停止位
OUT 3F8H, AL ; 将控制字节写入数据端口
MOV AL, 0 ; 清空发送缓冲区
OUT 3F8H, AL
```
接下来是通过TXD发送数据的代码:
```assembly
MOV CX, 180H ; 要发送的数据字节数
MOV SI, 5000H ; 数据区起始地址
SEND_LOOP:
IN AL, 3F9H ; 查询发送缓冲区是否为空
AND AL, 20H ; 检查第5位是否为1,表示发送缓冲区为空
JZ SEND_LOOP ; 如果不为空,则继续查询
MOV AL, [SI] ; 从数据区读取一个字节
OUT 3F8H, AL ; 将字节写入发送缓冲区
INC SI ; 指向下一个字节
LOOP SEND_LOOP ; 继续发送下一个字节
```
上述代码中,通过循环检查发送缓冲区是否为空,如果为空则将要发送的数据写入发送缓冲区。由于波特率系数K=16,所以发送速率为1.8432 Mbps。
相关问题
串行通信接口8251A的应用编程,通过TXD发送一帧异步通信的数据,若CPU采用查询方式向8251A发送数据。假定要发送的数据放在5000H开始的数据区,且要发送的数据字节数是180H。8251A数据端口地址为3F8H,控制/状态寄存器端口地址为3F9H。若波特率系数K=16。方式控制字
8251A是一个串行通信接口芯片,可以通过CPU向外发送数据或接收数据。在发送数据时,需要先将待发送的数据写入数据端口,然后通过控制/状态寄存器进行控制,设置发送中断使能位、发送数据准备就绪位等,以便8251A开始发送数据。
下面是具体的应用编程流程:
1. 设置好波特率系数K=16:向控制/状态寄存器端口地址3F9H写入0x80。
2. 将要发送的数据从5000H开始的数据区读取出来,逐个写入数据端口3F8H。需要注意的是,由于8251A是一个字节一个字节地发送数据,因此在写入每个字节前,需要等待发送数据准备就绪位(THRE)为1,表示上一个字节已经发送完毕,可以继续发送下一个字节。
下面是具体的代码实现:
```
MOV AL, 0x80 ; 设置波特率系数K=16
OUT 0x3F9, AL
MOV CX, 180 ; 待发送的数据字节数
MOV SI, 5000H ; 数据存放的起始地址
SEND_LOOP:
IN AL, 0x3F9 ; 检查THRE位是否为1
AND AL, 0x20
JZ SEND_LOOP
MOV AL, [SI] ; 从数据区读取一个字节
OUT 0x3F8, AL ; 写入数据端口
INC SI ; 数据区指针加1
LOOP SEND_LOOP ; 继续发送下一个字节,直到所有数据发送完毕
```
需要注意的是,上述代码只是发送数据的基本流程,实际应用中还需要考虑其他因素,比如发送数据的协议、校验等。
串行通信接口 8251A 的应用编程,通过 TXD 发送一帧异步通信的数据,若 CPU 采 用查询方式向 8251A 发送数据。假定要发送的数据放在 5000H 开始的数据区,且要发 送的数据字节数是 180H。8251A 数据端口地址为 3F8H,控制/状态寄存器端口地址为 3F9H。若波特率系数 K=16。编程完成数据传送(要有初始化)
以下是通过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,则继续等待
; 发送完成
```
相关推荐
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)