ds1302读写程序
blliao 发表于 2006-1-4 22:13:24 侃单片机
sbit DS13CS =P3^5; /*DS1302的RST脚片选*/
sbit DS13IO =P3^4; /*DS1302的IO脚数据*/
sbit DS13CLK =P3^3; /*DS1302的SCLK脚脉冲*/
/*向DS1302写一个字节*/
void _wds13byte(uchar _code)
{
uchar i;
DS13CLK =0;
DS13CLK =0;
for(i=0;i<8;i++)
{
if(_code&0x01) DS13IO =1;
else DS13IO =0;
DS13CLK =1;
DS13CLK =1;
DS13CLK =0;
DS13CLK =0;
_code =_code >> 1;
}
}
/*从DS1302读一个字节*/
uchar _rds13byte(void)
{
uchar i,_code;
_code=0;
DS13CLK =0;
DS13CLK =0;
DS13IO =1;
for(i=0;i<8;i++)
{
_code =_code >>1;
if(DS13IO) _code =_code|0x80;
DS13CLK =1;
DS13CLK =1;
DS13CLK =0;
DS13CLK =0;
}
return _code;
}
/*读功能 _code读功能命令 */
uchar readds1302(uchar _code)
{
DS13CS =0; /*关闭DS1302*/
DS13CLK =0;
DS13CLK =0;
DS13CS =1; /*使能DS1302*/
_wds13byte(_code); /*读代码*/
_code=_rds13byte(); /*返回读取数字*/
DS13CLK =1;
DS13CS =0; /*关闭DS1302*/
return _code;
}
/*写功能 fp写的地址,_code写的内容*/
void writeds1302(uchar fp,uchar _code)
{
DS13CS =0; /*关闭DS1302*/
DS13CLK =0;
DS13CLK =0;
DS13CS =1; /*使能DS1302*/
_wds13byte(fp); /*写控制命令*/
_wds13byte(_code); /*写入数据*/
DS13CLK=1;
DS13CS =0; /*关闭DS1302*/
}
/*******DS1302设置快速充电***************/
void ds13_charg(void)
{
writeds1302(0x8e,0x00); /*解除写保护*/
writeds1302(0x90,0xa5); /*单二极管2K电阻充电*/
writeds1302(0x8e,0x10); /*置位写保护*/
}
原文:
阅读(930) | 评论(0) | 转发(0) |