ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:700.90KB ,
资源ID:5117052      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5117052.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机原理与接口技术课程设计倒计时.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机原理与接口技术课程设计倒计时.docx

1、微机原理与接口技术课程设计倒计时微机原理与接口技术课程设计-倒计时微机原理与接口技术课程设计报告题目:倒计时学 院 专 业 计算机科学与技术班 级 学 号 学生姓名 指导教师 课程成绩 完成日期 2011年6月23日题目:倒计时一设计功能 本次课程设计我们在TD-PIT+实验系统和PC机平台上利用并行接口8255A、键盘及数码管显示单元、开关及LED显示单元、键盘按键和电脑显示屏设计成一个倒计时器。具体功能包括:1.用2位8段共阴数码管显示倒计时时间;2.使用开关K0实现暂停/启动功能,开关K1实现倒计时复位功能;3.倒计时为0时8盏LED灯实现跑马灯功能;4.利用数字键输入倒计时初始数值,按

2、键“r”实现重新启动倒计时器,按键“e”实现退出程序进入DOS环境下,并对其他按键进行屏蔽;5.屏幕显示相应的提示信息,包括提示用户输入数据、倒计时结束、倒计时结束后用户进行的操作;6.可以任意设定倒计时的初始时间,每隔1秒钟计时器减1,直到为0;7.在倒计时过程中可通过开关K1实现退出当前的倒计时并开始新一轮的倒计时。二设计原理及原理图1.系统总设计原理我们选择并行接口8255A芯片,在程序中使用延时语句来输出秒脉冲,并在其中调用显示函数不断刷新数码管进行数值显示。使用8255A作为输入/输出接口,其中A端口为输出口,连接LED显示单元的D8D15;B端口为输出口,连接数码管的ADp,进行数

3、码管的段锁存;C端口高4位为输出口,连接数码管的X4X1,进行位锁存,低4位为输入端,连接开关的K3K0。采用在软件中控制循环程序的方式来控制倒计时的复位和暂停功能,并通过程序来显示语句和读入用户的键盘输入,以进行相应操作。此方案性价比高,但由于使用了软件延时,当芯片损耗以及芯片在工作时间过长后会出现倒计时不够准确。2.硬件框架原理图图1 系统设计硬件框架3.硬件介绍 并行接口8255A(1) 8255A的内部结构图2 8255A的内部结构1)8255A有3个8位数据接口,即接口A、接口B和接口C,可利用编程方法设置3个端口是作为输入端口还是输出端口;2)8255A能适应CPU和I/O接口之间

4、的多种数据传送方式的要求,如无条件传送、查询方式传送、中断方式传送。8255A设置了方式0、方式1以及方式2;3)数据总线缓冲器是个双向三态8位数据缓冲器,与CPU系统数据总线相连,是8255A与CPU之间传输数据的必经之路。输入数据、输出数据、控制命令字都是通过数据总线缓冲器进行传递的;4)读/写控制逻辑电路接收来自CPU地址总线的信号和控制信号,并发出命令到两个控制组(A组和B组)。它控制把CPU发出的控制命令或输出的数据送到相应的端口,或者把外设的状态或输入的数据相应的端口送到CPU;5)A组控制和B组控制一方面接收芯片内部总线上的控制字,一方面接收来自读/写控制逻辑电路的读/写命令,从

5、而解决端口的工作方式和读/写操作。其中,A组控制电路控制端口A和端口C高4位(PC7-PC4)的工作方式和读/写操作:而B组控制电路控制端口B和端口C低4位(PC3-PC0)工作方式和读写操作。(2) 8255A的外部引脚图3 8255A的功能引脚图1)与外部设备端相连的引脚 PA7-PA0:A端口的输入/输出引脚; PB7-PB0:B端口的输入/输出引脚; PC7-PC0:C端口的输入/输出引脚;2)与CPU相连的引脚RESET:复位信号,低电平有效。当RESET信号来到时,所有内部寄存器都被清0,同时3个端口被自动设为输入端口;D7-D0:8255A的数据线,和系统数据总线相连;CS:芯片

