首页 > 编程知识 正文

蓝桥杯使用的单片机型号,51单片机ds1302闹钟

时间:2023-05-05 13:43:56 阅读:125012 作者:2387

本文的目录特性详细描述命令字节CE数据输入数据输出突发模式时钟日期时钟停止标志禁止写入时钟日期突发模式RAM突发模式数据传输蓝桥杯部分输出

特性实时时钟计算秒、分钟、小时、日期、月、日、周、年和闰年的补偿有效期为2100年31 x 8,支持电池的通用ram2.0V~5.5v以2.0v运行,小于300nA的电流1字节或多字节

详细介绍DS1302芯片包括实时时钟/日历和31字节静态RAM。

通过简单的串行接口与微处理器进行通信。

实时时钟/日历提供秒、分、小时、日、日、月、年的信息。

月末日期将自动调整小于31天的月份,包括修改闰年。 时钟24小时或12小时运行的格式和AM/PM指示灯使用同步串行通信简化了DS1302和微处理器的接口。

三根电线和时钟/ram :http://www.Sina.com/http://www.Sina.com/http://www.Sina.com /

DS1302旨在以非常低的功率运行,以低于1uW的速度存储数据和时钟信息。

DS1302是DS1202的继承人。 除了DS1202的基本定时功能外,DS1302还具有两个电源管脚:主电源和备用电源。

引脚名称功能1Vcc2主电源引脚2电源配置。 Vcc连接到备用电源,在没有主电源的情况下保留时间和日期。 2X1水晶振动引脚3X2水晶振动引脚4GND地5CE输入。 在读取或写入过程中必须将CE信号置于高电平。 该引脚上接地有内部的40k2(typ )下拉电阻。 6IO输入/推挽输出。 I/O端子为3线接口的双向数据端子。 该引脚上接地有内部的40k2(typ )下拉电阻。 7SCLK输入。 SCLK用于同步串行接口上的数据移动。 该引脚上接地有内部的40k2(typ )下拉电阻。 8Vcc1单电源和电池供电系统的低功耗工作和低功耗电池备份CE通信DS1302采用外置32.768kHz晶体。 振荡电路不需要外部电阻和电容器。

命令字节下图显示了命令字节。 数据传输由命令字节启动。 MSB (第7位)必须是逻辑1。 如果为0,则禁用对DS1302的写入。

第6位的逻辑o指定时钟/日历数据,逻辑1指定RAM数据。

第1 ~ 5位指定输入或输出的指定寄存器,LSB (位0 )指定逻辑0写入(输入)、逻辑1读取)、输出)。

命令字节始终从LSB(0位)输入。

这就是后面时钟日期的控制字节的结构! 例如后面的

CE驱动CE开始传输所有数据以实现高启动。

CE输入有两个功能

首先,CE打开控制逻辑以允许访问地址/指令序列的移位寄存器。

第二,CE信号提供一种终止1字节或多字节CE数据传输的方法。 时钟周期是由上升沿和下降沿构成的序列。

对于数据输入,数据必须在时钟的上升沿有效,数据位在时钟的下降沿输出。

CE输入低时,所有数据传输结束,I/O引脚变为高阻抗状态。

数据输入在输入8个写入命令字节的周期后,在下一个8个周期的上升沿输入数据字节。 如果意外发生,将忽略额外的SCLK循环。 数据从第0位开始输入。

数据输出是在输入read命令字节的SCLK循环后

一个数据字节输出到以下八个SCLK循环的下降沿:

请注意,传输的第一个数据位发生在命令字节的最后一个位写入后的第一个下降沿。 如果CE仍然较高,则会在额外的SCLK周期中重新传输数据字节。

此操作允许连续突发模式的读取能力。

在突发模式下,从地址0的0位开始读取或写入。

在突发模式下写入时钟寄存器时,必须写完前8个寄存器。

但是,如果以突发模式写入RAM,则不需要写入所有31字节用于数据传输。 无论是否写入了31字节,每个写入的字节都将传输到RAM。

时钟日期和日历信息可通过读取相应的寄存器字节获得。

下图。 写入相应的寄存器字节,设置或初始化时间和日历。 时间和日历寄存器的内容采用二进制代码的十进制(BCD )格式

与星期对应的值必须是用户定义的,并且必须是连续的。 例如,如果1等于星期天,则2等于星期一。 不合逻辑的时间和日期条目可能会导致未定义的操作。

辅助缓冲区(用户)用于在读取或写入时间和日期寄存器时防止更新内部寄存器时出错。 读取时间和日期寄存器后,用户缓冲区与内部寄存器(CE的上升沿)同步

每次写入秒寄存器时,倒计时链都会复位。

时间寄存器的第七位被定义为12或24小时模式选择位。

“high”时,选择12小时模式。

在12小时模式下,第5位为AM/PM位,逻辑高为PM。

在24小时模式下,第五位是第二个10小时(20-23小时)位。

时间数据必须在12/24位更改时重新初始化

时钟停止标志秒寄存器的第七位被定义为时钟停止(CH )标志。

如果此位设置为逻辑1。 时钟振荡器停止,

DS1302被置于低功率待机模式,电流漏小于100nA。
当此位写入逻辑0时,时钟开始计时。 也即上电状态。

写保护

控制寄存器的第7位是写保护位。前7位(从0到6位)被迫为0,在读时总是读0。
在对时钟或RAM进行任何写操作之前,第7位必须是0。当值高时,写保护位阻止对任何其他寄存器的写操作也即初始上电状态。因此,WP位应该在试图写入设备之前被清除。
电路上电的初始态WP是1,这时是不能改写上面任何一个时间寄存器的,只有首先将WP改写为0,才能进行其它寄存器的写操作

时钟日期突发模式

clock/calendar命令指定突发模式操作。在
这种模式下。前8个时钟/日历寄存器可以从地址0的0位开始连续读或写
如果写保护位设置高当写时钟/日历突发模式被指定,没有数据传输将发生到任何八个时钟/日历寄存器(这包括控制寄存器)。

内存静态RAM是31 × 8字节,在RAM地址空间中连续编址。

RAM突发模式

RAM命令字节指定突发模式操作。在这种模式下,31个RAM寄存器可以从地址0的0位开始连续读或写

数据传输

蓝桥杯部分 //其中time[3]在main.c中有丰富的啤酒//extern uchar time[3];//前面分别是秒、分、时......uchar code addr[] = {0x00, 0x00, 0x00, 0x08, 0x10, 0x02, 0x13, 0x13};uchar time[3];//这里使用的是突发模式uchar Read_Ds1302(){ unsigned char i,temp=0x00; for (i=0;i<8;i++) {SCK=0;temp>>=1;if(SDA)temp|=0x80;SCK=1;} return temp;}void v_DsW(){uchar i = 0;Write_Ds1302_Byte(0x8E, 0);RST=0;_nop_();SCK=0;_nop_();RST=1; _nop_(); Write_Ds1302(0xbe);//一定要将8个寄存器都写入!for(i = 0; i < 8; i++){Write_Ds1302(addr[i]);}RST=0;Write_Ds1302_Byte(0x8E, 0x80);}void v_DsR(){uchar i = 0;//关闭写保护Write_Ds1302_Byte(0x8E, 0);RST=0;_nop_();SCK=0;_nop_();RST=1; _nop_(); Write_Ds1302(0xbf);//读完前三个就可以了time[0] = Read_Ds1302();time[1] = Read_Ds1302();time[2] = Read_Ds1302();//将秒位最高位清零time[0] = time[0] & 0x7f;//BCD码转换time[0] = (time[0] >> 4)*10 + (time[0]&0x0f);time[1] = (time[1] >> 4)*10 + (time[1]&0x0f);time[2] = (time[2] >> 4)*10 + (time[2]&0x0f);RST=0;//打开写保护Write_Ds1302_Byte(0x8E, 0x80);}void StopTime(){ Write_Ds1302_Byte(0x8E, 0);Write_Ds1302_Byte(0x80, (time[0] | 0x80));Write_Ds1302_Byte(0x8E, 0x80);}

main.c

#include "stc15f2k60s2.h"#include "intrins.h"#include "stdio.h"#include "ds1302.h"extern uchar time[3];uchar Second=-1;void main(){UartInit();v_DsW();while(1){TI = 1;if(Second!=time[0]){Second = time[0];printf("Time is %02bu:%02bu:%02burn", time[2], time[1], time[0]);}v_DsR();Delay500ms();}} 输出

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。