基于单片机及DS1302的LED电子钟设计——软件部分.docx

上传人:牧羊曲112 文档编号:2059335 上传时间:2023-01-05 格式:DOCX 页数:39 大小:332.74KB
返回 下载 相关 举报
基于单片机及DS1302的LED电子钟设计——软件部分.docx_第1页
第1页 / 共39页
基于单片机及DS1302的LED电子钟设计——软件部分.docx_第2页
第2页 / 共39页
基于单片机及DS1302的LED电子钟设计——软件部分.docx_第3页
第3页 / 共39页
基于单片机及DS1302的LED电子钟设计——软件部分.docx_第4页
第4页 / 共39页
基于单片机及DS1302的LED电子钟设计——软件部分.docx_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《基于单片机及DS1302的LED电子钟设计——软件部分.docx》由会员分享,可在线阅读,更多相关《基于单片机及DS1302的LED电子钟设计——软件部分.docx(39页珍藏版)》请在三一办公上搜索。

1、基于单片机及DS1302的LED电子钟设计软件部分摘要 现代社会的快节奏生活要求人们对时间的掌握越来越精确,随着计算机在社会领域的渗透和大规模集成电路的发展,单片机的应用正在逐步地深入,电子钟也逐渐取代传统钟表被广泛应用于生活和工作中。电子时钟主要是利用电子技术将时钟电子化、数字化,拥有时间精确、体积小、界面友好、可扩展性能强等特点。本设计以AT89C52芯片作为核心,8位LED数码管显示和DS1302时钟芯片主要组成来实现电子钟的基本功能,并分析了相应软件的设计要点,包括软件设计流程、仿真与调试。关键词 电子钟;单片机;DS1302ABSTRACT Nowadays people need

2、more accurate time to keep up with the high pace of life. With computers in the infiltration and the development of large-scale integrated circuits,SCM application is steadily deepening, while electronic clock is widely used in our life and work taking place of traditional one. the electronic clock

3、mainly uses the electronic technology to make the clock computerized and digitized, with features of accurate time、small size、a friendly user interface and strong expansibility.This design mainly consists of the core chip of AT89S52, 8 light emitting diodes and the clock chip DS1302 to achieve the b

4、asic function of the electronic clock, and also analyses the key designing of the corresponding software including software design flow, emulation and debuggingKEY WORDS Electronic clock; Single Chip Microcomputer; DS1302目录1.前 言12.系统核心芯片介绍22.1 单片机AT89S2简介22.1.1 芯片主要性能22.1.2 芯片引脚功能22.2 时钟芯片DS1302简介42

5、.2.1 主要功能42.2.2 内部结构及引脚功能52.2.3 工作原理62.2.4 控制字节及寄存器62.2.5 数据的传送73.电子钟软件设计93.1 系统结构图及总流程图93.2 主程序模块103.2.1 初始化模块103.2.2 DS1302读写模块113.2.3 显示模块133.2.4 蜂鸣模块143.2.5 主程序流程图163.3 中断调整模块173.3.1 时间中断模块173.3.2 闹钟调整模块194调试结果分析及解决方案205总结22致谢23参考文献24附录一 硬件仿真原理图25附录二 软件汇编程序2621.前 言电子钟已成为人们日常生活中的必需品,广泛应用于家庭、车站、办公

6、室等场所。钟表数字化给人们生产生活带来了极大地方便而且大大地扩展了钟表原先的报时功能诸如定时自动报警、按时自动打铃、时间程序自动控制、通断动力设备、甚至各种定时电气的自动启用,因此研究数字钟及扩大其应用有着非常现实的意义。数字电子钟设计与制作可采用数字电路实现,也可以采用单片机来完成。若用数字电路完成,所设计的电路相当复杂,大概需要十几片数字集成块,其功能也主要依赖于数字电路的各功能模块的组合来实现,焊接的过程比较复杂,成本也非常高。若用单片机来设计制作完成,由于其功能的实现主要通过软件编程来完成,那么就降低了硬件电路的复杂性,而且其成本也有所降低。截止今日,单片机应用技术飞速发展,纵观现在各