6、选择信号。只有当CS有效时,读出信号RD和写入信号WR才对8255A有效;RD:读出信号。CPU通过IN指令使RD有效,将数据或状态信息从8255A中读到CPU; WR:写入信号。CPU通过OUT指令使WR有效,将数据或状态信息从CPU中写道8255A;A1,A0:端口选择信号。8255A内部有3个数据端口和1个控制端口,共4个端口。规定A1,A0为00、01、10和11时,分别选中端口A、端口B、端口C和控制端口。(3) 8255A的控制字1) 8255A的方式控制字 8255A共有两个控制字,即工作方式控制字和对C口置位/复位控制字。8255A的工作方式字格式和各位的含义如图4图4 825

7、5A工作方式控制字格式方式0为基本的输入输出方式;方式1为选通式输入/输出;方式3为双向选通输入/输出方式。2)C口置位/复位控制字8255A的C口置位/复位控制字的格式如图5图5 8255A的C口置位/复位控制字 八段共阴数码管一般8段LED显示器的内部结构和引脚如图6(a)所示。每段都是一个发光二极管,通过点亮不同的字段,可以显示0,1,9和A,B,F。其内部各发光二极管之间的连接方法有共阴极和共阳极两种,如图6(b)和图6(c)所示。(a)结构和引脚 (b)共阴极接法 (c)共阳极接法图6 八段LED显示器(1)共阴极接法:把发光二极管的阴极连在一起构成公共阴极。使用时公共阴极接地,这样

8、阳极端输入高电平的段发光二极管就导通点亮,而输入低电平的则不点亮。实验中使用的数码管为共阴极接法;(2)共阳极接法:把发光二极管的阳极连在一起构成公共阳极。使用时公共阳极 接5V。这样阴极端输入低电平的段发光二极管就导通点亮,而输入高电平的则不点亮。表1 8段LED显示字形段码字型共阴极字形代码字型共阴极字形代码字型共阴极字形代码03FH67DHC39H106H707HD5EH25BH87FHE79H34FH96FHF71H466HA77H灭00H56DHB7CH4.功能电路 数码管显示电路图7 显示连接电路实验箱上有四个LED显示器,本实验利用PC口的最高两位选中X4和X3两个数码管,即进行

9、位锁存;八段数码管为阳极LED器件。要让A段点亮,要求PB0输出高电平“1”;要使B段熄灭,要求从PB1输出低电平“0”。其余各段以此类推。要使LED上显示0-9十个数字,需要按照如下段码表来驱动数码管的八段LED:表2 8段数码管段码表显示字符0123456789八段代码3FH06H5BH4FH66H6DH7DH07H7FH6FH 开关与LED灯控制电路图8 开关与LED灯控制电路设置8255的A端口工作在方式0下,作为输出端,电路连接如上图,在倒计时到0的时候LED灯从左到右接着再从右往左依次点亮,实现跑马灯功能。开关K1为复位开关,在倒计时过程中置K1为“1”可以实现退出当前倒计时,置K

10、1为“0”时又开始重新倒计时。开关K0为暂停开关,在倒计时过程中置K0为“1”可以暂停倒计时,置K0为“0”时,数码管接着当前的显示数据执行递减,并且在暂停过程中数码管始终显示暂停时的数据。三程序模块及流程图1.8255A初始化程序开始时对8255A进行初始化,A组和B组控制工作在方式0,因此方式字中的D6D5和D2为0。A口为输出,因此D4为0;C口高4位为输出,因此D3为0,低4位为输入,因此D0为1;B口为输出,因此D1为0。根据程序设计要求,8255A的方式控制字为1000 0001B,即81H。2.显示程序模块根据方式控制字和连线可知,B口连接数码管的ADp进行段锁存,C口的高4位连

