这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » 51单片机时钟DS1302读数据写数据时序疑问求解

共2条 1/1 1 跳转至

51单片机时钟DS1302读数据写数据时序疑问求解

菜鸟
2013-11-28 10:39:25     打赏

我的那个开发板上向DS1302写一字节数据是这样的:
void input(unsigned char byte)//write one byte data to ds1302
{
   unsigned char i;
   for(i=8;i>0;i--)
  {
    IO=byte&0x01;
    CLK=1;
    CLK=0;
    byte>>=1;
   }
}
但是芯片手册不是说写数据是在上升沿吗,这里 CLK先拉高再拉低,不是下降沿写数据吗??这是什么原因??还有这里CLK=1;
                     CLK=0;
                     byte>>=1;

可以改成        byte>>=1;    
                    CLK=1;
                    CLK=0;
数码管显示是正常的,那么再看为什么读数据时为什么不能这样?读一字节数据是这样的:

unsigned char output(void)
{
     unsigned char i,dat=0;
      for(i=8;i>0;i--)
     { 
        dat>>=1;
        if(IO)     dat|=0x80; 
        CLK=1;
        CLK=0;  
  }
  return (dat);

}

这里我也想换时钟的顺序,即改成

CLK=1;

dat>>=1;

if(IO)     dat|=0x80;

CLK=0;

 

dat>>=1;

CLK=1;

if(IO)     dat|=0x80;

CLK=0;

 

dat>>=1;

CLK=1;

CLK=0;

if(IO)    dat|=0x80;

CLK=1;

CLK=0;

dat>>=1; 

if(IO)    dat|=0x80;

 

这几种形式,数码管结果显示是不正确的,为什么写数据的时候可以调换时钟和移位操作的顺序而读数据的时候不行呢??


菜鸟
2013-11-29 14:21:44     打赏
2楼

谢谢回复。但问题就出在这里,我把它改成

for(i=8;i>0;i--)
{
IO=byte&0x01;
CLK=0;

CLK=1;
byte>>=1;
}      //即先低后高,制造上升沿

反而会出现乱码不正确的现象,所以我才疑惑


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]