7、个领域,从导弹的导航装置,到飞机上各种仪表的控制,从计算机的网络通讯与数据传输,到工业自动化过程的实时控制和数据处理,以及我们生活中广泛使用的各种智能IC卡、电子宠物等,这些都离不开单片机。单片机即单片微型计算机(Single-Chip Microcomputer ),是集CPU ,RAM ,ROM ,定时,计数和多种接口于一体的微控制器。它体积小,成本低,功能强,广泛应用于智能产业和工业自动化上。同时,若采用单片机计时,一方面需要采用计数器,占用硬件资源,另一方面需要设置中断、查询等,同样耗费单片机的资源,而且,某些测控系统可能不允许。但是,如果在系统中采用时钟芯片,则能很好地解决这个问题。

8、现在流行的串行时钟电路很多,如DS1302、DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。美国Dallas公司生产的串行实时时钟芯片 DS1302是一种具有涓细电流充电能力的实时时钟芯片,采用普通32.768KHZ晶振,具有实时时钟和 31 字节的静态RAM。主要特点是采用串行数据传输,可方便地与单片机接口,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。本设计要求利用51单片机和DS1302设计制作一个LED电子钟,用8个LED显示时间,当按下相应按键时,修改当前时间或闹铃时间,若当前时间与闹铃时间相同,蜂鸣器发音1分钟。2.系统核心芯片介

9、绍2.1 单片机AT89S2简介2.1.1 芯片主要性能AT89S52是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准 MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S52可为许多嵌入式控制应用系统提供高性价比的解决方案。AT89S52具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,256 bytes的随机

10、存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层中断嵌套中断,2个16位可编程定时计数器,2个全双工串行通信口,看门狗(WDT)电路,片内时钟振荡器。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU 停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结, 单片机一切工作停止,直到下一个中断或硬件复位为止。2.1.2 芯片引脚功能AT89S52芯片DIP双列直插式封装引脚如图2-1所示。图2-1 AT89S52引脚排列P0 口:P0口是一个8位漏极开路的双向I/O

11、口。作为输出口,每位能驱动8个TTL逻辑电平。对P0端口写“1”时,引脚用作高阻抗输入。当访问外部程序和数据存储器时,P0口也被作为低8位地址/数据复用。在这种模式下,P0具有内部上拉电阻。 P1 口:P1 口是一个具有内部上拉电阻的8 位双向I/O 口,P1 输出缓冲器能驱动4 个 TTL 逻辑电平。对P1 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 引脚口第二功能如下: P1.0/T2(定时器/计数器T2的外部计数输入),时钟输出 P1.1/T2EX(定时器/计数器T2的捕捉/重载触发信号和方向

12、控制) P1.5/MOSI(在系统编程用) P1.6/MISO(在系统编程用) P1.7/SCK(在系统编程用) P2 口:P2口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL逻辑电平。对P2 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 在访问外部程序存储器或用16位地址读取外部数据存储器(例如执行MOVX DPTR)时,P2 口送出高八位地址。在这种应用中,P2 口使用很强的内部上拉发送1。在使用8位地址(如MOVX RI)访问外部数据存储器时,P2口输出P2锁存

13、器的内容。 P3 口:P3 口是一个具有内部上拉电阻的8 位双向I/O 口,P2 输出缓冲器能驱动4 个TTL逻辑电平。对P3 端口写“1”时,内部上拉电阻把端口拉高,此时可以作为输入口使用。作为输入使用时,被外部拉低的引脚由于内部电阻的原因,将输出电流(IIL)。 P3口亦作为AT89S52特殊功能(第二功能)使用。 引脚口第二功能如下:P3.0/RXD(串行输入口)P3.1/TXD(串行输出口)P3.2/INTO(外中断0)P3.3/INT1(外中断1)P3.4/TO(定时/计数器0)P3.5/T1(定时/计数器1)P3.6/WR(外部数据存储器写选通)P3.7/RD(外部数据存储器读选通

14、)此外,P3口还接收一些用于FLASH闪存编程和程序校验的控制信号。RST复位输入。当振荡器工作时,RST引脚出现两个机器周期以上高电平将是单片机复位。ALE/PROG当访问外部程序存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。一般情况下,ALE仍以时钟振荡频率的1/6输出固定的脉冲信号,因此它可对外输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲。如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。该位置位后,只有一条MOVX和MOVC指令才能将ALE激活。此外,该引脚会被微弱拉高,单片机执

