汇编语言数字时钟设计剖析.docx

上传人:b****5 文档编号:7827429 上传时间:2023-01-26 格式:DOCX 页数:22 大小:390.78KB
下载 相关 举报
汇编语言数字时钟设计剖析.docx_第1页
第1页 / 共22页
汇编语言数字时钟设计剖析.docx_第2页
第2页 / 共22页
汇编语言数字时钟设计剖析.docx_第3页
第3页 / 共22页
汇编语言数字时钟设计剖析.docx_第4页
第4页 / 共22页
汇编语言数字时钟设计剖析.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

汇编语言数字时钟设计剖析.docx

《汇编语言数字时钟设计剖析.docx》由会员分享,可在线阅读,更多相关《汇编语言数字时钟设计剖析.docx(22页珍藏版)》请在冰豆网上搜索。

汇编语言数字时钟设计剖析.docx

汇编语言数字时钟设计剖析

福建工程学院

 

课程设计

 

课程:

微机原理及接口课程设计

题目:

数字时钟

专业:

软件工程

班级:

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、任何东西,包括这次的时钟设计,都是可以改进和完善的,在不断的深入研究和学习下,可以让一个已经把基本功能实现的代码,向着加合理,更加全面,更加多功能的方向实现。

不足之处:

时钟只是简单实现的正常计时,和设置时间,复位,没有实现可以添加的倒计时,以及闹钟等其它更多功能。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

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

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