利用8251A异步通信接口实现双机通信,接收方采用中断方式。设波特率为9600bit/s,波特率因子为16,偶校验,2位停止位,7位数据位,串行通信的端口地址为3F8-3FAH。若每次中断接收一个字符,将接收数据存放到DI指向的存储空间,请编写接收数据的中断服务子程序。
时间: 2023-10-24 20:05:37 浏览: 63
以下是接收数据的中断服务子程序的示例代码:
```assembly
ORG 0000H ; 程序起始地址
MOV AL, 0C7H ; 设定波特率因子为16,9600bit/s
OUT 43H, AL
MOV AL, 0H
OUT 42H, AL
MOV AL, 80H
OUT 42H, AL
MOV AL, 0B1H ; 选项设定:偶校验,2位停止位,7位数据位
OUT 3FBH, AL
MOV AL, 0F9H ; 启用中断并允许接收
OUT 3FBH, AL
MOV DX, 3F8H ; 设置串行通信的端口地址
MOV AL, 0 ; 准备接收数据
RECEIVE:
IN AL, DX ; 读取接收到的数据
MOV [DI], AL ; 存储数据到DI指向的存储空间
INC DI ; DI指向下一个存储位置
RETI ; 退出中断服务子程序
```
在主程序中,需要先通过设置波特率因子、选项设定和启用中断来准备8251A异步通信接口。然后设置串行通信的端口地址和DI指向的存储空间。接下来等待中断发生,当接收到数据后,将数据存储到DI指向的存储空间中,并将DI指向下一个存储位置。最后通过RETI指令退出中断服务子程序。
相关问题
3. 利用8251A异步通信接口实现双机通信,接收方采用中断方式。设波特率为9600bit/s,波特率因子为16,偶校验,2位停止位,7位数据位,串行通信的端口地址为3F8-3FAH。请编写接收方初始化8251A的程序段。
接收方初始化8251A的程序段如下:
```
MOV AL, 00000010B ; 选择异步通信模式,波特率因子为16,2位停止位,7位数据位,偶校验
OUT 3FBH, AL ; 将控制字写入8251A的控制寄存器
MOV AL, 00000001B ; 使能接收中断
OUT 3F8H, AL ; 将命令字写入8251A的命令/状态寄存器
```
注:这里的控制字和命令字是二进制表示,其中B表示二进制。8251A的控制寄存器地址为3FBH,命令/状态寄存器地址为3F8H。
利用8251A异步通信接口实现双机通信,接收方采用中断方式。设波特率为9600bit/s,波特率因子为16,偶校验,2位停止位,7位数据位,串行通信的端口地址为3F8-3FAH。若发送方CPU给8251的数据为0C7H,请画出接收到的帧数据格式。
根据题目所给的条件,可以得到以下数据:
波特率:9600 bit/s
波特率因子:16
校验方式:偶校验
停止位:2位
数据位:7位
串行通信端口地址:3F8-3FAH
根据波特率和波特率因子,可以计算出每个字符所用的时间为:
1 / (9600 / 16) = 1.6667 ms
因此,发送方CPU给8251的数据为0C7H时,接收方收到的帧数据格式如下:
起始位 | 数据位0 | 数据位1 | 数据位2 | 数据位3 | 数据位4 | 数据位5 | 数据位6 | 偶校验位 | 停止位0 | 停止位1
0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1
其中,起始位为逻辑0,数据位为0C7H的7位二进制形式(11000111),偶校验位为保证数据位中1的个数为偶数的校验位,停止位为2位,分别为逻辑1。
因此,接收方收到的完整帧数据为:
0 0 0 1 1 0 0 1 1 1 1
阅读全文