①外设把1个数据送到A口或B口后,向8255A发选通信号,数据被8255A锁存。②随后IBF变高,指示输入缓冲器已满,外设不要送新数据来。③ 恢复高电平后, 若IBF和INTE也同时为高,INTR就会变高, 请求中断,CPU响应中断后执行IN指令读取数据( 变低)。④ 有效后,经tRIT时间INTR变低,清除中断。⑤ 读信号结束,数据读入累加器; 之后IBF变低,缓冲器已空,外设可再送新的数据来。其中第三步我们要在代码中如何配置8255中断
时间: 2024-03-03 18:50:50 浏览: 61
8255a的io口和功能简介
在代码中配置8255中断的步骤如下:
1. 确定8255的中断模式,即在控制字寄存器CWR中设置对应的中断模式位。例如,如果要使用中断方式1,即外设通过INTA引脚向CPU发中断请求信号,需要将CWR的BIT5和BIT4位分别设置为1和0。
```
MOV AL, 11001000B ; 设置控制字寄存器,中断方式1,端口A为输入
OUT 61H, AL ; 将控制字寄存器写入I/O端口61H
```
2. 设置中断服务程序ISR,即在代码中编写相应的处理程序。ISR的具体实现需要根据实际需求进行编写,可以在程序的任何位置定义,只要确保在中断发生时能够被CPU正确执行。
```
ISR:
; 中断服务程序的具体实现
; ...
IRET ; 中断服务程序结束并返回
```
3. 在8255的模式字寄存器MWR中设置中断使能位,即将对应的INT位设置为1。
```
MOV AL, 00000010B ; 将MWR的INT位设置为1,使能中断
OUT 60H, AL ; 将模式字寄存器写入I/O端口60H
```
4. 在8255的中断控制寄存器ICR中设置中断控制位,确定中断的触发方式和优先级。例如,如果使用中断方式1,需要将ICR的BIT0位设置为1,表示使用INTA触发中断请求;如果需要设置中断优先级,可以在ICR的其他位上设置优先级值。
```
MOV AL, 00000001B ; 将ICR的BIT0位设置为1,使用INTA触发中断请求
OUT 62H, AL ; 将中断控制寄存器写入I/O端口62H
```
5. 在程序中启用中断,使得当8255发出中断请求时,CPU可以响应并执行ISR。例如,在程序的初始化部分,可以使用CLI指令关闭中断,等待8255发出中断请求后再使用STI指令启用中断。
```
; 初始化程序
CLI ; 关闭中断
; 等待8255发出中断请求
STI ; 启用中断
```
需要注意的是,不同的8255型号可能存在一些差异,具体的中断配置方式可能会有所不同。同时,在编写中断服务程序时需要注意避免使用一些不可重入的指令,以确保程序的正确性和可靠性。
阅读全文