DS1302读写驱动程序
扫描二维码
随时随地手机看文章
/**************************
文件所用资源
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);//禁止写操作
}