8259中断控制

2018年5月24日
8254定时/计数器应用
2018年5月2日
8255并行接口
2018年5月25日

8259中断控制实验

1  实验目的

1. 掌握8259中断控制器的工作原理。

2. 学习8259的应用编程方法。

3. 掌握8259级联方式的使用方法。

2  实验设备

PC机一台,TD-PITE实验装置一套。

3  实验内容及步骤

1.  中断控制器8259简介

Intel 386EX芯片中集成有中断控制单元(ICU),该单元包含有两个级联中断控制器,一个为主控制器,一个为从控制器。该中断控制单元就功能而言与工业上标准的82C59A是一致的,操作方法也相同。从片的INT连接到主片的IR2信号上构成两片8259的级联。

TD-PITE实验系统中,将主控制器的IR6IR7以及从控制器的IR1开放出来供实验使用,主片8259IR4供系统串口使用。8259的内部连接及外部管脚引出如图4.5


4.5  8259内部连续及外部管脚引出图

4.1列出了中断控制单元的寄存器相关信息。

4.1  ICU寄存器列表

寄存器 口地址 功能描述
ICW1(主)
ICW1(从)

(只写)

0020H
00A0H
初始化命令字1
决定中断请求信号为电平触发还是边沿触发。
ICW2(主)
ICW2(从)

(只写)

0021H
00A1H
初始化命令字2
包含了8259的基址中断向量号,基址中断向量是IR0的向量号,基址加1就是IR1的向量号,依此类推。
ICW3(主)
(只写)
0021H 初始化命令字3
用于识别从8259设备连接到主控制器的IR信号,内部的从8259连接到主8259IR2信号上。
ICW3(从)
(只写)
00A1H 初始化命令字3
表明内部从控制器级联到主片的IR2信号上。
ICW4(主)
ICW4(从)

(只写)

0021H
00A1H
初始化命令字4
选择特殊全嵌套或全嵌套模式,使能中断自动结束方式。
OCW1(主)
OCW1(从)

(读/写)

0021H
00A1H
操作命令字1
中断屏蔽操作寄存器,可屏蔽相应的中断信号。
OCW2(主)
OCW2(从)

(只写)

0020H
00A0H
操作命令字2
改变中断优先级和发送中断结束命令。
OCW3(主)
OCW3(从)

(只写)

0020H
00A0H
操作命令字3
使能特殊屏蔽方式,设置中断查询方式,允许读出中断请求寄存器和当前中断服务寄存器。
IRR(主)
IRR(从)

(只读)

0020H
00A0H
中断请求:
指出挂起的中断请求。
ISR(主)
ISR(从)

(只读)

0020H
00A0H
当前中断服务:
指出当前正在被服务的中断请求。
POLL(主)
POLL(从)

(只读)

0020H
0021H

00A0H

00A1H

查询状态字:
表明连接到8259上的设备是否需要服务,如果有中断请求,该字表明当前优先级最高的中断请求。

初始化命令字1寄存器(ICW1)说明见图4.6所示。


4.6  初始化命令字1寄存器

初始化命令字2寄存器(ICW2)说明见图4.7所示。


4.7  初始化命令字2寄存器

初始化命令字3寄存器(ICW3)说明,主片见图4.8,从片见图4.9


4.8  主片初始化命令字3寄存器


4.9  从片初始化命令字3寄存器

初始化命令字4寄存器(ICW4)说明见图4.10


4.10  初始化命令字4寄存器

操作命令字1寄存器(OCW1)说明见图4.11


4.11  操作命令字1寄存器

操作命令字2寄存器(OCW2)说明如图4.12所示。


4.12  操作命令字2寄存器

操作命令字3寄存器(OCW3)说明如图4.13所示。


4.13  操作命令字3寄存器

查询状态字(POLL)说明如图4.14所示。


4.14  程序状态字寄存器

在对8259进行编程时,首先必须进行初始化。一般先使用CLI指令将所有的可屏蔽中断禁止,然后写入初始化命令字。8259有一个状态机控制对寄存器的访问,不正确的初始化顺序会造成异常初始化。在初始化主片8259时,写入初始化命令字的顺序是:ICW1ICW2ICW3、然后是ICW4,初始化从片8259的顺序与初始化主片8259的顺序是相同的。

系统启动时,主片8259已被初始化,且4号中断源IR4提供给与PC联机的串口通信使用,其它中断源被屏蔽。中断矢量地址与中断号之间的关系如下表所示:

