ds1320怎么分析读写时序?

2025-11-29 12:10:35

1、看时序图。上升沿读写。

ds1320怎么分析读写时序?

2、读代码:

uchar Ds1302Read(uchar addr)


{
 uchar n,dat,dat1;
 RST = 0;
 _nop_();

 SCLK = 0;//先将SCLK置低电平。


 _nop_();
 RST = 1;//然后将RST(CE)置高电平。
 _nop_();

 for(n=0; n<8; n++)//开始传送八位地址命令


 {
  DSIO = addr & 0x01;//数据从低位开始传送
  addr >>= 1;
  SCLK = 1;//数据在上升沿时,DS1302读取数据
  _nop_();
  SCLK = 0;//DS1302下降沿时,放置数据
  _nop_();
 }
 _nop_();
 for(n=0; n<8; n++)//读取8位数据
 {
  dat1 = DSIO;//从最低位开始接收
  dat = (dat>>1) | (dat1<<7);
  SCLK = 1;
  _nop_();
  SCLK = 0;//DS1302下降沿时,放置数据
  _nop_();
 }

 RST = 0;


 _nop_(); //以下为DS1302复位的稳定时间,必须的。
 SCLK = 1;
 _nop_();
 DSIO = 0;
 _nop_();
 DSIO = 1;
 _nop_();
 return dat; 
}

3、读写时序是一样的。

4、写代码:

void Ds1302Write(uchar addr, uchar dat)


{
 uchar n;
 RST = 0;
 _nop_();

 SCLK = 0;//先将SCLK置低电平。


 _nop_();
 RST = 1; //然后将RST(CE)置高电平。
 _nop_();

 for (n=0; n<8; n++)//开始传送八位地址命令


 {
  DSIO = addr & 0x01;//数据从低位开始传送
  addr >>= 1;
  SCLK = 1;//数据在上升沿时,DS1302读取数据
  _nop_();
  SCLK = 0;
  _nop_();
 }
 for (n=0; n<8; n++)//写入8位数据
 {
  DSIO = dat & 0x01;
  dat >>= 1;
  SCLK = 1;//数据在上升沿时,DS1302读取数据
  _nop_();
  SCLK = 0;
  _nop_(); 
 } 
  
 RST = 0;//传送数据结束
 _nop_();
}
声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