sbit ds1302_RST =P1^6;
sbit ds1302_IO =P1^5;
sbit ds1302_SCLK=P1^4;
sbit ACC0=ACC^0;
sbit ACC7=ACC^7;
uchar initial_time[]={0x05,0x00,0x09,0x03,0x06,0x02,0x99,0x00};
uchar now_time[5],ring_time[3];
void init_ds1302();
void get_ds1302() ;
void set_ds1302(uchar taddr,uchar *P1302);
uchar read_data_ds1302(uchar taddr);
void write_data_ds1302(uchar taddr,uchar tdata);
void write_Byte(uchar tdata);
uchar read_Byte();
void read_ring();
uchar read_Byte() //功能: 从DS1302读取1Byte数据,返回值: ACC
{
uchar i;
for(i=8;i>0;i--)
{
ACC=ACC>>1;
ACC7=ds1302_IO; //相当于汇编中的 RRC
ds1302_SCLK=1;
ds1302_SCLK=0;
}
return(ACC);
}
void write_Byte(uchar tdata) // 往DS1302写入1Byte数据,返回值: 无
{
uchar i;
ACC=tdata;
for(i=8;i>0;i--)
{
ds1302_IO=ACC0; ds1302_SCLK=1;
ds1302_SCLK=0;
ACC=ACC>>1;
}
}
//相当于汇编中的RRC
void write_data_ds1302(uchar taddr,uchar tdata) //功能: 往DS1302写入数
据,返回值: 无
{
ds1302_RST=0;
ds1302_SCLK=0;
ds1302_RST=1;
write_Byte(taddr); /* 地址,命令 */
write_Byte(tdata); /* 写1Byte数据*/
ds1302_RST=0;
ds1302_SCLK=1;
}
uchar read_data_ds1302(uchar taddr) 值: ucDa :读取的数据
{
//功能: 读取DS1302某地址的数据,返回
uchar tdata;
ds1302_RST=0;
ds1302_SCLK=0;
ds1302_RST=1;
write_Byte(taddr);/* 地址,命令 */
tdata=read_Byte(); /* 读1Byte数据 */
ds1302_RST=0;
ds1302_SCLK=1;
return(tdata);
}
void set_ds1302(uchar taddr,uchar *P1302) 初始时间数组首地址。
{
uchar i;
//功能: 设置初始时间,输入: P1302:
write_data_ds1302(0x8e,0x00); // 控制命令,WP=0,允许写操作
for(i =3; i>0; i--)
{
write_data_ds1302(taddr,*P1302); //秒 分 时 日 月 星期 年
P1302++;
taddr+=2;
}
write_data_ds1302(0x8e,0x80); // 控制命令,WP=1,写保护
}
void get_ds1302() // 功能: 读取DS1302当前时间,输入: now_time: 保存当前
时间数据的数组地址,返回值: 无
{
uchar k;
uchar taddr = 0x81;
for (k=0; k<5; k++)
{
now_time[k] = read_data_ds1302(taddr);//格式为: 秒 分 时 日 月 星期 年
taddr+=2;
}
}
void read_ring()
{
uchar k;
uchar taddr=0xc1;
for(k=0;k<3;k++)
{
ring_time[k]=read_data_ds1302(taddr);
taddr+=2;
}
}
void init_ds1302() //功能: 初始化DS1302
{
ds1302_RST=0;
ds1302_SCLK=0;
}
因篇幅问题不能全部显示,请点此查看更多更全内容