微机原理课程设计报告彩灯控制器(共23页).doc
精选优质文档-倾情为你奉上微机原理课程设计专业班级:计算机1301姓 名:学 号:指导老师: 2016年 1 月 15 日彩灯控制器一、 实验要求、设计目的及功能实现 实验要求:现在有8盏彩灯,4个开关作为输入,控制4种闪烁方式。当没有开关闭合时,4种花型依次轮流闪烁,每种花型闪烁时间持续2分钟,每盏灯点亮的时间为1秒。只有某一个开关闭合时,对应的花型连续不断的闪烁。 设计实现该功能的电路,并编写完整的代码。 设计目的:(1) 巩固和加深微机原理所学知识; (2)学习掌握一般的软硬件的设计方法和查阅、运用资料的能力。 所实现的功能: 本课程设计所设计的彩灯控制器的主要功能有:向外发散显示、向中递推显示、0-7依次显示、奇数灯显示,偶数灯显示等功能。输出采用8个二极管显示,每个灯亮1秒。二、 实验原理 在这次课程设计中主要用到了8255A可编程并行接口芯片可用程序来设置芯片的工作方式,通用性强,使用灵活,可为CPU与外设之间提供并行输入/输出的通道。8254给1S的信号送到8259,再送到8255A控制灯亮的时间。三、 硬件原理图 8255工作原理及内部结构1.8255A内部结构8255A的内部结构如图2所示,它由4部分组成:(1) 数据总线缓冲器它是一个双向三态8位缓冲器,用作与系统总线连接是的缓冲部件.CPU与8255A之间所有的数据的发送与接收以及CPU向8255A发送的控制信息和8255A向CPU回送的状态信息都是通过它传送的(2)三个8位端口PA、PB、PC端口A(PA口):有一个8位数据输入锁存器和一个8位数据输入锁存/缓冲器;端口B(PB口):有一个8位数据输入缓冲器和一个8位数据输入/输出,锁存/缓冲存储器器;端口C(PC口):有一个8位数据输入缓冲存储器器和一个8位数据输出锁存/缓冲器。通常PA口与PB口用作输入/输出的数据端口,PC口用作控制和状态信息端口。PC口可以分为两个四位的端口,每个端口包含一个四位锁存器,可分别同PA口和PB口配合使用,用作控制信号(输出)或作为状态信号(输入)。PA7-PA0PC7-PC4PC3-PC0D7-D0/RD/WRA1A0/CSRESETA组控制数据总线缓冲器读/写控制逻辑B组控制A组A口(8位)A组C口 高4位B组C口 低4位B组B口(8位)PB7-PB0图2 内部结构图(3) A组和B组控制电路A组:PA口和PC口的高四位(PC7PC4);B组:PB口和PC口的低四位(PC3PC0)。这两组控制电路一方面接收CPU发来的控制字并决定8255A的工作方式;另一方面接收来自读写控制逻辑电路的读写命令,完成接口的读写操作。(4)读/写控制逻辑用来管理数据信息。控制字和状态字的传送,它接收来自CPU的地址总线的A1,A0和控制总线的信号RD.WR.RESET等,并向8255A的A,B两组发送命令.由它控制把CPU发出的控制命令字或输出的数据送到相应的端口,或把外设的状态信息或输入的数据从相应的端口送到CPU。2.8255A引脚功能8255A芯片除电源和地引脚以外,其他引脚可分为两组,引脚如图3所示:(1)8255A与外设连接引脚 8255A芯片与外设连接的有24条双向、三态数据引脚,分成三组,分别对应于A,B,C三个数据端口:PA7-PA0,PB7-PB0,PC7-PC0.1 402 393 384 375 366 357 348 339 3210 3111 3012 2913 2814 2715 2616 2517 2418 2319 2220 21PA3PA2PA1PA0/RD/CSGNDA1A0PC7PC6PC5PC4PC0PC1PC2PC3PB0PB1PB2PA4PA5PA6PA7/WRRETD0D1D2D3D4D5D6D7VCCPB7PB6PB5PB4PB3图3 引脚图( 2 ) 8255A与CPU连接引脚D7与CPU侧连接的八条双向数据线;WR(低电平有效)写输入信号;RD(低电平有效)读输入信号;CS(低电平有效)片选输入信号;A0、A1片内寄存器选择输入信号;PA7PA0A口外设双向数据线;PB7PB0B口外设双向数据线;PC7PC0C口外设双向数据线;RESET复位输入信号表1 8255A的控制信号和传送操作的对应关系/CS/RD/WRA1 A0执行的操作0010 0读端口A0010 1读端口B0011 0读端口C0011 1非法状态0100 0写端口A0100 1写端口B0101 0写端口C0101 1写控制字端口1 未选通8255A的工作方式控制字8255A有两个控制字:方式选择控制字和端口C置位/复位控制字。这两个控制字公用一个地址,即控制端口地址,用控制字的D7位来区分这两个控制字,D7=1为方式选择控制字;D7=0为端口置位/复位控制字。1.方式选择控制字如图4所示:D7 D6 D5 D4 D3 D2 D1下C口pc3-pc00输入 1输PB 0输1输出上C口pc7-pc40输入 1输出PA 0输入 1输出A组工作方式0 方式001方式012方式10特征位图4 8255A方式选择控制字2.端口C置位/复位控制字 端口C置位/复位控制字的格式如下图所示:D3-D1三位的编码与端口C的某一位相对应,D0决定置位或复位操作,最高位为0是端口C置位或复位控制字标志。如图5所示0D3D2D1置位或复位选择1:置位 0:复位D0D3D2D1位选择000PC0001PC1010PC2011PC3100PC4101PC5110PC6111PC7 图5 8255A端口C置3.8255A的工作方式8255可编程外围接口芯片是Intel公司生产的通用并行I/O接口芯片,它具有A、B、C三个并行接口,用+5V单电源引脚图供电,能在以下三种工作方式下工作:方式0基本输入/输出方式方式0下,每一个端口都作为基本输入或输出口,端口C的高4位和低4位以及端口A、端口B都可独立的设置为输入口或输出口。4个端口的输入或输出可有16种组合。8255A工作于方式0时,CPU可采用无条件读写方式与8255A交换数据,也可采用查询方式与8255A交换数据。采用查询方式时,可利用端口C作为与外设的联络信号。方式1选通输入/输出方式:适用于查询和中断方式。方式2双向选通输入/输出方式:方式2为双向传输方式,8255A的方式2可使8255A与外设进行双向通信,既能发送数据,又能接受数据,可采用查询方式和中断方式进行传输。8086 的引脚信号如图6所示:1 402 393 384 375 366 357 348 339 3210 3111 3012 2913 2814 2715 2616 2517 2418 2319 2220 21GNDAD14AD13AD12AD11AD10AD9AD8AD7AD6AD5AD4AD3AD2AD1AD0NMIINTRCLKGNDVCCAD15A16/S3A1/S4A18/S5A19/S6/BHE/S7MN/MX/RDHOLDHLDA/WRM/IODT/R/DENALE/INTR/TESTREADYRESET图6 8086引脚图 8086具有两种不同工作方式,即最小模式和最大模式。若把MN/引脚连至电源+5V,则为最小模式。若把它接地,则处在最大模式。四、软件设计1.主程序流程图开始初始化调用检测k1向外发散显示向中递推检测k2检测k3向左依次显示 奇、偶数灯亮检测k4中断检测k5暂停开始2.开关设计 N灯全灭K5=1YN显示当前YK1=1继续当前循环五、 调试过程 1.硬件调试 设计的电路是由k5来控制灯的暂停和开始,k1-k5接PB0-PB4。花型变换由k1,k2,k3,k4控制。 2.软件调试 输入程序,经编译,连接后下载到实验箱运行。六、 心得体会通过彩灯控制器的汇编实现,对硬件特别是8253A,8255并行口的原理和实现都有了很深的了解。更加深了对汇编语言的使用.在算法实现上要有一定的思路要更能体现设计的目的。同时上机调试也是十分重要的,在调试的过程中能够不断的发现在编写算法时应该注意的一些细节和算法语句的非法使用,在调试过程中通过对算法的不断测试、更正、扩充功能、修饰细节,使算法程序不断的得到完善。通过这次的课程设计使我认识到要将微机原理这门计算机专业的课学好不仅仅是要把书上的基本知识学好而且还要不断进行实践,将所学的跟实践操作结合起来才能更好地巩固所学,才能提高自己实践能力.通过这次的设计使我认识到只停留在表面理解问题是很难使问题得到很好的解决的,实践能力与理论知识同样重要。可以说此课程设计的理论难度并不大,但是若要深入发掘其中的东西,并且实际去编程实现,就遇到了相当大的难度。因为与之涉及的很多方面并没有学过,需要自己去自学和实践检验。七、 实验源程序(附注释).486p stackpequ1400hCODESEGMENT USE16ASSUMEDS:CODE,ES:CODE,CS:CODEORG03000HBEG:JMPSTART IFSWITCH DB 0 SHANSHUOCOUNT DB 0 SWITCHCOUNT DB 1 ORDERNO DB 0 ShanShuoLimit DB 120 DENG1 DB 0,18H,24H,42H,81H DENG2 DB 0,81H,42H,24H,18H,24H,42H DENG3 DB 0,00H,80H,0C0H,0E0H,0F0H,0F8H,0FCH,0FEH,0FFH DENG4 DB 0,01H,02H,04H,08H,10H,20H,40H,80H,40H,20H,10H,08H,04H,02H DENGCount DB 4 PORT1EQU203H ;A PORT2EQU207H ;B PORT3EQU20BH ;C PORT4EQU20FH ;CTRL PORT8254A EQU 300H PORT8254B EQU 304H PORT8254C EQU 308H PORT8254D EQU 30CH PORTJI EQU 3A8H ;8259A奇地址 PORTOU EQU 3A0H ;8259A偶地址 START:CLI ;关中断movax,CODEmovds,ax MOV AX,0 MOV ES,AX movss,axmovsp,stackp MOV AL,B MOV DX,PORT4 ;8255初始化 A端口输入,B端口输出 OUT DX,AL MOV BX,40H*4MOV AX,OFFSET INTPROCMOV ES:BX,AX ;设置中断向量MOV AX,SEG INTPROCMOV ES:BX+2,AXMOV AL,B MOV DX,PORTOU ;ICW1OUT DX,ALMOV AL,BMOV DX,PORTJI ;ICW2OUT DX,ALMOV AL,B ;ICW4OUT DX,ALMOV AL,B ;中断屏蔽字,OCW1OUT DX,ALMOV AL,36H ;计数器初始化 MOV DX,PORT8254DOUT DX,ALMOV AX,470MOV DX,PORT8254AOUT DX,ALMOV AL,AHOUT DX,ALMOV AL,76HMOV DX,PORT8254DOUT DX,ALMOV AX,100MOV DX,PORT8254BOUT DX,ALMOV AL,AHOUT DX,AL STIWAIT: JMP WAIT INTPROC PROC PUSH DX PUSH AX PUSH BX STI MOV DX,PORT2 ;读开关状态 IN AL,DX TEST AL,80H JNZ EXIT2 AND AL,1FH CMP AL,01H JE ONE CMP AL,02H JE TWO CMP AL,04H JE THREE CMP AL,08H JE FOUR CMP IFSWITCH,0 ;IFSWTICH=1表示当前正在交替闪烁,JNE NEXT0 ;IFSWTICH=0表示刚从某种样式单独闪烁的状态切换到交替闪烁的状态MOV IFSWITCH,1MOV SWITCHCOUNT,1 ;先从第一种样式开始闪烁MOV SHANSHUOCOUNT,0 ;当前样式闪烁次数初始化 MOV ORDERNO,0NEXT0:CMP SWITCHCOUNT,01HJE ONECMP SWITCHCOUNT,02HJE TWO ;切到相应的样式CMP SWITCHCOUNT,03HJE THREECMP SWITCHCOUNT,04HJE FOUR ONE: MOV DL,01H MOV DH,4 LEA BX,DENG1 CALL CasePro JMP EXIT1 TWO: MOV DL,02H MOV DH,6 LEA BX,DENG2 CALL CasePro JMP EXIT1 THREE: MOV DL,04H MOV DH,9 LEA BX,DENG3 CALL CasePro JMP EXIT1 FOUR: MOV DL,08H MOV DH,14 LEA BX,DENG4 CALL CasePro JMP EXIT1 EXIT1: MOV DX,PORT1 OUT DX,AL ;从端口A送出数据,让小灯们亮EXIT2: CLI MOV DX,PORTOU MOV AL,20H ;发送EOI命令 OUT DX,AL POP BXPOP AXPOP DXIRETINTPROC ENDP CasePro PROC CMP AL,DL ;再次确认是多样式交替闪还是单样式,AL=1说明是单样式JE NEXT11INC SHANSHUOCOUNT ;闪烁次数+1 MOV AH, ShanShuoLimitCMP SHANSHUOCOUNT,AH ;ShanShuoLimit 120是交替闪烁的情况下每种样式最多闪烁次数JNE NEXT12 ;不足120次MOV SHANSHUOCOUNT,0INC SWITCHCOUNT ;当前样式已经闪了120次,准备切到下一样式 MOV AH, DENGCount CMP SWITCHCOUNT,AH ;DENGCount 5是样式的数量JBE NEXT12 MOV SWITCHCOUNT,1 ;转样式1JMP NEXT12NEXT11:MOV IFSWITCH,0NEXT12:INC ORDERNOCMP ORDERNO,DHJNG NEXT13MOV ORDERNO,1NEXT13:;LEA BX,DENG1 MOV AL,ORDERNOXLAT NOT AL ;对al每一位取反,因为二极管是0点亮 RETCasePro ENDP CODEENDSENDbeg专心-专注-专业