15、行外部程序时,应设置ALE禁止位无效。PSEN程序储存允许(PSEN)输出是外部程序存储器的读选通信号,当AT89C52由外部程序存储器取指令(或数据)时,每个机器周期两次PSEN有效,即输出两个脉冲,在此期间,当访问外部数据存储器,将跳过两次PSEN信号。EA/VPP外部访问允许,欲使CPU仅访问外部程序存储器(地址为0000H-FFFFH),EA端必须保持低电平(接地)。需注意的是:如果加密位LB1被编程,复位时内部会锁存EA端状态。如EA端为高电平(接Vcc端),CPU则执行内部程序存储器的指令。2.2 时钟芯片DS1302简介2.2.1 主要功能DS1302芯片是美国DALLAS公司推

16、出的低功耗实时时钟芯片,它工作电压为2.5V5.5V,采用串行通信方式,只需3条线便可以和单片机进行同步通信,并可采用突发方式一次传送多个字节的时钟信号或RAM数据。DS1302内部有一个318的用于临时性存放数据的RAM寄存器。可增加系统的RAM。DS1302的时钟校准比较容易,若采用专用的晶体振荡器,几乎无须调整即可以达到国家要求的时钟误差标准。DS1302是DS1202的升级产品,与DS1202兼容,但增加了主电源/后背电源双电源引脚,同时提供了对后背电源进行涓细电流充电的能力,这样避免了由于突然停电而造成时钟停止,因此它非常适合于长时间无人职守的监测控制系统或需经常记录某些具有特殊意义

17、的数据及对应时间的场合。DS1302提供秒、分、时、日、星期、月、年的信息,每月的天数和闰年的天数可自动调整,并可通过AM/PM 指示决定采用24 或12 小时格式。2.2.2 内部结构及引脚功能DS1302内部主要包括实时时钟(real time clock)、输入移位寄存器(input shift registers)、31字节静态RAM、电源控制部分(power control)、命令控制逻辑(command and control logic)、振荡器和分频器(oscillator and divider)等部分。DS1302内部结构如图2-2所示。图2-2 DS1302内部结构DS1

18、302具有8脚DIP引脚排列如图2-3所示。图2-3 DS1302引脚排列Vcc1:后备电源,在主电源关闭的情况下,也能保持时钟的连续运行;当Vcc2大于Vcc10.2V时,Vcc2给DS1302供电。Vcc2:主电源,当Vcc2小于Vcc1时,DS1302由Vcc1供电。X1、X2:振荡源,外接32.768kHz晶振。GND:接地端SCLK:串行时钟输入端I/O:串行数据输入输出端(双向)。RST:复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;其次,RST提供终止单字节或多字节数据的传送手段。

19、2.2.3 工作原理DS1302工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置为高电平且将8位地址和命令信息装入移位寄存器。数据在时钟(SCLK)的上升沿串行输入,前8位指定访问地址。命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输入数据。时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),在多字节方式下最多可达8+248。2.2.4 控制字节及寄存器DS1302的一次数据传送是从发送控制字节开始的。控制字节的最高有效位(位7)必须是逻辑1,如果该位为0,则无法把数据写入到DS1302中;位6表示要读写的数据类型,为0表示存取日历时钟数据,为1表示存

20、取 RAM数据;位5至位1指示要操作单元的地址;最低有效位(位 0)表示命令类型,为0表示要进行写操作,为 1 表示要进行读操作。控制字节总是从最低位开始输出。其控制字节格式如图2-4所示。图2-4 控制字节格式对DS1302的操作就是对其内部寄存器的操作,DS1302内部共有12个寄存器,其中有7个寄存器与日历、时钟有关,存放的数据位为BCD码形式。表2-1 DS1302的日历时钟寄存器及控制字此外 ,还有控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元

21、,共31个,每个单元组态为一个8位的字节,其命令控制字为C0HFDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、(读) 。2.2.5 数据的传送向 DS1302 写入数据时,数据在控制字节输入后的下一个 SCLK周期的上升沿被写入,多余的 SCLK将被忽略。数据写入时从低位(位0)开始;同样,从DS1302 读取数据时,数据在紧跟控制字节后的下一个 SCLK的下降沿读出,读出数据时也是从低位(0位)到高位(7 位),只要RST保持高电平,额外的 SCLK将导致数据字节的持续读出,这个特性用于实现该芯

22、片的突发读模式。对DS1302 的每一次读写需 16个时钟脉冲,前 8 个脉冲输入操作地址和读写命令,后8个脉冲写入或读出数据。数据传送时序如图2-5。图2-5 数据读写时序图3.电子钟软件设计3.1 系统结构图及总流程图根据软件功能要求,将系统软件划分为若干个相对独立的部分,设计出合理的总体结构:时钟显示是一个循环过程,系统以单片机AT89S52为主控制器,不断读取实时时钟芯片DS1302提供的时间送LED显示,时间采用24小时模式;当达到闹钟所设定时间时,控制蜂鸣器发声一分钟;当需要调整时间或闹钟时,按下相应按键进入中断处理。整个系统的电源可由电池提供或者用USB电源线由电脑提供。系统总体

23、结构如图3-1所示。单片机AT89S52数码管显示实时时钟芯片DS1302电源电路蜂鸣电 路时 间闹 钟设 置电 路图3-1 系统总体结构由于汇编语言产生的目标程序简短,占用存储空间小,执行快,能充分发挥计算机的硬件功能,因此根据系统总体结构确定总流程图后,用汇编语言编写程序实现各模块功能。总流程图如图3-2所示。初始化模块DS1302读写模块显示模块蜂鸣模块INT0中断模块:时间调整INT1中断模块:闹钟调整图3-2 系统总流程图3.2 主程序模块主程序模块包括初始化模块、DS1302读写模块、显示模块和蜂鸣模块。3.2.1 初始化模块初始化模块包括了存储资源的分配、各标志位的赋值、中断的状

24、态设置以及跳转语句。当使用机器汇编时,必须为汇编程序提供一些信息,这些控制汇编的指令称为伪指令,也包括在初始化模块里。初始化模块流程图如3-3所示。开始资源分配(伪指令EQU及BIT)时间、闹钟和标志位赋值设置中断方式,中断允许跳转指令图3-3 初始化模块流程图在此模块,须定义好单片机与DS1302的串行通信接口以及调整时间或闹钟时的按键端口,如下:P0 数码管段码输入P2 数码管位数选择P1.0 DS时钟控制总线SLCKP1.1 DS数据传送总线I/OP1.2 DS复位总线RSTP1.3 位选择键,按下选择要调整的位置P1.4 UP,按此键调整时参数加P1.5 DW,按此键调整时参数减P1.

25、6 OK,按此键完成调整,退出中断P1.7 NO,按此键退出中断,取消调整P3.2 TIME,按下时进入时间设置模式P3.3 CLC,按下时进入闹钟设置模式由于DS1302第一次初始化写入数据后在主电源关闭的情况下也能保持时钟的连续运行,写入程序主要在调整时间或闹钟时用到,因此在下一个DS读写模块才详细介绍。3.2.2 DS1302读写模块DS1302 内有2 类寄存器,一类用于存放时钟/日历数据,另一类是静态 RAM。与外界数据的交换可分为单字节传送和多字节传送2 种方式。图3-4为DS实时时间读写流程图。多字节模式可用于时钟/日历或有31个十进制地址(地址/命令位15 设为1)的 RAM

26、寄存器。时钟/日历寄存器的931及 RAM 的 31 寄存地址中无数据存储能力。连续模式的读或写从 0 地址的 0 位开始。当在连续模式向时钟寄存器写数据时,前8 个寄存器必须按传送数据顺序写。然而,此方式写入 RAM 时,不需要把传送数据的31B都写入。写入的每一个字节将传送到 RAM 不管是否所有的31B 都写入。当时间能连续运行时,在时钟脉冲读的开始,当前时间被传送到另外一组寄存器,时间信息从这些从寄存器读出。这免去了在读取期间为刷新主寄存器而重读寄存器的需求。图3-4 实时时间读写流程图要注意的是,控制寄存器的第 7 位是写保护位。在对时钟或 RAM 读操作之前,第7 位必须是0。当为

