《可任意启动停止的电子秒表的设计.docx》由会员分享,可在线阅读,更多相关《可任意启动停止的电子秒表的设计.docx(10页珍藏版)》请在三一办公上搜索。
1、可任意启动/停止的电子秒表的设计一、课程设计目的和任务?AOCS亟WR.SP.INTINT4.程序流程图和源代码清单:(1)程序流程图:KEY1 被按下奇数;保存数据段数据段清零;取中断程序入口地址;加装时IP = 2000地址(2)源代码清单: 主程序:PUSH DSMOV AX, 0000HMOV DS, AXMOV AX,OFFSET IRQ7ADD AX,2000HMOV SI, 003CMOV W SI, AXMOV AX, 0000HMOC SI, 003EHMOV WSI, AXPOP DSIN AL,21HAND AL, 7FHOUT 21H, ALMOV AL, 39HOUT
2、 43H, ALMOV AL,00HOUT 42H,ALMOV AL,10HOUT 42H,ALMOV AL, 81HOUT 63H, ALCALL FIRSTBEGI: HLTSTIMOV AH,01HINT 16HJZ BEJIMOV AH,00HINT 16HCMP AL,0DHJNZ A1MOV SI,4000HNOT SI+04HJMP BEGIA1: CMP AL, 1BHJNZ A2CALL FIRST;填8259中断7中断矢量;填偏移量矢量;段地址CS = 0000H;填段地址矢量;弹栈;读8259中断屏蔽字;开8259中断7;8253的计数器0为方式2,采用BCD码计数,先写
3、低8位,后写 高8位。方式控制字为00110101;写入方式控制字到控制字寄存器;计数初值低8位;写入计数初值低8位到通道0;计数初值高8位;写入计数初值高8位到通道0;8255的A 口位方式0输出,B 口为方式0输出,C 口下部输入1000 0001;写方式控制字;调用first子程序,赋计数初值;延时等待;开中断;检测是否按了键;读键值;是否按了 KEY2;偏移地址为4004H的内存单元内容取反;是否按了 KEY 1键;重新赋初值,相当于清零A2: JMP BEGI;调用DISP子程序,用来在数码管显示数据中断程序:MOVSI 4000HCMPSI+04H, 00H;判断是否按了第2次回车
4、键JEA4CALL ADDN;调用ADDN子程序,用来计数A4:MOVAL,20HOUT20H,ALCLI;关中断IRET;返回ADDN程序:ADDN: MOV SI, 4000HADDSI+05H, 01H;百分之一秒加1CMPSI+05H ,0AH;判断是否大于10JZA5JMPA11A5:MOVSI+05H, 00HADDSI+04H,01H;十分之一秒加1CMPSI+04H, 0AH;判断是否大于10JZA6JMPA11A6:MOVSI+04H,00HADDSI+03H,01H;秒位加1CMPSI+03H, 0AH;判断是否大于10JZA7JMPA11A7:MOVSI+03H, 00H
5、ADDSI, 01H;十秒位加1A8: MOVSI+02H, 00HADDSI+01H,01H;分位加1CMPSI+01H,0AH;判断是否大于10JZA7JMPA9A9: MOVSI+01H ,00HIRQ7: CAKK DISADD SI, 01HCMP SI,06HJZ A8JMP A9A10: MOV SI, 00A11: RET显示程序:DSP: PUSH AXMOV SI, 4000HMOV DL,F7HMOV AL,DLAGAIN: OUT 60H, ALMOV AL, SIMOV BX,4100HAND AX,00FFHADD BX,AXMOV AL, BXOUT 61H, A
6、LCALL DELAYINC SIMOV AL,DLTEST AL,01HJZ OUTROR AL,1MOV DL,ALJMP AGAINOUT: POP AXRETLEDMAP:DB3FH, 06H,5BH,DB6DH, 7DH.07H,DELAY: PUSH CXPUSH AX;十分位加1;判断是否大于6;大于60: 00重新开始;保存AX;指向数据缓冲区;1111 0111指向数码管;AL=1111 0111;写端口 A;指向数码缓冲区BX=0100 0001 0000 0000;BX=0000 0000 al得到显示代码BX=0100 0001 al;写端口 B:调用延时程序DELAY
7、;指向下一个数码管;弹出AX数码管显示代码: 4FH,66H 7FH,6FH;延时程序MOV CX,0010HT2 : DEC AXJNZ T2LOOP T1POP AXPOP CXRET三、系统方案实施1. 我们小组刚开始由于程序本身的一些问题和对微机原理知识的掌握不够全面,导致无法对 程序的有效汇编,如将程序多次汇编均显示“Out of memory”,后来在其他组同学的帮助下, 我们将源代码重新组合修改后成功运行,其中,曾多次出现代码段等未定义的错误警示,如后 来通过逐步分解测试的方法进行了解决。2。在基本确定了程序的框架和初步写出了源程序代码的情况下,我们按如上方式连线进行了 硬件调试
8、,最终当按下“KEY1”键,开始计数,但数码管显示从0000.00开始不能准确按每微 秒自动加0.01,只能无准确规律变化;再按下“KEY1 ”键,系统暂停计数,数码管显示当时的 数值;按“KEY2”键,系统复位清零,数码管可再次显示0000。00;但是当再次按下任何键, 系统不能重新启动,必须重新装入程序。3。本次实验通过微型计算机的定时和计数原理,设计了简单的计时器系统,拥有正确的 开始计时、暂停、清零的功能,并同时可以用数码管显示,但不够准确实现增加功能,在后 续的设计工作中需进一步改正。四、总结与体会首先,要认真阅读老师下发的微机接口课程设计任务书,仔细审题,看懂题目的要求, 根据小组
9、成员的兴趣爱好和能力,选择适当的课题,不益太简单或者太难,能够做到既能把 课题完成又能锻炼自己的能力。本次设计我们经过小组讨论,最终选择了 “可任意启动/停止 的电子秒表的设计”这一课题,难易适中,并能够充分运用到上学期我们所学的微型计算 机原理与接口技术的相关内容。然后,我们根据课题要求和实验室硬件条件,选择了适合的方案,确定所需要的元器件 及工具,复习相关的知识,查询相关的资料.在此过程中,我们加深了本次课程设计所涉及的微 机原理的定时/计数和中断的内容的学习,掌握了 8086微处理器、8253可编程定时/计数器、 8255A可编程并行接口芯片、8259A中断控制器、LED数码管等芯片的内
10、部结构、外部引脚、 控制字等知识。在具体进行实验的过程中,我加强了解了唐都实验箱和微机原理调试软件的使 用和实际操作技能,同时增强了小组成员之间的协调、合作.最后我们虽然得到了较理想的实验结果,但在整个实验过程中仍存在一些问题和不足。 如我们课程设计课题的选择并不是一帆风顺的,开始我们选择了 “存储器的扩展这一题目, 但在实验前期准备过程中我们发现我们对相关知识的掌握很不全面,所以因此浪费了一些时 间和精力。其次,通过对设计实验过程的分析和实验结果的对比,我们发现可以在本次可任意 启动/停止的电子秒表的设计的基础上,可以根据实验的实际情况添加些额外程序来使系统更 加的稳定,如采用延迟消除开关的震荡;还有在设计控制开关时,要注意2个中断的打开和关 闭的先后顺序,否则就会出错.在以后的课程设计中,我们会逐步改进这方面的不足,使设计 更完美.除此之外,由于我们的程序设计是由各个子程序组成,并在有些程序后面加了注释, 这样不仅程序看上去更简洁,更明白易懂,在程序出错的检查过程中也更容易查找到,这可以 说是我们本次设计中的优势.在今后的学习生活中,我们会继续加强微机接口及单片机,尤其 是存储器扩展方面的学习,不断改进缺点,完善自己。