/**************************
文件所用資源
1.端口:P0.4,P0.5,P0.6
2.調(diào)用delay_ms函數(shù)
**************************/
/***********************
1302引腳定義
***********************/
sbit T_RST= P0^4;
sbit T_DAT = P0^5;
sbit T_CLK= P0^6;
/********************************
1302子程序區(qū)
********************************/
/*******************************
DS1302寫入1字節(jié)數(shù)據(jù)
*******************************/
void write_1302_byte(uchar dat)
{
uchar i;
for(i=0;i<8;i++)
{
if(dat&0x01)T_DAT=1;
else T_DAT=0;
T_CLK=1;
dat=dat>>1;
T_CLK=0;
}//for
}
/*******************************
從DS1302讀出1字節(jié)數(shù)據(jù)
*******************************/
uchar read_1302_byte()
{
uchar i,dat;
T_DAT=1;
for(i=0;i<8;i++)
{
dat=dat>>1;
if(T_DAT==1)dat=dat|0x80;
T_CLK=1;
T_CLK=0;
}//for
return dat;
}
/********************************
DS1302寫入指令或數(shù)據(jù)
********************************/
void write_1302(uchar addr,uchar dat)
{
T_RST=0;//RST=0
T_CLK=0;//CLK=0
T_RST=1;//RST=1,啟動數(shù)據(jù)傳輸
write_1302_byte(addr);
write_1302_byte(dat);
T_RST=0;//RST=0
}
/********************************
讀DS1302里對應(yīng)寄存器的數(shù)據(jù)
*********************************/
uchar read_1302(uchar addr)
{
uchar dat;
T_RST=0;//RST=0
T_CLK=0;//CLK=0
T_RST=1;//RST=1,啟動數(shù)據(jù)傳輸
write_1302_byte(addr);
dat=read_1302_byte();
T_RST=0;//RST=0
return dat;
}
/******************************
讀取1302的時間
時間數(shù)據(jù)放在形參數(shù)組里,依次為
年、星期、月、日、時、分、秒
*******************************/
void read_time(uchar *p)
{
uchar i;
for(i=0x8d;i>=0x81;i--)
{
*p++=read_1302(i);
i--;
}
}
/*****************************
初始化1302時間
時間數(shù)據(jù)放在形參數(shù)組里,依次為
年、星期、月、日、時、分、秒
******************************/
void write_time(uchar *p)
{
uchar i;
write_1302(0x8e,0x00);//允許寫操作
for(i=0x8c;i>=0x80;i--)
{
write_1302(i,*p++);
i--;
}
write_1302(0x8e,0x80);//禁止寫操作
}