drv_1302.i
来自「该模板使用于周立功公司研发的EasyARM2100系列开发板」· I 代码 · 共 418 行
I
418 行
#line 1 "src\\drv_1302.c"
#line 1 "src\\system.h"
#line 1 "src\\target.h"
extern void Reset(void);
extern void TargetInit(void);
#line 12 "src\\system.h"
#line 1 "src\\sys_init.h"
extern void init_sys(void);
extern void init_io(void);
extern void init_clock(void);
extern void init_timer0(void);
extern void init_timer1(void);
extern void init_int0(void);
extern void init_int2(void);
#line 14 "src\\system.h"
#line 2 "src\\drv_1302.c"
extern uint8 set_year_value;
extern uint8 set_month_value;
extern uint8 set_day_value;
extern uint8 set_hour_value;
extern uint8 set_minute_value;
extern uint8 set_second_value;
extern uint8 real_year_value;
extern uint8 real_month_value;
extern uint8 real_day_value;
extern uint8 real_hour_value;
extern uint8 real_minute_value;
extern uint8 real_second_value;
void delayus(uint8 time)
{
unsigned char i;
for(i=0;i<time;i++);
}
uint8 read_bit_ds1302(void)
{
uint8 data;
IO1DIR=IO1DIR&0xfdffffff;
data =((IO1PIN&D1302_IO)>>25);
delayus(1);
return data;
}
uint8 read_byte_ds1302(void)
{
uint8 i;
uint8 datak = 0;
for(i=0;i<8;i++)
{
datak = datak >> 1;
if(read_bit_ds1302()) datak |= 0x80;
}
return datak;
}
void DS1302_init(void)
{
delayus(1);
write_clock(CONTROL_ADDRESS,0x00);
write_clock(TRICKLE_ADDRESS,0xA5);
real_second_value=read_clock(SECOND_ADDRESS);
if(real_second_value>59)
real_second_value=0;
write_clock(SECOND_ADDRESS,real_second_value);
real_year_value=read_clock(YEAR_ADDRESS);
if(real_year_value>99)
real_year_value=0;
real_month_value=read_clock(MONTH_ADDRESS);
if(real_month_value>12)
real_month_value=1;
real_day_value=read_clock(DAY_ADDRESS);
if(real_day_value>31)
real_day_value=1;
}
uint8 read_clock(uint8 address)
{
uint8 temp;
uint8 i,temp1,temp2;
IO0CLR |=D1302_CLK;
delayus(1);
IO0SET |= D1302_RST;
delayus(2);
address|=0x01;
IO1DIR=IO1DIR|0x02000000;
for(i=0;i<8;i++)
{
temp=address;
temp&=0x01;
address>>=1;
IO0CLR |=D1302_CLK;
delayus(1);
if(1==temp)
{
IO1SET|=D1302_IO;
}
else
{
IO1CLR|=D1302_IO;
}
delayus(1);
IO0SET|=D1302_CLK;
}
for(i=0;i<8;i++)
{
IO0CLR|=D1302_CLK;
temp>>=1;
if((IO1PIN&0x02000000)!=0)
{
temp|=0x80;
}
IO0SET|=D1302_CLK;
}
IO0CLR|=D1302_RST;
delayus(1);
IO0CLR|=D1302_CLK;
temp2=temp;
temp1=temp2>>4;
temp1&=0x07;
temp&=0x0f;
temp+=(temp1*10);
return (temp);
}
void write_clock(uint8 address,uint8 set_clock)
{
uint8 temp;
uint8 i,temp1;
IO0CLR|=D1302_CLK;
delayus(1);
IO0SET|= D1302_RST;
delayus(2);
address&=0xfe;
IO1DIR=IO1DIR|0x02000000;
for(i=0;i<8;i++)
{
temp=address;
temp&=0x01;
address>>=1;
IO0CLR|= D1302_CLK;
delayus(1);
if(1==temp)
{
IO1SET|=D1302_IO;
}
else
{
IO1CLR|=D1302_IO;
}
delayus(1);
IO0SET|= D1302_CLK;
}
set_clock&=0x7f;
temp1=set_clock%10;
temp=set_clock/10;
temp<<=4;
temp1+=temp;
for(i=0;i<8;i++)
{
temp=temp1;
temp&=0x01;
temp1>>=1;
IO0CLR|= D1302_CLK;
delayus(1);
if(1==temp)
{
IO1SET|=D1302_IO;
}
else
{
IO1CLR|=D1302_IO;
}
delayus(1);
IO0SET|= D1302_CLK;
}
IO0CLR|= D1302_RST;
delayus(1);
IO0CLR|= D1302_CLK;
}
void set_time(void)
{
DS1302_init();
}
void D1302_test(void)
{ UART0_SendByte(0xaa);
real_hour_value=read_clock(HOUR_ADDRESS);
if(real_hour_value>23)
real_hour_value=0;
UART0_SendByte(real_hour_value);
real_minute_value=read_clock(MINUTE_ADDRESS);
if(real_minute_value>59)
real_minute_value=0;
UART0_SendByte(real_minute_value);
real_second_value=read_clock(SECOND_ADDRESS);
if(real_second_value>59)
real_second_value=0;
UART0_SendByte(real_second_value);
UART0_SendByte(0x55);
}
void read_rtc(void)
{
real_hour_value=read_clock(HOUR_ADDRESS);
if(real_hour_value>23)
real_hour_value=0;
real_minute_value=read_clock(MINUTE_ADDRESS);
if(real_minute_value>59)
real_minute_value=0;
real_second_value=read_clock(SECOND_ADDRESS);
if(real_second_value>59)
real_second_value=0;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?