两台8086电脑通过两片8251进行串口通信 ,电脑A和电脑B的8251起始地址为均为 2B8H,使用异步通信,A向B发送数据。请 分别写出两片8251A的初始化程序。 注意,只要写出初始化程序即可,不需要写 传输数据的代码。
时间: 2024-10-14 12:10:20 浏览: 8
两台8086电脑通过8251串口进行异步通信,首先我们需要配置好波特率、奇偶校验、停止位和数据位等通信参数。下面是两台8251A的初始化程序示例:
**电脑A(发送方)的8251A初始化程序:**
```assembly
; 定义8251A的I/O地址
PORT_TXA equ 2B8H ; 发送数据口地址
PORT_RXA equ 2BAH ; 接收数据口地址
IRDA_PORTA equ 2BCH ; 中断请求允许/禁止控制口地址
THRESHOLD_A equ 2BDH ; 数据接收门限寄存器地址
; 初始化8251A - 异步通信模式,9600波特率,无校验,1个停止位,8位数据
mov al, 0x03 ; 设置工作模式 1: 异步通信,无握手
stosb ; 写入控制寄存器
; 配置波特率
mov ax, 0x00B8 ; 9600波特率 (115200 / 16 * 16)
out IRDA_PORTA, al ; 写入波特率分量,AL = (9600 >> 8) & 0xFF
out IRDA_PORTA, ah ; 写入波特率分量,AH = 9600 & 0xFF
; 开启接收中断
mov al, 0x01 ; 启动接收
out PORT_RXA, al ; 写入接收状态寄存器
; 设置接收门限为1个字节,以便接收数据
mov al, 1 ; 设置门限为1
out THRESHOLD_A, al
```
**电脑B(接收方)的8251A初始化程序:**
```assembly
; 定义8251A的I/O地址
PORT_TXB equ 2B8H ; 发送数据口地址
PORT_RXB equ 2BAH ; 接收数据口地址
IRDA_PORTB equ 2BCH ; 中断请求允许/禁止控制口地址
THRESHOLD_B equ 2BDH ; 数据接收门限寄存器地址
; 初始化8251B (同理,配置异步通信)
mov al, 0x03 ; 设置工作模式 1: 异步通信,无握手
stosb ; 写入控制寄存器
; 配置波特率 (此处同上,假设两个电脑的波特率设置一致)
...
; 开启接收中断
mov al, 0x01 ; 启动接收
out PORT_RXB, al ; 写入接收状态寄存器
; 设置接收门限为1个字节,以便接收数据
mov al, 1 ; 设置门限为1
out THRESHOLD_B, al
```
请注意,上述代码简化了波特率计算和其他细节,实际应用中可能需要更复杂的计算和额外的错误检查。另外,中断服务程序也需要相应地配置来处理接收到的数据和中断。