27、1 时,写保护位阻止对任何其他寄存器的写操作。初始的上电状态未被设置,因此,写保护位应该在试图写入器件之前清零。下面分别给出单字节和多字节两种传送方式下向DS写入命令字节和显示数据的程序例子:Write_Enable:MOV Command,#8Eh ;命令字节为8EMOV ByteCnt,#1 ;单字节传送模式MOV R0,#XmtDat ;数据地址覆给R0MOV XmtDat,#00h ;数据内容为0 写入允许ACALL Send_Byte ;用写入数据子程序RET ;返回调用本子程序处Write_Multiplebyte:MOV Command,#0BEh ;命令字节为BEhMOV By

28、teCnt,#8 ;多字节写入模式此模块为8 个MOV R0,#XmtDat ;数据地址覆给R0MOV XmtDat,#59h ;秒单元内容为59hMOV XmtDat+1,#59h ;分单元内容为59hMOV XmtDat+2,#13h ;时单元内容为13hMOV XmtDat+3,#21h ;日期单元内容为21hMOV XmtDat+4,#06h ;月单元内容为06hMOV XmtDat+5,#03h ;星期单元内容为03hMOV XmtDat+6,#0 ; 年单元内容为00hMOV XmtDat+7,#0 ;写保护单元内容为00hACALL Send_Byte ;调用写入数据子程序RET

29、 ;返回调用本子程序处3.2.3 显示模块数码管的接口有静态接口和动态接口两种方式。静态接口问固定显示方式,无闪烁。位选线同时选通,每位的段选线分别与一个8位锁存器输出相连,各位互相独立。各位显示一经输出,则相应显示将维持不变,直至显示下一位字符为止。静态显示方式有较高的亮度和简单的软件编程,缺点是占用口线资源太多。为避免这个缺点,本设计采用动态显示方式,将所有位的相应段选线并在一起,用一个接口完成字形码的输出(字形选择),位选线则分时轮流选通,即另一个接口完成各数码管的循环轮流点亮(数位选择),利用人眼视觉的暂留现象获得稳定的视觉效果。显示程序流程图如图3-5所示。开始初始化显示参数关所有数

30、码管显示取显示数据输出段码数据输出位选通信号延时位选通信号移位,显示下一位数码管指向下一个显示字符8位显示完?关所有数码管显示,返回是否图3-5 显示流程图设定8位数码管的显示格式为“XX-XX-XX”(时-分-秒),第六位和第三位的横杠固定正常显示,在修改时间或闹钟时,要调整的部分每两位(十位和个位)一起闪烁显示,因此设置了两个标志位MARK和WINK。MARK:闪烁标志,为1时允许闪烁,为0时禁止闪烁。WINK:位闪烁标志,为8时“时”闪烁,为5时“分”闪烁,为2时“秒”闪烁。要实现闪烁显示,则在选择的那位数码管选通又熄灭后延时一小段时间,才指向下一位数码管。3.2.4 蜂鸣模块考虑到已使

31、用了两个中断来实现调整部分,蜂鸣模块主要用查询比较的方式实现,流程图如图3-6所示。所用标志位如下:BEEF:蜂鸣标志图3-6 蜂鸣模块流程图要令蜂鸣器蜂鸣一分钟,若用定时器TO来帮助计时,设单片机的晶振为12MHz,16位定时最大为2161s=65.536ms,计算初值令T0每50ms计满溢出回零,另设两个标志位记录对50ms计数1200次。但同时,由于在蜂鸣的时候LED要同步显示当前时间,需要调用显示程序,在计数1200次时,执行调用的指令也占用了时间,这样使得蜂鸣时间变长以及较难计算出准确的定时器计算初值,所以在程序中用“分”加1的办法通过比较来实现一分钟的蜂鸣。开始DS初始化设置闹钟时

32、间状态标志位初始化置外部中断触发方式中断允许从DS读取数据调用显示程序比较当前时间和闹钟时间两者相等?进入蜂鸣状态满1分钟?关闭蜂鸣,返回YNN3.2.5 主程序流程图Y图3-7 主程序流程图结合以上各模块流程图,设计主程序流程图如图3-7所示。3.3 中断调整模块本设计要处理的按键较多,主要是考虑到调整时间或闹钟时更人性化,方便人们的操作,因此设置了位选择键、加减键、确认键和取消键。如果都以查询方式来检测,则程序会变得繁琐,而且出现误判断的机会较大,因此为了减少检测的麻烦,同时也为了区别时间和闹钟两个不同的调整任务,设计采用了外部中断方式来处理。该模块流程图如图3-8所示。3.3.1 时间中

