倒计时唐都试验箱.docx
《倒计时唐都试验箱.docx》由会员分享,可在线阅读,更多相关《倒计时唐都试验箱.docx(18页珍藏版)》请在冰点文库上搜索。
![倒计时唐都试验箱.docx](https://file1.bingdoc.com/fileroot1/2023-5/5/2ca6b1ef-a51a-4b69-8db2-71389749f535/2ca6b1ef-a51a-4b69-8db2-71389749f5351.gif)
倒计时唐都试验箱
倒计时牌
一、方案选择:
1.1题目要求:
显示距倒计时时刻还有多长时间(显示:
时、分、秒)
1.2总体初设方案和理由
1.2.1处理器芯片选择
8086微处理器的主要特点:
8086为16位微处理器,数据总线16位,地址总线20位,可寻址1MB存储空间,时钟频率为5~10MHz。
8086CPU的内部结构由执行单元EU(executionunit)和总线接口部件BIU(businterfaceunit)两部分组成。
我们最熟悉的微处理器就是8086,所以选择8086CPU。
1.2.2通信接口芯片选择
可编程并行通信接口8255,PA端口作为信号输入,PB端口做为数码管的位选信号输出端口,PC端口作为数码管的片选信号输出端口。
本系统设计以8086微处理器作为CPU,8255做可编程并行接口显示时钟和键盘电路,接LED显示倒计时及小时、分钟、秒(各2位)和扩展调整键盘。
系统一运行就从23时59分59秒开始计时,并在数码管上显示当前值,而且,可以用键盘设置当前时间。
基本工作原理:
每1秒对寄存器的内容减一,当减60次时,分减一,秒恢复到59;当分减60次时,时减一,分恢复到59;6个数码管动态显示时、分、秒的当前值
二、硬件原理电路图的设计及分析:
各部分电路的设计思想及功能特性及原理电路图:
系统分为3个功能模块,分别为:
主程序模块,小键盘控制模块,LED显示模块。
2.1主程序模块
主控模块是其核心模块,对8255进行初始化,扫描键盘根据按键值作相应的处理。
主要由软件实现。
它的主要功能是调用其它模块对系统工作进行协调,读小键盘输入键值并执行要做的工作,如图1
图1
2.2小键盘模块
小键盘模块送入主控模块的子功能模块。
由软件和硬件实现,硬件上由小键盘和8255互连,将小键值由8255送入主控模块。
软件上使用行扫描法获得键值并送回主控模块。
本课题只考虑去抖动。
执行一个约10ms的延时程序后再扫描键盘,若F0=1表示真正有键按下,从而消除了抖动影响,如图2
图2
2.3LED显示模块
显示模块是将显示缓冲区的数值送到LED显示的功能模块,显示缓冲区是由六个字节构成,分别保存时的高位和低位,分的高位和低位,秒的高位和低位。
硬件上由六个LED构成,软件上由扫描显示的方法实现,如图3。
图3
其中,由于实际应用中要求显示为十进制数,而在程序中处理的数据都为十六进制,因此在程序中要对显示缓冲区的数据进行十进制调整。
在总的电路图中用8255并行通信接口的PC端口进行片选,位选由PB端口输出,根据如下段码表来设计。
数字
0
1
2
3
4
5
6
7
8
9
七段代码
3FH
06H
5BH
4FH
66H
6DH
7DH
07H
7FH
6FH
表1
三、程序设计与分析:
各模块程序的设计、完整的程序框图:
3.1设计流程图
3.1.1主程序流程
显示时刻
功能键是否按下
进入时刻设置状态
确认键是否按下
N
Y
N
YYY
图4
3.1.2时间程序更改流程图
N
Y
N
Y
N
Y
N
Y
时的个位为0
时的个位减1
N
时的十位为0
时的个位赋3
时的十位赋2
RET
时的十位减1
时的个位赋9
Y
N
Y
图5
3.1.3键盘扫描程序流程图:
图6
3.2程序设计与分析:
3.2.1各模块程序的设计
(1)8255A初始化
程序开始时对8255A进行初始化,PA、PB、PC组控制工作在方式0,PA端口为输入端口。
PB、PC为输出端口。
DATASEGMENT
LEDDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
XDW?
YDW?
ZDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,46H;01000110[8255]控制口地址46h
MOVAL,82H;10000010A方式0输出B方式0输入C输出
OUTDX,AL;向8255写控制字
NEXT:
MOVX,59;记录按键次数
MOVY,59
MOVZ,23
LEASI,LED
MOVAL,00010111B;定时器0方式0
OUT4EH,AL;向8253写控制字
MOVAL,255;计数初值为1
MOVDX,48H;计数器0的端口地址
OUTDX,AL
REPEAT0:
(2)显示程序模块
根据方式控制字和连线可知,B口连接数码管的A~Dp进行段锁存,C口进行位锁存。
显示程序如下:
CONVERPROC
MOVAX,X
MOVCL,10
DIVCL;按键次数除以10,商是次数的十位存在AL中,余数是次数的各位,存在AH中
MOVBX,AX;AH:
BHAL:
BL
MOVAL,02H
OUT44H,AL;向8255端口C的Pc0置1使显示管1工作
MOVBP,BX
ANDBP,0FFH;清除余数,保留商
MOVAL,[SI+BP];使显示管显示相应的值
OUT40H,AL;将商的值显示通过PA
CALLDELY
MOVAL,01H;00000001
OUT44H,AL;点亮各位led置8255的Pc1为0
XCHGBH,BL;交换商和余数
MOVBP,BX
ANDBP,0FFH;清除商,保留余数
MOVAL,[SI+BP]
OUT40H,AL;将余数的值显示通过PA
CALLDELY
MOVAX,Y
MOVCL,10
DIVCL;按键次数除以10,商是次数的十位,存在AL中,余数是次数的各位,存在AH中
MOVBX,AX;AH..BHAL..BL
MOVAL,20H
OUT44H,AL;向8255端口C的Pc0置1使显示管1工作
MOVBP,BX
ANDBP,0FFH;清除余数,保留商
MOVAL,[SI+BP];使显示管显示相应的值
OUT40H,AL;将商的值显示通过PA
CALLDELY
MOVAL,10H;00000010
OUT44H,AL;点亮各位led置8255的Pc1为0
XCHGBH,BL;交换商和余数
MOVBP,BX
ANDBP,0FFH;清除商,保留余数
MOVAL,[SI+BP]
OUT40H,AL;将余数的值显示通过PA
CALLDELY
MOVAX,Z
MOVCL,10
DIVCL;按键次数除以10,商是次数的十位,存在AL中,余数是次数的各位,存在AH中
MOVBX,AX;AH..BHAL..BL
MOVAL,80H
OUT44H,AL;向8255端口C的Pc0置1使显示管1工作
MOVBP,BX
ANDBP,0FFH;清除余数,保留商
MOVAL,[SI+BP];使显示管显示相应的值
OUT40H,AL;将商的值显示通过PA
CALLDELY
MOVAL,40H;01000000
OUT44H,AL;点亮各位led,置8255的Pc1为0
XCHGBH,BL;交换商和余数
MOVBP,BX
ANDBP,0FFH;清除商,保留余数
MOVAL,[SI+BP]
OUT40H,AL;将余数的值显示通过PA
CALLDELY
RET
CONVERENDP
(3)延时程序模块
控制一个循环程序循环以到达延时的目的。
具体语句如下:
DELYPROC
PUSHCX
MOVCX,1000
L:
LOOPL
POPCX
RET
DELYENDP
3.3程序代码:
DATASEGMENT
LEDDB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
XDW?
YDW?
ZDW?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVDX,46H;01000110[8255]控制口地址46h
MOVAL,82H;10000010A方式0输出B方式0输入C输出
OUTDX,AL;向8255写控制字
NEXT:
MOVX,59;记录按键次数
MOVY,59
MOVZ,23
LEASI,LED
MOVAL,00010111B;定时器0方式0
OUT4EH,AL;向8253写控制字
MOVAL,255;计数初值为1
MOVDX,48H;计数器0的端口地址
OUTDX,AL
REPEAT0:
REPEAT1:
CALLCONVER;显示子程序
MOVDX,42H
INAL,DX;将PB中的值输入到ALPB的值取决于PB7
CMPAL,0FEH
JZNEXT
TESTAL,80H;判断计数是否结束TEST相与但不改变相应的值
JNZREPEAT1
REPEAT2:
CALLCONVER
MOVDX,42H
INAL,DX
CMPAL,7EH
JZNEXT
TESTAL,80H
JZREPEAT2
DECX;计数结束,按键次数减1
CMPX,0
JNZNEXT1
MOVX,59
DECY
NEXT1:
CMPY,0
JNZNEXT2
MOVY,59
DECZ
NEXT2:
CMPZ,0
JNZNEXT3
MOVZ,23
NEXT3:
CALLCONVER;显示子程序
JMPREPEAT0;重新初始化定时器,为下一次按键准备
CONVERPROC
MOVAX,X
MOVCL,10
DIVCL;按键次数除以10,商是次数的十位存在AL中,余数是次数的各位,存在AH中
MOVBX,AX;AH:
BHAL:
BL
MOVAL,02H
OUT44H,AL;向8255端口C的Pc0置1使显示管1工作
MOVBP,BX
ANDBP,0FFH;清除余数,保留商
MOVAL,[SI+BP];使显示管显示相应的值
OUT40H,AL;将商的值显示通过PA
CALLDELY
MOVAL,01H;00000001
OUT44H,AL;点亮各位led置8255的Pc1为0
XCHGBH,BL;交换商和余数
MOVBP,BX
ANDBP,0FFH;清除商,保留余数
MOVAL,[SI+BP]
OUT40H,AL;将余数的值显示通过PA
CALLDELY
MOVAX,Y
MOVCL,10
DIVCL;按键次数除以10,商是次数的十位,存在AL中,余数是次数的各位,存在AH中
MOVBX,AX;AH..BHAL..BL
MOVAL,20H
OUT44H,AL;向8255端口C的Pc0置1使显示管1工作
MOVBP,BX
ANDBP,0FFH;清除余数,保留商
MOVAL,[SI+BP];使显示管显示相应的值
OUT40H,AL;将商的值显示通过PA
CALLDELY
MOVAL,10H;00000010
OUT44H,AL;点亮各位led置8255的Pc1为0
XCHGBH,BL;交换商和余数
MOVBP,BX
ANDBP,0FFH;清除商,保留余数
MOVAL,[SI+BP]
OUT40H,AL;将余数的值显示通过PA
CALLDELY
MOVAX,Z
MOVCL,10
DIVCL;按键次数除以10,商是次数的十位,存在AL中,余数是次数的各位,存在AH中
MOVBX,AX;AH..BHAL..BL
MOVAL,80H
OUT44H,AL;向8255端口C的Pc0置1使显示管1工作
MOVBP,BX
ANDBP,0FFH;清除余数,保留商
MOVAL,[SI+BP];使显示管显示相应的值
OUT40H,AL;将商的值显示通过PA
CALLDELY
MOVAL,40H;01000000
OUT44H,AL;点亮各位led,置8255的Pc1为0
XCHGBH,BL;交换商和余数
MOVBP,BX
ANDBP,0FFH;清除商,保留余数
MOVAL,[SI+BP]
OUT40H,AL;将余数的值显示通过PA
CALLDELY
RET
CONVERENDP
DELYPROC
PUSHCX
MOVCX,1000
L:
LOOPL
POPCX
RET
DELYENDP
CODEENDS
ENDSTART
四、总电路图:
图7
五、系统评价:
微机原理和接口技术是一门实践性强的学科,其中很多的原理、规则、现象等仅仅靠学习教科书是无法完全掌握的,必须通过实践才能比较直观和深刻的理解。
在进行课程设计的过程中,让我们体验分析问题、提出解决方案、通过编程等手段实现解决方案、不断调试最终达到设计要求的全过程,从而帮助我们系统地掌握微机原理的接口技术的相关知识,达到将知识融会贯通的目的。
本次设计的基于单片的倒计时器相较传统机械式倒计时器具有可以灵活可调、性价比高等优点,有在现实生活中得到广泛应用的发展潜力。
用8086,8255,8253等芯片,工作性能稳定,具有很好的实用性。
六、心得体会:
微机原理与接口技术一门很有些意义的课程。
从最初的汇编到组成原理,到现在的微机原理与接口,一步一步的学习,让我学到更多,对计算机的最底层有了更深一步的了解。
在做这个课程设计时,比想象的更加困难些,虽然通过许多途径找到了相关的资料,但是实现着实不简单。
对于我来说编程是一个比较困难的事情,所以做这个课程设计确实很纠结。
不过做完这个课程设计,我学到了很多,在编程方面也有了一定的提升。
这门课程设计必须理论和实践相结合。
整个的设计过程中,要充分利用软件工程中的模块化设计思想,这样使设计减少了许多繁杂的问题,使程序看起来更加明了,不易混乱。
任何事情不可能一下子完成,程序的实现更是要一步一步来完成,急于求成,很大程度上会增加软件开发的难度,造成开发过程中不必要的麻烦。
只要坚持去做,努力去做,就会有收获。
我在进步,也会继续进步。
在经过那段设计困难时期后,经过查阅大量的参考书籍,同学之间不断的探讨以及老师的细心讲解,及时的指导后,设计的思路终于有了眉目。
接下来就是了解各种芯片的功能,然后画出设计草图,分析。
虽然最终出来的结果并不是十分完整,但毕竟是辛苦劳动的结果,我仍然感到欣慰。
课程设计结束了,但期间同学之间的合作和老师的耐心指导,让我体会很深,在此我要感谢同学以及指导老师的帮助。
这次课程设计,给了我们将学过的理论知识付诸实践的机会,让我发现,理论和实践其实确实是不一样的。
通过编写程序,增加了学习的积极性和趣味性。
通过课程实践,巩固加深对课堂教学内容的理解,提高我们运用汇编语言进行程序设计和动态调试程序的能力,培养同学克服困难的毅力和精神。
七、参考文献:
[1]温冬蝉•沈美明•IBM-PC汇编程序设计•北京:
清华大学出版社,2002.3
[2]戴梅萼•史嘉权•微型计算机接口及应用(第4版)•北京:
清华大学出版社,2008.3
[3]沈美明•IBM-PC汇编语言程序设计例题习题集》(第1版)•清华大学出版社,1991.6
[4]朱世鸿•《微机系统和接口应用技术》•清华大学出版社(第1版),2006.9