主片中断序号 0 1 2 3 4 5 6 7
功能调用 08H 09H 0AH 0BH 0CH 0DH 0EH 0FH
矢量地址 20H23H 24H27H 28H2BH 2CH2FH 30H33H 34H37H 38H3BH 3CH3FH
说明 未开放 未开放 未开放 未开放 串口 未开放 可用 可用
从片中断序号 0 1 2 3 4 5 6 7
功能调用 30H 31H 32H 33H 34H 35H 36H 37H
矢量地址 C0HC3H C4HC7H C8HCBH CCHCFH D0HD3H D4HD7H D8HDBH DCHDFH
说明 未开放 可用 未开放 未开放 未开放 未开放 未开放 未开放

2.  8259单中断实验

实验接线图如图4.15所示,单次脉冲输出与主片8259IR7相连,每按动一次单次脉冲,产生一次外部中断,在显示屏上输出一个字符“7”

 

           4.15  8259单中断实验接线图

实验程序清单(INT1.ASM

[vb] view plain copy

  1. SSTACK  SEGMENT STACK  
  2.         DW 32 DUP(?)  
  3. SSTACK  ENDS  
  4. CODE    SEGMENT  
  5.         ASSUME CS:CODE  
  6. START:  PUSH DS  
  7.         MOV AX, 0000H  
  8.         MOV DS, AX  
  9.         MOV AX, OFFSET MIR7     ;取中断入口地址  
  10.         MOV SI, 003CH               ;中断矢量地址  
  11.         MOV [SI], AX                ;IRQ7的偏移矢量  
  12.         MOV AX, CS              ;段地址  
  13.         MOV SI, 003EH  
  14.         MOV [SI], AX                ;IRQ7的段地址矢量  
  15.         CLI                         ;中断屏蔽clear interrupt  
  16.         POP DS  
  17.         ;初始化主片8259  
  18.         MOV AL, 11H             0001 0001 级联,边沿触发,要ICW4  
  19.         OUT 20H, AL             ;ICW1  
  20.         MOV AL, 08H             0000 1000 中断类型号从8开始  
  21.         OUT 21H, AL             ;ICW2  
  22.         MOV AL, 04H             0000 0100   
  23.         OUT 21H, AL             ;ICW3  
  24.         MOV AL, 01H             0000 0001 非缓冲方式,8086/8088配置  
  25.         OUT 21H, AL             ;ICW4  
  26.         MOV AL, 6FH             ;OCW1 0110 1111 IR7,IR4引脚的中断开放  
  27.         OUT 21H, AL  
  28.         STI                         ;恢复中断 set interrupt  
  29. AA1:        NOP                         ;空指令  
  30.         JMP AA1                 ;无限循环  
  31. MIR7:   STI                           
  32.         CALL DELAY                  ;延时  
  33.         MOV AX, 0037H               37H  
  34.         INT 10H                 ;显示字符7  
  35.         MOV AX, 0020H                  
  36.         INT 10H  
  37.         MOV AL, 20H  
  38.         OUT 20H, AL             ;中断结束命令  
  39.         IRET          
  40. DELAY:  PUSH CX  
  41.         MOV CX, 0F00H  
  42. AA0:        PUSH AX  
  43.         POP  AX  
  44.         LOOP AA0  
  45.         POP CX  
  46.         RET       
  47. CODE        ENDS  
  48.         END  START  

实验步骤

1)按图4.15连接实验线路。

2)编写实验程序,经编译、链接无误后装入系统。

3)运行程序,重复按单次脉冲开关KK1+,显示屏会显示字符“7”,说明响应了中断。

 

3.  8259级联实验

实验接线图如图4.16所示,KK1+连接到主片8259IR7上,KK2+连接到从片8259IR1上,当按一次KK1+时,显示屏上显示字符“M7”,按一次KK2+时,显示字符“S1”。编写程序。

 

      4.16  8259级联实验