33、断模块当外部中断口P3.2收到下降沿信号,即时间调整键time按下时,程序进入时间调整中断,默认从“时”开始进行修改。时间调整模块的重点在按键处理部分,本设计采用了查询方式检测是否有键按下,并消抖延时来确认按下的是哪一个键。如果按下的是位选择键、加键或减键,进入相应程序处理,子程序结束后需继续检测下一次是否有键按下;如果按下的是确认键或取消键,则结束中断。位选择键处理:选择要调整“时”、“分”或“秒”。初始设置从“时”开始选择,每按下一次标志位WINK改变。按下位选择键后,首先检测WINK是否为2,是则重新赋值WINK为5,修改位置从“时”变为“分”;再按下一次,WINK赋值为8,修改位置从“

34、分”变为“秒”;第三次按下时重新赋值WINK使闪烁位为“时”。加键处理:要调整的部分加1。由于采用24小时模式,若修改“时”,则先检测是否为23,是则重新赋值为0,否则直接加1;若修改“分”或“秒”,先检测是否为59,是则重新赋值为0,否则直接加1。减键处理:要调整的部分减1。由于采用24小时模式,若修改“时”,则先检测是否为0,是则重新赋值为23,否则直接减1;若修改“分”或“秒”,先检测是否为0,是则重新赋值为59,否则直接减1。确认键处理:表示修改完成。把修改后的数据从暂存区送到发送数据缓冲区,调用DS读写程序修改DS实时数据并显示,结束中断,返回主程序。取消键处理:表示取消修改。由于修

35、改的数据保存在暂存区,不影响DS实时数据,因此直接结束中断,返回主程序继续从DS读取时间并显示。图3-8 中断调整流程图3.3.2 闹钟调整模块当外部中断口P3.3收到下降沿信号,即闹钟调整键clc按下时,程序进入闹钟调整中断,默认从“时”开始进行修改。该模块中的按键处理流程同时间调整模块,但在确认键和取消键处理时,闹钟数据存储在单片机内,所以只需给该单片机存储地址重新赋值或者保持该地址数据不变,然后结束中断。4调试结果分析及解决方案软件完成后,把伟福编译后的文件通过烧录器下载到AT89S52芯片,加上电源就可以进行调试。各程序模块具有一定的独立性,因此可以先调试模块,在模块功能都能实现的前提

36、下,再调试总程序,这样能快捷地检查判断硬件或软件上的问题。调试结果及解决办法如下:1测试显示模块时,数码显示管全亮显示“8.8.8.8.8.8.8.8.”而不是预设的初值。利用Proteus软件仿真,发现仿真时显示正常,再检查硬件,发现段码位选线与P0口接线错误。按原理图重新焊接后,能正常显示。2测试DS读写模块时,从LED显示表明能正确写入与读取当前时间,但DS1302的工作情况不太理想,主要表现在实时时间稍微偏快。DS1302 时钟的产生基于外接的晶体振荡器,振荡器的频率为32768HZ,该晶振通过引脚X1、X2 直接连接至DS1302,即DS1302 是依靠外部晶振与其内部的电容配合来产

37、生时钟脉冲,由于DS1302 在芯片本身已经集成了6pF的电容。所以,为了获得稳定的可靠的时钟,必须选用具有6pF 负载电容的晶振。然而,许多人在选用晶振时仅仅注意了晶振的额定频率值,而忽视了晶振的负载电容大小,甚至连许多经销商也不能提供所售晶振的负载电容,所以即使在使用中选用了符合32768Hz 的晶振,但如果该晶振的负载电容与DS1302 提供的6pF不一致时,就会影响晶振的起振或导致振荡频率的偏移。当所选的晶振负载电容不是6pF 时,可以采用增加辅助电容的方法提高或降低DS1302 振荡器的电容性负载,使之与晶体所需的电容值匹配,如果已知晶体的负载电容为CI,若CI 小于6pF,则可以增

