各位前辈帮我看下DS1302的读写功能程序是不是错了?

2019-07-15 17:59发布

/***DS1302WRITEBYTE写一个字节***/
void write_byte(uchar dat)
{
  uchar i;
  for(i=1;i<8;i++)
  {  
     SCK=0;
     SDA=dat&0x01;//提取待写入的D0位
  dat=dat>>1;//右移移位,高位补0为提取下一位数据准备
     SCK=1;//拉高时钟信号,D0位数据写入
  }
}
/***DS1302WRITEDATA写数据***/
void write_data(uchar addr,dat)
{
   RST=0;//禁止数据传输
   delayus(1);
   SCK=0;//拉低时钟信号,为写操作准备上升沿
   delayus(1);
   RST=1;//读写操作时RST必须置高
   delayus(1);
   write_byte(addr);//先写地址
   delayus(1);
   write_byte(dat);
   RST=0;//禁止数据传输
   SCK=1; //释放总线
   SDA=1;
}
/***DS1302READDATA读数据***/
uchar read_data(uchar addr)
{
   uchar dat1,dat2,i;
   RST=0;
   delayus(1);
   SCK=0;
   delayus(1);
   RST=1;
   delayus(1);
   write_byte(addr);
   for(i=0;i<8;i++)
   {
       dat1=dat1>>1;
       if(SDA)
       dat1=dat1|0x80;
    SCK=0;  
    SCK=1;
  
   }
   RST=0;
   SCK=1;
   SDA=1;

   dat2=dat1/16;//BCD转16
   dat2=dat2*10+dat1;
return(dat2) ;
}  
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
2474344106
1楼-- · 2019-07-15 23:06
老师们帮忙看一下    http://wenku.baidu.com/link?url= ... xcFFu-yiE5B202oTFRa    这个是DS1302的数据手册   
2474344106
2楼-- · 2019-07-16 01:03
我自己调了很久了 不知道那里出问题了 就是实现不了功能
2474344106
3楼-- · 2019-07-16 01:31
有时间 的老师帮忙看下 指点我一下 谢谢
陈新元
4楼-- · 2019-07-16 05:52
1302有成熟经典的例程,对比查找下就搞惦了。

一周热门 更多>