资源描述
例例1:使计数器:使计数器T1工作在方式工作在方式0进行进行16位二进制计位二进制计 数,设控制口地址为数,设控制口地址为307H, 则程序段为:则程序段为:MOV DX,307H ;控制口;控制口MOV AL,01110000B ;方式字;方式字 OUT DX,ALMOV DX,305H ;T1数据口数据口MOV AL,BYTEL ;计数值低字节;计数值低字节OUT DX,ALMOV AL,BYTEH ;计数值高字节;计数值高字节OUT DX,AL三、三、8253的应用的应用例例2:在:在 PC/XT 机中,机中, 8253 通道通道 1 工作于方工作于方 式式 2 ,用它产生间隔为,用它产生间隔为 15 s 的负脉冲的负脉冲 信号用于信号用于 对动态对动态 RAM 刷新的定时信号,刷新的定时信号, 计数脉冲输入为计数脉冲输入为 1.19MHZ ,试计算出应,试计算出应 写入的计数值是多少写入的计数值是多少 ? 1819. 111511MHzsTTNCLKOUT例例3. 设某应用系统中,系统提供一个频率为设某应用系统中,系统提供一个频率为 10kHz的时钟信号,要求每隔的时钟信号,要求每隔100ms采集采集 一次数据。一次数据。(1)选择工作方式)选择工作方式 由于系统每隔由于系统每隔100ms定时中断一次,且采定时中断一次,且采样频率为样频率为10Hz,可选用,可选用方式方式2来实现。当来实现。当8253定时器工作在方式定时器工作在方式2时,在写入控制字与计数初时,在写入控制字与计数初值后,定时器就启动工作,每到值后,定时器就启动工作,每到100ms时间,时间,即计数器减到即计数器减到1时,输出端时,输出端OUT0输出一个输出一个CLK周期的低电平,向周期的低电平,向CPU申请中断,申请中断,CPU在中断在中断服务程序中完成数据采集,同时按原设定值重服务程序中完成数据采集,同时按原设定值重新开始计数,实现了计数值的自动重装。新开始计数,实现了计数值的自动重装。(2)确定计数初值)确定计数初值 已知已知fCLK0=10kHz,则,则TCLK0=0.1ms,所以,所以 计数初值计数初值 N=TOUT0/TCLK0 =100ms/0.1ms=1000=03E8H(3)初始化编程)初始化编程 根据以上要求,可确定根据以上要求,可确定8253通道通道0的的方式控制方式控制 字为字为00110100B,即,即34H。初始化程序段如下:初始化程序段如下:MOV AL,34H;通道通道0,16位计数,位计数, ; 方式方式2,二进制计数,二进制计数OUT 13H,AL;写入方式控制字到控制字寄存器写入方式控制字到控制字寄存器MOV AL, 0E8H; 计数初值低计数初值低8位位OUT 10H,AL;写入计数初值低;写入计数初值低8位到通道位到通道0MOV AL, 03H; 计数初值高计数初值高8位位OUT 10H,AL;写入计数初值高;写入计数初值高8位到通道位到通道0例例4.通过通过PC机系统总线在外部扩展一个机系统总线在外部扩展一个8253, 利用其通道利用其通道0记录外部事件的发生的次记录外部事件的发生的次 数,输入一个高脉冲表示事件发生数,输入一个高脉冲表示事件发生1次。次。 当事件发生当事件发生100次后就向次后就向CPU提出中断提出中断 请求(边沿触发),假设请求(边沿触发),假设8253片选信号片选信号 的的I/O地址范围为地址范围为200H203H,如图如图。根据要求,可以选择根据要求,可以选择方式方式0来实现,计数来实现,计数初值初值N=100。8253初始化程序段如下:初始化程序段如下:译码译码电路电路MOV DX,203H;设置方式控制字地址;设置方式控制字地址MOV AL,10H;设定通道;设定通道0为为工作方式工作方式0, ;二进制计数,只写入低字节计数值;二进制计数,只写入低字节计数值OUT DX,ALMOV DX,200H;设置计数器通道;设置计数器通道0的地址的地址MOV AL,64H;计数初值为;计数初值为100OUT DX,AL例例5. 已知某已知某8253占用占用I/O空间地址为空间地址为320H 323H,如下,如下图图所示,输入其所示,输入其CKL1端端 的脉冲频率为的脉冲频率为1MHz,要求用,要求用8253连续连续 产生产生10秒的定时信号。秒的定时信号。分析:分析:8253的一个通道的最大计数范围为的一个通道的最大计数范围为65536,本例中要求输出本例中要求输出10秒定时信号,则计数初值秒定时信号,则计数初值N=10/10-6=107,超过了,超过了8253一个通道的最大计数一个通道的最大计数值,此时可以使用值,此时可以使用2个个8253通道级连方式来实通道级连方式来实现。若级连前现。若级连前2个通道的初值为个通道的初值为N1和和N2,则级,则级连后作为一个整体的计数值为连后作为一个整体的计数值为N=N1N2。图图 82538253通道的级联通道的级联通道通道1 1通道通道2 210秒定秒定时输出时输出设计数器使用方式设计数器使用方式2,二进制计数,计数初值,二进制计数,计数初值为:为:N1=500=1F4H,N2=20000=4E20H,则通道则通道1、2的初始化程序如下:的初始化程序如下:MOV DX,323HMOV AL,74H;01110100B,通道,通道1,写入,写入 ;16位初值,位初值,方式方式2,二进制计数,二进制计数OUT DX,AL;写入通道;写入通道1方式字方式字MOV DX,321HMOV AL, 0F4HOUT DX,AL;写入初值;写入初值500的低的低8位入通道位入通道1MOV AL,01HOUT DX,AL;写入初值;写入初值500的高的高8位入通道位入通道1MOV DX,323HMOV AL,0B4H;10110100B,通道,通道2,写入,写入 ;16位初值,位初值,方式方式2,二进制计数,二进制计数OUT DX,AL;写入通道;写入通道2方式字方式字MOV DX,322HMOV AL, 20HOUT DX,AL;写入通道;写入通道2初值初值20000的低的低8位位MOV AL,4EHOUT DX,AL;写入通道;写入通道2初值初值20000的高的高8位位例例6:控制扬声器发声,:控制扬声器发声,如图:如图:已知已知8253用于控制发声用于控制发声例例6: 8253的应用举例的应用举例例例6:发音频率设置子程序:发音频率设置子程序SSP PROC NEAR MOV AL, 0B6H;计数器计数器2初值为初值为16位位, 方式方式3二进制格式二进制格式 OUT 43H,AL ;控制口地址;控制口地址 MOV AX, 1983 ; 计数初值计数初值 OUT 42H,AL ;发送低字节;发送低字节 MOV AL, AH ; OUT 42H,AL ;发送高字节;发送高字节 IN AL, 61H ;读取;读取 8255的的PB口原输出值口原输出值 MOV AH, AL ;将原输出值保留于;将原输出值保留于 AH中中计数值为:计数值为: 1.19318106600HZ=1983 OR AL, 03H ;使;使PB1 PB0均为均为1OUT 61H,AL ;打开打开GATE2门,输出方波到扬声器门,输出方波到扬声器SUB CX, CX ;CX为循环计数为循环计数,最大为最大为 65536次次L: LOOP L ;延时循环;延时循环DEC BL ;BL为子程序入口条件为子程序入口条件JNZ L ;BL=6,扬声器发长声,扬声器发长声, BL=l发短声发短声MOV AL,AH ;取回取回 A.H中的中的 8255 PB口的原输出值口的原输出值 OUT 61H,AL;恢复;恢复8255PB口。口。RET ;返回;返回SSP ENDPMOV AL, 80H OUT 8BH,ALMOV AL,ODH例例2:已知某已知某8255A在系统中占用在系统中占用888BH号端号端 口地址,现欲安排其口地址,现欲安排其PA,PB,PC口全口全 部为输出,部为输出,PA,PB口均工作于方式口均工作于方式0模模 式,并将式,并将PC6置位,使置位,使PC3复位,试编写复位,试编写 出相应的初始化程序出相应的初始化程序.OUT 8BH,ALMOV AL,06HOUT 8BH,AL方式方式置位置位/复位复位(1) MOV DX, 203H MOV AL, 10111000B OUT DX, AL 例例3:设:设8255的端口地址为的端口地址为200H203H,要求要求: PA口方式口方式1输入;输入;PB口方式口方式0输出;输出; PC7PC6为输入;为输入;PC1PC0为输出。为输出。 试写出试写出8255的初始化程序。的初始化程序。 程序要求当程序要求当PC7=0时置位时置位PC1,而当,而当 PC6=1时复位时复位PC0,试编制相应的程序。,试编制相应的程序。 方式方式(2) MOV DX, 202H IN AL, DX MOV AH, AL TEST AL, 80H JNZ NEXT1 MOV DX, 203H MOV AL, 03H ;对;对PC1置位置位 OUT DX, AL 置位置位/复位复位NEXT1:MOV AL, AH TEST AL, 40H JZ NEXT2 MOV AL,00H ;对对PC0复位复位 MOV DX, 203H OUT DX, ALNEXT2: 置位置位/复位复位例例4打印机接口。为某应用系统配置一个并行打印机接口。为某应用系统配置一个并行 打印机接口,并且通过接口打印机接口,并且通过接口CPU采用查询采用查询 方式打印。已知欲打印数据存放在数据段方式打印。已知欲打印数据存放在数据段 中有效地址为中有效地址为2000H的单元中。的单元中。8255的口的口 地址为地址为80H、81H、82H、83H。分析:由于打印接口直接面向的对象是打印机分析:由于打印接口直接面向的对象是打印机 接口标准,而不是打印机本身,因此打接口标准,而不是打印机本身,因此打 印机接口要按照接口标准的要求进行设印机接口要按照接口标准的要求进行设 计,主要是计,主要是8位并行数据线位并行数据线DATA0 DATA7,2条握手联络线条握手联络线STB#、ACK# 和和1条忙线条忙线BUSY。有关打印机接口工作有关打印机接口工作 时序见下图。时序见下图。 从图可见,当从图可见,当CPU通过接口要求打印机打通过接口要求打印机打印数据时,先要查看印数据时,先要查看BUSY信号,信号,BUSY0时时才能向打印机输出数据,在把数据送上才能向打印机输出数据,在把数据送上DATA线后,先发线后,先发STB=0信号通知打印机,打印机接信号通知打印机,打印机接到到STB=0后,发出后,发出BUSY1,接收效据,当数接收效据,当数据接收好并存入内部打印缓冲器后,送出据接收好并存入内部打印缓冲器后,送出ACK=0信号,表示打印机已准备好接收新数据,并信号,表示打印机已准备好接收新数据,并复位复位BUSY=0。DATA0DATA7STBBUSYACKCPU PA07PC6PC2地地 地地BUSYSTBDATA07111298255A打印机插座打印机插座结结 束束8255A 初始化初始化BUSY=0?送送 数数送送 STB#开始开始YN 图中用图中用8255A的的PA口作为输口作为输出出打印数据打印数据口,工作于方式口,工作于方式0,PC口高口高4位工作于输出方位工作于输出方式,式,PC6产生产生STB信号;信号;PC口低口低4位工作于位工作于输入方式,输入方式,PC2接收打印机的接收打印机的BUSY信号。程信号。程序流程如右示。序流程如右示。 MOV AL,81H ;工作方式字工作方式字 OUT 83H,AL MOV AL, 0DH ;PC6=1, 使使STB=1 OUT 83H,ALTB: IN AL,82H ;查查BUSY=0?(PC2=0) TEST AL,04H ;00000100B JNZ TB ;忙则等待;不忙则向忙则等待;不忙则向A口送数口送数方式方式置位置位/复位复位MOV AL,2000H ;从内存取数从内存取数OUT 80H,AL ;送数据到送数据到A口口MOV AL,0CH ;置置STB信号为低信号为低(PC6=0)OUT 83H,ALNOP ;负脉冲宽度(延时);负脉冲宽度(延时)NOPINC AL ;置置STB为高(为高(PC6=1)OUT 83H,AL置位置位/复位复位例例5 将将8255 C端口的端口的8根根I/O线接线接8只发光二极只发光二极 管的管的正正极极(八个负极均接地八个负极均接地),用按位置位,用按位置位/ 复位控制字编写使这复位控制字编写使这8只发光二极管依次只发光二极管依次 亮、灭的程序,直到键盘有输入时结束。亮、灭的程序,直到键盘有输入时结束。 设设8255的端口地址为的端口地址为380H383H。 分析分析:首先用置位字首先用置位字01H点亮点亮PC0所连接的发所连接的发 光二极管,然后将置位字光二极管,然后将置位字01H改为复位改为复位 字字00H,熄灭该发光二极管。再将复位,熄灭该发光二极管。再将复位 字字00H改为置位字改为置位字03H,点亮,点亮PC1 所连所连 接的发光二极管,又将置位字接的发光二极管,又将置位字03H改为改为复位字复位字02H,熄灭该发光二极管。置位字和,熄灭该发光二极管。置位字和复位字就这样交替变化如下:复位字就这样交替变化如下:01H00H03H02H05H04H07H06HOFHOEHO1H。置位字和置位字和复位字周而复始地不断循环,即可使复位字周而复始地不断循环,即可使8只连只连接在接在PC端口的发光二极管依次亮灭。端口的发光二极管依次亮灭。每一位的置位字改为复位字仅需将每一位的置位字改为复位字仅需将D0位由位由1变为变为0,可用屏蔽,可用屏蔽D0位的逻辑与指令完成。位的逻辑与指令完成。把把PCi的复位字改为的复位字改为PCi+1的置位字,要将的置位字,要将 D0位由位由0变为变为1,同时还要将,同时还要将D1D3位加位加 1,即要将,即要将D3D0 低低4位加位加3,这可以用,这可以用 加加3的指令实现。的指令实现。这样不断地加这样不断地加3,其进位一定会使,其进位一定会使D7也变为也变为 1,致使置位字变成方式字,为了避免出现,致使置位字变成方式字,为了避免出现 此情况,所以加此情况,所以加3后还要将置位字的后还要将置位字的D7位或位或 高高4位清位清0,即与,即与0FH逻辑与。据此分析该程逻辑与。据此分析该程 序的框图如下页图所示,程序如下。序的框图如下页图所示,程序如下。stack segment dw 32 dup (?)stack endscode segmentbegin proc far assume ss: stack, cs: code push ds sub ax, axMOV DX,383H ;控制字寄存器的端口地址控制字寄存器的端口地址MOV AL,80H ;方式选择字方式选择字OUT DX,ALMOV AL,1 ;PC0的置位控制字的置位控制字AGAIN: OUT DX,AL ;点亮一只发光二极管点亮一只发光二极管LOOP $ ;延时延时LOOP $方式方式置位置位/复位复位 AND AL,0FEH ;置位字改为复位字;置位字改为复位字 OUT DX,AL ;熄灭点亮的发光二极管;熄灭点亮的发光二极管 ADD AL,3 ;复位字改为下一位的置位字;复位字改为下一位的置位字 ;为下一只灯亮做;为下一只灯亮做 AND AL,0FH ;保持;保持D7为为0准备准备 PUSH AX MOV AH,11 ;检查键盘有无输入;检查键盘有无输入 INT 21H ;无;无0送送AL,有,有-1送送AL置位置位/复位复位 INC AL;有键入时有键入时AL+1的值应为的值应为00H,ZF=1 POP AX JNZ AGAIN;结果不为;结果不为0即即ZF=0转移到转移到AGAIN RET begin endp code ends end begin例例6 LED开关接口。开关接口。8086CPU通过通过8255用开关用开关 与与8段段LED显示器的接口如显示器的接口如图示图示。8255A PA口加驱动器接口加驱动器接LED显示输出;显示输出;PB口低口低4 位接开关输入;位接开关输入;PC口不用。口不用。8255A的的A0、 A1接地址总线的接地址总线的A1、A2,其端口地址为:其端口地址为: 0FFF8H、0FFFAH、0FFFCH、0FFFEH。 要求:开关设置的二进制信息由要求:开关设置的二进制信息由8255A的的PB 口输入后,通过口输入后,通过PA口输出给口输出给8段段LED显示显示 器,显示开关状态所对应的十六进制值,试器,显示开关状态所对应的十六进制值,试 编制其控制程序。编制其控制程序。1K0K0PA1PA2PA3PA4PA5PA6PA7PAV53K2KV507DD0A1ACSRDWRRESETA8255译译码码器器锁锁存存器器07ADAD1A2ARDWRRESET819ADADALE319AA8086abcdefgDP3PB2PB1PB0PB(2)开关状态与开关状态与LED显示值关系显示值关系 开关开关Ki闭合,则闭合,则PBi=0,否则否则PBi=1。 PB3PB0值与值与LED显示值关系:显示值关系:e8EH(3)PA口输出值与口输出值与LED显示值间关系显示值间关系(共阳极共阳极)8255初始化初始化B口输入开关信息口输入开关信息屏蔽屏蔽B口信息的高口信息的高4位位转换成转换成8位二进制数位二进制数经经A口输出口输出延时延时(4) PB口输入值转换成口输入值转换成 PA口输出值的方法口输出值的方法将前述将前述8段码按段码按0F顺顺 序连续存放于内存中;序连续存放于内存中;将将PB3PB0对应值置对应值置 于于AL中;中;执行换码指令执行换码指令XLAT 使使:(AL+BX)ALRDPORTB:DELAY:8255初始化初始化B口输入开关信息口输入开关信息屏蔽屏蔽B口信息的高口信息的高4位位转换成转换成8位二进制数位二进制数经经A口输出口输出延时延时方式方式例例7:利用:利用8255A的的A口方式口方式0与微型打印机相与微型打印机相 连,将内存缓冲区连,将内存缓冲区BUFF中的字符打印输出。中的字符打印输出。 试完成相应的软硬件设计。(试完成相应的软硬件设计。(CPU为为8088)打印机数据传输时序图打印机数据传输时序图它的工作流程是:它的工作流程是: 主机将要打印的数据送上数据线,主机将要打印的数据送上数据线,然后发选通信号。打印机将数据读入,然后发选通信号。打印机将数据读入,同时使同时使BUSY线为高,通知主机停止送线为高,通知主机停止送数。这时,打印机内部对读入的数据进数。这时,打印机内部对读入的数据进行处理。处理完以后使行处理。处理完以后使ACK有效,同时有效,同时使使BUSY失效,通知主机可以发下一个失效,通知主机可以发下一个数据。数据。硬件连线如下图:硬件连线如下图:说明:说明:由由PC0充当打印机的选通信号,通过充当打印机的选通信号,通过 对对PC0的置位的置位/复位来产生选通。同时,复位来产生选通。同时, 由由PC7来接收打印机发出的来接收打印机发出的“BUSY”信信 号作为能否输出的查询。号作为能否输出的查询。 8255A的控制字为:的控制字为:10001000 即即88H A口方式口方式0,输出;,输出;C口高位方式口高位方式0输输 入,低位方式入,低位方式0输出输出 PC0置位置位: 00000001 即即 01H PC0复位:复位: 00000000 即即 00H 8255A的的4个口地址分别为:个口地址分别为: 00H,01H,02H,03H。方式方式置位置位/复位复位编制程序如下:编制程序如下:DADA SEGMENTBUFF DB This is a print program!,$DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART:MOV AX, DATA MOV DS, AX MOV SI,OFFSET BUFF MOV AL, 88H ;A口方式口方式0,输出,输出 OUT 03H, AL ; C口高口高4位方式位方式0输入,输入, ; 低低4位方式位方式0输出输出 MOV AL, 01H ; OUT 03H,AL ;使使PC0置位,选通无效置位,选通无效WAIT: IN AL, 02HTEST AL, 80H ;检测检测PC7是否为是否为1即是否忙即是否忙JNZ WAIT ; 为忙则等待为忙则等待方式方式置位置位/复位复位MOV AL,SICMP AL,$ ;比较是否结束符比较是否结束符 JZ DONE ; 是则输出回车是则输出回车OUT 00H,AL ;否则从否则从A口输出口输出MOV AL,00HOUT 03H, AL ;产生选通信号产生选通信号MOV AL, 01HOUT 03H,AL ;恢复选通信号恢复选通信号INC SI ;修改指针,指向下一个字符修改指针,指向下一个字符JMP WAIT置位置位/复位复位DONE: MOV AL,0DH OUT 00H,AL ;输出回车符输出回车符 MOV AL, 00H OUT 03H,AL MOV AL, 01H OUT 03H,AL ;恢复选通恢复选通置位置位/复位复位WAIT1: IN AL, 02H TEST AL, 80H ;检测检测PC7是是 ;否为否为1即是否忙即是否忙 JNZ WAIT 1 ; 为忙则等待为忙则等待 MOV AL,0AH OUT 00H,AL ;输出换行符输出换行符 MOV AL, 00H OUT 03H,AL置位置位/复位复位 MOV AL, 01H OUT 03H,AL ;产生选通;产生选通 MOV AH,4CH INT 21H CODE ENDS END START例例8:在:在8086系统中,用系统中,用8255A构成显示与按键构成显示与按键 电路,如电路,如图图1所示(设图中所示(设图中8255A没有画没有画 出的引脚已正确连接)。试问:出的引脚已正确连接)。试问:若若8086低位地址线低位地址线A0A1分别与分别与8255A片内地片内地 址选择线址选择线A1A0相连,且相连,且A口地址为口地址为40H,求,求 B口、口、C口和控制口地址。口和控制口地址。请写出请写出8255A的方式控制字。的方式控制字。PA A0 A1 PAPAPA PAPA PAPAPBPBPBPBPBPBPBPBL LLLPCPC PC PC VKKKKV图图1 1 显示与按键电路显示与按键电路发光二极管的排列如发光二极管的排列如图图2所示,要求所示,要求K1、K2、 K3、K4按一下分别显示:按一下分别显示: 如如图图3所示所示,如如图图4所示所示,全亮全亮,全灭全灭 直到有其它键按下为止,请写出显示直到有其它键按下为止,请写出显示4种情种情 形时对应的形时对应的A口、口、B口的值。口的值。请写出将键值读入寄存器请写出将键值读入寄存器AL和使发光二极和使发光二极 管全亮的汇编语言程序片段。管全亮的汇编语言程序片段。图图2图图3图图48255A A1 A08086 A1 A0现在现在A口地址为口地址为40H,意味,意味着着8255A片内的片内的A1A0=00, 即:即:8086的的A1A0=00;当选择当选择B口时,要求口时,要求8255A片内的片内的A1A0=01, 则则8086的的A1A0=10;B口地址应为口地址应为42H.当选择当选择C口时,要求口时,要求8255A片内的片内的A1A0=10, 则则8086的的A1A0=01;B口地址应为口地址应为41H.当选择控制口时,要求当选择控制口时,要求8255A片内的片内的A1A0=11, 则则8086的的A1A0=11;B口地址应为口地址应为43H. 答:答:答:答:由硬件电路看出由硬件电路看出 8255A口均工作于方口均工作于方 式式0输出,输出,C口低口低4位出入,高位出入,高4位未用,位未用, 方式控制字可为:方式控制字可为:10001001B(89H)答:由硬件电路看出答:由硬件电路看出B口控制口控制07号发光二号发光二 极管,极管,A口控制口控制815号发光二极管,且号发光二极管,且 A、B口均输出口均输出0时对应的二极管亮,则时对应的二极管亮,则对于对于图图3有:有:A口的值为口的值为00000110B(06H) B口的值为口的值为01100000B(60H)方式方式对于对于图图4有:有:A口的值为口的值为11111001B (F9H) B口的值为口的值为10011111B (9FH)全亮时全亮时A、B口均输出全口均输出全0,即,即: A口的值为口的值为00000000B (00H) B口的值为口的值为00000000B (00H)全灭时全灭时A、B口均输出全口均输出全1,即,即: A口的值为口的值为11111111B (FFH) B口的值为口的值为11111111B (FFH)程序片段如下:程序片段如下:IN AL,41H;读读C口键值口键值MOV AL,00H;二极管二极管全亮所需值全亮所需值OUT 40H,AL;送往送往A口口OUT 42H,AL ;送往送往B口口例例9:如:如图图为为8255A与与8086硬件连接图,问:硬件连接图,问: 8255A各口地址是多少?各口地址是多少? 若要改变若要改变8255A的口地址为的口地址为6063H,该,该 怎样接线?怎样接线? 试将试将A口设定为方式口设定为方式0输入,输入,B口设定为方口设定为方 式式0输出,输出,C口不用,写出相应的控制字。口不用,写出相应的控制字。A、B、C及控制口地址分别是:及控制口地址分别是:70H73H接线时在接线时在8086的的A4与与74LS138的的C引脚间加一引脚间加一个非门或直接将个非门或直接将74LS138的输出端的输出端Y0与与8255A的的CS相连,不用相连,不用Y4端。端。控制字为:控制字为:10010000H方式方式808682550 70 701234567/ 210474LS138 74LS13812345668161514131211109 A B C E1 E2 E3 Y7GNDYCCY0Y1Y2Y3Y4Y5Y638译码器译码器74LS138真值表真值表例:已知例:已知ICW2的值为的值为20H,则,则8259A的的IR0 IR7对应的对应的8个中断类型码分别为:个中断类型码分别为: 20H,21H,27H 0 0 1 0 0 0 0 0 (IR0)例:已知例:已知ICW2的值为的值为25H,则,则8259A的的IR0 IR7对应的对应的8个中断类型码分别为:个中断类型码分别为: 20H,21H,27H 0 0 1 0 0 1 0 1 (IR5)初始化命令字初始化命令字ICW3主片主片控制字控制字注意:注意:ICW3只对级联方式有效,写入只对级联方式有效,写入奇奇地址地址 端口,只有在端口,只有在ICW1中的中的D1位位SNGL=0 时才需设置,时才需设置,分别分别对主、从片设置。对主、从片设置。ICW3主片主片控制字表示哪个引脚上接有从片。控制字表示哪个引脚上接有从片。初始化命令字初始化命令字ICW3从片从片控制字控制字 ICW3从片从片控制字只有控制字只有低低3位有效,其值表示该位有效,其值表示该从片的从片的INT引脚接到主片引脚接到主片的哪一个的哪一个IRi引脚上。引脚上。 标示码标示码注意:注意:ICW4在在8086/8088系统是必须使用的,系统是必须使用的, 写入写入奇奇地址端口中。地址端口中。例例1. 假定假定8259A的端口地址为的端口地址为92H、93H,问怎,问怎 样来禁止样来禁止IR3及及IR5引脚上的中断请求,又引脚上的中断请求,又 怎样撤销这一禁止命令?怎样撤销这一禁止命令?MOV AL,28HOUT 93H,ALMOV AL,00HOUT 93H,AL;00101000B;给;给OCW1送命令字送命令字 ;00000000B;给;给OCW1送命令字送命令字 例例2假定初始化之后,假定初始化之后,8259A工作于完全嵌套工作于完全嵌套 方式,要求对于方式,要求对于IR3的中断级,能够允许的中断级,能够允许 任何级别的中断中断其中断服务程序,任何级别的中断中断其中断服务程序, 即即8259A按特殊屏蔽方式工作。按特殊屏蔽方式工作。 分析:在响应分析:在响应IR3而执行而执行IR3的中断服务程序的中断服务程序 时,必须先写入时,必须先写入OCW1以屏蔽以屏蔽IR3,然,然 后写入后写入OCW3使使ESMM=SMM=1,于是,于是 从此处开始,从此处开始,8259A进而特殊屏蔽方式,进而特殊屏蔽方式, 此后继续执行此后继续执行IR3的中断服务程序。的中断服务程序。在中断服务结束之前,再向在中断服务结束之前,再向8259A写入写入OCW3使使ESMM=1,SMM=0,结束特殊屏蔽方式,结束特殊屏蔽方式,返回到完全嵌套方式,接着写入返回到完全嵌套方式,接着写入OCW1,撤消,撤消对对IR3的屏蔽,最后写入的屏蔽,最后写入OCW2,向,向8259A发发出出EOI命令。此例,说明在命令。此例,说明在IR3的中断服务程的中断服务程序中,允许任何级别的中断源中断序中,允许任何级别的中断源中断IR3的中断的中断服务程序。(除本身之外)服务程序。(除本身之外) ;IR3中断服务程序入口中断服务程序入口 ; 保护现场保护现场STI ; STI 开中断开中断MOV AL,00001000B OUT 21H,AL ;奇地址奇地址,写入写入OCW1,使使IM3=1,屏蔽屏蔽IR3MOV AL,01101000B;特征位为特征位为01OUT 20H,AL ;偶地址;偶地址,写入写入OCW3,特殊屏蔽方式特殊屏蔽方式 ; 继续服务继续服务MOV AL,01001000B;特征位为特征位为01OUT 20H,AL;写入写入OCW3,结束特殊屏蔽方式,结束特殊屏蔽方式 MOV AL,00100011B;特征位为特征位为00OUT 20H,AL ;写入;写入OCW2,普通的,普通的EOI命令命令 MOV AL,00H ;写入;写入OCW1,使,使IM3=0 OUT 21H,AL 例例3读读8259A相关寄存器的内容。设相关寄存器的内容。设8259A的的 端口地址为端口地址为20H、21H,请读入,请读入IRR、 ISR、IMR寄存器的内容,并相继保存寄存器的内容,并相继保存 在数据段在数据段2000H开始的内存单元中;若开始的内存单元中;若 该该8259A为主片,请用查询方式,查询为主片,请用查询方式,查询 哪个从片有中断请求。哪个从片有中断请求。MOV AL,0AH;发发OCW3,欲读取欲读取IRR的内容的内容OUT 20H,ALIN AL,20H; 读入并保存读入并保存IRR的内容的内容 MOV (2000H),ALMOV AL,0BH;发发OCW3,欲读取欲读取ISR的内容的内容 OUT 20H,ALIN AL,20H; 读入并保存读入并保存ISR的内容的内容MOV (2001H),ALIN AL,21H; 读入并保存读入并保存IMR的内容的内容 MOV (2002H),ALMOV AL,0CH;发发OCW3, 查询有无中断请求查询有无中断请求OUT 20H,ALIN AL,20H;读入读入状态字状态字,判断最高位是否为,判断最高位是否为1TEST AL,80H JZ DONE;无中断请求无中断请求AND AL,07H;有中断请求有中断请求,判断中断源的编码判断中断源的编码 ;即判断哪个引脚接的从片有中断请即判断哪个引脚接的从片有中断请求求DONE: HLTMOV AL,20H;发一般发一般EOI命令命令OUT 20H,AL;写入写入OCW2中中IRET例例4:中断服务程序返回主程序前,可以给:中断服务程序返回主程序前,可以给 8259A写一个中断结束命令写一个中断结束命令EOI,以,以 确保复位确保复位ISR的相应位,然后才可用的相应位,然后才可用 中断返回,通常,结尾形式是:中断返回,通常,结尾形式是: 例例5. 设设8259A应用于应用于8086系统,采用主从两片系统,采用主从两片 级连工作,主片偶地址级连工作,主片偶地址20H,奇地址,奇地址22H (这里的偶地址和奇地址是相对于(这里的偶地址和奇地址是相对于8259A的的 片内地址而言的),中断类型号为片内地址而言的),中断类型号为08H- 0FH;从片偶地址;从片偶地址0A0H,奇地址,奇地址0A2H, 中断类型号为中断类型号为70H77H,主片,主片IR3和从片和从片 级连,均为非缓冲方式,要实现从片全级连,均为非缓冲方式,要实现从片全 嵌套工作,试编写其初始化程序。嵌套工作,试编写其初始化程序。分析:根据分析:根据8259A应用于应用于8086系统,主从式级系统,主从式级 连工作,主片和从片都必须有初始化程连工作,主片和从片都必须有初始化程 序,要实现从片的全嵌套工作,必须主序,要实现从片的全嵌套工作,必须主 片采用特殊全嵌套,从片采用普通全嵌片采用特殊全嵌套,从片采用普通全嵌 套,级联工作时结束中断的方式要采用套,级联工作时结束中断的方式要采用 非自动非自动EOI方式,主片和从片初始化程方式,主片和从片初始化程 序如下:序如下:主主片初始化程序片初始化程序:MOV AL,19H ;00011001B,写入,写入ICW1OUT 20H,ALMOV AL,08H ;00001000B,写入,写入ICW2OUT 22H,ALMOV AL,08H ;00001000B,写入,写入ICW3 ; 在在IR3引脚上接有从片引脚上接有从片OUT 22H,ALMOV AL,11H ;00010001B,写入,写入ICW4OUT 22H,AL从从片初始化程序片初始化程序:MOV AL,19H ;00011001B,写入,写入ICW1OUT 0A0H,ALMOV AL,70H ;01110000B,写入,写入ICW2OUT 0A2H,ALMOV AL,03H ;00000011B,写入,写入ICW3 ; 本从片的识别码为本从片的识别码为03HOUT 0A2H,ALMOV AL,01H ;00000001B,写入,写入ICW4OUT 0A2H,AL例例6. 在上例中,程序要查询从片在上例中,程序要查询从片ISR状态,当状态,当 全部从片中断得到响应后,才能向主片发全部从片中断得到响应后,才能向主片发 中断结束命令,试编写该程序段。中断结束命令,试编写该程序段。分析分析:全部从片中断得到响应意味全部从片中断得到响应意味从片的从片的ISR=0, 只要读出从片只要读出从片ISR值,若等于值,若等于0,则向主片,则向主片 发中断结束命令。程序如下:发中断结束命令。程序如下: ;中断服务子程序;中断服务子程序MOV AL,0BH ;写入从片写入从片OCW3,要求读出,要求读出ISROUT 0A0H,ALIN AL,0A0H ;读从片读从片ISROR AL,AL ;判判ISR是否全是否全0JNZ ZDRK ;否,转中断出口否,转中断出口MOV AL,63H ;是,是,63H写入主片写入主片OCW2, ;向主片发中断结束命令,主片向主片发中断结束命令,主片ISR的的D3位清位清0OUT 20H,ALZDRK: IRET例例7. 将将8255A的工作方式设为的工作方式设为方式方式1,采用中断,采用中断 方式将方式将BUFF开始的缓冲区中的开始的缓冲区中的100个字符个字符 从打印机输出,设从打印机输出,设ICW2的值为的值为08H 。分析:用分析:用PC7作为打印机的选通,打印机数据作为打印机的选通,打印机数据 线接线接8255A的的A口,口,8255A的中断请求信的中断请求信 号(号(PC3)接至系统中断控制器)接至系统中断控制器8259A 的的IR3,其它硬件连线如下页图所示。,其它硬件连线如下页图所示。(20H、22H)PC7PC7PC6PC68255A的控制字为:的控制字为:1010XXX0 PC7置位置位: 00001111 即即 0FHPC7复位:复位:00001110 即即 0EHPC3置位置位: 00000111 即即 07H ,允许,允许8255A的的A口输出产生中断,由硬件连线可以分析出,口输出产生中断,由硬件连线可以分析出,8255A的的4个口地址分别为:个口地址分别为:00H03H。已知已知8259A初始化时送初始化时送ICW2为为08H,则,则8255A A口(口(IR3)的)的中断类型码是中断类型码是0BH,此中断类,此中断类型码对应的中断向量应放到中断向量表从型码对应的中断向量应放到中断向量表从2CH开始的开始的4个单元中。个单元中。主程序:主程序: ;初始化;初始化8259AMAIN:MOV AL,1BH ;00011011B,写入写入ICW1 OUT 20H,AL MOV AL,08H ;00001000B,写入,写入ICW2 OUT 22H,AL MOV AL,01H ;00000001B,写入,写入ICW4 OUT 22H,AL;中断向量存放到中断向量表中;中断向量存放到中断向量表中PUSH DSMOV DX,OFFSET INTRMOV AX,SEG INTRMOV DS,AXMOV AX,250BH;INT 21HPOP DS ;中断向量存放到中断向量表中另一种方式;中断向量存放到中断向量表中另一种方式XOR AX,AXMOV DS,AXMOV AX,OFFSET INTRMOV WORD PTR 002CH,AXMOV AX,SEG INTRMOV WORD PTR 002EH,AX ; ;初始化;初始化8255AMOV AL,0A0HOUT 03H,AL;设置设置8255A的控制字的控制字MOV AL,0FH ;使选通;使选通PC7无效无效OUT 03H,ALMOV AL,07HOUT 03H,AL ;使;使8255 A口输出口输出允许中断允许中断 MOV DI,OFFSET BUFF ;设置地址指针;设置地址指针 MOV CX,99 ;设置计数器初值;设置计数器初值 MOV AL,DI OUT 00H,AL ;输出一个字符到;输出一个字符到A口口 INC DI MOV AL,0EH OUT 03H,AL ;产生选通;产生选通 INC AL OUT 03H,AL ;撤消选通撤消选通 STI ;开中断开中断NEXT:HLT ;等待中断,即等待等待中断,即等待PC3=1, ;当中断请求产生时,当中断请求产生时,CPU就就 ;可以通过可以通过8255向打印机送出向打印机送出 ;下一个将要打印的字符下一个将要打印的字符 LOOP NEXT ;修改计数器的值修改计数器的值, ;指向下一个要输出的字符指向下一个要输出的字符 HLTINTR: STI ; STI 开中断开中断MOV AL,00001000B OUT 22H,AL ;写入;写入OCW1,使,使IM3=1,屏蔽屏蔽IR3MOV AL,01101000BOUT 20H,AL ;写入;写入OCW3,使使ESMM=SMM=1, ;设置特殊屏蔽方式,允许高级或低级中;设置特殊屏蔽方式,允许高级或低级中 ;断进行嵌套,只屏蔽同级中断的嵌套;断进行嵌套,只屏蔽同级中断的嵌套中断服务子程序如下:中断服务子程序如下:MOV AL,DIOUT 00H,AL :从:从A口输出一个字符口输出一个字符MOV AL,0EHOUT 03H,AL :产生选通:产生选通INC ALMOV 03H,AL ;撤消选通;撤消选通INC DI :修改地址指针:修改地址指针 MOV AL,01001000BOUT 20H,AL;写入写入OCW3,清除特殊屏蔽方式,清除特殊屏蔽方式MOV AL,00100011BOUT 20H,AL ;写入;写入OCW2,普通的,普通的EOI命令命令 MOV AL,00H ;写入;写入OCW1,使使IM3=0,开放开放IR3 OUT 22H,AL IRET ;中断返回中断返回例例9.用用8253定时器定时器1工作于方式工作于方式3周期性产生中周期性产生中 断请求。断请求。OUT1接到接到PC总线的总线的IRQ2端,而端,而 PC的的IRQ2端接在端接在8259A的的IR2输入端。要输入端。要 求求8259A的中断请求信号触发方式设置为上的中断请求信号触发方式设置为上 升沿触发,采用全嵌套工作方式,用中断升沿触发,采用全嵌套工作方式,用中断 结束命令结束中断服务。结束命令结束中断服务。 假设假设8259A的的IR2的中断类型号为的中断类型号为0AH,8253 定时器的输入频率为定时器的输入频率为250kHz,工作于方式,工作于方式3, 输出方波频率为输出方波频率为50Hz 。每当。每当8259A通过通过IR2将将8253的周期性方波中断请求发向主机的周期性方波中断请求发向主机(PC机)的机)的CPU ,主机响应外部中断主机响应外部中断IR2时,显示时,显示字符串字符串“8259 A Interrupt!”,并计数中断次,并计数中断次数达到数达到100次,返回次,返回DOS 。已知已知PC/ XT主机系统的主机系统的8259A基地址为基地址为20H和和21 H,8253的控制端口地址为的控制端口地址为203H,定,定时器计数器时器计数器1数据地址为数据地址为201H ,CLK1接接有有250kHz时钟输入。时钟输入。初初 始始 化化 流流 程程 图图5000写写中断服务程序流程图中断服务程序流程图DATA SEGMENTSTRING DB 8259A interrupt !,0AH,0DH,$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX, DATA MOV DS, AX MOV DX, OFFSET ISR0AH ; ISR0AH是是8259AIR2中断服务程序的入口地址中断服务程序的入口地址MOV AX, 250AH;INT 21H;CLI;MOV DX, 21H;IN AL, DX;AND AL, 0FBH;OUT DX, AL;MOV DX, 20H;MOV AL, 13H;OUT DX, AL;设置设置0AH中断类型号的中断矢量中断类型号的中断矢量关中断关中断21H为为8259AIMR的端口地址的端口地址读读IMR的内容的内容(OCW1)清清M2=0设置设置OCW1(IMR),开放开放IR2准备写准备写ICW1设置上升沿触发单片设置上升沿触发单片8259A要要ICW4INC DX;MOV AL, 0AH;OUT DX, AL;MOV AL, 09H;OUT DX,AL;MOV DX, 203H;MOV AL, 76H ;OUT DX,AL;MOV DX, 201H;准备写准备写ICW2设置设置IR2的中断类型号为的中断类型号为0AH写写ICW4设置设置8259A为普通全嵌套方式为普通全嵌套方式8253控制口控制口选择选择定时器定时器1方式方式38253定时器计数器端口定时器计数器端口1地址地址计数长度计数长度=250kHz/50Hz=5000设置中断次数计数器设置中断次数计数器开中断开中断主程序踏步等待中断主程序踏步等待中断MOV AX, 5000;OUT DX,AL;MOV AL,AH;OUT DX, AL;MOV BX, 100;STI ;JMP WAIT;WAIT:MOV AX, DATA;MOV DS,AX;MOV DX,OFFSET SRTING;MOV AH, 09H;INT 21H;MOV DX, 20H;MOV AL,22H;OUT DX, AL;SUB BX,1;ISR0AH:显示显示STRING内字符串内字符串发发8259A中断结束命令中断结束命令写入写入OCW2中中中断次数减中断次数减1100次未到返回主程序次未到返回主程序读读IMR使使IM2中中M2=1屏蔽屏蔽IR2关断关断IRQ2返回返回DOSJNZ INTEXIT;INC DXIN AL, DX ;OR AL, 04H;OUT DX, AL;MOV AX, 4C00H;INT 21H ;IRET;ENDSEND STARTINTEXIT:CODE例例1:DMA初始化,一般都开放通道初始化,一般都开放通道2,以便,以便 响应软盘的响应软盘的DMA请求,可采用下述两请求,可采用下述两 种方法之一来实现。种方法之一来实现。 使用单一屏蔽寄存器(使用单一屏蔽寄存器(DMA10)MOV AL,02H ;最低;最低3位位=010,开放通道,开放通道2 使用四位屏蔽寄存器(使用四位屏蔽寄存器(DMA15)MOV AL,0BH ;最低最低4位位=1011,仅开放通道仅开放通道2 OUT DMA15,AL ;写四位屏蔽寄存器;写四位屏蔽寄存器 OUT DMA10,AL ;写单一屏蔽寄存器;写单一屏蔽寄存器 例例2:下面的程序段就是对下面的程序段就是对PC系列的系列的DMA控制控制 器器8237A进行检测用的。程序中的变量进行检测用的。程序中的变量 DMA地址是地址是00H。测试程序对。测试程序对4个通道的个通道的 8个个16位寄存器先后写入全位寄存器先后写入全“l”,全,全“0”, 再读出比较,看是否一致。若不一致,再读出比较,看是否一致。若不一致, 则出错,停机,否则加载则出错,停机,否则加载DMA各通道。各通道。;检测前,禁止检测前,禁止DMA控制器工作控制器工作MOV AL,04;命令字:禁止命令字:禁止8237A工作工作OUT DMA08 AL ;命令字送;命令字送命令命令寄存器寄存器 OUT DMAODH, AL ;总清总清命令命令,使使8237A;进入空闲;进入空闲 周期周期,包括清先后触发器包括清先后触发器,作作全全“1”检测检测 MOV AL,0FFH ;0FF AL,C16: MOV BL, AL ;保存;保存 AX到到 BX,以便比较,以便比较MOV BH,AL ;MOV CX, 8 ;循环测试;循环测试8个寄存器个寄存器MOV DX,DMA ;通道地址送;通道地址送DX寄存器寄存器 CI7: OUT DX, AL ;0FFH写入低写入低8位位OUT DX, AL ;0FFH再写入高再写入高8位位MOV AL, 01H ;读前破坏;读前破坏AL原内容原内容IN AL,DX;读出刚才写入通道的低;读出刚才写入通道的低8位位MOV AH, AL ;保存到;保存到 AHIN AL,DX ;再读出写入的高;再读出写入的高8位位CMP BX,AX ;读出的与写入的比较;读出的与写入的比较JE C18 ;相等则转;相等则转C18,转入下一寄存器,转入下一寄存器HLT ;不等,则出错;不等,则出错C18:INC DX;通道口地址十;通道口地址十l,指向下一个通道检测,指向下一个通道检测LOOP C17;未完;未完,继续检测,第一个循环过程作全继续检测,第一个循环过程作全 ;“1”检测,第二个循环过程作全检测,第二个循环过程作全“0”检测检测INC AL;第一个循环过程结束,使第一个循环过程结束,使AL=0(FFHl=0);AL00到此第二个循环过程结束,表示全到此第二个循环过程结束,表示全“1”和全和全“0”;检测通过检测通过,以下开始设置命令字以下开始设置命令字SUB AL,AL;命令命令字字00H, DACK为低电平为低电平,写滞后读,写滞后读, ;DREQ为高电平,固定优先级,芯片工作允许,为高电平,固定优先级,芯片工作允许, ;禁止;禁止0通道寻址保持,禁止通道寻址保持,禁止M M传送,正常定时。传送,正常定时。OUT DMA8,AL;控制字送命令寄存器控制字送命令寄存器;以下为各通道方式寄存器加载;以下为各通道方式寄存器加载MOV AL,40H;通道通道0方式字方式字,单字节传送方式单字节传送方式,DMA校验校验OUT DMA0
展开阅读全文