您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 8253-8259-8255中断延时跑马灯-
实验名称8253,8259,8255中断延时跑马灯实验时间2019年6月10日专业17电信教师评语:姓名何明星成绩教师签名一、实验目的1.掌握8255,8259和8253的编程方法;2.利用8259和8253中断延时,8255并行输出实现跑马灯控制。二、实验原理中断控制器的功能就是在有多个中断源的系统中,接收外部的中断请求,并进行判断,选中当前优先级最高的中断请求,再将此请求送到CPU的INTR端;当CPU响应中断并进入中断子程序后,中断控制器仍然负责对外部中断请求的管理,当某个外部中断请求的优先级高于当前正在处理的中断优先级时,中断控制器会让此中断通过而到达CPU的INTR端,从而实现中断的嵌套,反之,对他级别较低的中断则禁止。可编程中断控制器8259的控制部分有7个8为寄存器,这些寄存器都是可编程的,即可用指令对其进行设置。7个寄存器可分为两组,第一组寄存器为4个,它们用来存放初始化命令字ICW,分别为ICW1—ICW4;第二组寄存器为3个,它们用来存放操作命令字OCW,分别为OCW1—OCW3。初始化命令字往往是计算机系统启动时由初始化程序来设置的,一旦设定,一般在系统工作中不再改变。操作命令字则是由应用程序设定的,用来对中断处理过程作动态控制,在一个系统运行过程中,操作命令字可被的多次设置。8259对外部中断请求的处理过程和工作原理如下:首先,一个外部中断请求信号通过中断请求线IRQ,传输到IMR(中断屏蔽寄存器),IMR根据所设定的中断屏蔽字(OCW1),决定是将其丢弃还是接受。如果可以接受,则8259A将IRR(中断请求暂存寄存器)中代表此IRQ的位置位,以表示此IRQ有中断请求信号,并同时向CPU的INTR(中断请求)管脚发送一个信号,但CPU这时可能正在执行一条指令,因此CPU不会立即响应,而当这CPU正忙着执行某条指令时,还有可能有其余的IRQ线送来中断请求,这些请求都会接受IMR的挑选,如果没有被屏蔽,那么这些请求也会被放到IRR中,也即IRR中代表它们的IRQ的相应位会被置1。当CPU执行完一条指令时后,会检查一下INTR管脚是否有信号,如果发现有信号,就会转到中断服务,此时,CPU会立即向8259A芯片的INTA(中断应答)管脚发送一个信号。当芯片收到此信号后,判优部件开始工作,它在IRR中,挑选优先级最高的中断,将中断请求送到ISR(中断服务寄存器),也即将ISR中代表此IRQ的位置位,并将IRR中相应位置零,表明此中断正在接受CPU的处理。8259芯片引脚图:8259的编程结构:8259初始化命令字:8259操作命令字:8253内部有三个计数器,分别是计数器0,计数器1和计数器2,它们的结构完全相同。每个计数器的输入和输出都决定于设置在控制寄存器中的控制字,它们共用一个控制寄存器,但互相之间互相独立。每个计数器通过三个引脚和外部联系,一个时钟输入端CLK,一个为门控信号输入端GATE(悬空时为高电平,故实验时未作处理),另一个为输出端OUT。计数器0的时钟输入端8253CLK0接CLK3(CLK3频率为750KHz),写入控制字和计数初值(7500)后让其工作在方式3,故计数器0的输出端口OUT0输出的方波周期为7500*(1/750000)=0.01S。计数器1的时钟输入端8253CLK1接OUT0(OUT0频率为100Hz),写入控制字和计数初值(100)后让其工作在方式3,故计数器1的输出端口OUT1输出的方波周期为100*(1/100)=1S。这里令计数器0输出周期为0.01S的放方波,让计数器1和计数器2的工作方式均为方式3,设写入计数器1和计数器2的计数初值为n,则对应输出的方周期为n*0.01S。下图为8253的引脚和对应功能:下图为8253控制字格式:下图为模式3-----方波发生器工作特点:8255有三个8位数据端口,即端口A,即端口B,即端口C。可以通过控制字来使它们分别作为输入端口或输出端口。端口A对应一个8位数据输入锁存器和一个8位数据输出锁存器/缓冲器,所以用A端口作为输入口或输出口时,数据均受到锁存;端口B对应一个8位数据输入缓冲器和一个8位数据输出锁存器/缓冲器;端口C对应一个8位数据输入缓冲器和一个8位数据输出锁存器/缓冲器。端口C作为输入端口时,对数据不作缓存,而作为输出端口时,对数据进行缓存。在使用中,端口A和端口B常常作为独立的输入端口或者输出端口,端口C则配合端口A和端口B工作。本实验中让端口A作为输出端口,通过程序来控制端口A的输出内容,输出结果通过LED灯亮灭情况来显示。8255芯片引脚:三、实验连线CS0CS8255PA0~PA7LED1~LED8CS1CS8253CLK38253CLK0OUT08253CLK1CS2CS8259INTINTINTAINTAIR0OUT1四、实验内容对8253初始化后,让计数器0和1工作在方式三,计数器1输出周期为1S的方波。将输出的方波连接到8259的IR0实现边沿触发,从而实现中断延时,利用8255并行输出到LED灯实现跑马灯的控制。五、实验结果全速运行程序,LED1---LED8从左到右循环亮,达到跑马灯的效果。六、程序代码;==============8253,8255,8259端口定义===============IO8255AEQU04A0H;8255PA口输出地址IO8255BEQU04A2H;8255PB口输出地址IO8255CEQU04A4H;8255PC口输出地址IO8255CTRLEQU04A6H;8255控制端口地址IO8253AEQU04B0H;8253计数器0IO8253BEQU04B2H;8253计数器1IO8253CEQU04B4H;8253计数器2IO8253CTRLEQU04B6H;8253控制端口地址IO82590EQU04C0H;8259偶地址IO82591EQU04C2H;8259奇地址;=======================================================;==============8259初始化命令字和操作命令字===============ICW1EQU00010011B;上升沿触发,单片8259,设置ICW4ICW2EQU10000000B;中断类型号为80HICW4EQU00000011B;普通全嵌套方式,非缓冲方式,AEOI方式中断自动结束;方式,工作在8086模式非8位系统OCW1EQU11111110B;只响应INT0中断;=======================================================ASSUMECS:CODECODESEGMENTPUBLICORG100HSTART:JMPSTART1;============================================================;====================主程序====================================START1:BL=11111110B;写入初值,点亮LED1CALLIO8253MOVDX,IO8255CTRL;初始化8255MOVAL,10000010B;8255控制字,PA口方式0,输出;PB口方式0,输;入;C口输出OUTDX,ALCLI;关中断MOVAX,00HPUSHDSMOVDS,AXMOVSI,4*ICW2;中断号*4,中断向量表中的首地址MOVAX,OFFSETINTRS;中断入口地址(段地址为0)MOVDS:[SI],AXADDSI,2MOVAX,100H;返回主程序MOVDS:[SI],AXXORAX,AXPOPDSCALLIO8259;初始化8259MOVDX,IO8255AOUTDX,ALSTI;开中断LP:;等待中断并计数NOPJMPLP;====================中断服务程序=================================INTRS:PUSHAXPUSHDXMOVDX,IO8255A;8255PA口输出地址MOVAL,BLOUTDX,ALROLBL,1;左移一位,向右点亮LED灯MOVAL,BLOUTDX,ALPOPDXPOPAXIRET;==================================================================;============================初始化8259============================IO8259:MOVDX,IO82590MOVAL,ICW1OUTDX,ALMOVDX,IO82591MOVAL,ICW2OUTDX,ALMOVAL,ICW4OUTDX,ALMOVAL,OCW1OUTDX,ALRET;================================================================;============================初始化8253===========================IO8253:MOVDX,IO8253CTRL;控制寄存器MOVAL,00110110B;36H=00110110B,计数器0,方式3OUTDX,ALMOVDX,IO8253AMOVAX,7500OUTDX,ALXCHGAH,ALOUTDX,AL;计数值7500,OUT0端口输出的方;波周期为7500*(1/750000)=0.01SMOVDX,IO8253CTRL;控制寄存器MOVAL,01110110B;76H=01110110B,计数器1,方式3OUTDX,ALMOVDX,IO8253BMOVAX,100OUTDX,ALXCHGAH,AL;计数值100,OUT1端口输出的方波周期为1/100*400=1SOUTDX,ALRET;===========================================================CODEENDSENDSTART
本文标题:8253-8259-8255中断延时跑马灯-
链接地址:https://www.777doc.com/doc-5422092 .html