11、接X4X1进行位锁存。显示程序如下:DIS PROC NEAR ;数码管显示子程序 PUSH AX ;保护现场 PUSH DX MOV SI,3000H ;找到存数的缓冲区 MOV AL,0BFH ;1011 1111B,选中X3数码管 MOV DX,MY8255_C ;选中PC口,进而选中数码管 OUT DX,AL MOV AL,SI ;取出缓冲区中存放的键值 XLAT ;查表指令,将以BX为基地址,AL为位移量的字节存储单元中的数赋给AL MOV DX,MY8255_B ;写入数码管ADp OUT DX,AL CALL DALLY1 ;调用延时函数 MOV AL,7FH ;0111 111

12、1B,选中X4数码管 MOV DX,MY8255_C ;选中PC口,进而选中数码管 OUT DX,AL MOV AL,SI+1 ;取出缓冲区中存放的键值 XLAT MOV DX,MY8255_B ;写入数码管ADp OUT DX,AL CALL DALLY1 ;调用延时函数 POP AX POP DXDIS ENDP3.延时程序模块控制一个循环程序循环N次以到达延时的目的。具体语句如下:DALLY: PUSH CX ;保护现场 PUSH AX MOV CX,0FFFFHA1: MOV AX,4FFFHA2: DEC AX ;自减 JNZ A2 LOOP A1 ;计数循环 POP AX POP

13、CXRET程序循环次数为N=(FFFF+1)*(4FFF+1),延时时间为N*n(n为程序语句执行时间)4.控制程序模块控制程序有暂停和复位,其中暂停可以用一个循环程序来实现,当暂停键拨下时,循环程序会进入死循环状态,直至暂停键拨回。复位则只需按条件跳转至输入初始时间的程序语句处即可。C口低4位为输入,读入开关状态,判断“0”和“1”状态进行控制。程序代码如下:PAUSE: CALL DIS ;调用显示子程序 MOV DX,MY8255_C ;C口低4位为输入 IN AL,DX ;读入C口的最低位的状态 TEST AL,01H ;0000 0001B JNZ PAUSE ;最低位为1暂停倒计时

14、RESET1: MOV DX,MY8255_C ;C口低4位为输入 IN AL,DX TEST AL,02H ;0000 0010B JNZ RESET2 ;第2位置1后执行RESET2 DEC TIME ;减1倒计时 MOV CL,TIME CMP CL,0FFH ;当从初始值减到0后继续减1则值为0FFH,说明计数结束 JNZ DISPY ;倒计时未到0,继续倒计时 JMP OUTPUT1 ;跳到流水灯点亮;重新开始倒计时 RESET2: JMP SHURU5.LED灯点亮程序模块当程序运行至倒计时结束的语句时启动点亮LED灯程序。A口连接LED显示单元的D15D8,通过A口送入的数据控制

15、LED灯的点亮情况。程序代码如下:OUTPUT1: PUSH CX ;点亮流水灯,流水灯0灭1亮 MOV CX,7 ;循环计数初值 MOV LA,80H ;流水灯从左往右依次点亮P4: MOV AL,LA MOV DX,MY8255_A OUT DX,AL ;通过A口输出控制LED点亮 CALL DALLY ROR AL,1 ;不进位的循环右移 MOV LA,AL LOOP P4 MOV CX,8 MOV LB,01H ;流水灯从右往左依次点亮P5: MOV AL,LB MOV DX,MY8255_A OUT DX,AL CALL DALLY ROL AL,1 ;不进位的循环左移 MOV LB

16、,AL LOOP P5 JMP prompt ;流水灯显示结束跳转到prompt四源程序;利用8255A设计倒计时,其中A端口连接LED显示单元的D8D15,B口连接数码管的ADp,;进行段锁存,C口高4位连接数码管的X4X1,进行位锁存,C口的低4位作为输入端,连;接开关的K3K0,其他引脚与系统总线相连;*根据CHECK配置信息修改下列符号值*IOY0 EQU 9C00H ;PCI卡中断控制寄存器地址;*MY8255_A EQU IOY0+00H*4 ;8255计数器0端口地址MY8255_B EQU IOY0+01H*4 ;8255计数器1端口地址MY8255_C EQU IOY0+02

