汇编语言数字时钟设计剖析.docx
- 文档编号:7827429
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:22
- 大小:390.78KB
汇编语言数字时钟设计剖析.docx
《汇编语言数字时钟设计剖析.docx》由会员分享,可在线阅读,更多相关《汇编语言数字时钟设计剖析.docx(22页珍藏版)》请在冰豆网上搜索。
汇编语言数字时钟设计剖析
福建工程学院
课程设计
课程:
微机原理及接口课程设计
题目:
数字时钟
专业:
软件工程
班级:
1101
座号:
3110305110
姓名:
程康
2013年9月18日
1、设计任务
数字时钟:
实时显示时间于LED数码管,并可以修改时间,包括上调,下调,复位等。
2、总体方案设计与方案论证
1、时钟,前提需要脉冲的产生,根据8253能产生稳定的方波,故时钟脉冲的产生将由8253芯片实现。
2、此实验只需要精确到秒,所以,产生的方波,将是频率为1HZ。
3、时间显示采用实验箱上的6个LED数码管分别显示时、分、秒,采用动态扫描方式实现。
3、因为涉及到时钟显示和控制两大功能,还有对到来的时钟脉冲接收和处理,在这里,将选用8255芯片,作为中间介质,对用户要求和接收到的脉冲信号进行处理,设置时间通过开关产生单脉冲8255的PC0~PC2输入,通过PC0控制时间的暂停与继续,通过PC1控制时加1,通过PC2控制分加1,通过PC4控制秒加1,通过PC5控制复位。
最终产生达到用户要求的数字时钟,在微机接口实验台上模拟调试实现24小时走时的时钟,并将时间以HH.MM.SS显示在6位数码管上。
系统硬件设计主要利用微机实验箱上的电路模块,硬件电路主要有按键电路,单脉冲产生单元、8253定时计数、8255并行接口单元、LED显示电路。
3、总框图及总体软件设计说明
4、接口电路逻辑图及硬件设计说明,或系统资源使用说明
1、硬件整体电路图
5、局部程序框图及其设计说明
1、主入口
2、时钟运行正常流程图
6、源程序清单
CODESEGMENT
ASSUMECS:
CODE,DS:
CODE
START:
MOVAX,CS
MOVDS,AX
MOVDX,20BH;8253
MOVAL,36h;0号定时器,方式3,二进制
OUTDX,AL
MOVDX,208H
MOVAX,1000;1000分频
OUTDX,AL;0号数据口
MOVAL,AH
OUTDX,AL
MOVDX,20BH;8253
MOVAL,76h;1号定时器,方式3,二进制
OUTDX,AL
MOVDX,209H
MOVAX,1000;1000分频
OUTDX,AL;1号数据口.3
MOVAL,AH
OUTDX,AL
MOVAL,89H;A.B口方式0输出,PC0-3输入,PC4-7输入
MOVDX,203H
OUTDX,AL;写8255工作方式控制字
go:
CALLBEGIN;时间走动
CALLSET;修改时间
JMPgo
;对时间拆字
splitPROC
LEADI,RES
MOVDX,00H
;时间的小时位
MOVDL,H
MOVCL,4
SHRDL,CL;通过移位获取时的高位
MOVBX,DX
MOVDL,BUF[BX];查定义好的数据段获取对应数字数码管的值
MOV[DI],DL;保存到RES对应单元
INCDI
MOVDL,H
ANDDL,0FH;获取时的低位
ADDDL,0AH;小时和分钟低位都是加点数
MOVBX,DX
MOVDL,BUF[BX];查定义好的数据段获取对应数字数码管的值
MOV[DI],DL
;时间的分钟高位,无点存储
INCDI
MOVDL,M
SHRDL,CL
MOVBX,DX
MOVDL,BUF[BX]
MOV[DI],DL
;时间的分钟低位,有点存储
INCDI
MOVDL,M
ANDDL,0FH
ADDDL,0AH
MOVBX,DX
MOVDL,BUF[BX]
MOV[DI],DL
;时间的秒位,高低位都按无点存储
INCDI
MOVDL,S
SHRDL,CL
MOVBX,DX
MOVDL,BUF[BX]
MOV[DI],DL
INCDI
MOVDL,S
ANDDL,0FH
MOVBX,DX
MOVDL,BUF[BX]
MOV[DI],DL
RET
splitENDP
;判断k0是否按下并弹起,暂停
ISK0PROC
MOVDX,202H;判断K0按下,且放开
INAL,DX;把c口数据写入AL
ANDAL,01H;判断K0是被按下
CMPAL,01H
JNZDOWN
JMPRETURN
;被按下
DOWN:
MOVDX,202H
INAL,DX
ANDAL,01H;被按下是否弹起
CMPAL,01H
JZUP
JMPDOWN
;按下之后又弹起,K0不等于0
UP:
INCK0
MOVAH,00H
MOVAL,K0
MOVBL,03H
DIVBL
MOVK0,AH
RETURN:
RET
ISK0ENDP
DELAYPROCNEAR
PUSHCX
MOVCX,65535
LOOP$
POPCX
DELAYENDP
;以按下为准,进行时间的递增
ISK1PROC
MOVDX,202H;判断K1按下,且放开
INAL,DX
ANDAL,02H
CMPAL,02H
JNZUP1
JMPRETURN1
UP1:
;CALLSHOW
MOVDX,202H
INAL,DX
ANDAL,02H
CMPAL,02H
JZDOWN1
JMPUP1
DOWN1:
CALLDELAY;加入延时子程序,消除在一定时间内的按钮波动
MOVAL,K1
ADDAL,01H
DAA
MOVK1,AL
MOVAH,00H
MOVBL,24H
DIVBL
MOVK1,AH
RETURN1:
RET
ISK1ENDP
;分钟调节上升
ISK2PROC
MOVDX,202H;判断K2按下,且放开
INAL,DX
ANDAL,04H
CMPAL,04H
JNZUP2
JMPRETURN2
UP2:
MOVDX,202H
INAL,DX
ANDAL,04H
CMPAL,04H
JZDOWN2
JMPUP2
DOWN2:
CALLDELAY;加入延时子程序,消除在一定时间内的按钮波动
MOVAL,K2
ADDAL,01H
DAA
MOVAH,00H
MOVBL,60H
DIVBL
MOVAL,AH
ADDAL,00H
DAA
MOVK2,AL
RETURN2:
RET
ISK2ENDP
;秒调节上升
ISK5PROC
MOVDX,202H;判断K4按下,且放开
INAL,DX
ANDAL,10H
CMPAL,10H
JNZUP5
JMPRETURN5
UP5:
MOVDX,202H
INAL,DX
ANDAL,10H
CMPAL,10H
JZDOWN5
JMPUP5
DOWN5:
CALLDELAY;加入延时子程序,消除在一定时间内的按钮波动
MOVAL,K4
ADDAL,01H
DAA
MOVAH,00H
MOVBL,60H
DIVBL
MOVAL,AH
ADDAL,00H
DAA
MOVK4,AL
RETURN5:
RET
ISK5ENDP
;以按下为准,进行时间的递减小时
ISK3PROC
MOVDX,202H;判断K1按下,且放开
INAL,DX
ANDAL,02H
CMPAL,02H
JNZUP3
JMPRETURN3
UP3:
MOVDX,202H
INAL,DX
ANDAL,02H
CMPAL,02H
JZDOWN3
JMPUP3
DOWN3:
CALLDELAY;加入延时子程序,消除在一定时间内的按钮波动
MOVAL,K1
CMPAL,00H
JAJIAN3
JMPBIAN3
JIAN3:
SUBAL,01H
;ADDAL,00H
DAS
MOVK1,AL
RET
BIAN3:
MOVAL,23H
MOVK1,AL
RETURN3:
RET
ISK3ENDP
;分钟调节下降
ISK4PROC
MOVDX,202H;判断K2按下,且放开
INAL,DX
ANDAL,04H
CMPAL,04H
JNZUP4
JMPRETURN4
UP4:
MOVDX,202H
INAL,DX
ANDAL,04H
CMPAL,04H
JZDOWN4
JMPUP4
DOWN4:
CALLDELAY;加入延时子程序,消除在一定时间内的按钮波动
MOVAL,K2
CMPAL,00H
JAJIAN4
JMPBIAN4
JIAN4:
SUBAL,01H
DAS
MOVK2,AL
RET
BIAN4:
MOVAL,59H
MOVK2,AL
RETURN4:
RET
ISK4ENDP
;秒调节下降
ISK6PROC
MOVDX,202H;判断K2按下,且放开
INAL,DX
ANDAL,10H
CMPAL,10H
JNZUP6
JMPRETURN6
UP6:
MOVDX,202H
INAL,DX
ANDAL,10H
CMPAL,10H
JZDOWN6
JMPUP6
DOWN6:
CALLDELAY;加入延时子程序,消除在一定时间内的按钮波动
MOVAL,K4
CMPAL,00H
JAJIAN6
JMPBIAN6
JIAN6:
SUBAL,01H
DAS
MOVK4,AL
RET
BIAN6:
MOVAL,59H
MOVK4,AL
RETURN6:
RET
ISK6ENDP
;以按下为准,对时分秒进行初始化的操作
ISK7PROC
MOVDX,202H;判断K5按下,且放开
INAL,DX
ANDAL,20H
CMPAL,20H
JNZUP7
JMPRETURN7
UP7:
MOVDX,202H
INAL,DX
ANDAL,20H
CMPAL,20H
JZDOWN7
JMPUP7
DOWN7:
CALLDELAY;加入延时子程序,消除在一定时间内的按钮波动
MOVAL,00H
MOVH,AL
MOVK1,AL
MOVM,AL
MOVK2,AL
MOVS,AL
MOVK4,AL
RETURN7:
RET
ISK7ENDP
SHOWPROC;8255显示时间子程序
LOP2:
CALLsplit
LEADI,RES
MOVCX,6
MOVAL,K;AL=DFH11011111控制Y1~Y5循环点亮
MOVX1,AL
LOP:
MOVDX,201H
MOVAL,0FFH
OUTDX,AL
MOVDX,200H;A口输出段码
MOVAL,[DI]
OUTDX,AL
INCDI
MOVAL,X1
MOVDX,201H;B口输出
OUTDX,AL
RORX1,1;循环右一位
LOOPLOP
RET
SHOWENDP
;修改时间的子程序
SETPROC
MOVAL,H
MOVK1,AL
MOVAL,M
MOVK2,AL
MOVAL,S
MOVK4,AL
DU5:
CALLSHOW
MOVDX,201H
MOVAL,7FH
OUTDX,AL
CALLISK0
MOVAL,K0
CMPAL,0
JAZHIZONG
JMPJIE1
ZHIZONG:
CMPAL,1
JAZHI1
JMPZHI
ZHI1:
CALLISK3
CALLISK4
CALLISK6
CALLISK7
MOVAL,K1
MOVH,AL
MOVAL,K2
MOVM,AL
MOVAL,K4
MOVS,AL
CALLSHOW
MOVDX,201H
MOVAL,7FH
OUTDX,AL
;CALLISK7
JMPDU5
ZHI:
CALLISK2
CALLISK1
CALLISK5
CALLISK7
MOVAL,K1
MOVH,AL
MOVAL,K2
MOVM,AL
MOVAL,K4
MOVS,AL
CALLSHOW
MOVDX,201H
MOVAL,7FH
OUTDX,AL
;CALLISK7
JMPDU5
JIE1:
RET
SETENDP
;时间开始走动的子程序
BEGINPROC
DU:
CALLSHOW
MOVDX,201H
MOVAL,0FFH
OUTDX,AL
CALLISK7
CALLISK0
MOVAL,K0
CMPAL,0
JZXIAN
JMPJIE
;没有按k0
XIAN:
MOVDX,202H
INAL,DX
ANDAL,08H
CMPAL,00H
JZDU
ADDS,01H
MOVAL,S
DAA
MOVS,AL
CMPS,60H
JNZDU1
MOVS,00H
ADDM,01H
MOVAL,M
DAA
MOVM,AL
CMPM,60H
JNZDU1
MOVM,00H
ADDH,01H
MOVAL,H
DAA
MOVH,AL
CMPH,24H
JNZDU1
JMPLOP1;时等于24时
DU1:
CALLSHOW
MOVDX,201H
MOVAL,0FFH
OUTDX,AL
MOVDX,202H
INAL,DX
ANDAL,08H
CMPAL,00H
JNZDU1
JMPDU
LOP1:
MOVH,00H
JMPDU
JIE:
RET
BEGINENDP
CLOCKPROC
RET
CLOCKENDP
BUFDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH;不加点的数
DB0BFH,86H,0DBH,0CFH,0E6H,0EDH,0FDH,87H,0FFH,0EFH;加点的数
RESDB6DUP(?
);定义时分秒的存储单元,用于显示
;存放时钟的时分秒,
HDB00H;时
MDB00H;分
SDB00H;秒
KDB0DFH;循环移位的控制
X1DB00H
K0DB0;暂停开关,标志位
K1DB0;调整时的开关,标志位
K2DB0;调整分钟的开关,标志位
K4DB0;调整秒的开关,标志位
CODEENDS
ENDSTART
7、系统功能及操作说明
功能:
实现24小时制的时钟的显示,暂停和调整
操作说明:
当接通电源,编译运行后,会从默认时间00:
00:
00开始,以秒为单位计时。
在计时当中,拨动开关K0一次,进入调整时间块,为上调。
拨动两次,进入调整时间块,为下调。
此时,通过拨动K1(小时),K2(分钟),K4(秒)实现在不同状态下的时间的调整。
K5为复位键,在任何时间,按下复位键,可以将时间置0,在这个基础上继续实现时间的显示或者调整。
8、调试记录及调试结果
1、在时钟正常走动时,因为满60S,分要进1,秒置0,所以涉及到除法操作,因为,在整个编码中,用来保存时,分,秒的控制LED显示数字都是以BCD码保存,所以开始,忘记相除后,对其进行二进制到BCD码的转换,导致显示错误,后将要得到的结果进行一次加0法操作,再进行DAA转换,以BCD码保存,便消除了这个问题。
2、输出时,时间逐位显示,没有在LED上给人以连续的效果,后来通过8255的B口(PB0--PB5)加上了循环移位法控制,因为一个循环执行的时间很短,所以,会给人以连续,好像同时显示六位时间的效果,因此,消除此问题。
3、小时,分钟,秒的状态在保存的时候,直接以能把对应数字用LED灯点亮的编码存放在一块连续的区内,再通过类似数组的直接定位法,可有效快速地进行时间数据的存取,但是开始以二进制保存,取出后,还要再进行转码,比较麻烦。
4、开始6个数码管每位数都后面都是没有点的处理,后来,将其分为两组,小时和分钟的最后一位后面要按照点的方式来处理,其它的则以没有点的方式来处理。
5、开始调整显示时间和设置时间的K0键是以上下为两种状态的处理方式来处理,后考虑到统一性,都以上下为一种状态来实现,且在处理当中,累加拨动次数,因这个按键只要三个功能,故将其除以3,取余数来作为第个功能的状态标志。
(0:
显示时间1:
调整时间上调2:
调整时间下调)
6、经检测,各功能没有问题,都可以正常运行,并且在15分钟内,时间误差在1秒之内,肉眼观看不出。
9、课程设计总结
本次实验,注要有以下几个方面的收获:
1、类似其它编程语言一样的程序的模块化的设计,便于修改和维护。
2、对于一个要完成的任务,应该先对其确定需要实现的基本功能,并且找到各个功能之间的联系,然后分别完成各个功能,再组合。
最后通过一个主程序来调用入口即可。
3、任何东西,包括这次的时钟设计,都是可以改进和完善的,在不断的深入研究和学习下,可以让一个已经把基本功能实现的代码,向着加合理,更加全面,更加多功能的方向实现。
不足之处:
时钟只是简单实现的正常计时,和设置时间,复位,没有实现可以添加的倒计时,以及闹钟等其它更多功能。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 数字 时钟 设计 剖析