38、加一个并联电容CS 以产生所需要的总负载电容CI,即CI=6pF+CS;若CI 大于6pF,则可以在晶体的一端增加一个串联电容CS,以产生所需要的负载电容CI,即1/CI=1/6pF+1/CS,通过计算即可得出应增加的辅助电容大小。辅助电容的接法如图4-1所示。4-1 辅助电容的接法3测试蜂鸣模块时,没有时间显示,一直保持蜂鸣,不能返回主程序。重新检查程序,再次赋值给DS1302和闹钟时,实物正常工作,证明现有程序语法和逻辑上没有错误。从赋值过的数字中找规律,发现当DS初值的“分”个位为9而闹钟的“分”为0时,蜂鸣出现错误。查阅DS的显示有关资料,由于DS的数据是BCD码形式读取,因此“X9”

39、的数据加1后为“*0”;但程序所用为十六进制,“X9”加1后为“*A”,所以当DS刚到达闹钟时间准备蜂鸣时,程序中用INC指令对“分”加1后只达到“*A”,与DS一分钟后读取到的“*0”一直不相等,程序无法向下执行,也就是无法同步显示当前时间以及关闭蜂鸣。解决办法:进入蜂鸣状态时,先对比是否是个位为9的数据,是则按照BCD码形式直接赋值为“*0”到暂存区,再加1;否则直接用INC指令加1。不断读取DS“分”的数据与暂存区数据比较,相等则表示满一分钟,关闭蜂鸣。修改程序后该模块运行正常。4测试调整模块,进入中断时,按键后有时出现显示错乱,按键失灵,出现连续加减的情况。有了蜂鸣模块的前例,增加了数

40、据个位为9时的处理程序;分析出现连续加减可能是因为消抖延时不够,造成程序误判断为按键连击,因此增大延时时间。修改程序后该模块正常运作。5综合总程序测试,各部分功能运作正常,达到任务要求。参考文献1 向继文,廖立新. 基于AT89S51的电子钟系统设计J.机电产品开发与创新, 2007-03.2 罗政球. 时钟芯片DS1302可靠起振方法J.制作天地, 2009(6).23-24.3 张勇. 制作基于DS1302 的电子时钟时的难点分析J. 保定师范专科学校学报, 2004(3).30-33.4 赵亮. 实时时钟芯片DS1302的应用J.电子制作,2005(10).37-38.5 能昌会. 时钟

41、芯片DS1302在单片机系统中的应用J.电子制作, 2007(11).40.6 朱路,朱清慧. 连续补充充电实时时钟芯片DS1302及其应用J.现代电子技术,2006(19).116-118.7 刘盛雄,周奇,韦云. 基于单片机的数字式电子钟的设计与制作J.重庆工学院学报,2006.20-8.8 杨占军. 基于DS1302的数码管时钟电路设计J.电子世界,2005(9).35-36.9 庄建清,徐玮. 51单片机综合学习系统_DS1302时钟应用篇J. 电子制作, 2008(10).25-26.10 黄明强. DS1302在单片机系统中的应用N.保定师范专科学校学报,2004-04.11 孙枫

42、. 串行实时时钟芯片DS1302与单片机接口技术及应用J.鞍钢技术,2001(5).59-63.附录一 硬件仿真原理图附录二 软件汇编程序BitCnt EQU 30H ; 数据位计数器 ByteCnt EQU 31H ; 数据字节计数器 Command EQU 32H ; 命令字节地址 RcvDat EQU 40H ; 接收数据缓冲区 XmtDat EQU 50H ; 发送数据缓冲区 LEDBUF EQU 60H ; 段码缓冲区 ClcDat EQU 70H ; 闹钟时间存储位 HAVE_KEY BIT 81H ; 调整显示暂时存储位 SetDat EQU 73H ; 调整数据暂时存储位 MARK BIT 76H ; 闪烁标志位 , 为1闪烁,为0不闪烁 WINK EQU 77H ; 标识第几位闪烁 IO_DATA BIT P1.1 ; 数据传送总线 SCLK BIT P1.0 ; 时钟控制总线 RST BIT P1.2 ; 复位总线 CHO BIT P1.3 UP BIT P1.4 WN BIT P1.5 OK BIT P1.6 NO BIT P1.7 BEEF BIT P3.6 ORG 0000H AJMP write_a ORG 0003H LJMP timeset ORG 0013H LJMP clcset;*

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号