17、H*4 ;8255计数器2端口地址MY8255_MODE EQU IOY0+03H*4 ;8255控制寄存器端口地址;*DATA SEGMENT DTABLE DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH ;对应09 TIME DB ;存储倒计时的初始时间 CHU DB 10 ;存储被除数10 LA DB ;存储数码管从左往右亮的数值 LB DB ;存储数码管从右往左亮的数值 BUF DB ;存储输入的十位数 TISHI DB 13,10,Input the time:,$ TIMESUP DB 13,10,Times up!,$ STRMSG DB 1

18、3,10,press r to restart, e to exit:,$ ENDMSG DB 13,10,Thanks for using!,$DATA ENDS;*STACK1 SEGMENT STACK DW 256 DUP()STACK1 ENDS;*CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATA MOV DS,AX ;装载数据段 MOV DX,MY8255_MODE ;初始化8255 MOV AL,81H ;置8255的C口PC0PC3输入开关状态,PC4PC7进行数码管的位锁存B;口的PB0PB7进行数

19、码管的段锁存,A口的PA0PA7控制流水灯的点亮 OUT DX,ALSHURU: LEA DX,TISHI ;给出输入时间提示 MOV AH,09H INT 21H ;显示输入倒计时时间的提示 MOV AH,01H INT 21H ;输入第1个数作为十位数 SUB AL,30H ;将AL的ASCLL减30H变为十进制的值 MOV CL,10 MUL CL ;将操作数10和AL相乘结果存入AX中 MOV BUF,AL ;把十位数存入BUF中 MOV AH,01H ;输入第2个数作为个位数 INT 21H SUB AL,30H ;将AL的ASCII减30H变为十进制的值 ADD AL,BUF ;将

20、两数相加作为倒计时的开始时间 MOV TIME,AL ;将数给TIMEDISPY: MOV BX,OFFSET DTABLE ;取DTABLE的偏移值 MOV AL,TIME ;初值给AL CBW ;将AX的高8位置0 MOV CL,CHU ;除数10给CL DIV CL ;商/十位数存入AL,余数/个位数存入AH MOV SI,3000H ;定义一个缓冲区 MOV SI,AL ;商/十位数存入SI,X3中 MOV SI+1,AH ;余数/个位数存入SI+1,X4中 PUSH AX ;保护现场 PUSH CX MOV CX,1FFFH ;通过延时不断刷新数码管C1: MOV AX,0FFFHC

21、2: DEC AX CALL DIS ;调用显示子程序 JNZ C2 LOOP C1 ;通过循环调用不断刷新数码管显示 POP CX POP AX ;弹出现场 PAUSE: CALL DIS ;调用显示子程序 MOV DX,MY8255_C ;C口低4位为输入 IN AL,DX ;读入C口的最低位的状态 TEST AL,01H ;0000 0001B JNZ PAUSE ;最低位为1暂停倒计时RESET1: MOV DX,MY8255_C ;C口低4位为输入 IN AL,DX TEST AL,02H ;0000 0010B JNZ RESET2 ;第2位置1后执行RESET2 DEC TIME

22、 ;减1倒计时 MOV CL,TIME CMP CL,0FFH ;当从初始值减到0后减1则值为0FFH,计数结束 JNZ DISPY ;倒计时未到0,继续倒计时 JMP OUTPUT1 ;跳到流水灯点亮RESET2: JMP SHURU ;重新开始倒计时OUTPUT1: PUSH CX ;点亮流水灯,流水灯0灭1亮 MOV CX,7 ;循环计数初值 MOV LA,80H ;流水灯从左往右依次点亮P4: MOV AL,LA MOV DX,MY8255_A OUT DX,AL ;通过A口输出控制LED点亮 CALL DALLY ROR AL,1 ;不进位的循环右移 MOV LA,AL LOOP P

