串行通信接口 8251A 的应用编程,通过 TXD 接收一帧异步通信的数据,接收的字符 格式包括 8 位数据,一位奇校验位,二位停止位。若波特率系数 K=64。若 CPU 采用查 询方式从 8251A 接收数据。假定要接收的数据放在 5000H 开始的数据区,且要接收的 数据字节数是 180H。8251A 数据端口地址为 3F8H,控制/状态寄存器端口地址为 3F9H。 编程完成数据传送(要有初始化)。
时间: 2024-02-09 20:11:52 浏览: 161
8251A可编程的串行接口
4星 · 用户满意度95%
首先,需要对 8251A 进行初始化配置:
```assembly
; 8251A 初始化
MOV AL, 80H ; 选择工作方式 1
OUT 3F9H, AL
MOV AL, 03H ; 设置数据位为8位
OUT 3F8H, AL
MOV AL, 08H ; 设置奇校验位
OUT 3F8H, AL
MOV AL, 07H ; 设置停止位为2位
OUT 3F8H, AL
MOV AL, 01H ; 使能接收器
OUT 3F8H, AL
```
接下来,可以通过查询方式从 8251A 接收数据:
```assembly
; 从 8251A 接收数据
MOV CX, 180H ; 总共需要接收的数据字节数
MOV DI, 5000H ; 数据存储的起始地址
RECEIVE_LOOP:
IN AL, 3F8H ; 读取状态寄存器
AND AL, 01H ; 判断是否有数据可读
JZ RECEIVE_LOOP ; 如果没有数据可读,继续等待
IN AL, 3F8H ; 读取接收数据
MOV [DI], AL ; 将数据存储到内存中
INC DI ; 存储地址自增
LOOP RECEIVE_LOOP
```
最后,需要关闭 8251A:
```assembly
; 关闭 8251A
MOV AL, 00H ; 禁用接收器和发送器
OUT 3F8H, AL
MOV AL, 60H ; 复位 8251A
OUT 3F9H, AL
```
完整的代码如下:
```assembly
; 8251A 初始化
MOV AL, 80H ; 选择工作方式 1
OUT 3F9H, AL
MOV AL, 03H ; 设置数据位为8位
OUT 3F8H, AL
MOV AL, 08H ; 设置奇校验位
OUT 3F8H, AL
MOV AL, 07H ; 设置停止位为2位
OUT 3F8H, AL
MOV AL, 01H ; 使能接收器
OUT 3F8H, AL
; 从 8251A 接收数据
MOV CX, 180H ; 总共需要接收的数据字节数
MOV DI, 5000H ; 数据存储的起始地址
RECEIVE_LOOP:
IN AL, 3F8H ; 读取状态寄存器
AND AL, 01H ; 判断是否有数据可读
JZ RECEIVE_LOOP ; 如果没有数据可读,继续等待
IN AL, 3F8H ; 读取接收数据
MOV [DI], AL ; 将数据存储到内存中
INC DI ; 存储地址自增
LOOP RECEIVE_LOOP
; 关闭 8251A
MOV AL, 00H ; 禁用接收器和发送器
OUT 3F8H, AL
MOV AL, 60H ; 复位 8251A
OUT 3F9H, AL
```
阅读全文