实验四 电子钟(定时器、中断综合实验)
一、实验目的
熟悉MCS51类CPU的定时器、中断系统编程方法,了解定时器的应用、实时程序的设计和调试技巧。
二、实验内容
编写一个时钟程序,产生一个50ms的定时中断,对定时中断计数,将时、分、秒显示在数码管上。
三、程序框图
四、实验步骤
1、连线说明:
E5 区A0 ←→ A3 区A0
E5 区CS ←→ A3 区CS5
E5 区CLK ←→ B2 区2MHz
E5 区A、B、C、D ←→ G5 区A、B、C、D(排线每个8 位,注意高低位一致)
2、时间显示在数码管上
五、程序清单
EXTRN CODE (Display8)
BUFFER DATA 60H
ORG 0000H
AJMP MAIN
ORG 000BH
AJMP IT0P
MAIN: MOV TMOD,#01H
MOV 20H,#20H
CLR A
MOV 52H,A ;计数和显示
MOV 51H,A ;空间清零
MOV 50H,#50H
MOV 40H,A
MOV 41H,A
MOV 43H,A
MOV 44H,A
MOV 46H,A
MOV 47H,A
SETB ET0
SETB EA
MOV TH0,#9EH ;计数器赋初值
MOV TL0,#58H
SETB TR0
MOV 45H,#11H
MOV 42H,#11H
MOV R0,#BUFFER
LCALL Display8
HERE: AJMP HERE
IT0P: PUSH PSW
PUSH ACC
MOV TH0,#9EH ;重新转入计数值
MOV TL0,#58H
DJNZ 20H,RETURN ;计数不满20返回
MOV 20H,#20H ;重置中断次数
MOV A,#01H ;秒加1
ADD A,50H
DA A ;秒单元十进制调制
PUSH ACC
CJNE A,#60H,SWS ;是否到60秒,否则返回
MOV A,#00H
SWS: MOV R5,A
SWAP A
ANL A,#0FH
MOV 41H,A
MOV A,R5
ANL A,#0FH
MOV 40H,A ;满60秒,秒单元清零
LCALL AAA
POP ACC
MOV 50H,A
CJNE A,#60H,RETURN
MOV 50H,#00H
MOV A,#01H ;分单元加1
ADD A,51H ;分单元十进制调整
DA A
PUSH ACC
CJNE A,#60H,SWS1;是否到60分,否则返回
MOV A,#00H
SWS1: MOV R5,A·
SWAP A
ANL A,#0FH
MOV 44H,A
MOV A,R5
ANL A,#0FH
MOV 43H,A
LCALL AAA
POP ACC
MOV 51H,A
CJNE A,#60H,RETURN
MOV 51H,#00H ;满60分,分单元清零
MOV A,#01H ;时单元加1
ADD A,52H
DA A
PUSH ACC
CJNE A,#24H,SWS2 ;是否到24小时,否则返回
MOV A,#00H
SWS2: MOV R5,A
SWAP A
ANL A,#0FH
MOV 47H,A
MOV A,R5
ANL A,#0FH
MOV 46H,A
LCALL AAA
POP ACC
MOV 52H,A
CJNE A,#24H,RETURN
MOV 52H,#00H ;满24小时,时单元清零
RETURN:POP PSW
POP ACC
RETI
AAA: MOV R0,#40H ;计数器的值赋
MOV R1,#60H ;给显示空间
MOV R5,#08H
ABC: MOV A,@R0
MOV @R1,A
INC R1
INC R0
DJNZ R5,ABC
MOV R0,#BUFFER
LCALL Display8
RET
END
六、思考题
1、电子钟走时精度与哪些有关系?中断程序中给TL0赋值为什么与初始化程序中不一样?
2、使用定时器方式二,重新编写程序。
第二篇:单片机电子时钟课程设计实验报告
《单片机实践报告》
题 目 电子时钟设计
专 业 电子信息工程
学生姓名 王健吉
准考证号
指导教师
20## 年 10 月
一,课程设计的目的和意义
课程设计的目的与意义在于让我们将理论与实践相结合。培养我们综合运用电子课程中的理论知识解决实际性问题的能力。让我们对电子电路、电子元器件、印制电路板等方面的知识进一步加深认识,同时在软件编程、排错调试、焊接技术、相关仪器设备的使用技能等方面得到较全面的锻炼和提高,为今后能够独立完成某些单片机应用系统的开发和设计打下一个坚实的基础。
二,课程设计的基本任务
利用89S51单片机最小系统,综合应用单片机定时器、中断、数码显示、键盘输入、蜂鸣报警等知识,设计一款单片机和简单外设控制的电子时钟。
三,主要功能要求
1)使用6位数码管,前两位显示小时(24小时制),中间两位显示分钟,后两位显示秒。时钟每走1秒,秒数码管加1显示,60秒后分钟数码管加1显示,60分钟后小时数码管加1显示。
2)设计89S51单片机最小系统
3)掌握使用Protel99 绘制原理图和布板的过程、方法和技巧。
4)掌握单片机开发软件(Keil C51或 Wave)的使用和调试。
5)编写并调试单片机定时及其中断程序,以实现电子时钟的功能。
6)设计八段数码管显示电路并编写驱动程序,输入并调试拆字程序和数码显示程序。
7)掌握硬件和软件联合调试的方法。
8)完成系统硬件电路的设计和制作。
9)完成系统程序的设计。
10)完成整个系统的设计、调试和制作。
11)完成课程设计报告。
四,整体设计框图及整机概述
整体设计框图
整机概述:1)开机为走时模式,正常显示时间。在此模式下整点闹时,定点闹时有效。
2)共设置3个按键,分别为模式键、功能键1、功能键2。按动模式键,模式将在‘走时/调时/日期显示及调整/闹钟显示及调整’4个模式下切换。
3)走时模式下,按动功能键1/功能键2停止闹时。
4)调时模式下,功能键1调整分钟数值,功能键2调整小时数值。
5)日期显示及调整模式下,功能键1调整日期数值,功能键2调整月份数值。
6)闹钟显示及调整模式下,功能键1调整闹钟分钟数值,功能键2调闹钟时钟数值。
五,软件流程图和流程说明
1)主程序流程图
流程图说明
初始化:包括定时器赋
初值,初始化各内存单
元。开定时器中断,开
CPU中断,送段码表头
地址给DPTR。
2)显示子程序流程图
3)按键扫描子程序
4)模式查询子程序
日期显示及调整子程序与闹钟显示及调整子程序流程图与调时模式子程序大同小异。
a)日期显示及调整子程序送给R3/R4/R5的数据为日/月/年,按功能键1日期加1,按功能键2月份加1。至于数值的合法性在程序里有具体的判断。
b)闹钟显示及调整子程序送给R3/R4/R5的数据为闹钟开关值/闹钟分/闹钟时,按功能键1闹钟分加1,按功能键2闹钟时加1。至于数值的合法性在程序里有具体的判断。
5)闹钟查询子程序
六,总结设计及调试体会
硬件设计部分
首先要通过计算与参考资料等决定参数。而后通过仿真软件等调试,确定参数无误后再开始用Protel99 SE画原理图,进而生成PCB进行布板。
软件设计部分
设计软件首先要考虑要做的功能,确定出合理的算法。合理的算法不仅要可以实现功能,而且在添加功能的时候要方便灵活。有的人为了实现某种功能用了各种各样的方法来实现,结果程序结构吃死,当想要添加功能或者修改其他功能的时候,将修改程序大部分结构,也就是说要破坏程序现有的结构。
关于调试
Keil软件调试单片机程序的时候,编译通过并不代表程序是正确的。编译通过只能说明程序没有语法上的错误。进行软件仿真或者下载到开发板上进行调试,经常会出现各种各样的错误。许多超出预期效果的现象往往是一些微小错误引起的。例如没有现场保护跟恢复现场等,所以养成良好的编程习惯也很重要。有些想达成某些功能而添加的语句,实际上确一点效果也没有。举个编程中的小问题:当有按键按下时,我们都要有软件防抖。正常的方法是调用一个延时。在实际调试中,要跳过这个抖动,需要100MS左右。如果使用正常的延时,会导致按键按下时CPU100MS内无法进行其他操作,也就是说。平均1S内100MS不调用显示子程序,这样就会导致亮度降低。这时候,考虑到显示子程序一次有十几毫秒,就特别写了一个调用7次显示的子程序来作为按键防抖的延时,实际上效果也是很不错的。这个想法就是在修改了多次程序未达到想要的效果(有按键按下时显示亮度不降低)后最终想出来的办法。
最后在做完板,焊完电路后,在接通电源之前,要用万用表仔细检查电路是否有连接错,以免烧坏芯片和数码管。
五天以来的其他体会:态度要积极,不要认为很简单就不紧不慢。很多东西并不是自己设想的那么顺利,有时候一个小问题可以花上你半天甚至一天的时间。虽然自己在程序上并没遇到太大的问题,但是因为态度不够积极,对于没画过的PCB图迟迟不去下手,在周四晚上才解决。本以为周五一天可以做完板并完成整机调试,可是各种突发事件让自己措手不及。发现板来不及做完后才将程序功能进行扩展。这是我在这次实验中的一个教训,也让我明白了对于自己不能太过于自信,态度决定一切。
评语: 成绩: