文章目录
- 一、DS1302介绍
- 二、使用DS1302需要注意的点
- 2.1 写保护
- 2.2 写入的时间需要以BCD码形式
- 2.3 12小时模式 or 24小时模式
- 三、代码编写
- 3.1 初始化时间
- 3.2 读取RTC时间
一、DS1302介绍
1.时钟数据:DS1302可以提供秒、分钟、小时、天、日期、月份和年份数据,且时间制可以是24小时制或12小时制。同时该IC内部有一个专门的控制器用以识别闰年。
2.串行通信:DS1302通过三线接口(数据I/O、时钟和使能线)与微控制器进行串行通信。蓝桥杯用到四种通信协议一个:IIC、OneWire、UART还有一个就是DS1302的串行通信。
3.RAM存储:DS1302还配有一小片RAM,允许用户在接通电源时读取和存储额外的数据。
二、使用DS1302需要注意的点
2.1 写保护
在写入数据的时候向0x8e这个地址写入关闭写保护0x00
2.2 写入的时间需要以BCD码形式
2.3 12小时模式 or 24小时模式
三、代码编写
发送数据的话需要知道我们要把数据发到哪里,所以需要一个地址。
读取数据一样,我们要从哪个地址去读取数据。
一个寄存器对应两个地址(逻辑地址),目的就是为了区分读和写,分别是读地址和写地址,如下图:
3.1 初始化时间
unsigned char code READ_RTC_ADDR[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d}; // 读取数据的地址
unsigned char code WRITE_RTC_ADDR[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; // 写数据地址
unsigned char TIME[7]={0x30, 0x59, 0x23, 0x17, 0x02, 0x06, 0x18}; //注意必须用BCD码,顺序是秒、分、时、日、月、星期、年
void DS1302_Config()
{
unsigned char n;
Write_Ds1302_Byte( 0x8e,0x00 ); //关闭写保护
for(n=0;n<7;n++){
Write_Ds1302_Byte(WRITE_RTC_ADDR[n],TIME[n]);
}
Write_Ds1302_Byte( 0x8e,0x80 ); //开启写保护
}
3.2 读取RTC时间
void DS1302_Read()
{
unsigned char n;
for(n=0;n<7;n++)
{
TIME[n]=Read_Ds1302_Byte(READ_RTC_ADDR[n]); //读取7个字节的实时时间
}
}