介绍:DS1302是由美国DALLAS公司研发的具有涓细节电流充电能力的低功耗实时时钟。通过简单的串行接口与微处理器通讯。它可以对年、月、日、时、分、秒进行即使,并且具有润年补偿功能。
一、引脚介绍:
SCLK:串行时钟
I / O :数据输入 / 输出
CE:芯片使能
二、寄存器地址 / 定义 /地址操作
WP(写保护功能):1开启,0关闭。
三、时序结构:
1、初始化:便于整个时序构成
void DS1302_Init()
{
DS1302_CE=0;
DS1302_SCLK=0;
}
2、字节写:在CE高电平期间,SCLK上升沿期间发送一位。(器件地址+数据)
代码:
/**
* @brief 写入一个数据
* @param 地址 + 数据
* @retval 无
**/
void DS1302_writByte(unsigned char Command,Data)
{
unsigned char i;
DS1302_CE=1; //拉高CE
for(i=0;i<8;i++) //寄存器地址写入
{
DS1302_IO=Command&(0x01<<i); //按位写入,低位在前
DS1302_SCLK=1; // 写入一位
DS1302_SCLK=0;
}
for(i=0;i<8;i++) //数据写入
{
DS1302_IO=Data&(0x01<<i); //按位写入,低位在前
DS1302_SCLK=1;
DS1302_SCLK=0;
}
DS1302_CE=0;
}
3、字节读:在CE高电平期间,器件地址在SCLK上升沿写入,数据在SCLK下降沿读出
代码:
/**
* @brief 读出一个数据
* @param 地址
* @retval char
**/
unsigned char DS1302_ReadByte(unsigned char Command)
{
unsigned char i,Data=0x00;
Command|=0x01; //寄存器地址 最低位 置1
DS1302_CE=1; //拉高CE
for(i=0;i<8;i++) //将地址按位(低位在前)写入
{
DS1302_IO=Command&(0x01<<i);
DS1302_SCLK=1;
DS1302_SCLK=0;
}
for(i=0;i<8;i++) //读出数据(低位在前)
{
if(DS1302_IO)
{
Data|=(0x01<<i);
}
DS1302_SCLK=1;
DS1302_SCLK=0;
}
DS1302_CE=0;
DS1302_IO=0;
return Data;
}
四、数据存储/转换:
数据存储:在DS1302中的数据都是以BCD码(十六进制)得形式存储的。所以,写入数据要将十进制转换成十六进制,读出数据要将十六进制转换为十进制。
十进制 -> 十六进制:
Data/10*16+Data%10
十六进制 -> 十进制:
Data/16*10+Data%16