接口8259A.docx
- 文档编号:29994845
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:22
- 大小:22.99KB
接口8259A.docx
《接口8259A.docx》由会员分享,可在线阅读,更多相关《接口8259A.docx(22页珍藏版)》请在冰豆网上搜索。
接口8259A
第7章中断控制器
7.18259A的引脚信号、编程结构和工作原理
一、8259A的外部信号和含义
1、引脚图(图见附加页)与引脚说明
①D7~D0:
数据线
②INT:
中断请求信号;它与CPU的INTR相连,用来向CPU发中断请求(输出)
③INTA#:
中断应答信号;(输入)
④RD#:
读信号;此信号有效时8259A的内容可以输出到数据总线上(输入)
⑤WR#:
写信号;此信号有效时8259A的可以从总线上接收数据(输入)
⑥CS#:
片选信号;(输入)
⑦A0:
端口选择信号;8259A对应2个端口,一个偶端口一个奇端口(输入)
⑧IR7~IR0:
I/O设备的中断请求信号;(输入)
⑨CAS2~CAS0:
从片选择信号;级联时主片端输出,从片输入
⑩SP#/EN#:
主片和从片的选择和驱动信号;
此引脚双向操作
输入时:
=1表示主片,=0表示从片
输出时:
由此信号启动数据总线驱动器
2、说明:
在微机中有2片8259A,主片的地址为20H和21H,从片地址为A0H和A1H。
(微机与8259A的单片连接,级联连接图见附加页)
二、8259A的编程结构和工作原理
1、编程结构(见P236图7-1)
(1)上半部分:
处理部件
中断请求寄存器IRR
中断优先级裁决器PR
当前中断服务寄存器ISR
(2)下半部分:
7个寄存器
ICW1~ICW4:
存放初始化命令字
OCW1~OCW3:
存放操作命令字
2、工作原理:
中断请求寄存器IRR的8位与IR7~IR0对应,当8259A收到中断请求信号后,将在IRR对应位置1,然后根据中断屏蔽寄存器IMR(OCW1)的内容判断该中断请求是否被屏蔽(IMR中对应位为0表示屏蔽,为1表示不屏蔽),如果未屏蔽那么把中断请求信号送入中断优先级裁决器PR,判断此信号的优先级是否高于当前正在执行的中断服务程序,如果高于当前中断则发出中断请求信号。
一旦申请成功,INTA#收到两个负脉冲,
第一个脉冲:
使IRR失效,不接收新的中断请求;ISR对应位置1;IRR相应位清0
第二个脉冲:
将ICW2的内容送数据总线,作为中断类型号;如果ICW4的中断自动结束位为1,则将ISR清0。
7.28259A的工作方式
1.设置优先级的方式
(1)全嵌套方式:
优先级0级最高7级最低,只有比当前优先级高的中断才可以实行中断嵌套。
(2)特殊全嵌套方式:
优先级0级最高7级最低,与当前优先级相同的中断也可以实行中断嵌套。
(3)优先级自动循环方式:
优先级0级最高7级最低,响应过的中断优先级降为最低。
(4)优先级特殊循环方式:
首先编程设置最高优先级,响应过的中断优先级降为最低。
2.屏蔽中断源的方式
(1)普通屏蔽方式
(2)特殊屏蔽方式:
即通过修改屏蔽字以达到修改中断优先级的目的
(可参见计算机组成原理部分)
3.结束中断处理的方式
(1)中断自动结束方式:
只有一片8259A没有中断嵌套时使用;一旦系统进入中断,ISR的对应位自动清0。
(2)一般的中断结束方式:
考虑有中断嵌套时使用
(3)特殊的中断结束方式:
用当前中断服务寄存器ISR不能确定哪个中断是最后一个相应的,采用这种方式。
4.连接系统总线的方式
(1)缓冲方式:
在多片级联的系统中,8259A通过总线驱动器连接数据总线
(2)非缓冲方式:
8259A直接连接数据总线
5.引入中断请求的方式
(1)边沿触发方式:
中断请求输入引脚(IRi)输入上升沿作中断请求信号
(2)电平触发方式:
中断请求输入引脚(IRi)输入高电平作中断请求信号
(3)中断查询方式:
中断查询方式的特点:
8259A不使用INT信号向CPU发中断请求信号
CPU内部的中断允许触发器复位
CPU要使用软件查询来确认中断源
7.38259A的初始化命令字和操作命令字
一、8259A的初始化命令字
1、ICW1的格式和含义
ICW1叫做芯片控制初始化命令字。
8位寄存器,偶地址。
图见P243
①D7~D5:
未使用
②D4:
必须为1,作为ICW1的标志
③D3:
设定中断请求信号的形式,=0边沿触发,=1电平触发
④D2:
无意义
⑤D1:
级联状态;级联时主片和从片都=0,单片8259A时=1
⑥D0:
是否使用ICW4,=1使用,=0不使用
(2)ICW2的格式和含义
ICW2设置中断类型号的初始化命令字。
8位寄存器,奇地址。
①D7~D3:
表示中断类型号的高5位,
②D2~D0:
低3位自动分配,见P244表
(3)ICW3的格式和含义
ICW3标志主片/从片的初始化命令字。
8位寄存器,奇地址。
如果是主片,格式见P244图,每一位与IRi对应,=1表示连接从片,=0表示未连接从片;如果是从片,格式见P244图
①D7~D3:
无意义
②D2~D0:
对应主片引脚
(4)ICW4的格式和含义
ICW4叫做方式控制初始化命令字。
8位寄存器,奇地址。
图见P245
①D7~D5:
为000,作为ICW4的标志
②D4:
=1特殊全嵌套方式,=0非特殊全嵌套方式
③D3:
=1缓冲方式,=0非缓冲方式
④D2:
当D3=1时,=1表示主片,=0表示从片;当D3=0时,无意义
⑤D1:
=1中断自动结束方式,=0非中断自动结束方式,要用指令结束中断
⑥D0:
=1表示8259A所在系统为非8位系统(16位的8086),=0表示8位系统(8080/8085)
二、初始化流程(流程图见P246图7-2)
对初始化流程的几点说明
①ICW1写入偶端口,ICW2~ICW4写入奇端口
②ICW1~ICW4的设置次序固定
③ICW1和ICW2须设置,ICW3和ICW4非必须
④在级联时,主片和从片各设置ICW3
对8259A设置初始化命令字的例子(设8259A的口址为80H,81H)
MOVAL,13H
OUT80H,AL;设置ICW1
;00010011:
边沿触发,1片8259A,设置ICW4
MOVAL,18H
OUT81H,AL;设置ICW2
;00011000:
中断类型号:
18H——1FH
MOVAL,0DH
OUT81H,AL;设置ICW4
;00001101:
非特殊全嵌套方式,缓冲方式,主片,用指令结束中断,在8086系统
微机
MOVAL,13H
OUT20H,AL;设置ICW1
MOVAL,08H
OUT21H,AL;设置ICW2
MOVAL,0DH
OUT81H,AL;设置ICW4
7.48259A的操作命令字
(1)OCW1的格式和含义
OCW1叫做中断屏蔽操作命令字。
8位寄存器,奇地址。
图见P247
Di对应IRi,=1表示中断被屏蔽,=0表示中断被打开
(2)OCW2的格式和含义
OCW2用来设置优先级循环方式和中断结束方式的操作命令字。
8位寄存器,奇地址。
图见P247
①D7:
=1优先级循环方式,=0非优先级循环方式
②D6:
=1表示D2~D0有效(应用在优先级特殊循环方式中),=0D2~D0无效IR0优先级最高
③D5:
=1表示用OCW2作中断结束命令,令ISR复位,=0不用
D7~D5:
组合见P249表7-3,010组合无意义
当D7~D5=011时,特殊中断结束命令,D2~D0指出要清除当前中断服务寄存器的哪一位;
当D7~D5=110时,优先级特殊循环方式,D2~D0指出哪个中断优先级最低;
Di对应IRi,=1表示中断被屏蔽,=0表示中断被打开
(3)OCW3的格式和功能
OCW3的功能:
(1)设置和撤销特殊屏蔽方式
(2)设置中断查询方式(3)设置对内部寄存器的读出命令;偶地址。
图见P249
①D7:
②D6:
特殊的屏蔽模式允许位
③D5:
特殊的屏蔽模式允许位
D6D5:
=0X无意义,
=11只要IF=1系统可以响应任何未被屏蔽的中断请求,好像优先级失效
=10恢复优先级
④D4:
⑤D3:
⑥D2:
查询方式位,=1为中断查询方式
D2D1D0:
=1XX中断查询方式
=010读出IRR
=011读出ISR
=00X无操作
例如
MOVAL,0AH
OUT20H,AL
INAL,20H
;此时AL中为IRR
7.5看看再写
7.6多片8259A组成的主从式中断系统
以下是linux中的操作
主片
moval,0x11
out0x20,al
;边沿触发,级联,设置ICW4
moval,0x20
out0x21,al
;中断类型号:
20H——27H
moval,0x04
out0x21,al
:
IR2有从片
moval,0x01
out0x21,al
;非特殊全嵌套方式,非缓冲方式,非中断自动结束方式,16位系统
moval,0xff
out0x21,al
;屏蔽所有主片中断
从片
moval,0x11
out0xa0,al
;边沿触发,级联,设置ICW4
moval,0x28
out0xal,al
;中断类型号:
28H——2FH
moval,0x02
out0xal,al
:
从片连在主片IR2上
moval,0x01
out0xal,al
;非特殊全嵌套方式,非缓冲方式,非中断自动结束方式,16位系统
moval,0xff
out0xal,al
;屏蔽所有从片中断
设计一个中断处理程序。
要求中断请求信号以跳变方式由IR2引入(可为任一定时脉冲信号),当CPU响应IR2请求时,输出字符串“8259AINTERRUPT!
”,中断10次,程序退出(设8259A的端口地址为20H和21H,中断类型号为40H)。
中断处理程序如下:
DATA SEGMENT
MESS DB'8259A?
INTERRUPT!
',0AH,0DH,'$'
COUNT DB 10 ;计数值为10
DATA ENDS
STACK SEGMENT STACK
STA DB 100HDUP(?
)
TOP EQU LENGTH STA
STACK ENDS
CODE SEGMENT
ASSUME CS:
CODE,DS:
DATA,SS:
STACK
MAIN:
CLI
MOV AX,DATA
NOV DS,AX
MOV AX,STACK
MOV SS,AX
MOV SP,TOP
MOV AL,13H ;8259A初始化
OUT 20H,AL ;单片,边沿触发
MOV AL,40H ;中断类型号40H
OUT 21H,AL
MOV AL,01H ;非自动结束
OUT 21H,AL
MOV AX,SEGINT-P ;设置中断向量
MOV DS,AX ;中断服务子程序入口段基址送DS
MOV DX,OFFSETINT-P ;中断服务子程序入口偏移地址送DX
MOV AL,42H ;IR2的中断类型号42H送AL
MOV AH,25H ;25H功能调用
INT 21H
IN AL,21H ;读IMR
AND AL,0FBH ;允许IR2请求中断
OUT 21H,AL ;写中断屏蔽字OCW1
WAIT1:
STI ;开中断
CMP COUNT,0 ;判断10次中断是否结束
JNZ WAIT1 ;未结束,等待
MOV AX,4C00H ;结束,返回DOS
INT 21H
INT-P PROC ;中断服务子程序
PUSH DS ;保护现场
PUSH AX
PUSH DX
STI ;开中断
MOV DS,AX
MOV DX,OFFSETMESS
MOV AH,09H
INT 21H
DEC COUNT ;控制10次循环
JNZ NEXT
IN AL,21H ;读IMR
OR AL,04H ;屏蔽IR2请求
OUT 21H,AL
NEXT:
CLI ;关中断
MOV AL,20H ;写OCW2,送中断结束命令EOI
OUT 20H,AL
POP DX ;恢复现场
POP AX
POP DS
IRET ;中断返回
INT-P ENDP
CODE ENDS
END MAIN
091ca.asm
dsegsegmentparapublic'data'
t1cipdw?
t1ccsdw?
keyipdw?
keycsdw?
sctabdb0,1Bh,'1234567890-=',08H
db09h,'QWERTYUIOP[]',0dh
db0,'ASDFGHJKL;',60h,0,0
db0,'ZXCVBNM,./',0
db0,0,20h,13dup(0)
db'789-456+1230.',0
buffdb0
countdw0
dsegends
csegsegment
assumecs:
cseg,ds:
dseg
mainprocfar
movax,dseg
movds,ax
pushds
movax,351ch
int21h
movt1cip,bx
movt1ccs,es
movdx,offsetnew1ch
movax,segnew1ch
movds,ax
movax,251ch
int21h
popds
movax,3509h
int21h
movkeyip,bx
movkeycs,es
movdx,offsetnew09h
movax,segnew09h
movds,ax
movax,2509h
int21h
inal,21h
andal,11111100b
out21h,al
movax,dseg
movds,ax
sti
lp:
;movax,0
;int16h
moval,buff
cmpal,1bh
jnzlp
pushds
movdx,t1cip
movds,t1ccs
movax,2509h
int21h
popds
movdx,keyip
movds,keycs
movax,2509h
int21h
movah,4ch
int21h
mainendp
new09hprocfar
pushax
pushbx
sti
inal,60h
cmpal,7fh;去掉断码
jnbeexit9
movbl,al
movbh,0
moval,sctab[bx]
movbuff,al;转换为ASCII码
cmpal,1bh
jbeexit9
movbl,0
movah,0eh
int10h
exit9:
cli
moval,20h
out20h,al
popbx
popax
iret
new09hendp
new1chprocfar
pushax
pushbx
pushcx
pushdx
sti
movbh,0
movah,3
int10h;取当前光标
pushdx
movdh,0
movdl,79
movbh,0
movah,2
int10h;设置新光标,右上角
movax,count
movbl,18
divbl
cmpal,10
jbnext1c
moval,0
movcount,0
next1c:
addal,30h
movbl,0
movah,0eh
int10h;显示
inccount
popdx
movbh,0
movah,2
int10h;恢复光标位置
cli
moval,20h
out20h,al
popdx
popcx
popbx
popax
iret
new1chendp
csegends
endmain
复习:
1、总线周期的含义是什么?
8086/8088的基本总线周期由几个时钟组成?
如一个CPU的时钟频率为24MHz,那么,它的一个时钟周期为多少?
一个基本总线周期为多少?
如主频为15MHz呢?
答:
1.总线周期的含义是总线接口部件完成一个取指令或传送数据的完整操作所需的最少时钟周期数。
2.8086/8088的基本总线周期由4个时钟周期组成。
3.当主频为24MHz时,Tφ=1/24MHz≈41.7ns,T总=4Tφ≈167ns。
4.当主频为15MHz时,Tφ=1/15MHz≈66.7ns,T总=4Tφ≈267ns。
?
2?
什么叫中断向量?
它放在那里?
对应于1CH的中断向量存放在哪里?
如果1CH的中断处理子程序从5110H:
2030H开始,则中断向量应怎样存放?
答:
1.中断处理子程序的入口地址就是中断向量。
2.中断向量放在0段的0~3FFH区域的中断向量表中。
3.对应于类型号为1CH的中断向量应放在00070~00073H的4个单元中。
4.若1CH的中断向量为5110H:
2030H,则中断向量的存放方法为:
00070H存放30H,00071H存放20H(IP);00072H存放10H,00073H存放51H(CS)。
2、设一个接口的输入端口地址为0100H,而它的状态端口地址为0104H,状态口中第5位为1表示输入缓冲区中有一个字节准备好,可输入。
设计具体程序实现查询式输入。
答:
DATASEGMENT
BUFFERDB20DUP(?
);接收数据缓冲区
DATAENDS
CODESEGMENT
ASSUMEDS:
DATA,CS:
CODE
STAT:
MOVAX,DATA;对DS初始化
MOVDS,AX
MOVDI,OFFSETBUFFER
MOVDX,0104H
STATIN:
INAL,DX
TESTAL,20H;测试第5位
JZSTATIN;第5位为0继续测试
MOVDX,0100H
INAL,DX;输入数据
MOV[DI],AL
CODEENDS
ENDSTAT
4、编程将8253计数器0设置为模式1,计数初值为3000H;计数器1设置为模式2,计数初值为2010H;计数器2设置为模式4,计数初值为4030H;地址设为0070H、0072H、0074H、0076H。
答:
MOVAL,32H;设置计数器0为模式1
OUT76H,AL
MOVAX,3000H;写计数初值
OUT70H,AL
MOVAL,AH
OUT70H,AL
MOVAL,74H;设置计数器1为模式2
OUT76H,AL
MOVAX,2010H;写计数初值
OUT72H,AL
MOVAL,AH
OUT72H,AL
MOVAL,0B8H;设置计数器2为模式4
OUT76H,AL
MOVAX,4030H;写计数初值
OUT74H,AL
MOVAL,AH
OUT74H,AL
5、对8255A设置工作方式,8255A的控制口地址为00C6H。
要求端口A工作在方式1,输入;端口B工作在方式0,输出;端口C的高4位配合端口A工作;低4位为输入。
答:
MOVDX,00C6H
MOVAL,0B1H;取方式选择控制字为B1H(10110001B)或B9H
OUTDX,AL
6、设计一个采用异步通信方式输出字符的程序段,规定波特率因子为64,7个数据位,1个停止位,用偶校验,端口地址为40H、42H,缓冲区首址为2000H:
3000H。
答:
模式字为:
01111011B=7BH。
控制字为:
00110101B=35H。
MOVAL,0;为发复位命令作准备
OUT42H,AL
OUT42H,AL
OUT42H,AL
MOVAL,40H;发复位命令
OUT42H,AL
MOVAL,7BH;设置模式字,异步方式,规定波特率因子为64
;7个数据位,1个停止位,偶校验
OUT42H,AL
MOVAL,35H;设置控制字,使发送器和接收器启动,并清除
;出错标志
OUT42H,AL
PUSHDS
MOVBX,2000H;DS:
BX指向输出缓冲区首址
MOVDS,BX
MOVBX,3000H;缓冲区指针初始化
MOVCX,100H;发送100H个字节
BEGIN:
INAL,42H;读取状态字,测试TxRDY是否为1
TESTAL,01H
JZBEGIN;为0表示外设还未取走字符
MOVAL,[BX];从输出缓冲区取数
OUT40H,AL;发送字符
INCBX;修改缓冲区指针
LOOPBEGIN;则再发送下一个字符
POPDS
┆
7、试按照如下要求对8259A设置初始化命令字:
系统中有1片8259A,中断请求信号用电平触发方式,下面要用ICW4,中断类型码为60H、61H……67H,用特殊全嵌套方式,不用缓冲方式,采用中断自动结束方式。
8259A的端口地址为90H、92H。
答:
MOVAL,1BH;ICW1的命令字为00011011B=1BH
OUT90H,AL;ICW1送偶地址端口
MOVAL,60H;ICW2的命令字为60H
OUT92H,AL;ICW2送奇地址端
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 接口 8259