基于DS1302数字时钟电路的设计Word文档格式.docx
《基于DS1302数字时钟电路的设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《基于DS1302数字时钟电路的设计Word文档格式.docx(32页珍藏版)》请在冰豆网上搜索。
7
SCLK
串行时钟输入端
8
VCC1
后备电源
表1DS1302引脚功能表
图1DS1302管脚图与内部结构图
2.1.2DS1302的控制字
DS1302的控制字节如图2所示:
76543210
RAM
A4
A3
A2
A1
A0
图2DS1302控制字节的含义
控制字节的最高有效位〔位7〕必须是逻辑1,如果它为0,则不能把数据写入到DS1302中。
位6如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;
位5至位1指示操作单元的地址;
最低有效位〔位0〕如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。
2.1.3DS1302的复位引脚
通过把
输入驱动置高电平来启动所有的数据传送。
输入有两种功能:
首先,
接通控制逻辑,允许地址/命令序列送入移位寄存器;
其次,
提供了终止单字节或多字节数据的传送手段。
当
为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。
如果在传送过程中置
为低电平,则会终止此次数据传送,并且I/O引脚变为高阻态。
上电运行时,在Vcc≥2.5V之前,
必须保持低电平。
只有在SCLK为低电平时,才能将RST置为高电平。
2.1.4DS1302的数据输入输出
在控制指令字输入后的下一个SCLK时钟的上升沿时数据被写入DS1302,数据输入从低位即位0开始。
同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位至高位7,数据读写时序如图3所示:
图3数据读写时序
2.1.5DS1302的寄存器
DS1302共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。
其日历、时间寄存器与其控制字见表2。
此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器与与RAM相关的寄存器等。
时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器的内容。
DS1302与RAM相关的寄存器分为两类,一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H--FDH,其中奇数为读操作,偶数为写操作;
再一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH〔写〕、FFH〔读〕。
寄存器名
命令字
取值范围
各位内容
写操作
读操作
3
2
秒寄存器
80H
81H
00--59
CH
10SEC
SEC
分寄存器
82H
83H
10MIN
MIN
时寄存器
84H
85H
01-12或00-23
12/24
10
HR
日寄存器
86H
87H
01-28,29,30,31
10DATE
DATE
月寄存器
88H
89H
01--12
10M
MONTH
周寄存器
8AH
8BH
01--07
DAY
年寄存器
8CH
8DH
00--99
10YEAR
YEAR
表2DS1302的日历、时钟寄存器与其控制字
2.2AT89S51简介
AT89S51[3]美国ATMEL公司生产的低功耗,高性能CMOS8位单片机,片内含4KBytesISP(In-systemprogrammable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统与AT89C51引脚结构,芯片内集成了通用8位中央处理器和ISPFlash存储单元。
单片机AT89S51强大的功能可为许多嵌入式控制应用系统提供高性价比的解决方案。
2.2.1AT89S51芯片的引脚与特点图4AT89S51引脚图
AT89S51芯片的引脚结构如图4所示:
〔1〕功能特性概括:
AT89S51提供以下标准功能:
40个引脚、4KBytesFlash片内程序存储器、128Bytes的随机存取数据存储器〔RAM〕、32个外部双向输入/输出〔I/O〕口、5个中断优先级2层中断嵌套中断、2个数据指针、2个16位可编程定时/计数器、2个全双工串行通信口、看门狗〔WDT〕电路、片内振荡器与时钟电路。
此外,AT89S51可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。
空闲模式下,CPU暂停工作,而RAM、定时/计数器、串行通信口、外中断系统可继续工作。
掉电模式冻结振荡器而保存RAM的数据,停止芯片其它功能直至外中断激活或硬件复位。
同时该芯片还具有PDIP、TQFP和PLCC等三种封装形式,以适应不同产品的需求。
〔2〕管脚说明:
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,也即地址/数据总线复用口。
作为输出口用时,能驱动8个TTL逻辑门电路。
对端口写“1〞时,被定义为高阻输入。
在访问外部数据存储器或程序存储器时,这组口线分时转换地址〔低8位〕和数据总线复用,在访问期间激活内部上拉电阻。
在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。
P1口:
P1口是一个带内部上拉电阻的8位双向I/O口,P1口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对端口写“1〞,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。
作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(I
)。
在Flash编程和程序校验期间,P1接收低8位地址。
部分端口还有第二功能,如表3所示:
端口引脚
第二功能
P1.5
MOSI(用于ISP编程)
P1.6
MISO(用于ISP编程)
P1.7
SCK(用于ISP编程)
表3P1口部分引脚第二功能
P2口:
P2口是一个带有内部上拉电阻的8位双向I/O口,P2口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVXDPTR指令)时,P2口送出高8位地址数据。
在访问8位地址的外部数据寄存器(例如执行MOVXRi指令)时,P2口线上的内容(也即特殊功能寄存器(SFR)区中P2寄存器的内容),在整个访问期间不改变。
在Flash编程或校验时,P2亦接收高位地址和其它控制信号。
P3口:
P3口是一个带有内部上拉电阻的双向8位I/O口,P3口的输出缓冲级可驱动(吸收或输出电流)4个TTL逻辑门电路。
对P3口写“1〞时,它们被内部的上拉电阻拉高并可作为输入端口。
作输入口使用时,被外部信号拉低的P3口将用上拉电阻输出电流(I
P3口除了作为一般的I/O口线外,更重要的用途是它的第二功能,如表4所示:
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
P3.0
RXD(串行输入口)
P3.1
TXD(串行输出口)
P3.2
(外中断0)
P3.3
(外中断1)
P3.4
T0(定时/计数器0)
P3.5
T1(定时/计数器1)
P3.6
(外部数据存储器写选通)
P3.7
(外部数据存储器读选通)
表4P3口引脚第二功能
RST:
复位输入。
当振荡器工作时,RST引脚出现两个机器周期以上的高电平时间将使单片机复位。
WDT溢出将使该引脚输出高电平,设置SFRAUXR的DISRTO位(地址8EH)可打开或关闭该功能。
DISRTO位缺省为RESET输出高电平打开状态。
ALE/
:
当访问外部存储器或数据存储器时,ALE(地址锁存允许)输出脉冲用于锁存地址的低8位字节。
即使不访问外部寄存器,ALE仍以时钟振荡频率的1/6输出固定的正脉冲信号,因此它可对外输出时钟或用于定时目的。
值得注意的是:
每当访问外部数据存储器时将跳过一个ALE脉冲。
对Flash存储器编程期间,该引脚还用于输入编程脉冲(
如有必要,可通过对特殊功能寄存器(SFR)区中的8EH单元的D0位置位,可禁止ALE操作。
该位置位后,只要一条MOVX和MOVC指令才会激活ALE。
此外,该引脚会被微弱拉高,单片机执行外部程序时,应设置ALE无效。
:
程序存储允许(
)输出是外部程序存储器的读选通信号,当AT89S51由外部程序存储器取指令(或数据)时,每个机器周期两次
有效,即输出两个脉冲。
当访问外部数据存储器时,没有两次有效的
信号。
EA/VPP:
外部访问允许。
欲使CPU仅访问外部程序存储器〔地址为0000H-FFFFH〕,EA端必须保持低电平(接地)。
需要注意的是:
如果加密位LB1被编程,复位时内部会锁存EA端状态。
如EA端保持高电平(接VCC端),CPU则执行内部程序存储器中的指令。
Flash存储器编程期间,该引脚用于施加+12V编程电压〔VPP〕。
XTAL1:
反向振荡放大器的输入与内部时钟工作电路的输入端。
XTAL2:
反向振荡放大器器的输出端。
〔3〕晶体振荡器特性:
AT89S51中有一个用于构成内部振荡器的高增益反相放大器,引脚XTAL1和XTAL2分别为该反向放大器的输入端和输出端。
这个反向放大器与作为反馈元件的片外石英晶体或陶瓷谐振器一起构成自激振荡器。
外接石英晶体(或陶瓷谐振器)与电容C1、C2接在放大器的反馈回路中构成并联振荡电路。
对外接电容C1、C2虽然没有十分严格的要求,但电容容量的大小会轻微影响振荡频率的高低、振荡器工作的稳定性、起振的难易程度与温度稳定性。
如果使用石英晶体,电容应该使用30pF
10pF。
还可以使用外部时钟。
这种情况下,外部时钟脉冲接XTAL1端,即内部时钟发生器的输入端,XTAL2应悬空。
由于外部时钟信号是通过一个2分频触发器后作为内部时钟信号的,所以外部时钟信号的占空比没有特殊要求,但最小高电平持续时间和最大低电平持续时间应符合产品技术条件的要求。
2.2.2AT89S51的主要性能参数:
〔1〕与MCS-51产品指令系统完全兼容。
〔2〕4K字节在系统可编程〔ISP〕Flash闪速存储器。
〔3〕1000次擦写周期。
〔4〕4.0—5.5V的工作电压范围。
〔5〕全静态工作模式:
0Hz--33Hz。
〔6〕三级程序加密。
〔7〕128x8字节的内部RAM。
〔8〕32个双向可编程I/O口线。
〔9〕2个16位可编程定时/计数器。
〔10〕6个中断源。
〔11〕全双工UART串行通道。
〔12〕低功耗空闲和掉电模式。
〔13〕中断可从空闲模式唤醒系统。
〔14〕看门狗〔WDT〕与双数据指针。
〔15〕掉电标识和快速编程特性。
〔16〕灵活的在系统编程〔ISP-字节或页写模式〕。
2.2.3AT89S51的新功能:
AT89S51兼容标准MCS-51指令系统与AT89C51引脚结构,它相对于AT89C51增加的新功能包括:
〔1〕ISP在线编程功能,这个功能的优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离。
是一个强大易用的功能。
〔2〕最高工作频率为33MHz,AT89C51的极限工作频率是24M,所以AT89S51具有更高工作频率,从而具有了更快的计算速度。
〔3〕具有双工UART串行通道。
〔4〕内部集成看门狗计时器,不再需要像AT89C51那样外接看门狗计时器单元电路。
〔5〕双数据指示器。
〔6〕电源关闭标识。
〔7〕全新的加密算法,这使得对于AT89S51的解密变为不可能,程序的##性大大加强,这样就可以有效的保护知识产权不被侵犯。
〔8〕兼容性方面:
向下完全兼容51全部字系列产品。
比如8051、AT89C51等早期MCS-51产品。
3方案设计与论证
方案一:
使用并行接口时钟芯片DS12887设计时钟电路。
该设计方案用AT89S51主控,利用并行时钟芯片DS12887为核心计时芯片,组成数字时钟电路。
该电路能够准确计时,还附加许多其它功能,在掉电时能保存用户设置参数和故障状态参数等重要参数。
设计电路图5如下:
图5DS12887与CPU接口电路
该设计虽然能完成所要求的任务,综合性能也较好,但其并行接口方式占用大量接口资源,给其它设计带来诸多不便。
方案二:
使用串行接口时钟芯片DS1302设计时钟电路。
该设计方案以单片机AT89S51为主控芯片,以串行时钟芯片DS1302为核心计时芯片,组成数字时钟电路。
该电路不但能准确地计时、附加其它功能,而且,其三线接口可以节省接口资源,在断电后不丢失时间和数据信息。
该设计方案的接口电路如图6所示:
图6DS1302与CPU接口
通过以上两种设计方案的比较,我们可以看到,设计方案二接口简单,计时可靠,综合性能良好。
所以选用第二种设计方案。
4软硬件设计
4.1硬件电路设计
该设计的硬件电路由主控部分(单片机AT89S51)、计时部分〔实时时钟芯片DS1302〕、显示部分〔八段数码管〕、电源部分〔三端稳压器7805〕4个部分组成。
各部分之间相互协作,构成一个统一的有机整体,实现数字时钟的功能。
各部分的硬件电路设计如下。
设计总电路图见附录一。
4.1.1单片机AT89S51外围电路设计
单片机AT89S51作为主控芯片,控制整个电路的运行。
单片机外围需要一个复位电路,复位电路的功能是:
系统上电时提供复位信号,直至系统电源稳定后,撤消复位信号。
为可靠起见,电源稳定后还要经一定的延时才撤销复位信号,以防电源开关或电源插头分-合过程中引起的抖动而影响复位。
该设计采用含有二极管的复位电路,复位电路可以有效的解决电源毛刺和电源缓慢下降〔电池电压不足〕等引起的问题,在电源电压瞬间下降时可以使电容迅速放电,一定宽度的电源毛刺也可令系统可靠复位。
复位电路的设计图如图7示:
图7单片机复位电路图
AT89S51具有在系统可编程功能,可以很方便的改写单片机存储器内的程序不需要把芯片中从工作环境中剥离,把AT89SISP下载口接入电路,可使电路实现该功能。
AT89S51需要接入一个普通12MHz晶振,为其提供稳定的时钟脉冲。
该设计中有6个八段数码显示管LED,所以,在单片机AT89S51外围需要接入6个三极管来驱动数码显示管。
此外,单片机外围需要接入3个开关,用来调整时钟。
单片机外围电路的设计图如图8示:
图8AT89S51外围电路图
4.1.2DS1302与单片机的接口设计
时钟芯片DS1302与单片机AT89S51的接口是由3条线来完成的,单片机AT89S51的P1.0与时钟芯片的数据传输端相连,P1.1用来作为DS1302输入时钟SCLK控制端,P1.2控制DS1302的复位输入端。
DS1302接标准32.768KHz石英晶振。
DS1302与单片机的接口电路如图9所示:
图9DS1302与AT89S51连接图
显示设计
八段数码显示管有两种,一种是共阳数码管,其内部是由八个阳极相连接的发光二极管组成;
另一种是共阴数码管,其内部是由八个阴极相连接的发光二极管组成。
二者原理不同但功能相同。
本设计的时间显示选用6个共阴八段数码管LED,其外形和内部结构如图10所示:
图10八段共阴数码管LED
4.1.4电源设计
时钟芯片DS1302有很宽的工作电压范围,其工作电压为2.5~5.5V。
单片机AT89S51的工作电压范围相对较窄,为4.0~5.5V,所以本设计中,给电路接入三端稳压器7805,利用它的稳压功能给电路提供稳定的+5V电压,使电路的工作保持很高的可靠性。
在电路中接入一个发光二极管作为指示灯,可以很方便地指示电源与电路是否接通。
该设计的电源部分如图11所示:
图11电源电路图
4.2软件实现
单片机AT89S51对时钟芯片DS1302的控制需要通过程序驱动来实现,程序主要完成两个方面的任务:
①利用单片机实现对DS1302寄存器的地址定义和控制字的写入,②实现对DS1302的数据读取。
初始化DS1302要求
为低电平,SCLK为低电平。
被设置为高电平就启动了一个数据传送的过程。
SCLK的16个方波完成一次数据传送,前8个方波用于输入命令字节,后8个方波用于数据的输出〔读DS1302〕或数据的输入〔写DS1302〕。
在SCLK的上升沿,I/O线上的数据被送入DS1302;
在SCLK的下降沿,DS1302输出数据在I/O线上。
写和读各需要一个程序,写DS1302程序流程图如图12①所示,读DS1302程序流程图[4]如图12②所示。
两个子程序与总程序见附录二、三、四。
①写DS1302流程图②读DS1302流程图
图12DS1302时间流程图
5结论
本设计利用单片机AT89S51控制串行实时时钟芯片DS1302构成数字时钟电路,实现计时功能。
该电路使用简单的三线接口,为单片机节省大量的接口资源,时钟芯片DS1302带有后备电池,具备对后背电源进行涓细电流充电的能力,保证电路断电后仍保存时间和数据信息,这些优点解决了目前常用实时时钟占用单片机资源多以与计时不可靠等缺点。
该时钟功能强大,性能优越,能为很多领域,特别是对时钟工作的精确性和可靠性有较高要求的场合,提供较好的实时时钟。
但是,由于DS1302易受环境影响,会使该电路出现时钟精度不高、时钟混乱[5]等问题,还有待继续研究和改进。
6致谢
本设计是在指导老师畅福善的悉心指导下完成的。
从设计的选题,相关资料的查寻,到论文的撰写这一整个过程中,畅老师以其广博的知识、丰富的经验、清晰的思路,自始至终给我以指导,使我能够顺利完成设计,他严谨的治学态度,精益求精的工作作风和孜孜不倦的求学精神令我受益匪浅。
在此设计完成之际,对畅老师表示衷心的感谢!
7参考文献
[1]王明顺,赵德平.可涓流充电的串行实时时钟芯片DS1302与应用设计[J].国外电子元器件,1997,
(2)
[2]高性能、低功耗带RAM实时时钟芯片DS1302.P&S##力源电子股份##,1999
[3]ZYMCUAT89S51Datasheets
[4]黄明强.DS1302在单片机系统中的应用[J].##师范专科学校学报,2004,17
(2)
[5]赵海兰,朱剑,赵祥伟.DS1302实时显示时间的原理与应用[J].电子技术,2002,
(1)
[6]邓红,张越编著.单片机实验与应用设计教程[M].冶金工业,2004,5
[7]孙雪梅,范久臣.实时时钟芯片在单片机系统中的应用[J].##教育学院学报,2005,7
(2)
[8]孙安青编著.AT89S51单片机实验与实践教程[M]
[9]DALLASSEMICONDUCTOR.DS1302TrickleChargeTimekeepingChip
[10]ATMELAT89S51.AtmelCorporation2001
8附录
附录一:
设计总电路图:
附录二:
写DS1302子程序:
voidwriteDS1302(uchardsRamAdr,uchards1302data)
{
uchari;
TIMERCLK=0;
delay
(2);
TIMERRST=1;
DS1302adr=dsRamAdr;
DS1302dat=ds1302data;
for(i=0;
i<
8;
i++)
CY=0;
CY=ds1302adrBit;
TIMERIO=CY;
TIMERCLK=1;
DS1302adr=DS1302adr>
>
1;
}
CY=ds1302datBit;
DS1302dat=DS1302dat>
TIMERRST=0;
附录三:
读DS1302子程序:
ucharreadDS1302(ucharDS1302Adr)
TIMERCLK=0;
DS1302adr=DS1302Adr;
TIMERIO=ds1302adrBit;
TIMERIO=1;