关注分享主机优惠活动
国内外VPS云服务器

Proteus仿真与8051单片机开发实例-DS1302 RTC驱动仿真

文摘:它通过一个简单的串行接口与微处理器通信。对于少于天的月份,月末日期将自动调整,包括闰年的修正。采用同步串行通信简化了与微处理器的接口。否则,写入将被禁用。在读取操作后立即发送一个附加脉冲,数据将可再次读取。

DS1302 RTC驱动器模拟1。DS1302简介DS1302涓流充电定时芯片包含一个实时时钟/日历和31字节的静态RAM。它通过简单的串行接口与微处理器通信。实时时钟/日历提供秒、分、小时、日、日、月和年的信息。对于少于31天的月份,月末日期将自动调整,包括闰年的修正。时钟以24小时或12小时格式运行,带有AM/PM指示器。

采用同步串行通信简化了DS1302与微处理器的接口。而时钟/ RAM通信只需要三根线:CE( R S T /over RST RST)、I/O(数据线)和SCLK(串行时钟)。数据可以以1字节突发的形式发送到时钟/RAM或从时钟/RAM接收,一次最多31字节。DS1302旨在以极低的功耗运行,并以低于1W的功耗保留数据和时钟信息。DS1302是DS1202的继任者。除了DS1202的基本定时功能之外,DS1302还具有用于主电源和备用电源的双电源引脚、用于VCC1的可编程涓流充电器和7个额外字节的寄存器存储器的额外功能。

1)DS1302的命令组成

位7必须始终为逻辑1。否则,将禁止写入DS1302。位6指定时钟/日历或RAM选择。如果是logic0,我们与时钟对话,如果是logic1,我们与RAM对话。位5至1指定要输入或输出的指定寄存器。(地址)位0指定对DS1302的写或读操作。如果是逻辑0,则执行写操作,如果是逻辑1,则执行读操作。命令字节始终以LSB(位0)开始。2)DS1302数据传输流程

在传输任何数据之前,CE引脚必须被拉高,以便与芯片对话。(选择)

然后,发送一个命令字节来通知DS1302要执行的操作。(无论是读还是写,到时钟或RAM。)

然后,如果执行写操作,要写入的数据被发送到RAM或时钟,或者如果执行读操作,可以从时钟或RAM读取数据。

如果从DS1302读取数据,数据将在写入命令字节最后一位后的第一个下降沿可用。相反,在发送命令字节后,写入DS1302发生在低电平到高电平的转换。需要记住的四点是,所有发送和接收的字节都是LSB优先,在命令字节和数据字节之后的写操作中发送到DS1302的额外SCLK脉冲将被忽略。

额外的SCLK脉冲在读取操作后立即发送,数据将可用于再次读取。最后,当与DS1302通信时,微控制器的时钟应该处于2MHZ的最大速度,如下表所示。如果使用不同的速度,必须校准频率以满足DS1302的需要,并重新校准到先前的频率。

3)DS1302设置

DS1302的寄存器如下:

从左边开始,前两列指的是命令字节。是读取还是写入RTC或RAM。(位7至位0)指的是它将在RTC或RAM中传输的数据字节。

2.模拟电路原理图

3.模拟代码实现1)发送数据

//发送一位数据Void DS 1302 _ Send(unsigned charbyte _ t){ unsigned charmask = 0x 01;IO_OUT(DS1302_DDR,ds 1302 _ SIO);do {IO_CLR(DS1302_PORT,ds 1302 _ SCK);if(byte _ t & mask)IO _ SET(ds 1302 _ PORT,ds 1302 _ SIO);else IO_CLR(DS1302_PORT,ds 1302 _ SIO);IO_SET(DS1302_PORT,ds 1302 _ SCK);mask = mask无符号字符mask = 0x01无符号字符tmp = 0x00IO_IN(DS1302_DDR,ds 1302 _ SIO);do {IO_CLR(DS1302_PORT,ds 1302 _ SCK);NOP();NOP();if(ds 1302 _ PORT _ IN & ds 1302 _ SIO)tmp | = mask;else tmp | = 0x00IO_SET(DS1302_PORT,ds 1302 _ SCK);mask = mask UART _ init();ds 1302 _ init();//初始读取年份= ds 1302 _ year _ read();month = ds 1302 _ mon _ read();day = ds 1302 _ mdat _ read();hours = ds 1302 _ hour _ read();minutes = ds 1302 _ min _ read();秒= ds 1302 _ sec _ read();} int main(void){ MCU _ init();//重置mcuuart _ send _ str(" * * * * ds 1302 * * * */r/n ");while(1){ year = ds 1302 _ year _ read();month = ds 1302 _ mon _ read();day = ds 1302 _ mdat _ read();hours = ds 1302 _ hour _ read();minutes = ds 1302 _ min _ read();秒= ds 1302 _ sec _ read();printf("%d-%d-%d %d:%d:%d/r/n ",BCD2DEC(年),BCD2DEC(月),BCD2DEC(日),BCD2DEC(小时),BCD2DEC(分),BCD2DEC(秒);delay _ ms(1000);}} 4.模拟结果

未经允许不得转载:主机频道 » Proteus仿真与8051单片机开发实例-DS1302 RTC驱动仿真

评论 抢沙发

评论前必须登录!