可控制循环灯设计微机原理课程设计.doc_第1页
可控制循环灯设计微机原理课程设计.doc_第2页
可控制循环灯设计微机原理课程设计.doc_第3页
可控制循环灯设计微机原理课程设计.doc_第4页
可控制循环灯设计微机原理课程设计.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课程设计 姓名:纪乐学号:12013241906专业:通信工程 班级:2013级1班 指导老师:李萍 学院:物理电气信息学院 完成日期:2015年12月8日课程设计 可控制循环灯设计一设计内容 本次设计实验用led作为中断显示器,在我的课程设计过程中需要使用八个led灯,先对8059初始化,开始第一个灯亮,有中断时按下开关第二个灯亮,依次循环亮。二设计目的 1、了解可控制循环灯的工作原理。 2、掌握可控制循环灯编程方法和芯片8259的逻辑功能及使用方法。3、掌握一定的汇编语言知识,培养自己的动手操作能力。4、学习程序设计的基本思路和方法三设计原理1.8086的简介 intel 8086拥有四个16位的通用寄存器,也能够当作八个8位寄存器来存取,以及四个16位索引寄存器(包含了堆栈指标)。资料寄存器通常由指令隐含地使用,针对暂存值需要复杂的寄存器配置。它提供64k 8 位元的输出输入(或32k 16 位元),以及固定的向量中断。大部分的指令只能够存取一个内存位址,所以其中一个操作数必须是一个寄存器。运算结果会储存在操作数中的一个寄存器。2.8086的结构 8086 引脚图 8086具有两种不同工作方式,即最小模式和最大模式。若把mn/mx#引脚连至电源+5v,则为最小模式。若把它接地,则处在最大模式。在最小模式中引脚定义ad15ad0(address data bus):16位地址/数据总线,分时复用。传输地址时三态输出,传输数据时三态双向输入/输出。在总线周期t1状态,cpu在这些引脚上输出存储器或i/o端口的地址、在t2t4状态,用来传送数据、在中断响应及系统总线“保持响应”周期一,ad15ad0被置成高阻状态。a19/s6a16/s3(address/status):地址/状态线,三态,输出,分时复用。在t1状态作地址线用,a19a16与a15a0一起构成20位物理地址,可访问存储器1m字节。当cpu访问i/o短口时,a19a16为“0”、在t2t4状态作状态线用,s6s3输出状态信息。bhe/s7(bus high enable/status):高8位数据线允许/状态信号,三态输出,低电平有效。16位数据传送时在t1状态,用bhe指出高8位数据总线上数据有效,用ad0地址线指出低8位数据线上数据有效。在t2t4状态s7输出状态信息,在“保持响应”周期被置成高阻状态。mn/mx(minimun/maximun):最小/最大工作模式选择信号,输入。当mn/mx接+5v时,cpu工作在最小模式,当mn/mx接地时,cpu工作在最大模式。rd(read):读选通信号,三态,输出,低电平有效。由m/io信号区分读存储器或i/o端口,在读总线周期的t1、t2、tw状态,rd为低电平。在“保持响应”周期,被置成高阻状态。wr(write):写选通信号,三态,输出,低电平有效。由m/io信号区分写存储器或i/o端口,在读总线周期的t1、t2、tw状态,wr为低电平。在dma方式时,被置成高阻状态。m/io(memory/input and output):存储器或i/o端口控制信号,三态,输出。m/io信号为高电平时,表示cpu正在访问存储器,信号为低电平时,表示cpu正在访问i/o端口。一般在前一个总线周期的t4状态,有效,直到本周期的t4状态为止。在dma方式时,m/io置为高阻状态。ale 地址锁存允许信号,输出,高电平有效。ready(ready):准备就绪信号,输入,高电平有效。在t3状态结束后cpu插入一个或几个tw暂停状态,直到ready信号有效后,才进入t4状态,完成数据传送过程。reset(reset):复位信号,输入,高电平有效。cpu收到复位信号后,停止现行操作,并初始化段寄存器ds、ss、es,标志寄存器psw,指令指针ip和指令队列,而使cs=ffffh。reset信号至少保持4个时钟周期以上的高电平,当它变成低电平时,cpu执行重启动过程,8086/8088将从地址ffff0h开始执行指令。intr(interrupt request):可屏蔽中断请求信号,输入,电平触发,高电平有效。当外设接口向cpu发出中断申请时,intr信号变成高电平。inta(interrupt acknowledge):中断响应信号,输出,低电平有效。在中断响应总线周期t2、t3、tw状态,cpu发出两个inta负脉冲,第一个负脉冲通知外设接口已响应它的中断请求,外设接口收到第二个负脉冲信号后,向数据总线沙锅内放中断类型号。nmi(non maskable interrupt request):不可屏蔽中断请求信号,输入,边沿触发,正跳变有效。此类中断请求不受中断允许标志位if的影响,也不能用软件进行屏蔽。一旦收到信号,在当前指令执行完后,自动引起类型2中断。经常处理电源掉点的紧急情况。test(test):测试信号,输入,低电平有效。clk(clock):时钟信号,输入。vcc(+5v),gnd(地)2.8259a的结构a.中断的概念: 所谓中断,是指cpu在正常运行时由于程序的预先安排或内外部事件引起cpu暂行正在运行的程序,转到为预先安排的事件或内外部事件服务的程序中去,服务程序执行结束后再返回到暂行的程序继续执行。引起中断的事件称为中断源。预先安排的事件是指pc的中断指令。内部事件是指系统板上出现的一些事件信号,中断指令也可看作内部事件。外部事件是指某些接口设备所发出的请求中断程序执行的信号,这些信号称为中断请求信号,中断请求信号是不能预知的,然而它们一旦请求中断,则会向cpu发出信号,这样cpu就无需花大量时间去查询这些信号是否产生。中断请求信号一旦产生,cpu得知这个信号后,便立即去执行相应的中断服务程序,执行完成后cpu恢复被中断的程序。有时中断源有几个,因此cpu响应这些中断就得有先后次序,这称为中断优先级。优先级高的中断首先响应,优先级低的中断暂不响应。cpu响应中断由中断源提供地址信息,引导程序转移到中断服务程序中去,这个地址信息称为中断向量,它一般是和中断源相对应的,pc机采用类型码来识别中断源。 b.中断控制器8259a的逻辑结构 在微机中,利用8259芯片来完成中断。 中断控制器8259引脚图芯片引脚定义如下: d0d7:数据线,双向。 wr#:写控制信号,低电平有效。 rd#:读控制信号,低电平有效。 cs#:片选端,低电平有效。 a0:地址线。在8088中由cpu的a0接入8259的a0端;而在8086中由cpu的a1接入8259的a0端。irq0irq7:8级中断请求输入。 int:中断请求信号(输出)。用来向cpu发中断请求信号。 inta:中断应答线(输入)。当接收到cpu的应答信号后,8259a就把中断向量类型号送到数据线。 sp#/en#:在缓冲器工作方式作为输入信号允许缓冲器选通。在主从工作方式作为输入信号由该输入脚的电平来区分“主”或“从” 8259a,若输入高电平则为“主” 8259a,若输入低电平则为“从” 8259a。 cas0cas2级联控制信号。系统中最多可以把8级中断请求扩展为64级主从式中断请求,对于“主” 8259a,cas0cas2为输出信号,对于“从” 8259a,cas0cas2为输入信号。c.8259a工作原理当一个中断请求从ir0到ir7中的某根线到达imr时,imr首先判断此ir是否被屏蔽,如果被屏蔽,则此中断请求被丢弃;否则,则将其放入irr中。在此中断请求不能进行下一步处理之前,它一直被放在irr中。一旦发现处理中断的时机已到,将从所有被放置于irr中的中断中挑选出一个优先级最高的中断,将其传递给cpu去处理。ir号越低的中断优先级别越高,比如ir0的优先级别是最高的。8259a通过发送一个intr信号给cpu,通知cpu有一个中断到达。cpu收到这个信号后,会暂停执行下一条指令,然后发送一个inta信号给8259a。8259a收到这个信号之后,马上将isr中对应此中断请求的bit设置,同时irr中相应的bit会被reset。比如,如果当前的中断请求是ir3的话,那么isr中的bit-3就会被设置,irr中ir3对应的bit就会被reset。这表示此中断请求正在被cpu处理,而不是正在等待cpu处理。随后,cpu会再次发送一个inta信号给8259a,要求它告诉cpu此中断请求的中断向量是什么,这是一个从0到255的一个数。8259a根据被设置的起始向量号(起始向量号通过中断控制字icw2被初始化)加上中断请求号计算出中断向量号,并将其放置在data bus上。3.cpu中断处理的过程:4.cpu在系统的应用5.对8086的初始化 因为8259的内部寄存器寻址与命令字的写入顺序有关,所以,对8259的初始化一定要按规定的顺序进行,如下图。6.设置中断向量表 本实验设计中采用一片8259a中断控制芯片工作于主片方式,8个中断请求,求输入端ir0ir7对应的中断型号为07,中断矢量关系如下表所示四实验设备pc机一台,proteus仿真软件以及emu8086编译软件。五硬件电路图a.原理图 b.接口电路c.原理布图 六汇编程序设计;定义堆栈-stack segment stack db 200 dup(0) stack ends ;定义变量-data segment ;定义cnt=1cnt db 1data ends;代码段code segment codeassume cs:code,ds:datastart: mov ax,data mov ds,ax cli ;修改中断向量前关中断 mov ax,0 mov es,ax ;es段=0 mov si,60h*4 ;设置中断向量96号中断 mov ax,offset int0 ;中断入口地址 ;stosw mov es:si,ax ;si=60h*4,存放入口地址 -ip 8086 mov ax,cs ;seg int0 -cs 8086 ;stosw; mov es:si+2,ax ;初始化8259 mov al,00010011b mov dx,400h ;icw1=0001 0011 b /0100 0001 0000 a0=0,d4=1,cs=0 400h out dx,al mov al,060h ;060b mov dx,402h ;icw2=0110 0000 b /0100 0000 0010 a0=1,cs=0 402h out dx,al mov al,1bh ;icw4=0001 1011 b /1bh out dx,al mov dx,402h mov al,00h ;ocw1,八个中断全部开放00h out dx,al mov al,20h ; eoi out 20h,al ;mov dx,400h ;/0100 0000 0000 a0=0,cs=0 ;mov al,60h ;ocw2,非特殊eoi结束中断 ;out dx,al ;ocw2可以不赋值 ;完成8259初始化 mov al,cnt ;初始cnt=1 mov dx,0200h ;led的地址 /0010 0000 0000 ,led=0 out dx,al ;开始第一个灯亮 sti ;开中断li: ;8086模型有问题,它取得的中断号是最后发到总线上的数据,并不是由8259发出的中断号 ;所以造成了要在这里执行eoi的假相,这三句与下面的指令效果是一样的 mov dx,400h ;cs=0 400h mov al,60h ;如果改为其它值,将出错,因为只有60h有中断向量 out dx,al jmp li ;中断服务程序- int0: cli ;关中断, mov al,cnt ;cnt=1; rol al,1 ;cnt=cnt1 mov cnt,al mov dx,0200h ;led=cnt1 out dx,al sti ;开中断 iret ;返回主程序;- code ends end start7 实验结果:a.emu8086编译图b.仿真初始状态c.按下开关后的仿真结果八实验分析 经过一周的时间的努力,使得这次的实验成功的完成,在这次实验过程中我对8259进行了一系列的研究,在一般中断实验,为了保护现场,程序开头都会引用堆栈把把现在的程序放入堆栈中进行保护,所以,pushds就起到这样的作用.在中断程序结束后,为了能回到之前执行的程序入口,还得用popds指令返回现场.这个实验是关于8259的单中断,不牵涉级联问题,所以,8259的初始化只需要看主片就可了.初始化的时候,一般先使用cli指令将所有的可屏蔽中断禁止,然后写入始化字.8259有四个初始化控制字icw1,icw2,icw3,icw4,由于8259只有一根地址线,因此对各个制字的操作是按照一定的顺序并结合某些数据位来进行寻址设置的.当初始化完成后,对8259的操作命令字的寻址是通过8259的地址线a0和某些数据位结合来进行的. 通过此次课程设计,发现了自己有很多地方不足,感觉我不能很好地把平时学的知识应用到实际实验中。因此,通过本次课程设计,我认识到做实验首先要端正实验态度,正确对待任何一个程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论