uchar i; for(i=8;i>0;i--) {
ACC=ACC>>1;
ACC7=ds1302_IO;//由于ds1302读数据的时候,第一个数据读取在发一个Byte命令后,在第八位的下降沿 ds1302_SCLK=1;
ds1302_SCLK=0;//产生下降沿输出一位数据 }
return(ACC); }
void write_Byte(uchar tdata)//向1302中写入一字节数据 {
uchar i; ACC=tdata; for(i=8;i>0;i--) {
ds1302_IO=ACC0; ds1302_SCLK=1;
ds1302_SCLK=0;//产生上升沿输入数据 ACC=ACC>>1; }
}
void write_data_ds1302(uchar taddr,uchar tdata)//向1302中写入 地址为taddr的空间 写入数据tdata {
ds1302_RST=0; ds1302_SCLK=0; ds1302_RST=1; write_Byte(taddr); write_Byte(tdata); ds1302_RST=0; ds1302_SCLK=1; }
uchar read_data_ds1302(uchar taddr)//从1302中读出地址为taddr的空间数据 {
uchar tdata; ds1302_RST=0; ds1302_SCLK=0; ds1302_RST=1; write_Byte(taddr); tdata=read_Byte(); ds1302_RST=0; ds1302_SCLK=1; return(tdata);
}
void set_ds1302(uchar *P1302)// {
uchar i;
uchar taddr = 0x80;
write_data_ds1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/ for(i =7; i>0; i--) {
write_data_ds1302(taddr,*P1302); /* 秒 分 时 日 月 星期 年 */ P1302++; taddr+=2; }
write_data_ds1302(0x8e,0x80); /* 控制命令,WP=1,写保护*/ }
void get_ds1302() {
uchar k;
uchar taddr = 0x81; for (k=0; k<7; k++) {
now_time[k] = read_data_ds1302(taddr);/*格式为: 秒 分 时 日 月 星期 年 */