📄 rtc2025.c
字号:
#include "include/RTC2025.h"
#include "include/main.h"
#include "include/SEGMENT.h"
void rtc_out_byte(unsigned char *ptr)
{
unsigned char i, temp;
rtc_data_wr;
for(i=0;i<8;i++)
{
temp = *ptr << i;
temp &= 0x80;
if(temp) {rtc_data_hi;}
else {rtc_data_lo;}
delay760(rtc_Tsetup);
rtc_clk_hi
delay760(rtc_Thold);
rtc_clk_lo
delay760(rtc_Thold);
}
}
void rtc_in_byte(unsigned char *ptr)
{
unsigned char i, temp=0;
rtc_data_rd;
for(i=0;i<8;i++)
{
rtc_clk_hi
delay760(rtc_Tcatch);
temp = (unsigned char)((HwGDATA_B & 0x100) >> 8 ); //
if(i == 0) *ptr = temp;
else *ptr = (*ptr << 1) | temp;
delay760(rtc_Tcatch);
rtc_clk_lo
delay760(rtc_Thold);
}
}
void rtc_start()
{
//rtc_data;
rtc_data_wr;
rtc_clk_hi;
rtc_data_hi;
delay760(rtc_Tbuf);
rtc_data_lo;
delay760(rtc_Thold);
rtc_clk_lo;
delay760(rtc_Thold);
}
void rtc_stop()
{
//rtc_data;
rtc_data_wr;
//rtc_clk;
//rtc_clk_wr;
rtc_data_lo;
delay760(rtc_Thold);
rtc_clk_hi;
delay760(rtc_Thold);
rtc_data_hi;
delay760(rtc_Thold);
}
unsigned char rtc_get_ack(void)
{
unsigned int i=0;
rtc_data_rd;
rtc_clk_hi;
delay760(rtc_Tcatch);
i = (unsigned int)(HwGDATA_B & 0x100);
delay760(rtc_Tcatch);
rtc_clk_lo
delay760(rtc_Thold);
//if(i==0)
return i;
}
void rtc_do_ack(unsigned char bit)
{
rtc_data_wr;
if(bit) rtc_data_hi
else rtc_data_lo
delay760(rtc_Tsetup);
rtc_clk_hi
delay760(rtc_Thold);
rtc_clk_lo
delay760(rtc_Thold);
}
unsigned char rtc_write(unsigned char rg, unsigned char *ptr)
{
unsigned char i;
rtc_start();
i = 0x64;
rtc_out_byte(&i);
if(rtc_get_ack() != 0)
{
rtc_stop();
return 0;
}
i = (rg<<4);
rtc_out_byte(&i);
if(rtc_get_ack() != 0)
{
rtc_stop();
return 0;
}
rtc_out_byte(ptr);
if(rtc_get_ack() != 0)
{
rtc_stop();
return 0;
}
rtc_stop();
return 1;
}
unsigned char rtc_read(unsigned char rg, unsigned char *ptr)
{
unsigned char i;
rtc_start();
i = 0x64;
rtc_out_byte(&i);
if(rtc_get_ack() != 0)
{
rtc_stop();
return 0;
}
i = (rg<<4)|0x04;
rtc_out_byte(&i);
if(rtc_get_ack() != 0)
{
rtc_stop();
return 0;
}
rtc_in_byte(ptr);
rtc_do_ack(1);
rtc_stop();
return 1;
}
void GET_clock(void)
{
rtc_read(0,wr3_data1+2);//sec
rtc_read(1,wr3_data1+1);//MINUTE
rtc_read(2,wr3_data1);//hour
}
void GET_date(void)
{
rtc_read(4,wr3_data+2);//day
rtc_read(5,wr3_data+1);//month
rtc_read(6,wr3_data);//year
}
void OUT_date(void)
{
rtc_write(4,wr3_data+2);//day
rtc_write(5,wr3_data+1);//month
rtc_write(6,wr3_data);//year
}
void OUT_clock(void)
{
rtc_write(0,wr3_data1+2);//sec
rtc_write(1,wr3_data1+1);//MINUTE
rtc_write(2,wr3_data1);//hour
}
unsigned char rtc_init(void)
{
unsigned char i,rg,j,flag1=0;
rtc_read(0x0f,&i);//判断RESET位,是否复位了,如果复位了则初始化
j = i & 0x10;
if(j)
{
rewrite:
rtc_start();
i = 0x64;
rtc_out_byte(&i);
if(rtc_get_ack() != 0)
{
return 0;
}
rg = 0x0E; //0xEH
i = rg<<4;
rtc_out_byte(&i);
if(rtc_get_ack() != 0)
{
return 0;
}
i = 0x20; //DATA write to 0xEH
rtc_out_byte(&i);
if(rtc_get_ack() != 0)
{
return 0;
}
i = 0x20; //DATA write to 0xFH
rtc_out_byte(&i);
if(rtc_get_ack() != 0)
{
return 0;
}
rtc_stop();
rtc_read(0x0E,&i);
if((i != 0x20)&&(flag1 < 4))
{
flag1++;
goto rewrite;
}
OUT_date();
OUT_clock();
}
else
{
rtc_read(0x0E,&i);
if(i != 0x20)
goto rewrite;
if(sysinit_flag == 1)
{
OUT_date();
OUT_clock();
}
}
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -