《微机原理课程设计报告39521》由会员分享,可在线阅读,更多相关《微机原理课程设计报告39521(28页珍藏版)》请在金锄头文库上搜索。
1、下载可编辑江苏大学京江学院JIANGSU UNIVERSITY 微 机 原 理 课 程 设 计电子钟学 院 名 称 : 京江学院 专 业 班 级 : J计算机1401 学 号 : 4141110020 学 生 姓 名 : 潘 庆 指 导 教 师 : 杨旭东 2017 年 1 月 1、 实验目的掌握综合使用基本输入输出设备、通用接口芯片、专用接口芯片的方法;掌握实时处理程序的编制和调试方法;掌握8253、8259、8255的使用掌握小键盘、LED八段式发光二极管和蜂鸣器的使用2、 实验内容利用8253的定时功能,产生0.5S的定时中断;在F5区的数码管上显示时间格式为“时:分:秒”(24小时)允
2、许通过键盘的按键设置时钟的初值;允许通过键盘的按键控制时钟的启停;分秒值为59分55秒时开始报时,每秒钟蜂鸣器鸣叫一声,到整点报时停止。3、 使用的芯片及占用端口地址8253芯片:主要用于产生定时中断,定时时间为0.5S端口地址:0260H0263H8255芯片:主要用于控制键盘输入和LED数码管输出端口地址:0270H0273H8259芯片:主要用于产生中断管理端口地址:0250H0251H4、 硬件连接方案键盘的控制由8255的B口控制;LED显示模块由8255的B口和A口控制;时间的精确定时用8254定时器0产生50ms的中断信号;整点报时控制用8255的某一位信号控制8254的GATE
3、1。GATE=1时,OUT1信号控制蜂鸣器鸣叫;GATE=0,蜂鸣器停止蜂鸣。5、 设计的系统连接总逻辑图键盘与LED(F5)A:按键的列线B:数码管段码C:数码管选择脚D:按键的行线蜂鸣器(F8)Ctrl:控制接口,0蜂鸣8253(C4)CS:片选信号,低电平有效;A0、A1:地址信号;8255(D3)8259(B3)6、 程序模块划分及各模块程序流程图主程序模块:对8254、8259A等芯片进行初始化,设置中断向量,扫描键盘,根据按键值作相应的处理。流程图参见图。注意:设置初始时间时要考虑边界,时间的最大值为23:59:59,不能超出此范围。8254中断服务程序:刷新一遍数码管,计时时间到
4、一秒,修改当前时间,整点报时。流程图参见图7、 实验中遇到的问题,解决办法及实验心得体会 这次课程设计有一定的难度,期间遇到了种种困难,卡住了很久,比如在做显示的时候,先要全熄数码管,然后扫描按键,还要很好地控制延时去抖动,这是件挺繁琐的事,另外,按键之后需要给按键一个扫描码,接着转化成字形码,能够识别并在数码管上显示,也花了很多时间,再比如在设置时间的时候,对于延时时间的拿捏也很难,需要在buf缓冲区存放值,修改时,让修改位熄灭,其余位为0,若超出规定位数,则不修改,显示原值。老师在我完成规定任务后也设下了一个小挑战,将8255的一根接线调换了位置,要求仍正确显示,最后我想出的解决的方法是段
5、位码改共阳极,键盘扫描里修改相应端口,开头输入部分修改8255初始化控制字即可。这次课程设计对于这门课的认知的提升很有帮助,本来只是理解了理论,对于亲自动手实现还是感到茫然,甚至不相信自己能完成,但是在一步一步实现各个功能模块后,发现点连成了线,线动成面,知识点是能够串联起来的,只要自己愿意动手,愿意思考,没有什么是做不成的,当然期间必然会遇到各种各样的问题,只要肯向老师或同学请教,他们也一定会给你的思维一些启发。这次的课程设计虽然只是做了一个看似简单的电子钟,但是它几乎涵盖了我们这学期所学的大部分内容,完成这项课程设计必然要深入理解课本上的知识,这就起到了查漏补缺,融会贯通的作用,我想这对日
6、后学习其他硬件方面的知识都是很有益的,也很大程度上激发了我对硬件方面课程的更大热情。8、 源程序清单.MODEL TINYC0_8253 EQU260H;计数器0的端口地址C1_8253 EQU 261H;计数器1的端口地址C2_8253 EQU 262H;计数器2的端口地址CTRL_8253 EQU 263H;控制端口的端口地址PA_8255EQU270H ;端口A的地址 PB_8255EQU271H;端口B的地址PC_8255EQU272H;端口C的地址CTRL_8255EQU273H;控制端口的端口地址EVEN_8259EQU250H ODD_8259EQU251H.STACK 100.
7、DATABUFFER DB 0,0,0,0,0,0 ;数码上显示的内容KEY DB 0FLAG DB 1BUF DB 0,?SEG_TAB DB03FH, 06H,05BH,04FH, 66H, 6DH, 7DH,07H,7FH,6FH;09的段码表SEG_TAB2DB0BFH, 86H,0DBH,0CFH, 0E6H, 0EDH, 0FDH,87H,0FFH,0EFH .CODESTART:MOV AX,DATA MOV DS,AX MOV ES,AX NOP MOV AL,30H;00110000B,计数器0,方式0,二进制计数 MOV DX,CTRL_8253 OUT DX,AL MOV
8、 DX,C0_8253 MOV AL,0DH;Fout=1/25ms=40Hz,Fclk=31250Hz,N=Fclk/Fout=31250Hz/40Hz=781,N=781 OUT DX,AL MOV AL,03H OUT DX,AL MOV DX,CTRL_8253 MOV AL,76H;01110110B,计数器1,方式3,二进制计数 OUT DX,AL MOV DX,C1_8253 MOV AL,12H;31250HzOUT DX,ALMOV AL,7AH OUT DX,AL CALL SET_VECTOR ;设置中断向量 CALL INIT_8259 MOV AL,11111110B
9、 ;开放IR0请求的屏蔽位 MOV DX,ODD_8259 OUT DX,ALL1: STIMOV DX,CTRL_8255;8255初始化 MOV AL,80H ;10000000B,端口A方式0输出,端口B方式0输出,C输出 OUT DX,AL LEA SI,BUFFER MOV CX,8LP: CALL DIR LOOP LP MOV DX,CTRL_8255;8255初始化 MOV AL,82H ;10000010B,端口A方式0输出,端口B方式0输入,C输出 OUT DX,ALL2: CALL KEYSCAN JMP L1 JMP $ DIR PROCNEAR PUSHAX PUSH
10、BX PUSHDX MOVAL,BUFFER0 CMP FLAG,0 JNZ Q0 CMP KEY,0 JNZ Q0 LEABX,SEG_TAB2 JMP W0Q0: LEABX,SEG_TAB ;BX置为段码表首址W0: XLAT ;转换成七段码 MOVDX,PA_8255 ;段码端口 OUTDX,AL MOV DX,PB_8255 ;位码端口 MOV AL,7FH ;小时的十位 OUT DX,AL CALLDELAY ;延时 MOV AL,BUFFER1 CMP FLAG,0 JNZ Q1 CMP KEY,1 JNZ Q1 LEABX,SEG_TAB2 JMP W1Q1: LEABX,SEG_TAB W1: XLAT ;转换成七段码 MOVDX,PA_8255 ;段码端口 OUTDX,AL MOV DX,PB_8255 ;位码端口 MOV AL,0BFH ;小时的个位 OUT DX,AL CALLDELAY ;延时 MOV AL,BUFFER2 CMP FLAG,0 JNZ Q2 CMP KEY,2 JNZ Q2 LEABX,SEG_TAB2 JMP W2Q2: LEABX,SEG_TAB W2: XLAT ;转换成七段码 MOVDX,PA_8255 OUTDX,AL MOV DX,PB_8255 ;位码端口 MOV AL,0