利用8255完成双8086CPU的交互通信的系统,其中CPU1利用串口1接收虚拟终端发送的数据,之后CPU1利用并口1与另一个CPU2进行通信,CPU2将接收到的数据发送至终端显示,其中一个 CPU 采用查询方式,另一个采用中断方式通信。汇编+PROTEUS
时间: 2024-02-23 10:02:56 浏览: 73
由于需要使用汇编语言和PROTEUS仿真软件,这里提供一种基于8086 CPU和8255芯片的交互通信系统的实现方案。
首先,需要将8255芯片连接到CPU1和CPU2的总线上,同时将串口1和并口1连接到8255的I/O端口上。具体连接方式可以参考8255的数据手册。
然后,需要编写汇编程序,访问8255的寄存器,设置输入输出方式和中断控制等参数。具体的程序可以如下:
```
; 定义端口号和控制字
PORT_A equ 0A0H
PORT_B equ 0A1H
PORT_C equ 0A2H
CTRL_WORD equ 0A3H
; 定义输入输出方式
IN_MODE equ 82H
OUT_MODE equ 81H
; 定义中断控制方式
INT_MODE equ 80H
; 定义中断向量
INT_VECTOR equ 08H
; 定义接收缓冲区和发送缓冲区
RX_BUFFER equ 100H
TX_BUFFER equ 200H
; 初始化8255
MOV AL, IN_MODE ; 设置端口A和端口B为输入
OUT CTRL_WORD, AL
MOV AL, OUT_MODE ; 设置端口C为输出
OUT CTRL_WORD, AL
; CPU1通过串口1接收虚拟终端发送的数据
; 查询方式
RECEIVE:
IN AL, PORT_A ; 读取8255的端口A
AND AL, 01H ; 判断是否有数据需要接收
JZ RECEIVE ; 如果没有数据,继续查询
MOV AH, 01H ; 调用DOS中断21H,等待输入
INT 21H ; 从键盘缓冲区读取一个字符
MOV [RX_BUFFER], AL ; 将接收到的数据存入接收缓冲区
INC RX_BUFFER ; 缓冲区指针加1
JMP RECEIVE ; 继续查询
; CPU1通过并口1与CPU2进行通信
; 中断方式
SEND:
IN AL, PORT_C ; 读取8255的端口C
AND AL, 01H ; 判断是否可以发送数据
JZ SEND ; 如果不能发送,继续等待
MOV AL, [TX_BUFFER] ; 从发送缓冲区读取数据
OUT PORT_C, AL ; 将数据发送给CPU2
INC TX_BUFFER ; 缓冲区指针加1
JMP SEND ; 继续等待发送
; CPU2将接收到的数据发送至终端显示
DISPLAY:
IN AL, PORT_A ; 读取8255的端口A
AND AL, 01H ; 判断是否有数据需要接收
JZ DISPLAY ; 如果没有数据,继续等待
MOV AL, [RX_BUFFER] ; 从接收缓冲区读取数据
MOV AH, 02H ; 调用DOS中断21H,显示一个字符
INT 21H
INC RX_BUFFER ; 缓冲区指针加1
JMP DISPLAY ; 继续等待接收
```
在PROTEUS中,可以使用8086 CPU和8255芯片的模型,将程序加载到CPU1和CPU2中,然后模拟输入和输出数据,观察程序的运行情况。需要注意的是,模拟的输入和输出数据需要符合程序的数据格式和传输速率等要求,以确保数据能够正确地传输和解析。
总之,这是一个基于8086 CPU和8255芯片的交互通信系统的实现方案,需要根据实际情况进行调整和优化。同时,还需要进行严格的测试和验证,以保证系统的稳定性和可靠性。
阅读全文