实验程序清单(INTCAS1.ASM

[vb] view plain copy

  1. SSTACK  SEGMENT STACK  
  2.         DW 32 DUP(?)  
  3. SSTACK  ENDS  
  4. CODE    SEGMENT  
  5.         ASSUME CS:CODE  
  6. START:  PUSH DS  
  7.         MOV AX, 0000H  
  8.         MOV DS, AX  
  9.         MOV AX, OFFSET MIR7     ;取中断入口地址  
  10.         MOV SI, 003CH               ;中断矢量地址  
  11.         MOV [SI], AX                ;IRQ7的偏移矢量  
  12.         MOV AX, CS              ;段地址  
  13.         MOV SI, 003EH  
  14.         MOV [SI], AX                ;IRQ7的段地址矢量          
  15.         MOV AX, OFFSET SIR1     ;取STR1的偏移地址  
  16.         MOV SI, 00C4H  
  17.         MOV [SI], AX  
  18.         MOV AX, CS  
  19.         MOV SI, 00C6H  
  20.         MOV [SI], AX  
  21.         CLI  
  22.         POP DS  
  23.         ;初始化主片8259  
  24.         MOV AL, 11H             0001 0001 级联,边沿触发,要ICW4  
  25.         OUT 20H, AL             ;ICW1  
  26.         MOV AL, 08H             0000 1000 中断类型号从8开始  
  27.         OUT 21H, AL             ;ICW2  
  28.         MOV AL, 04H             0000 0100   
  29.         OUT 21H, AL             ;ICW3  
  30.         MOV AL, 01H             0000 0001 非缓冲方式,8086/8088配置  
  31.         OUT 21H, AL             ;ICW4  
  32.         ;初始化从片8259  
  33.         MOV AL, 11H             0001 0001 级联,边沿触发,要ICW4  
  34.         OUT 0A0H, AL                ;ICW1  
  35.         MOV AL, 30H             0011 0000 终端类型号从30H开始  
  36.         OUT 0A1H, AL                ;ICW2  
  37.         MOV AL, 02H             0000 0010 通过IR1引脚连接主片  
  38.         OUT 0A1H, AL                ;ICW3  
  39.         MOV AL, 01H             0000 0001 非缓冲方式,8086/8088配置  
  40.         OUT 0A1H, AL                ;ICW4  
  41.         MOV AL, 0FDH  
  42.         OUT 0A1H,AL             ;OCW1 = 1111 1101   允许IR1中断请求     
  43.         MOV AL, 6BH                 0110 1011  
  44.         OUT 21H, AL             ;8259 OCW1  
  45.         STI  
  46. AA1:        NOP  
  47.         JMP AA1  
  48. MIR7:   CALL DELAY  
  49.         MOV AX, 014DH  
  50.         INT 10H                 ;M  
  51.         MOV AX, 0037H  
  52.         INT 10H                 ;显示字符7  
  53.         MOV AX, 0020H  
  54.         INT 10H  
  55.         MOV AL, 20H  
  56.         OUT 20H, AL             ;中断结束命令  
  57.         IRET  
  58. SIR1:   CALL DELAY              ;延时  
  59.         MOV AX, 0053H  
  60.         INT 10H                 ;S  
  61.         MOV AX, 0031H  
  62.         INT 10H                 ;显示字符1  
  63.         MOV AX, 0020H  
  64.         INT 10H  
  65.         MOV AL, 20H  
  66.         OUT 0A0H, AL  
  67.         OUT 20H, AL  
  68.         IRET  
  69. DELAY:  PUSH CX  
  70.         MOV CX, 0F00H  
  71. AA0:        PUSH AX  
  72.         POP  AX  
  73.         LOOP AA0  
  74.         POP CX  
  75.         RET  
  76. CODE        ENDS  
  77.         END  START  

实验步骤

1)按图4.16连接实验线路。

2)输入程序,编译、链接无误后装入系统。

3)运行程序,按动KK1+或KK2+,观察实验结果,验证实验程序的正确性。

4)若同时按下KK1+和KK2+,观察实验结果,解释实验现象。

 

附表  输入/输出接口编址

  信号线 编址空间
主片8259   20H、21H
从片8259   A0H、A1H
扩展I/O接口 IOY0 0600H~063FH
IOY1 0640H~067FH
IOY2 0680H~06BFH
IOY3 06C0H~06FFH

附表  INT 10H 使用说明

入口:AH=01H,AL=数据
功能:写AL中的数据到屏上
入口:AH=06H,DS:BX=字串首址,且字串尾用00H填充
功能:显示一字串,直到遇到00H为止

附表 INT 21H使用说明

入口:AH=00H或AH=4CH
功能:程序终止
入口:AH=01H
功能:读键盘输入到AL中并回显
入口:AH=02H,DL=数据
功能:写DL中的数据到显示屏
入口:AH=08H
功能:读键盘输入到AL中无回显
入口:AH=09H,DS:DX=字符串首地址,字符串以 ‘$’ 结束
功能:显示字符串,直到遇到 ‘$’ 为止
入口:AH=0AH,DS:DX=缓冲区首地址,(DS:DX)=缓冲区最大字符数,
(DS:DX+1)=实际输入字符数,(DS:DX+2)=输入字符串起始地址

功能:读键盘输入的字符串到DS:DX指定缓冲区中并以回车结束

发表评论

电子邮件地址不会被公开。 必填项已用*标注