基于KeilC51软件的电子钟设计与制作(2)
发布时间:2021-06-08
发布时间:2021-06-08
18
鄂 州 大 学 学 报第14卷
表1 电子钟控制软件片内RAM及标志位分配表
地 址30H~35H3CH~3FH40H~42H50H~7FHPSW.5PSW.1
功 能显示缓冲区,时、分、秒
(高位在前)计时缓冲区,时、分、
秒、100ms闹钟值寄存区,时、分、秒
堆栈区计时显示允许位(1:禁止,0:允许)闹钟标志位
(1:正在闹响,0:未闹响)
F0F1
00
名 称
DISP0~DISP5HOUR,MIN,
SEC,MSECAHOUR,AMIN,ASEC
初始化值00H00HFFH
2.2 软件设计
软件设计可分为以下几个功能模块:
(1)主程序:初始化与键盘监控。流程图如图2所示:
图2 主程序流程图
(2)计时:为定时器0中断服务子程序,完成刷新计时缓冲区的功能。定时器0每隔100ms溢出中断一次,则循环中断10次延时时间为1s,上述过程重复60次为1分,分计时60次为1小时,小时计时24次则时间重新回到00:00:00。
注意:第一,定时器溢出产生中断请求,CPU并不一定立即响应中断,而可能需要延迟一个中断响应时间之后才能响应中断,中断响应时间大约为3~8个机器周期。显然,这将在定时时间中加入额外的延时时间,导致计时误差。为了保证计时精度,必须采取措施进行补偿。我们采用增大重装的定时器0初值的方法来减少定时器0定时时间。具体应调整为多大,一般需要通过调试来确定。第二,时间是按十进制递增,而MCS-51单片机只有二进制加法指令,因此用加法指令计中断服务子程序CLOCK程序。
;***定时器0中断服务子程序CLOCK***
CLOCK:MOVTL0,#0B7H
MOVTH0,#3CH;重装初值PUSHPSW
PUSHACC;现场保护INCMSECMOVA,MSEC
CJNEA,#10,DONEMOVMSEC,#00HMOVA,SECINCADAA
MOVSEC,A
CJNEA,#60,DONEMOVSEC,#00HMOVA,MININCADAAMOVMIN,A
CJNEA,#60,DONEMOVMIN,#00HMOVA,HOURINCADAA
MOVHOUR,A
CJNEA,#24,DONEMOVHOUR,#00H
DONE:POPACC
POPPSW;恢复现场RETIEND
(3)时间设置与闹钟设置:由键盘输入设置当前时间与定时启闹时间。
(4)显示:完成6位动态显示,分别显示时、分、秒。
(5)键盘扫描:判断是否有键按下,并求取键号。
(6)定时比较:判断启闹时间到否?如时间到,则启动蜂鸣器鸣叫。
(7)其它辅助功能子程序,如键盘设置、拆字、合字、时间合法性检测等。3 在线仿真调试
在线仿真调试的任务是利用开发工具,发现和纠正程序错误,同时也能发现硬件故障。
KeilC51提供了如复位、运行、暂停、单步、过
下一篇:第1讲 SPSS 的基础知识