如果8259A的口地址为20H/21H,要求设置该芯片的中断类型号n-08H~0FH, 怎样编程设置ICW2?如果系统中只允许时钟、键盘和硬盘中断,怎样编程设置OCW,?
时间: 2023-06-01 15:04:57 浏览: 224
关于问题一,我可以回答。对于8259A芯片,ICW2用于设置中断类型号,可以通过以下代码设置n-08H~0FH的中断类型号:
outb(0x20, 0x11); // ICW1边沿触发,级联8259、需要ICW4
outb(0x21, n); // ICW2 设置中断类型号,n为中断类型号
outb(0x21, 0x04); // ICW3设置主8259从片的连接方式
outb(0x21, 0x01); // ICW4 必须,8086/8088模式
关于问题二,如果系统中只允许时钟、键盘和硬盘中断,那么可以设置如下OCW:
outb(0x21, 0xFC); // 禁止从0到7的所有中断源
outb(0x21, 0x01); // 只允许时钟中断
outb(0xA1, 0xFB); // 禁止从8到15的所有中断源
outb(0xA1, 0x02); // 允许键盘和硬盘中断
希望可以帮到你。
相关问题
怎样用8259A的屏蔽命令字来禁止IR4和IR5引脚上的请求?又怎样撤销这一禁止命令?设8259A的端口地址为20H-21H,写出有关指令。
要禁止8259A的IR4和IR5引脚上的请求,需要向8259A的20H端口写入命令字0x28和0x29,具体操作步骤如下:
1. 向20H端口写入0x11,选择操作ICW1寄存器。
2. 向21H端口写入0x04,设置8259A为主片。
3. 向21H端口写入0x02,设置8259A的级联方式。
4. 向21H端口写入0x01,设置8259A的中断请求方式。
5. 向21H端口写入0x28,设置ICW3的主片中断请求线。
6. 向21H端口写入0x00,设置ICW4,无需特殊操作。
此时,IR4和IR5引脚上的中断请求已被屏蔽,接下来需要撤销屏蔽命令,操作步骤如下:
1. 向20H端口写入0x0A,选择操作OCW1寄存器。
2. 向21H端口写入0xFB,屏蔽IR4引脚。
3. 向21H端口写入0xDF,屏蔽IR5引脚。
此时,IR4和IR5引脚上的中断请求已经被撤销屏蔽命令,可以正常接收中断请求了。
需要注意的是,8259A的操作方式比较复杂,需要按照指定的顺序进行初始化和操作。具体的指令和操作步骤可以参考8259A的数据手册或者相关的资料。
设8086系统中,中断请求信号采用边沿触发方式,单片8259A,端口地址为200H,201H,中断类型码 38H~3FH,中断源接在IR2上,普通全嵌套方式,非自动结束方式,缓冲方式。编写初始化程序。
以下是8086系统中8259A芯片的初始化程序,其中包含了中断请求信号采用边沿触发方式、8259A芯片端口地址为200H、201H、中断类型码为38H~3FH、中断源接在IR2上、普通全嵌套方式、非自动结束方式、缓冲方式等设置:
```
ORG 100H
; 初始化8259A
INIT_8259A:
; ICW1
MOV AL, 00110001B ; 边沿触发、级联8259A、ICW4有效
OUT 20H, AL ; 发送ICW1到主芯片
CALL WAIT_8259A ; 等待8259A响应
OUT 0A0H, AL ; 发送ICW1到从芯片
CALL WAIT_8259A ; 等待8259A响应
; ICW2
MOV AL, 38H ; 主芯片中断类型码起始值
OUT 21H, AL ; 发送ICW2到主芯片
MOV AL, 30H ; 从芯片中断类型码起始值
OUT 0A1H, AL ; 发送ICW2到从芯片
; ICW3
MOV AL, 00000100B ; 主芯片IR2接从芯片
OUT 21H, AL ; 发送ICW3到主芯片
MOV AL, 00000010B ; 从芯片连接到主芯片IR2
OUT 0A1H, AL ; 发送ICW3到从芯片
; ICW4
MOV AL, 00000001B ; 非自动结束方式、缓冲方式
OUT 21H, AL ; 发送ICW4到主芯片
OUT 0A1H, AL ; 发送ICW4到从芯片
; OCW1
MOV AL, 11111111B ; 所有中断禁止
OUT 21H, AL ; 发送OCW1到主芯片
OUT 0A1H, AL ; 发送OCW1到从芯片
; OCW2
MOV AL, 00000100B ; 从IR2开始中断屏蔽字
OUT 21H, AL ; 发送OCW2到主芯片
MOV AL, 00000001B ; 从IR2开始中断屏蔽字
OUT 0A1H, AL ; 发送OCW2到从芯片
; 完成初始化
RET
; 等待8259A响应
WAIT_8259A:
IN AL, 20H ; 读取主芯片状态字
AND AL, 00000010B ; 检查8259A响应位
JZ WAIT_8259A ; 如果8259A未响应,则继续等待
IN AL, 0A0H ; 读取从芯片状态字
AND AL, 00000010B ; 检查8259A响应位
JZ WAIT_8259A ; 如果8259A未响应,则继续等待
RET
END
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)