/**************************
文件所用资源
1.端口:P0.4,P0.5,P0.6
2.调用delay_ms函数
**************************/
/***********************
1302引脚定义
***********************/
sbit T_RST = P0^4;
sbit T_DAT = P0^5;
sbit T_CLK = P0^6;
/********************************
1302子程序区
********************************/
/*******************************
DS1302写入1字节数据
*******************************/
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字节数据
*******************************/
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写入指令或数据
********************************/
void write_1302(uchar addr,uchar dat)
{
T_RST=0; //RST=0
T_CLK=0; //CLK=0
T_RST=1; //RST=1,启动数据传输
write_1302_byte(addr);
write_1302_byte(dat);
T_RST=0; //RST=0
}
/********************************
读DS1302里对应寄存器的数据
*********************************/
uchar read_1302(uchar addr)
{
uchar dat;
T_RST=0; //RST=0
T_CLK=0; //CLK=0
T_RST=1; //RST=1,启动数据传输
write_1302_byte(addr);
dat=read_1302_byte();
T_RST=0; //RST=0
return dat;
}
/******************************
读取1302的时间
时间数据放在形参数组里,依次为
年、星期、月、日、时、分、秒
*******************************/
void read_time(uchar *p)
{
uchar i;
for(i=0x8d;i>=0x81;i--)
{
*p++=read_1302(i);
i--;
}
}
/*****************************
初始化1302时间
时间数据放在形参数组里,依次为
年、星期、月、日、时、分、秒
******************************/
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); //禁止写操作
}
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』