📄 ds1302.h
字号:
sbit T_CLK = P3^2;
sbit T_IO = P3^3;
sbit ACC_0 = ACC^0;
sbit ACC_7 = ACC^7;
#define Set_RST_0 EA=0; D373_3&=~B_RTC_RST_MASK; P0=D373_3; B_373_3=1; B_373_3=0; EA=1;
#define Set_RST_1 EA=0; D373_3|=B_RTC_RST_MASK; P0=D373_3; B_373_3=1; B_373_3=0; EA=1;
// 时间格式(BCD): 秒 分 时 日 月 星期 年
void DS1302_Write(BYTE ucDa)
{
BYTE i;
ACC = ucDa;
for(i=8; i>0; i--){
T_IO = ACC_0;
T_CLK = 1;
T_CLK = 0;
ACC = ACC >> 1;
}
}
BYTE DS1302_Read(void)
{
BYTE i;
for(i=8; i>0; i--){
ACC = ACC >>1;
ACC_7 = T_IO;
T_CLK = 1;
T_CLK = 0;
}
return(ACC);
}
void DS1302_WriteByte(BYTE ucAddr, BYTE ucDa)
{
Set_RST_0
T_CLK = 0;
Set_RST_1
DS1302_Write(ucAddr);
DS1302_Write(ucDa);
T_CLK = 1;
Set_RST_0
}
void DS1302_WriteTime(void)
{
BYTE i;
DS1302_WriteByte(0x8e, 0x00); // Write Enable
Set_RST_0
T_CLK = 0;
Set_RST_1
DS1302_Write(0xbe); // Clock Burst Write
for(i=0; i<8; i++){
DS1302_Write(Time_buf[i]);
}
T_CLK = 1;
Set_RST_0
DS1302_WriteByte(0x8e, 0x80); // Write Disable
}
void DS1302_ReadTime(void)
{
BYTE i;
Set_RST_0
T_CLK = 0;
Set_RST_1
DS1302_Write(0xbf); // Clock Burst Read
for(i=0; i<8; i++){
Time_buf[i]=DS1302_Read();
}
T_CLK = 1;
Set_RST_0
if(Time_buf[0]&0x80){ // Error
Time_buf[0]&=0x7F;
DS1302_WriteTime();
}
}
void DS1302_Init(void)
{
DS1302_WriteByte(0x8e, 0x00); // Write Enable
DS1302_WriteByte(0x90, 0xa7); // Enable Trickle Charge((5-3.7)/8=0.2mA)
DS1302_WriteByte(0x8e, 0x80); // Write Disable
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -