版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机原理及应用课程设计报告题目基于单片机的数字时钟设计学年:2013学期:专业:电气工程及其自动化班级:电气106姓名:姜鹏飞学号:73指导教师:郑子含目录一、引言11.1编写目的11.2背景11.3参考资料1二、总体设计32.1设计与运行环境32.2硬件功能描述3三、数字钟软件和硬件设计33.1硬件电路设计33.2软件设计63.2.2源程序8四、数字钟制作过程中遇到的问题19五、总结20附录I:DS1302时钟芯片的工作原理和使用方法22附录II:如何利用软件减小的计时误差25不得用于商业用途一、引言1.1编写目的为了进一步熟悉51单片机的编程以及学习数字钟的相关设计方法,在老师的指导下我
2、们进行了本次数字钟的设计。基于51单片机STC89C52单片机和时钟芯片DS1302设计并实现了数字时钟。在PCB板制作完成并且调试成功之际,为了进一步提高自己和动手能力和编程能力,对这次数字钟的设计和制作的过程中遇到的问题及设计思路做一总结。1.2背景随着人们生活水平的提高和生活节奏的加快,对时间的要求越来越高,精准数字计时的消费需求也是越来越多。二十一世纪的今天,最具代表性的计时产品就是电子万年历,它是近代世界钟表业界的第三次革命。第一次是摆和摆轮游丝的发明,相对稳定的机械振荡频率源使钟表的走时差从分级缩小到秒级,代表性的产品就是带有摆或摆轮游丝的机械钟或表。第二次革命是石英晶体振荡器的应
3、用,发明了走时精度更高的石英电子钟表,使钟表的走时月差从分级缩小到秒级。第三次革命就是单片机数码计时技术的应用(电子万年历),使计时产品的走时日差从分级缩小到1/600万秒,从原有传统指针计时的方式发展为人们日常更为熟悉的夜光数字显示方式,直观明了,并增加了全自动日期、星期、温度以及其他日常附属信息的显示功能,它更符合消费者的生活需求!因此,电子万年历的出现带来了钟表计时业界跨跃性的进步我国生产的电子万年历有很多种,总体上来说以研究多功能电子万年历为主,使万年历除了原有的显示时间,日期等基本功能外,还具有闹铃,报警等功能。商家生产的电子万年历更从质量,价格,实用上考虑,不断的改进电子万年历的设
4、计,使其更加的具有市场。除了采用集成化的时钟芯片外,还有采用MCU的方案,利用STC89系列单片微机制成万年历电路,采用软件和硬件结合的方法,控制LED数码管输出,分别用来显示年、月、日、时、分、秒,其最大特点是:硬件电路简单,安装方便易于实现,软件设计独特,可靠。在21世纪的今天,单片机仍然有着它不可替代的地位和独特的作用在学完单片机后,为了进一步学习51单片机的控制和编程,我们利用51单片机自己设计并制作数字钟。1.3参考资料【1】8051系列单片机C程序设计完全手册求是科技编著人民邮电出版社2006【2】51单片机应用从零开始杨欣编著清华大学出版社2008【3】单片机原理及接口技术(第三
5、版)李朝青编著北京航空航天大学出版社2008【4】51单片机C语言教程郭天祥编著电子工业出版社2009二、总体设计此数字钟利用单片机STC89C52和时钟芯片DS1302设计完成。2.1设计与运行环境数字钟的程序设计和调试均在KeiluVision2环境下完成的。设计并完成的程序下载至STC89C52单片机后,即可初始化时钟芯片DS1302从而开始计时,系统开始正常运行。2.2硬件功能描述数字钟能够完成24小时制计时,计时初始化值为00:00:00,用户可以通过按键调整时钟的初值实现校时功能,并且可以通过按键设定一个24小时以内任意时刻的闹铃,用户可以手动选择闹铃的开或者关两种状态。三、数字钟
6、软件和硬件设计3.1硬件电路设计数字钟的电路主要有电源模块、显示模块、按键模块、复位电路模块、时钟芯片模块、主控芯片STC89C52模块和闹铃模块等7大模块组成。二独立按键能操作,按下S2即进行一次加一操作,在没有功能选择的情况下,系统不响应此按键的任何操作。P32P34系统有三个独立按键P3.4口。_S1用来功能选择,其功能可!,独立按键S1、S2、S3分别接至单片机P3.2、P3.3、次用按键次数N来表示土:校准计时的分钟位N=1:校准闹铃的分钟位N=1:校准计时的小N=3:校准闹铃的小时位N=5:退出S2主要功能用来进行加一操作。在有功能选择的情况下,无论选中那一种功时位S3用来控制闹铃
7、的开或者关,在任意时间只要按下此键即可打开(或关闭)闹铃,在按键一次就可以关闭(或打开)闹铃。一个良好的显示模块对一个系统非常重要,所有操作结果和计时结果,都要通过显示模块来显示出来。同时显示模块提供了良好的人机交互平台。常用的显示模式有LED7段数码管显示、点阵显示和液晶显示。液晶显示屏(LCD)具有轻薄短小、低耗电量、无辐射危险,平面直角显示以及影象稳定不闪烁等优势,可视面积大,画面效果好,分辨率高,抗干扰能力强等特点。但由于液晶其成本也偏高。在使用时,不能有静电干扰,否则易烧坏液晶的显示芯片。鉴于LED7段数码管成本低,也比较容易实现的特点,最终确定使用共阴极数码管来显示。本系统显示模块
8、电路由一块74HC573、一块74HC138芯片和两个四位一体7段数码管组成。74HC573用来驱动数码管,74HC573的Q0Q7分别接四位一体数码管的Adp。74HC138控制位选。仅供个人参考复位电路主要的功能是是整个系统初始化,在每次上电时系统自动初始化,如果在程序运行的过程中程序没有响应或者需要进行一次初始化,这是可以通过按复位开关来实现需要的有效操作。DS1302时钟芯片是本系统实现高精度计时的关键。利用DS1302时钟芯片独立于单片机来计时,在提高计时进度的同时也提高了整个系统的抗干扰能力。DS1302通过SCLK、I/O、RES端口和单片机STC90C52进行通信。SCLK接至
9、单片机P1.7口,在读写操作时给DS1302提供相应的时钟脉冲;I/O接至P3.5用来传送所有的数据;RES接至单片机P1.6上用来控制单片机与时钟芯片间的数据传送的开始于结束。DS1302的工作原理及使用方法见附录I。主控模块的核心组成部分是单片机STC89C52,承担着所有操作任务的调控与分派工作。+5VC不得U:NG34CIO业用途22PF67363730J_l-1jjJJPPPPPPPP101T121314151617RSTPPPPPPPP10n121514IsI?181920PIOVCCPllPOOP12P01P13P02P14P03P15P04P16P05P17P06RESETP0
10、7RXD/P30W7PTXD/P31ALE/PINT0/P32PSENINT1/P33P27T0/P34P26T1)P35P25WR?P36P24RDP37P23X2P22XIP21GNDP2044039383736jc3433323?30-IIJ28272624厲二2110UFJ3POiPQpoiJ5PPPPPPP0001020304050607PPPPPPPP2斗-I-JZi_*-lljLijLi21203pofP02P03P04P05123斗567S9CRYSTA产生闹铃的效果。,蜂鸣器的驱动电路驱动蜂鸣器发声,3.2软件设计1、主程序流图仅供个人参考不得用于商业用途2、读DS1302中
11、断及闹铃检测流程图3、4、加一中断操作的程序流程图3.2.2源/*本程利用时钟芯S130STC89C52进行高精度计时,能够实现时、示,具有校时,调整闹铃的功能。设计者:*0RG严0HSJMPMAIN甲主程序入口地址ORG0003H2011/1/24*/、秒的显AJMPANJIAN_FUNCTION;功能选择操作入口ORG000BHAJMPDELAY_10MS;防抖延时以及闹铃ORG0013HAJMPCOUNT_UP;按键加1操作入口ORG001BHAJMPDU_1302;每300ms读dsl302中断入口MAIN:T_CLKBITP1.7;实时时钟T_IOBITP3.5;数据线T_RSTBI
12、TP1.6;复位线MOVTMOD,#11HMOVTH1,#15H;设置扫描dsl302的计数初值MOVTL1,#OAOHMOVTH0,#0C5H;设置按键防抖延时MOVTL0,#68HSECODATA40H;定义秒显示的个位SEC1DATA41H;定义秒显示的十位LINEODATA42H;定义秒-时分隔符MINODATA43H;定义分显示个位MINIDATA44H;定义分显示十位LINE1DATA45H;定义时-分分隔符HOURODATA46H;定义时显示个位HOUR1DATA47H;定义时显示十位;预读计数位寄存器SECONDDATA52H;秒寄存器,用于暂存当前由DS1302读的的秒的数据
13、MINUTEDATA53H;分-用于暂存当前由DS1302读的的分的数据HOURDATA54H;时-用于暂存当前由DS1302读的的时的数据SMJSDATA55H;设置ds1302扫描定时控制位(扫描计数)FUNCDATA56H;定义按键功能选择控制位ZANCUN0DATA57H;定义按键操作时存储校准值的个位ZANCUN1DATA58H;定义按键操作时存储校准值的十位ZANCUN_SECONDDATA59H;用于校时和对闹铃时对秒的显示值清零NLHOUR_0DATA60H;闹铃小时值存储单元NLMINUTE_0DATA61H;闹铃分值存储单元;NLHOUR_1DATA62H;NLMINUTE
14、_1DATA63HTEMPDATA64H;闹铃发生标志位NLJSDATA65H;闹铃计时标志MOVTEMP,#00H;闹铃发生标志位初始化为0,表示没有闹铃的发生MOVNLJS,#00H;闹铃铃声长短控制单元MOVNLHOUR_0,#08H;闹铃符初值MOVNLMINUTE_0,#30HMOVLINE0,#40H;显示分和秒的间隔符MOVLINE1,#40H;显示小时和分的间隔符MOVSMJS,#00HMOVSECOND,#00H;时钟计时初始化值MOVMINUTE,#25HMOVHOUR,#08HMOVZANCUN_SECOND,#00HMOVR1,#40H;R1MOVR3,#07H;确定当
15、前选通的显示位R3SETBEX0SETBIT0;外部中断葿边沿触发SETBIT1SETBET0SETBET1SETBPTO;设置定时器TO中断位高优先级SETBPX1;外部中断1中断为高优先级,用来在有功能操作;时来中断功能选择的中断SETBEA;开总中断SETBTR1;T1主要进行显示扫描中断LCALLSET1302;DS1302初始化;数码管显示程序XIANSHI:;检测闹铃是否发生MOVZANCUN0,R6PUSHZANCUN0;R6压栈MOVR6,TEMPCJNER6,#01H,XIANSHI_1;检测闹零定时是否到时SETBTR0;XIANSHI_1:MOVA,R1;读计数位的计数值
16、R1CJNER3,#05H,NEXTWEI;判断当前为是否需要显示分隔符-MOVP2,R3MOVP0,LINE0NEXTWEI:CJNER3,#02H,SEL_0MOVP2,R3MOVP0,LINE1SEL_0:MOVP2,R3;送位选信号/*对计数位的计数值译码输出一开始-*/CJNEA,#00H,SEL_1MOVP0,#3FH;0,如果当前计数位的计数值位0,则将0的共阴极七段数码管编码3FH送出显示SJMPSEL_10SEL_1:CJNEA,#01H,SEL_2MOVP0,#06H;1SJMPSEL_10SEL_2:CJNEA,#02H,SEL_3MOVP0,#5BH;2SJMPSEL_
17、10SEL_3:CJNEA,#03H,SEL_4MOVP0,#4FH;3SJMPSEL_10SEL_4:CJNEA,#04H,SEL_5MOVP0,#66H;4SJMPSEL_10SEL_5:CJNEA,#05H,SEL_6MOVP0,#6DH;5SJMPSEL_10SEL_6:CJNEA,#06H,SEL_7MOVP0,#7DH;6SJMPSEL_10SEL_7:CJNEA,#07H,SEL_8MOVP0,#07H;7SJMPSEL_10SEL_8:CJNEA,#08H,SEL_9MOVP0,#7FH;8SJMPSEL_10SEL_9:CJNEA,#09H,SEL_10MOVP0,#6FH;
18、9SJMPSEL_10/*-对计数位的计数值译码输出一结束-*/SEL_10:INCR1;R1加一,使当前计数位后移一位DECR3;位扫描控制位减一,因为初始位扫描是从111开始的ACALLDELAYCJNER3,#0FFH,SEL_llMOVR3,#07HSEL_11:CJNER1,#48H,SEL_12MOVR1,#40HSEL_12:POPZANCUN0MOVR6,ZANCUN0AJMPXIANSHI;扫描延时程序DELAY:MOVR5,#4;R5D1:MOV48H,#120DJNZ48H,$DJNZR5,D1RET;功能:对当前由dsl302读得的计数值进行转换-(寄存器均已压栈)-J
19、SZH:;功能:计数转换子程序,用于对当前读得的ds1302的计数值转换成secO-houro的格式,便于显示PUSHACCMOVA,R0PUSHACC;R0压栈MOVA,R1PUSHACC;R1压栈PUSHPSWMOVR1,#40H;计数数据sec0-hour0的存储首地址MOVR0,#52H;由dsl302读得的数据存放首地址LOOP_1:MOVA,R0ANLA,#0FHMOVR1,AINCR1MOVA,ROANLA,#OFOHSWAPAMOVR1,AINCR1INCR1;地址加一跳过分隔符的存储单元INCR0CJNER1,#49H,LOOP_1POPPSWPOPACC;R1弹栈MOVR1
20、,APOPACC;R0弹栈MOVR0,APOPACC;A弹栈RET;读取DS1302计数程序(T1中断)(寄存器均已压栈)DU_1302:PUSHACCMOVA,R1PUSHACC;R1压栈DU_1302_l:INCSMJSMOVR1,SMJSCJNERl,#03H,BELL;每300ms读一次dsl302的计数值,避免在dsl302定时一秒;计数值改变时发生错读MOVSMJS,#00HLCALLGET1302LCALLJSZH;调计数转换子程序MOVTH1,#15H;设置扫描ds1302的计数60MS初值MOVTL1,#0A0HBELL:;闹铃MOVA,NLHOUR_0CJNEA,HOUR,
21、DU_1302_RETMOVA,NLMINUTE_0CJNEA,MINUTE,DU_1302_RETMOVTEMP,#01H;定义TEMP为闹铃发生的标志MOVNLMINUTE_0,#00HMOVNLHOUR_0,#00HDU_1302_RET:POPACCMOVR1,A;R1弹栈POPACCRETI;*DS1302初始化子程序*SET1302:;设置dsl302初始时间,并启动计时PUSHACC;A断点保护MOVA,R1PUSHACCCLRT_RSTCLRT_CLKSETBT_RSTMOVB,#8EH;控制寄存器LCALLWRITEBYTEMOVB,#00H;写操作前WP=0LCALLWRI
22、TEBYTESETBT_CLKCLRT_RSTmovR0,#SECONDMOVR7,#3;秒/时/分;R7MOVR1,#80H;秒写地址;R1S1302:CLRT_RSTCLRT_CLKSETBT_RSTMOVB,R1;写秒/时/分地址;一-R1LCALLWRITEBYTEMOVA,R0;写秒数据;R0MOVB,ALCALLWRITEBYTEINCR0INCR1INCR1SETBT_CLKCLRT_RSTDJNZR7,S1302CLRT_RSTCLRT_CLKSETBT_RSTMOVB,#8EH;控制寄存器LCALLWRITEBYTEMOVB,#80H;控制,wp=1,写保护LCALLWRIT
23、EBYTESETBT_CLKCLRT_RSTPOPACCMOVR1,APOPACC;A恢复数据RETGET1302:;从dsl302读时间秒/时/分MOVRO,#SECOND;R0MOVR7,#03H;R7MOVR2,#81H;R2G13021:CLRT_RSTCLRT_CLKSETBT_RSTMOVB,R2LCALLWRITEBYTE;写操作时,将一字节的内容由B写至DS1302中LCALLREADBYTE;读操作时,将一字节的内容读至A中MOVRO,AINCR0INCR2INCR2SETBT_CLKCLRT_RSTDJNZR7,G13021RETWRITEBYTE:;写B寄存器中的内容至1
24、302一字节MOVR4,#08H;R4INBIT1:MOVA,BRRCAMOVB,ASETBT_IO;T_IO口做输入口MOVT_IO,CSETBT_CLKCLRT_CLKDJNZR4,INBIT1RETREADBYTE:;读1302一字节至A寄存器MOVR4,#8;R4OUTBIT1:MOVC,T_IORRCASETBT_CLKCLRT_CLKDJNZR4,OUTBIT1RET;ENDDS0302A*LJrt匸t丿I-、lx、lx、lx、lx、lx、lx、lx、lx*键操f*ANJIAN_FUNCTION:;功能选择键中断接至P3.2WAIT:JBP3.2,WAITSETBTRO;启动定时器
25、0,延时10msJNBTFO,$JNBP3.2,$;检测按键是否弹起SETBEX1;在有功能选择的时候开中断1INCFUNCPUSHACC;保存A中的数值MOVA,FUNCCJNEA,#03H,FUN_1MOVLINE0,#80H;分隔符下移,以便区分于校时操作MOVLINE1,#80HFUN_1:CJNEA,#04H,FUN_2MOVLINE0,#80H;分隔符下移,以便区分于校时操作MOVLINE1,#80HFUN_2:CJNEA,#05H,ANJIAN_FUNCTION_RET;控制所要置数的计数位闪动SETBET1CLREX1;在功能选择的时退出开中断1MOVFUNC,#00HMOVL
26、INE0,#40H;显示分和秒的间隔符MOVLINE1,#40H;显示小时和分的间隔符ANJIAN_FUNCTION_RET:POPACC;恢复A中的值RETI;校时加一中断COUNT_UP:PUSHACCMOVA,FUNCCLRCSUBBA,#00H;检测当前有无校时或者对闹铃的操作CJNEA,#00H,COUNT_UP_NEXTAJMPCOUNT_UP_RETIIvI*II»ICOUNT_UP_NEXT:CJNEA,#01H,COUNT_UP_1;检测当前操作是否为时钟校时一时钟位INCHOUR0MOVR6,HOUR1;校时R6CJNER6,#02H,COUNT_UP_0_1;先
27、判断小时高位是否已计数值2MOVR6,HOUR0CJNER6,#04H,COUNT_UP_RETMOVHOUR1,#00HMOVHOUR0,#00HAJMPCOUNT_UP_RET;返回COUNT_UP_0_1:MOVR6,HOUR0CJNER6,#0AH,COUNT_UP_RETMOVHOURO,#OOHINCHOUR1AJMPCOUNT_UP_RETIICOUNT_UP_1:CJNEA,#O2H,COUNT_UP_2;校时一-分INCMIN0MOVR6,MIN0CJNER6,#OAH,COUNT_UP_1_1;先判断分的低位INCMINIMOVMIN0,#00HCOUNT_UP_1_1:M
28、OVR6,MIN1CJNER6,#O6H,COUNT_UP_RETMOVMIN1,#OOH;SJMPCOUNT_UP_RETCOUNT_UP_RET:LCALLHECHENGMOVSECOND,ZANCUN_SECOND;每次校时秒都归零LCALLSET1302;每加一次对当前计数值进行一次重置POPACCRETICOUNT_UP_2:CJNEA,#O3H,COUNT_UP_3;闹铃一-时CLRET1;暂停对DS1302的读操作MOVR6,HOUR1;时R6CJNER6,#O2H,COUNT_UP_2_1;先判断小时高位是否已计数值2INCHOUR0MOVR6,HOUR0CJNER6,#O4H
29、,COUNT_UP_NLRETMOVHOUR1,#OOHMOVHOURO,#OOHAJMPCOUNT_UP_NLRET;返回COUNT_UP_2_1:INCHOUR0MOVR6,HOUR0CJNER6,#OAH,COUNT_UP_NLRETMOVHOURO,#OOHINCHOUR1SJMPCOUNT_UP_NLRETCOUNT_UP_3:CJNEA,#O4H,COUNT_UP_RET;闹铃一-分CLRET1;暂停对DS1302的读操作INCMIN0MOVR6,MIN0CJNER6,#OAH,COUNT_UP_3_1;先判断分的低位INCMINIMOVMIN0,#00HCOUNT_UP_3_1:
30、MOVR6,MIN1CJNER6,#O6H,COUNT_UP_NLRETMOVMIN1,#OOHCOUNT_UP_NLRET:LCALLHECHENGPOPACCRETI;*有按键时重置dsl302当前位计数值(R5)*;功能:将当前时,分的高低显示计数值分别合成为HOUR,MINUTE,对校时时ds1302重新写入数据做准备HECHENG:;R0,APUSHACC;对R0的值压栈MOVA,FUNCCLRCSUBBA,#00H;检测当前有无校时或者对闹铃的操作CJNEA,#O1H,HECHENG_1MOVZANCUN0,HOUR0MOVZANCUN1,HOUR1ANLZANCUN0,#0FHA
31、NLZANCUN1,#0FHMOVR5,A;保存A中的值MOVA,ZANCUN1SWAPAADDA,ZANCUN0MOVHOUR,AMOVA,R5;恢复A的计数值SJMPHECHENG_RETHECHENG_1:CJNEA,#02H,HECHENG_2MOVZANCUN0,MIN0MOVZANCUN1,MIN1ANLZANCUN0,#0FHANLZANCUN1,#0FHMOVR5,A;保存A中的值MOVA,ZANCUN1SWAPAADDA,ZANCUN0MOVMINUTE,AMOVA,R5;恢复A的计数值SJMPHECHENG_RETHECHENG_2:CJNEA,#03H,HECHENG_3
32、;闹时MOVZANCUNO,HOUROMOVZANCUN1,HOUR1ANLZANCUNO,#OFHANLZANCUN1,#0FHMOVR5,A;保存A中的值MOVA,ZANCUN1SWAPAADDA,ZANCUN0MOVNLHOUR_0,AMOVA,R5;恢复A的计数值SJMPHECHENG_RETHECHENG_3:CJNEA,#04H,HECHENG_RET;闹一分MOVZANCUNO,MINOMOVZANCUN1,MIN1ANLZANCUN0,#0FHANLZANCUN1,#0FHMOVR5,A;保存A中的值MOVA,ZANCUN1SWAPAADDA,ZANCUN0MOVNLMINUT
33、E_O,AMOVA,R5;恢复A的计数值HECHENG_RET:POPACCRET;TO防抖延时10msDELAY_1OMS:PUSHACCMOVA,R6PUSHACCMOVR6,TEMPCJNER6,#01H,DELAY_FD;如果没有闹铃事件发生转防抖延时DELAY_FDINCNLJSMOVTH0,#0ECHMOVTL0,#78HCPLP1.0MOVR6,NLJSCJNER6,#0FFH,DELAY_RET;MOVTEMP,#00HMOVNLJS,#00HMOVTH0,#0D1H;恢复T0的初值MOVTL0,#20HCLRP1.0CLRTR0;T0复用结束后关定时器SJMPDELAY_RE
34、TDELAY_FD:MOVTH0,#0C5HMOVTL0,#68HCLRTR0DELAY_RET:POPACCMOVR6,APOPACCRETIEND四、数字钟制作过程中遇到的问题问题一:对于时钟的各个计时单元:时、分、秒,由于单片机内部的寄存器资源有限,在程序设计的开始首先必须得解决由时钟芯片DS1302读得的数据如何保存的问题。解决办法:由于我使用的编程语言是汇编语言,不能像C语言那样使用一个数组来保存数据。为了能够及时的保存数据,在程序设计的过程中使用DATA指令在单片机的内存空间中开辟出了一些具有固定地址的内存单元来存储相应的数据。在程序中定义的用于保存当前由DS1302读得的数据单元
35、如下:SEC1DATA41H;定义秒显示的十位SEC0DATA40H;定义秒显示的个位LINE0DATA42H;定义秒-时分隔符“-”MIN0DATA43H;定义分显示个位MIN1DATA44H;定义分显示十位LINE1DATA45H;定义时-分分隔符“-”HOUR0DATA46H;定义时显示个位HOUR1DATA47H;定义时显示十位通过以上的方法,在单片机的RAM中开辟了一片用户可直接操作的内存单元,解决例如数据的保存问题。问题二:焊接好自己刻的板子后,数码管显示跳动不稳定,但时钟没停,但有时走一分钟后就停掉了。解决方法:将写好的程序下在51开发板上,发现程序运行稳定,没有上述现象的发生。
36、由此首先说明程序没有问题,可能是做的电路板有问题,为了找到问题的根源所在,从开发板上引出了时钟芯片的输出信号接至自己做的电路板,发现电路板能正常工作。由此推断问题的根源出在电路板的时钟芯片模块,经过进一步的排查,发现在时钟芯片在没有接地的情况下竟然能够正常工作。由此进一步说明问题是出在时钟芯片的接地上。为了能够进一步寻找问题根源,我们将自己刻的电路板的地线接至示波器上观察。结果证明了我们的推断完全正确,为了最大程度的降低干扰,我们直接对DS1302单独接地,并且对数码管驱动芯片74HC573等需较大电流的芯片单独接电源,同时划断电路板中对74HC573等供电的电源线路以进一步降低电源带来的干扰
37、。问题总结:由于我们是第一次做PCB板,在布局的时候根本没有考虑到布线的不合理会带来的众多干扰的问题,而且布线也全部由电脑自动布线完成,这样使得电路滋生出大量的寄生电容以及其他的干扰。同样的程序在开发板上运行很稳定,在我们自己刻的PCB板上刚开始很不稳定进一步告诉我们,在以后绘制PCB板的过程中需要周密的考虑到布局的合理性以及电路的干扰问题。问题三:在程序设计完成后,在开发板和自己刻的PCB板上时发现再有按键按下的情况下,数码管所显示时间有闪动。解决方法:因为单片机是一个顺序执行程序微机,不像CPLD或FPGA等具有并行处理数据的特点,CPU在当前时间只能处理一件事。在开始我以为产生这个问题的
38、原因是我设的防抖延时间太长了(我的防抖延时设置为10ms)。当我进一步减小防抖延时的时间时情况还是没有好转,由于单片机的软件防抖延时最佳时间段在5ms10ms,太大或者太小都不利于软件防抖。通过对电平触发和边沿触发两种中断触发方式的比较,发现在按键时数码管显示闪动的原因是:起初时,中断触发方式我选的是电平触发方式。在按键按下时可能由于按键性能不太好,按键稍稍的抖动使得在软件防抖后依然不太稳定,单片机在此检测到中断发生的有效电平,从而再次发生中断,导致在有按键按下时单片连续处理按键中断,从而产生数码管在有按键按下的情况下出现闪动的问题。在将按键的中断方式由电平触发模式改为边沿触发后,数码管再有按
39、键按下的情况下闪动的问题得到了解决。问题四:蜂鸣器在没有闹铃发生时没有声音,在闹铃响完以后还回有比较小的嘟嘟声。可能原因:理想状态下在闹铃响完后驱动蜂鸣器的三极管截止,蜂鸣器上没有电流流过,蜂鸣器出在不发声状态。闹铃响完后蜂鸣器蜂鸣器仍然有很小的嘟嘟声,说明此时有干扰脉冲通过蜂鸣器。为了进一步减小蜂鸣器的嘟嘟声。在蜂鸣器两端接入300PF的电容后声音有所减小但没有消除。但干扰的来源尚不清楚,可能是来自电源地的干扰。问题五:T2定时器在汇编编程的情况下如何使用。可能原因:在C语言编程时,只需要包含头文件#include<reg.52h>,所有的52单片机所用到的端口,寄存器,定时器等
40、资源均已事先定义好了。在汇编编程的过程中我模仿C语言的模式首先定义在使用T2定时器,但一直出现错误。如何在汇编编程的情况下如何使用还未解决。五、总结经过10天的工作,我的数字钟从只能计时功能改进到具有闹铃功能、校时功能、闹铃调整功能。刚刚开始时,我采用的定时器方法进行计时。在编写完计时程序加闹铃功能和按键操作的时候,考虑到数字钟计时的准确性,我改变了程序设计方案,采用时钟芯片DS1302配合单片机STC89C52的设计方案。在程序设计的过程中总体方案很简单,我只需在一定时间内读取DS1302的计时值,省去了一大堆的计时程序。但是在开始程序设计的时候才发现并没想的那么简单。我花了两天时间才把时钟
41、芯片的操作完全的掌握,并且用汇编完成了对DS1302的读写等操作的程序设计。通过修正后走时一天的误差在10s内。在程序全部设计完成后我们开始做PCB板。虽然上一学期学习了Protell99SE但只是纯理论性的学习了如何绘制PCB板。这次我们不仅要自己绘制数字钟电路的PCB,并且还要刻PCB板。大家都猛然发现以前课堂上学到知识太少,在两天的时间里大家从画元器件的封装开始重新对Protell进行了学习并且完成了相应的工作。在这次绘制PCB的过程中,虽然我们最终完成了这次工作,但从调试中出现的问题来看,我们确实还存在许多问题需要解决。首先,在焊接完成后,同样的程序在我们自己买的开发板上运行很稳定,但
42、在我们自己刻的PCB板上运行时,数码管显示的时间出现闪动的情况。在王老师的指导下我们队PCB板的电源和地线在示波器上观察,发现地线上的干扰很大,再将部分芯片的地和电源直接用导线接至电源的地和电源上后问题得到了解决。这个问题凸显出了我们初次做的PCB板布局不太合理。其次,由于是第一次做PCB,也根本没考虑过线宽和布线的问题,整块PCB的电源线、地线都很细,焊盘也比较小,布线也全部由自动布线完成。在检查电路的过程中发现有两个焊盘可以用直线连在一起,可能是安全间距设的太大的缘故,导线转了一圈才将两个焊盘连在一起。虽然这次绘制的PCB出了诸多问题,但经过调试中的有效处理后现在已经能够正常工作。在这次数
43、字钟的设计过程中,通过使用时钟芯片DS1302和单片机STC89C52完成高精度的计时。进一步学习了51单片机的编程技巧,尤其是单片机中断的使用以及中断优先级的扩展方法,同时学会了时钟芯片DS1302,进一步了解了时钟芯片的工作原理。虽然首次绘制的PCB出现了诸多问题,但同时学到了许多绘制PCB的技巧,知道了绘PCB需要注意的问题。附录:DS1302时钟芯片的工作原理和使用方法DS1302是DALLAS公司推出的涓流充电时钟芯片,内含有一个实时时钟/日历和31字节静态RAM,通过简单的串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、日期、月、年的信息,每月的天数和闰年的天数可自
44、动调整,时钟操作可通过AM/PM指示决定采用24或12小时格式DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需用到三个口线:(1)RES复位,(2)I/O数据线,(3)SCLK串行时钟时钟/RAM的读/写数据以一个字节或多达31个字节的字符组方式通信。DS1302工作时功耗很低,保持数据和时钟信息时功率小于1mW。DS1302是由DS1202改进而来,增加了以下的特性:双电源管脚用于主电源和备份电源供应,Vcc1为可编程涓流充电电源,附加七个字节存储器。它广泛应用于电话、传真、便携式仪器以及电池供电的仪器仪表等产品领域。下面将主要的性能指标作一综合:实时时钟具有能计算2100年
45、之前的秒、分、时、日、日期、星期、月、年的能力还有闰年调整的能力31X8位暂存数据存储RAM串行I/O口方式使得管脚数量最少宽范围工作电压:2.05.5V工作电流:2.0V时,小于300nA读/写时钟或RAM数据时:有两种传送方式:单字节传送和多字节传送(字符组方式)8脚DIP封装或可选的8脚SOIC封装(根据表面装配)简单3线接口与TTL兼容(Vcc=5V)可选工业级温度范围-40+85与DS1202兼容在DS1202基础上增加的特性一对Vcc1有可选的涓流充电能力双电源管用于主电源和备份电源供应备份电源管脚可由电池或大容量电容输入附加的7字节暂存存储器1DS1302的基本组成和工作原理DS
46、1302Xl+X232.768KHZ晶振管脚GNDifeX2GNDVqciSCLKRST复位脚I/O一据输入/输出引脚SCLK串行时钟VcclnVcc2电源供电管脚2.DS1302内部寄存器CH:时钟停止位CH=0振荡器工作允许CH=1振荡器停止WP:写保护位WP=0寄存器数据能够写入WP=1寄存器数据不能写入TCS:涓流充电选择TCS=1010使能涓流充电TCS=其它禁止涓流充电寄存器2的第7位12/24小时标志bit7=1,12小时模式bit7=0,24小时模式寄存器2的第5位:AM/PM定义AP=1下午模式AP=0上午模式DS:二极管选择位DS=01选择一个二极管DS=10选择两个二极管
47、DS=00或11,即使TCS=1010,充电功能也被禁3、DS1302使用说明及注意的问题DS1302在任何数据传送时必须先初始化,把RST脚置为高电平,然后把8位地址和命令字装入移位寄存器,数据在SCLK的上升沿被访问到。在开始8个时钟周期,把命令字节装入移位寄存器后,另外的时钟周期在读操作时输出数据,在写操作时写入数据。时钟脉冲的个数在单字节方式下为8+8,在多字节方式下为8+字节数,最大可达248字节数。如果在传送过程中置RST脚为低电平,则会终止本次数据传送,并且I/O引脚变为高阻态。上电运行时,在Vcc±2.5V之前,RST脚必须保持低电平。只有在SCLK为低电平时,才能将
48、RST置为高电平。DS1302的控制字如表1所示。控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。位6如果为0,则表示存取日历时钟数据;为1则表示存取RAM数据。位51(A4A0)指示操作单元的地址。最低有效位(位0)如果为0,则表示要进行写操作;为1表示进行读操作。控制字节总是从最低位开始输入/输出。为了提高对32个地址寻址能力(地址/命令位15=逻辑1),可以把时钟/日历或RAM寄存器规定为多字节(burst)方式。位6规定时钟或RAM,而位0规定读或写。在时钟/日历寄存器中的地址931或RAM寄存器中的地址31不能存储数据。在多字节方式下,读或写从
49、地址0的位0开始。必须按数据传送的次序写最先的8个寄存器。但是,当以多字节方式写RAM时,为了传送数据不必写所有的31字节,不管是否写了全部31字节,所写的每一字节都将传送至RAM。Forpersonaluseonlyinstudyandresearch;notforcommercialuse表1DS1302控制字命令字取俺范闱弓璨作读操柞765432I0杪寄存誥HOH81H00-59CH1QSECSEC分寄存辭S2HK3H00-5901OMINMIN忖奋存器嗣HR5H0(-12或-2312T240HRHRRfiH釣Hfll-2Sr29f30,3J0010OATEDATE月寄帝罄側H旳H01-
50、12000MONTHKAH8BH01500000DAY第寄劇3)2共有2个寄存器,其中有7个寄存器与日历、时'钟相大,存放的数据位为BCD码形式。其日历、时间寄存器及其控制字如上表所示,其中奇数为读操作,偶数为写操作。时钟暂停:秒寄存器的位7定义位时钟暂停位。当它为1时,DS1302停止振荡,进入低功耗的备份方式,通常在对DS1302进行写操作时(如进入时钟调整程序),停止振荡。当它为0时,时钟将开始启动。AM-PM/12-24小时方式:小时寄存器的位7定义为12或24小时方式选择位。它为高电平时,选择12小时方式。在此方式下,位5为第二个10小时位(2023h)。DS1302的晶振选
51、用32768Hz,电容推荐值为6pF。因为振荡频率较低,也可以不接电容,对计时精度影响不大。附录II:如何利用软件减小的计时误差此次所设计的数字钟,总的来看计时的误差来源主要由中断响应延迟引起的误差(不使用时钟芯片的情况下)。如下对误差来源进行详细的分析。不考虑晶振等固件的误差,则系统机器周期可以由公式准确算出,因而系统误差不可能来自于硬件,而应该主要来自于软件方面。系统每次调用定时中断程序的过程中,硬件并没有自动进入下一个定时周期,而是在调用中断程序以后由软件置数来实现的。而在程序调用过程中,堆栈建立、参数传递等都是需要耗时,而这些时间都被无形中加到了定时长度中去。所以,使得每次定时长度都大
52、于理论推导值,在宏观上表现出来就是系统比理论计算出来的结果变慢了。另外,由于系统每次调用中断处理程序所执行的操作都是相同的,也就是说,系统每次定时的时间误差应该是一个常数。MCS-51单片机的中断响应延迟时间,取决于其它中断服务程序是否在进行,或取决于正在执行的是什么样的指令。单中断系统中的中断响应时间为38个机器周期。无论是哪一种原因引起的误差,在精确定时的应用场合,必须考虑它们的影响,以确保精确的定时控制。根据定时中断的不同应用情况,应选择不同的精确定时编程方法。如果设置定时器中断为中断高优先级,外部中断位低优先级,则中断过程中产生的中断延时如下图所示:外部中斷处理中中更A:有按键按下的情况下发生定时中断3-8于机器周期B:仅有时钟中断的情况CPU响应定时中断设置定时器T1工作在定时方式1为,晶振频率为12MHz。以下通过5种方法来解决由中断引起的延时误差问题。Is、CFU处理中斷中定时中斷发生定时中断何应方法1:在定时器溢出中断得到响应时,停止定时器计数,读出计数值(反映了中断响应的延迟时间),根据此计数值算出到下一
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 创新团队内部管理制度
- 场所内部治安保卫制度
- 大润发内部薪酬制度
- 妇联内部审计制度
- 服装厂内部管理规章制度
- 村委内部控制管理制度
- 查询科大讯飞内部制度
- 档案内部考核评价制度
- 毒品仓库内部管理制度
- 法院内部资格审查制度汇编
- 2025年公安局网络安全管理员专业技能考试试题集及答案解析
- 计算机网络技术基础(微课版)(第2版)习题及答案 杨云 第1-5章
- 明朝国防教学课件
- 2025年医学高级职称-心血管内科(医学高级)历年参考题库含答案解析(5套)
- DB53∕T1032-2021 公路隧道超前地质预报技术规程
- 2023-2025年语文全国中考真题分类汇编 专题22 议论文阅读
- 城市社会学-课件 -第六章 城市社区
- 北师大版(2024)七年级下册数学第1~6章共6套单元测试卷汇编(含答案)
- GB/T 15849-2025密封放射源的泄漏检验方法
- 儿童营养早餐动画课件
- 春季精神疾病复发的预防策略
评论
0/150
提交评论