📄 ds1302.c
字号:
#include <iom128v.h>
#include <Control.h>
extern unsigned char time[7];
//---------------------------------------------------------
// NAME: w_com()
// ENTRY: flg,add1
// RETURN: void
// MODIFY: 2004.2.3
//--------------------------------------------------------
void w_com(unsigned char flg,unsigned char add1)
{
unsigned char i,temp1,temp;
PORTD|=0X40; //DS1302_RST = 1;
temp = 0;
temp1 = 0;
if(!flg)
{
temp1 = (add1<<1)|0x80;
temp = temp1&0xfe;
}
else
temp = (add1<<1)|0x81;
for( i=0;i<8;i++ )
{
if( temp&0x01 )
{
PORTD&=~0X10;
PORTD|=0X20;
}
else
{
PORTD&=~0X10;
PORTD&=~0X20;
}
NOP_OP();
NOP_OP();
PORTD|=0X10;
NOP_OP();
temp >>= 1;
}
}
//---------------------------------------------------------
// NAME: w_cdat()
// ENTRY: add1,dat1
// RETURN: void
// MODIFY: 2004.2.3
//--------------------------------------------------------
void w_cdat(unsigned char add1,unsigned char dat1)
{
unsigned char i;
DDRD|=0X70;
NOP_OP();
w_com(0, add1);
for( i=0;i<8;i++ )
{
PORTD&=~0X10;//DS1302_SCL = 0;
if( dat1&0x01 )
PORTD|=0X20;//DS1302_SDA = 1;
else
PORTD&=~0X20;//DS1302_SDA = 0;
dat1 >>= 1;
PORTD|=0X10;//DS1302_SCL = 1;
NOP_OP();
NOP_OP();
}
PORTD&=~0X40;//DS1302_RST = 0;
PORTD&=~0X10;//DS1302_SCL = 0;
NOP_OP();
NOP_OP();
}
//---------------------------------------------------------
// NAME: r_cdat()
// ENTRY: add1
// RETURN: data1
// MODIFY: 2004.2.3
//--------------------------------------------------------
unsigned char r_cdat( unsigned char add1 )
{
unsigned char i,data1;
DDRD|=0X70;
w_com(1, add1);
for( i=0;i<8;i++ )
{
PORTD|=0X10;//DS1302_SCL = 1;
NOP_OP();
PORTD&=~0X10;//DS1302_SCL = 0;
data1 >>= 1;
DDRD&=~0X20;
delayus(20);
if( PIND&0X20 ) data1 |= 0x80;
}
PORTD&=~0X40;//DS1302_RST = 0;
PORTD&=~0X10;//DS1302_SCL = 0;
NOP_OP();
return (data1);
}
//---------------------------------------------------------
// NAME: set_time()
// ENTRY: sec,min,hour
// RETURN: void
// MODIFY: 2004.2.3
//--------------------------------------------------------
void set_time(unsigned char sec,unsigned char min,unsigned char hour)
{
w_cdat(0x00,sec&0x7f);
w_cdat(0x01,min&0x7f);
w_cdat(0x02,hour&0x3f);
}
//---------------------------------------------------------
// NAME: set_date()
// ENTRY: date,mon,day,year
// RETURN: void
// MODIFY: 2004.2.3
//--------------------------------------------------------
void set_date(unsigned char date,unsigned char mon,unsigned char day,unsigned char year)
{
w_cdat(0x03,date&0x3f);
w_cdat(0x04,mon&0x1f);
w_cdat(0x05,day&0x07);
w_cdat(0x06,year);
}
//---------------------------------------------------------
// NAME: DS1302_init()
// ENTRY: void
// RETURN: void
// MODIFY: 2004.2.3
//--------------------------------------------------------
void DS1302_init( void )
{
DDRD|=0X70;
PORTD&=~0X40; //DS1302_RST = 0;
PORTD&=~0X10; //DS1302_SCL = 0;
w_cdat(0x07,0x00); //disable the write protect
w_cdat(0x00,0x00); //enable the clock
w_cdat(0x02,0x00); //set the clock 24 hour mode
w_cdat(0x08,0xaa); //set the trickle charge mode
}
//---------------------------------------------------------
// NAME: read_time_date()
// ENTRY: void
// RETURN: void
// MODIFY: 2004.2.3
//--------------------------------------------------------
void read_time_date(void)
{
time[0] = r_cdat(0x00)&0x7f;
time[1] = r_cdat(0x01)&0x7f;
time[2] = r_cdat(0x02)&0x3f;
time[3] = r_cdat(0x03)&0x3f;
time[4] = r_cdat(0x04)&0x1f;
time[5] = r_cdat(0x05)&0x07;
time[6] = r_cdat(0x06);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -