中断控制器8259A及中断服务

合集下载

第8章中断系统和中断控制器8259A

第8章中断系统和中断控制器8259A
对于外部中断,CPU判断标志位IF,若CPU 允许响应外部中断(IF=1),向发出中断请 求的外设返回一个中断应答信号,否则CPU 不响应该中断请求。
4. 保存现场
CPU响应中断,首先需要禁止CPU响应中 断信号,并保存中断返回地址以及其它可 能被破坏的寄存器
8086/8088 CPU的基本中断现场保护需要 将CS寄存器和IP寄存器压入堆栈
普通屏蔽方式 特殊屏蔽方式
普通中断结束方式 特殊中断结束方式
中断触发方式 数据线连接方式
边沿触发方式 电平触发方式 缓冲方式 非缓冲方式
(1)中断触发方式 按照引入中断请求的方式,8259A有下列几种工作方式:
1>边沿触发方式 8259A将中断请求输入端出现的上升沿,作为中断请求
信号,上升沿后 相应引脚,可以一直保持高电平。
可编程,提高中断优先管理的灵活性。
2. 8259A外部结构
CS WR RD D7 D6 D5 D4 D3 D2 D1 D0 CAS0 CAS1 GND
1
8259A
2 3
4
5
6
7 8
9 10 11 12 13
14
28 27 26 25 24 23 22 21 20 19 18 17 16
15
VCC A0 INTA IR7 IR6 IR5 IR4 IR3 IR2 IR1 IR0 INT SP/EN CAS2
2. 优先级判别
多个中断源同时发起中断请求时,CPU需要 对多个中断源的优先级进行判断,响应最紧 急的中断请求。
中断源的优先级需要根据中断源的紧迫性、 重要性以及外设处理速度等进行综合考虑
不可屏蔽中断发生,优先响应不可屏蔽中断。
3. 中断响应

第七章 中断系统和中断控制器8259A

第七章  中断系统和中断控制器8259A

17H*4=90H IP 46 00H CS 3B A4H 00H 46H A4H 3BH
例 n=24H
0000:0090H : 0000:0091H : 0000:0092H : 0000:0093H :
中断处理子程序
3BA4:4600H
2.向中断向量表的设置 向中断向量表的设置
设中断服务程序的入口地址为INTSUB,中断 例7-1设中断服务程序的入口地址为 设中断服务程序的入口地址为 , 类型码务40H,用传送指令设置中断向量表。 用传送指令设置中断向量表。 类型码务 用传送指令设置中断向量表 VECTAB SEGMENT AT 0000、 、 ORG O100H ADDRP DW 2 DUP(?) (?) VECTAB ENDS CODE … SEGMENT CLI
PUSH DS MOV AX,VECTAB , MOV DS,AX , MOV ADDRP,OFFSET INTSUB , MOV ADDRP+2,SEG INTSUB + , POP DS STI CODE ENDS
其中类型为AT的VECTAB段起到对 其中类型为 的 段起到对ADDRP定义 定义 段起到对 地址作用。
中断向量表
• 中断向量表的结构
专用的5个 专用的 个(0#~4#)系统中统一规定 的中断类型。 的中断类型。 保留的27个 保留的 个(5#~31#)为系统开发保 留的中断类型。 留的中断类型。 可供用户定义的224个(32#~225#) 可供用户定义的 个
已知类型中断的中断向量的获取
中断类型号× 中断类型号×4——该中断向量在表中 该中断向量在表中 起始单元的地址。 起始单元的地址。 寻找4个连续存储单元 获得IP及 个连续存储单元, 寻找 个连续存储单元,获得 及CS

8259a中断控制器——利用IRQ2显示中断过程

8259a中断控制器——利用IRQ2显示中断过程

8259a中断控制器:利用8259A的IRQ2显示中断过程目录8259a中断控制器:利用8259A的IRQ2显示中断过程 (1)设计题目: (1)要求: (1)设计思路: (1)实验代码: (2)实验心得体会: (10)设计题目:利用8259A IRQ2显示中断过程要求:1.主是在7段数码管上循环显示‘8’从右到左显示2.中断服务中在7段数码管上依次显示全1234567 89要去显示2秒左右时间可采用软件Software延迟(时间可通过调试大致2秒左右)总计中断9次结束返回DOS3.每次由手动产生IRQ2中断请求信号引起中断设计思路:软件Software方面有两个主要部分:主和中断服务子主首先要完成是些和处理工作例如查找设备设置TPC卡中9054芯片IO口,保存原来0AH号中断中断向量设置新中断向量设置中断掩码显示提示信息然后打开中断进入主循环在主循环中不断在LED上从右向左显示8直到被IRQ2中断信号打断此外在主中还对中断执行进行计数当计数满9次后自动跳出为了使主上8循环可以看出来故将显示8延迟设计比较长当完成9次中断主还要完成些后续处理工作:恢复中断掩码;恢复中断向量;设置TPC卡中9054芯片IO口,关闭中断返回DOS中断子完成在6位数码管上“同时”显示个数功能这个数为1—9中某个可以用循环次数作为参数这里同时显示实质上是利用视觉上暂停效果即只要每秒能在同个数码管上显示信息超过24次看起来就是同时了而这点在现在计算机速度条件下很容易实现为了不发生混乱在中断子执行过程中不允许再次中断另外中还有两个子:findtpc和dispword这些是为了完成查找设备等预处理硬件方面实验时把总线上IRQ2引脚和拨键开关相连以手动产生中断信号另外再把LED片选信号CS和210-217相连(注:LED显示是通过向LED数据端口送入数据再向LED位选端口送入位选信号来实现)实验代码:;386以上微机适用;纯dos下才能使用;tasm4.1或以上编译;**********************************************;;*利用8259AIRQ2 显示中断过程*;;**********************************************;io_plx_device_id equ 05406h ;TPC卡设备IDio_plx_vendor_idequ 010b5h ;TPC卡厂商IDIO_PLX_SUB_ID EQU 0905410B5H;TPC卡子设备及厂商IDportseg EQU 211H-200H ;数码管端口地址portbit EQU 210H-200Hdata segmentcsregdw?[Page]ipreg dw? ;旧中断向量保存空间irq_times dw10 ;中断计数msg1 db 0dh,0ah,\'TPC pci card Interrupt\',0dh,0ah,\'$\'msg2 db 0dh,0ah,\'Press any key to exit!\',0dh,0ah,\'$\'msg3 db 0dh,0ah,\'Press DMC or wait to errupt 10 times and exit!\',0dh,0ah,\'$\'io_9054base_address db 4 DUP(0) ;TPC卡PCI接口芯片I/O基地址暂存空间io_base_addressdb 4 DUP(0) ;TPC卡I/O基地址暂存空间errupt_line db 2 DUP(0) ;TPC卡中断号暂存空间pcicardnotfind db 0dh,0ah,\'TPC pci card not find or address/errupt error !!!\',0dh,0ah,\'$\' io9054baseaddress db 0dh,0ah,\'TPC pci card 9054 Chip I/O Base Address : \',\'$\' iobaseaddress db 0dh,0ah,\'TPC pci card I/O Base Address : \',\'$\'number db 0dh,0ah,\'TPC pci card Interrupt Line : \',\'$\'enter_ db 0dh,0ah,\'$\'MESS DB \'8253A TIMER0 IN MODE3! COUNT=0200H\',0AH,0DHDB \'8253A TIMER1 IN MODE2! COUNT=0aH\',0AH,0DH,\'$\'irq_vect db 08h,09h,0ah,0bh,0ch,0dh,0eh,0fh,70h,71h,72h,73h,74h,75h,76h,77h;新中断向量,中断0-7向量为:08h-0fh,中断8-15向量为:70h-77hirq_mask_0_7_table db 011111110b,011111101b,011111011b,011110111bdb 011101111b,011011111b,010111111b,001111111bdb 011111011b,011111011b,011111011b,011111011b[Page] db 011111011b,011111011b,011111011b,011111011b;新中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零irq_mask_8_15_table db 0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh,0ffh db 011111110b,011111101b,011111011b,011110111bdb 011101111b,011011111b,010111111b,001111111b;新中断掩码,中断0-7时全,中断8-15时从低至高相应位为零LED DB 06,5BH,4FH,66H,6DH,7DH,07,7FH,6FHdata endsstacks segmentdb 100 dup (?)stacks endscode segmentassume cs:code,ds:data,ss:stacks,es:datastart:;Enable Local Interrupt Input.386climov ax,datamov ds,axmov es,axmov ax,stacksmov ss,axcall findtpc ;查找TPC卡资源并显示movdx,word ptr io_9054base_addressadd dx,68h;设置tpc 卡中9054芯片io口,使能中断in ax,dxor ax,0900hout dx,axmov bx,word ptr errupt_line ;保存原中断向量mov al, ptr [irq_vect+bx]mov ah,35h21hmov ax,esmov csreg,ax[Page] mov ipreg,bxmov bx,word ptr errupt_line ;设置新中断向量mov al, ptr [irq_vect+bx]mov cx,csmov ds,cxmov dx,off _procmov ah,25h21hmov ax,datamov ds,axmov es,axin al, 21h ;设置中断掩码mov bx,word ptr errupt_linemov ah, ptr [irq_mask_0_7_table+bx]and al,ahout 21h, alin al, 0a1hmov bx,word ptr errupt_linemov ah, ptr [irq_mask_8_15_table+bx]and al,ahout 0a1h, almov dx,off msg2mov ah,09h21hmov dx,off msg3mov ah,09h21hmov irq_times,0sti ;开中断loop1:cmp irq_times,9 ;等待中断并判断中断9次后退出jz exitmov ax,datamov ds,ax[Page] mov al,7FHmovdx,word ptr io_base_addressadd dx,portsegout dx,almov al,blmovdx,word ptr io_base_addressadd dx,portbitout dx,alpushcxmov cx,0FFFFhskip3:push cxmov cx,03FFHskip4:loop skip4pop cxloop skip3pop cxshl bl,1cmp bl,40hjne skip5mov bl,01hskip5:jmp loop1exit:climov bx,word ptr errupt_line ;恢复中断掩码mov ah, ptr [irq_mask_0_7_table+bx]not ahin al, 21hor al, ahout 21h, almov bx,word ptr errupt_linemov ah, ptr [irq_mask_8_15_table+bx]not ahin al, 0a1hor al, ah[Page] out 0a1h, almov bx,word ptr errupt_line ;恢复原中断向量mov al, ptr [irq_vect+bx]mov dx,ipregmov cx,csregmov ds,cxmov ah,25h21hmov ax,data ;设置tpc 卡中9054芯片io口,关闭中断mov ds,axmov dx,word ptr io_9054base_address add dx,68hin ax,dxand ax,0f7ffhout dx,axmov ax,4c00h21h ;退出_proc proc farclipush axpush dxpush dsmov bl,01hmov ax,datamov ds,axmovsi,irq_timesmov cx,05FFHagain:mov al,LED[si]movdx,word ptr io_base_addressadd dx,portsegout dx,almov al,blmovdx,word ptr io_base_addressadd dx,portbit[Page] out dx,alshl bl,1cmp bl,40hjne skip6mov bl,01hskip6:push cxmov cx,0FFFFHagain2:pushcxmov cx,10again4:loopagain4pop cxloop again2pop cxloop againmov al,20h ;Send EOIout 0a0h,alout 20h,alinc irq_timespop dspop dxpop axstiiret_proc endpfindtpc proc near ;查找TPC卡资源并显示pushadpushfdmov ax,0b101h1ahjc findtpc_notfind ;检查PCI BIOS是否存在mov ax,0b102hmov cx,io_plx_device_idmov dx,io_plx_vendor_idmov si,01ahjc findtpc_notfind ;检查tpc卡是否安装,设备号、厂商号[Page]mov ax,0b10ahmov di,02ch1ahjc findtpc_notfindcmp ecx,io_plx_sub_idjnz findtpc_notfind ;检查tpc卡是否安装,子设备号、厂商号mov ax,0b10ahmov di,14h1ahjc findtpc_notfind ;读TPC卡9054芯片I/O基址信息mov dword ptr io_9054base_address,ecxand ecx,1jz findtpc_notfind ;检查是否为i/o基址信息mov ecx,dword ptr io_9054base_addressand ecx,0fffffffehmov dword ptr io_9054base_address,ecx;去除i/o指示位并保存MOV AX,0B10AHMOV DI,18HINT 1AHJCfindtpc_notfind ;读TPC卡I/O基址信息mov dword ptr io_base_address,ecxand ecx,1jz findtpc_notfind ;检查是否为i/o基址信息mov ecx,dword ptr io_base_address[Page] and ecx,0fffffffehmov dword ptr io_base_address,ecx ;去除i/o指示位并保存mov ax,0b10ahmov di,3ch1ahjc findtpc_notfind ;读TPC卡中断信息and cx,0ffhmov word ptr errupt_line,cx ;去除errupt其它指示位并保存mov dx,off io9054baseaddress ;显示i/o提示信息mov ah,09h21hmov ax,word ptr io_9054base_addresscall dispword ;显示i/o基地址mov dx,off iobaseaddress ;显示i/o提示信息mov ah,09h21hmov ax,word ptr io_base_addresscall dispword ;显示i/o基地址mov dx,off number ;显示errupt提示信息mov ah,09h21h[Page] mov ax,word ptr errupt_linecall dispword ;显示中断号mov dx,off enter_ ;加回车符,换行符21hpopfdpopadretfindtpc_notfind:mov dx,off pcicardnotfind ;显示未找到tpc卡提示信息mov ah,09h21hmov ax,4c00h21h ;退出findtpc endpdispword proc near ;显示子push dxpush cxpush bxmov cx,4mov bx,16dispword_loop1:push axpush cxsub bx,4mov cx,bxshr ax,cland al,0fh ;首先取低4位[Page] mov dl,alcmp dl,9 ;判断是否<=9jle dispword_num ;若是则为\'0\'-\'9\',ASCII码加30H add dl,7 ;否则为\'A\'-\'F\',ASCII码加37Hdispword_num:add dl,30hmov ah,02h ;显示21hpop cxpop axloop dispword_loop1pop bxpop cxpop dxret ;子返回dispword endpend start实验心得体会:本实验难点在LED显示上由于在此的前我直认为LED显示是由8255A驱动所以开始做这个时我首先想到是利用8255A但是结合实验箱上LED我才发现这样思路方法行区别于是再回头认真学习了下LED显示原理才发现LED显示其实很简单只要往数据端口送数据再往位选端口送入位选代码就可以了这下流程变得豁然开朗另外在设计时候我和其他同学讨论了手动中断信号种种产生方式最终发现用开关直接和总线插槽上IRQ2直接相连时最简单思路方法!本实验些预处理操作和有关TPC实验板化、后处理都是结合平时实验在此基础上修改完成经过小组成员致努力我们圆满完成了这次实验任务!经过此次实验我体验了从实战到学习再到实战过程乐趣。

第8章 中断系统与中断控制器8259A

第8章  中断系统与中断控制器8259A

第8章中断系统与中断控制器8259A
(4)恢复现场:用弹栈指令把保护现场时入栈寄存器内容 恢复,注意应按先进后出的原则,恢复寄存器原来的内容 值。出栈后,堆栈指针也应恢复到进入中断处理时的位置。 (5)中断返回: 8086CPU必须根据中断结束方式,发中断 结束指令,并在最后用一条中断返回指令IRET。中断返 回指令IRET的作用是将断点的内容重新送入CS和IP寄存 器和标志寄存器,保证CPU从断点开始执行原来的程序。
第8章中断系统与中断控制器8259a存储器地址中断向量地址存储器内容中断向量对应中断类型号00000h中断服务程序入口偏移地址低8位00001h中断服务程序入口偏移地址高8位00002h中断服务程序入口段基址低8位00003h中断服务程序入口段基址高8位00004h中断服务程序入口偏移地址低8位00005h中断服务程序入口偏移地址高8位00006h中断服务程序入口段基址低8位00007h中断服务程序入口段基址高8位003f8h中断服务程序入口偏移地址低8位254003f9h中断服务程序入口偏移地址高8位003fah中断服务程序入口段基址低8位003fbh中断服务程序入口段基址高8位003fch中断服务程序入口偏移地址低8位255003fdh中断服务程序入口偏移地址高8位003feh中断服务程序入口段基址低8位003ffh中断服务程序入口段基址高8位表818086cpu中断向量表第8章中断系统与中断控制器8259a每个中断向量占用4个存储单元4个单元中的前2个单元存放的是中断服务程序所在段内的偏移量ip的内容16位地址
第8章中断系统与中断控制器8259A
3. 中断响应 根据中断请求的中断源的类型不同,中断响应分成以下两 种情况: (1)对非屏蔽中断请求的响应:该请求信号与CPU的NMI 引脚线相连接,如果CPU检测到该请求,CPU执行完当前 指令后就自动执行相应的中断服务程序,CPU不需要发出 中断响应信号。 (2)对可屏蔽中断INTR请求的响应:要检查IF,如IF=1, CPU允许中断,就会在结束当前指令后响应该外设的中断 请求。CPU响应可屏蔽中断时要自动完成下列几步操作:

8259可编程的中断控制器

8259可编程的中断控制器

82598259A是一个可编程的中断控制器,应用在实时的、以中断方式进行监控的计算机系统中。

用一片8259A可以管理8个等级的中断申请。

并可再经级联扩展多至8片8259A,使得中断等级可扩展多至64级。

8259A可以作为一个I/O外围器件,用系统软件编程,它所具有的多种优先权方式可以通过主程序在任何时候进行改变或重新组织。

这意味着可以按照全系统的外围情况和要求,设计出一个完整的中断结构,用来实现优先管理、中断屏蔽以及自动中断矢量转移。

它几乎可以适合于任何一种中断控制的结构,因而得到了广泛的应用。

1 引脚图8259A为28脚双列直插式封装的器件。

2 内部结构其工作过程如下:第一步:当中断请求线(IR0~IR7)上有信号输入时,就把中断请求寄存器IRR相应的位置1。

第二步:当IRR的一位置1后,就会与IMR中相应的屏蔽位进行比较,如该屏蔽位为0,则请求被发送给优先级分析器;如该屏蔽位为1,则封锁该请求。

第三步:当一个中断请求被输入优先级分析器后,将由优先权分析器判定其优先权,然后向CPU 发中断申请,INT脚变高(INT联到8086的INTR)。

第四步:CPU的INTR引脚为异步状态接收,也就是它可以在任何时间(与时钟无关)接收中断。

在软件控制下利用STI指令(中断置位)或CLI(中断复位)指令可分别将CPU的“中断开放标志位”IF置位或复位,可以做到接受或不理睬在INTR上的中断申请。

第五步:假定CPU中的IF标志为1,则CPU在完成当前指令的即进入中断响应周期,这个中断响应周期将标志寄存器入栈,然后清除IF标志,关闭了中断。

再将代码段寄存器和指令指针也入栈(这是为了从中断服务程序返回),然后CPU发出第二个 INTA脉冲通知8259A,说明8086已经允许了它的中断请求。

若8086用于“最小方式”,则INTA脉冲信号为8086 INTA引脚上的信号;若8086用于“最大方式”时,则8086 LOCK脚在中断响应序列执行期间变为低电平。

中断系统和中断控制器8259A详解

中断系统和中断控制器8259A详解
∧∧
微 机 原
第7章 中断系统和中断控制器8259A


应 用
7.1 中断的基本概念
∨∨
•中断:是指CPU在正常运行程序时,由于内部或外部事件 引起CPU暂时中止执行现行程序,转去执行请求CPU为其 服务的那个外设或事件的服务程序,待该服务程序执行完 后又返回到被中止的程序这样一个过程。
•中断源:能发出中断申请的外设或引起中断的原因。
IRR锁存
逻辑电路根据IMR判断 IMR对应位为0
优先权判别器PR




CPU响应中断 IF=1 CPU的INTR端
高 8259A的INT端为1
INTA 8259A
ISR相应位置1, IRR响应位清0,
送中断类型码
●若允许嵌套,PR依据ISR的状态,判断新的中断请求优先权是否高 于正在服务的中断,是则送出INT=1。 ●服务结束,8259A清除ISR响应位。
提高了CPU的利用效率。
7.1.2 中断处理过程
∧∧
微 机
1.中断过程

理 及
● 对于不同的微机系统,CPU中断处理的具体过程不尽相同,但是一
应 用
个完整的中断基本过程应包括五个基本过程:
∨∨


保护现场







断 响
断 处
断 返
开中断





中断处理
产指断触生令接发中或口器断电和CP信路中U确 最号有断引定高。一屏脚有的来个蔽。中那至中触每断个于断发个请中中请器中C自关保形求断P断 求 。动中护成U且 源完 断 现 中响优 。成 ; 场 断应先下 保 服;进级列 护 务入中 中 中工 断 程中断 断作 点 序断服 服 服: ; 入周务 务 务口期就 程 程地,是 序 序弹址过 结C出P程 构断U。 如执点图行,返回主程恢中关序复断。中现返断场回

中断控制器8259A

中断控制器8259A

在第二个中断响应周期,8259A将向 CPU输送如表8-2所示的中断向量,其中 T7~T3是用户在8259A初始化编程中规定 的,而低3位则由8259A自动插入。
8259A 的 编程
8259A的编程可以分为两种: (1)初始化编程:由CPU向8259A送2~4个字节的 初始化命令字ICW(Initialization Command Word)。在8259A开始正常工作之前,必须由初始 化命令字,使其处在开始点。

(2)工作方式编程:由8259A送三个字节的工作命 令字OCW(Operatioon Command Word), 以规定 8259A的工作方式。工作命令字可在8259A已经初 始化以后的任何时间写入。
(1)8259A 初始化编程
对8259A初始化编程就是向它输送2~4个 字节的初始化命令字。
(2)工作方式编程
(4)8259A在接收到CPU的/INTA信号后, 使最高优先权的ISR位置位,而响应的IRR 位复位。(但在此周期中,8259A不向系 统总线发任何内容) (5)8086CPU将启动另外一个中断响应 周期,输出另一个INTA脉冲。在这个周期, 8259A向数据总线输送一个8位的指针(向 量)。 (6)这样中断响应周期就完成了,CPU就 可以至中断服务程序。
中断控制器8259A
在学习中断控制器之前,先回顾中断技术在微机系统 的一些用途。
8259A 的中断顺序(应用于8086系统) (1)当一条或若干条中断请求输入线 (IR7~IR0)变高,则使中断请求寄存器 IRR的相应位置位。 (2)若中断请求线中至少有一条中断允 许,则8259A由INT引脚向CPU发送出中 断请求信号。 (3)若CPU是在开中断状态,则在当前 指令执行完以后,用/INTA作为响应。

实验四 8259A的单级中断控制实验

实验四 8259A的单级中断控制实验

实验四使用8259A的单级中断控制实验一、实验目的1.掌握中断控制器8259A与微机接口的原理和方法。

2.掌握中断控制器8259A的应用编程。

二、实验内容编制程序,利用开关作为8259芯片IR7的中断源,人工控制产生单一中断。

中断的功能是驱动发光二极管,使其亮灭,不停地闪动。

三、实验提示8259中断控制器是专为控制优先级中断设计的芯片。

它将中断源优先级排队,辩别中断源以及提供中断矢量的电路集于一片中。

因此无需附加任何电路,只需对8259进行编程,就可以管理8级中断,并选择优行模式和中断请求方式,即中断结构可以由用户编程来设定。

同时,在不需要增加其它电路的情况下,通过多片8259的级联,能构成多达64级的矢量中断系统。

实验箱中采用一片8259A中断控制芯片,工作于主片方式,8个中断请求输入端IR0~IR7对应的中断型号为8~F,其和中断矢量关于如下表所示。

表1 8259中断矢量对应关系务程序程序,使系统每次响应外部中断IR7时发光二极管闪烁。

四、实验电路五、实验软件清单Port0 EQU 0FFE0HPort1 EQU 0FFE1HCODE SEGMENTASSUME CS:CODE,DS:CODE,ES:CODEORG 3400HP8259: CLIMOV AX,OFFSET INT8259MOV BX,003CHMOV [BX],AXMOV BX,003EHMOV AX,0000HMOV [BX],AXCALL FOR8259MOV AL,0FEHMOV DX,0FFE4HSTIJMP $;============================== FOR8259:MOV AL,13HMOV DX,Port0OUT DX,ALMOV AL,08HMOV DX,Port1OUT DX,ALMOV AL,09HOUT DX,ALMOV AL,7FH ;IRQ7OUT DX,ALRET;--------------------------- INT8259:cliPush dxPush axMOV AL,20HMOV DX,Port0OUT DX,ALPop axPop dxOut dx,almov cx,0loop $Rol al,1STIIRETCODE ENDSEND P8259六、实验软件框图七、实验步骤(1)按实验电路图连接线路:①开关Ki 和8259 7号中断IR7插孔相连。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验内容:中断控制器8259A及中断服务
1、实验连线原理见图1所示:
8259A连线:
(1)单脉冲与时钟单元“”插孔和8259的3号中断IR3插孔相连作为中断源;
(2)8259的INT连8088的INTR(Xl5);
(3)8259的INTA连8088的INTA(Xl2);
(4)8259的CS端接EX1(8259A端口地址是60H,61H);
(5)A0→A0。

(6)IOWR→IOWR;
(7)IORD→IORD;
(8)连通CPU和8259A的数据总线,JX4→JX17。

8255连线:
(1)将8255的A端口的PA7到PA0连接到灯L1~L8上。

图1:实验连线图
2、实验原理:按动按键AN0后,单脉冲与时钟单元部件会产生“”信号,该信号的上升沿作为中断请求送8259A的IR3引脚,如果8259A没有屏蔽该级中断并且其优先级最高,8259A向CPU的INTR引脚送中断,CPU如果允许响应中断,则进入中断处理子程序,中断处理子程序向8255A的A端口送数据,将灯L1~L8点亮1秒。

3、实验要求:单片8259A以缓冲方式连接数据总线,以上升沿作为中断请求信号,中断源通过IR3引入,优先级采用一般全嵌套方式,非自动中断结束方式,引脚IR0~IR7的中断类型号为08F~0FH,编写一个汇编程序,主程序完成8255和8259A的初始化,循环等待中断请求;中断处理子程序将灯点亮1秒后熄灭。

4、端口地址:
5、系统内存分配:
5、程序结构:
CODE SEGMENT
ASSUME CS:CODE
MAIN PROC
START: ;主过程
;初始化8259
;初始化8255
;调用3号中断 MAIN ENDP
INT3 PRCO
……;中断处理子程序 INT3 ENDP
DELAY PROC
…… ;延时子过程
DELAY ENDP
CODE ENDS
END
6、程序流程图
主程序
代码:
PA EQU 0FF28H ;8255A端口地址标号定义 PB EQU 0FF29H
PC EQU 0FF2AH
PCTL EQU 0FF2BH
INTPORT1 EQU 0060H ;8259控制口地址标号定义 INTPORT2 EQU 0061H
CODE SEGMENT
ASSUME CS:CODE
ORG 1000H
MAIN PROC
START: CLI ;CPU关中断
MOV AL,80H ;初始化8255
MOV DX,0FF2BH
OUT DX,AL
PUSH DS ;保护DS
MOV AX,0
MOV DS,AX
MOV DI,0B*4
MOV DX,OFFSET INT3
MOV WORD PTR[DI],DX
MOV DX,SEG INT3
MOV WORD PTR[DI+2],DX
POP DS ;恢复DS
MOV AL,13H ;初始化8259A
OUT 60H,AL
MOV AL,08H
OUT 61H,AL
MOV AL,0DH
out 61H,AL
MOV AL,0F7H
OUT DX,AL ;开放8259A中断
STI ;CPU开中断
HLT
WATING: JMP WATING ;循环等待中断请求
MAIN ENDP
INT3 PROC
PUSH DX
PUSH AX ;保护现场
STI
MOV DX,PA
MOV AL,00H
OUT DX,AL ;灯全亮
CALL DELAY1S ;延时子程序
MOV AL,0FFH
OUT DX,AL ;灯全灭
MOV DX,INTPORT1
MOV AL,20H
OUT DX,AL ;送中断结束命令 CLI
POP AX
POP DX ;恢复现场
MOV AL,20H
OUT 60H,AL
IRET ;中断返回
INT3 ENDP
DELAY1S PROC
PUSH CX
PUSH DX
MOV DX,04
AGAIN: MOV CX,0FFFFH
DELAY: LOOP DELAY
DEC DX
JNZ AGAIN
POP DX
POP CX
RET
DELAY1S ENDP
CODE ENDS
END START。

相关文档
最新文档