23、4 MOV CX,8 MOV LB,01H ;流水灯从右往左依次点亮P5: MOV AL,LB MOV DX,MY8255_A OUT DX,AL CALL DALLY ROL AL,1 ;不进位的循环左移 MOV LB,AL LOOP P5 JMP prompt ;流水灯显示结束跳转到promptDALLY: PUSH CX ;流水灯点亮延时函数 PUSH AX MOV CX,0FFFFHA1: MOV AX,4FFFHA2: DEC AX JNZ A2 LOOP A1 POP AX POP CXRET DIS PROC NEAR ;数码管显示子程序 PUSH AX ;保护现场 PUSH D

24、X MOV SI,3000H ;找到存数的缓冲区 MOV AL,0BFH ;1011 1111B,选中X3数码管 MOV DX,MY8255_C ;选中PC口,进而选中数码管 OUT DX,AL MOV AL,SI ;取出缓冲区中存放的键值 XLAT ;查表指令,将以BX为基地址,AL为位移量的字节存储单元中的数赋给AL MOV DX,MY8255_B ;写入数码管ADp OUT DX,AL CALL DALLY1 ;调用延时函数 MOV AL,7FH ;0111 1111B,选中X4数码管 MOV DX,MY8255_C ;选中PC口,进而选中数码管 OUT DX,AL MOV AL,SI+

25、1 ;取出缓冲区中存放的键值 XLAT MOV DX,MY8255_B ;写入数码管ADp OUT DX,AL CALL DALLY1 ;调用延时函数 POP AX POP DXDIS ENDPDALLY1 PROC NEAR ;数码管显示延时函数 PUSH AX PUSH CX MOV CX,0FFHC3: MOV AX,0FFHC4: DEC AX JNZ C4 LOOP C3 POP CX POP AX RETDALLY1 ENDPprompt: LEA DX,TIMESUP ;将TIMESUP字符串输出 CALL PUTS LEA DX,STRMSG ;将STR字符串输出 CALL P

26、UTSP3: MOV AH,1 INT 21H ;键盘输入单个字符,AL=输入字符的ASCII码 CMP AL,72H ;测试按下的键为r重新开始 JZ P1 CMP AL,65H ;测试按下的键为e退出 JZ P2 JMP P3 ;不处理其他按键的输入P1: JMP RESET2 ;重新开始P2: LEA DX,ENDMSG CALL PUTS MOV AH,4CH ;退出程序 INT 21HPUTS: MOV AH,9 INT 21H ;进行字符串显示 RETCODE ENDS ;程序结束 END START五实验结果图8 课设平台图9 系统连线图10 数码管显示 图11 LED灯点亮显示

27、图12 PC显示屏提示显示六总结 通过本次微机接口课程设计,让我对微机原理与接口技术和汇编语言的了解更加深刻。我和我的组员王乐在TD-PIT+实验系统和PC机平台上利用并行接口8255A、键盘及数码管显示单元、开关及LED显示单元、键盘按键和电脑显示屏设计成一个倒计时器,最终很完美地实现了所有基本功能和扩展功能,感觉很有自豪感。在这次课设中,我学到了很多,包括书本上的和书本外平时易忽视的东西。一方面锻炼了我的动手能力,一方面提升了我的分析问题和解决问题的能力,还有就是团队合作精神。在这过程中,我们遇到了很多问题,最突出的就是数码管显示问题,我们一起讨论研究并询问老师,最终都很完美地解决了所有问题,设计出了一个多功能的倒计时器。感谢XXX老师的细心指导,感谢我的组员XX,最后感谢学校给我们提供这么好的学习平台。附录1:系统硬件框架附录2:系统总程序流程图附录3:8086/88计算机主板图

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1