打印
[51单片机]

DS1302时钟读数据写数据时钟时序疑问求解

[复制链接]
1183|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yexinsuso|  楼主 | 2013-11-28 10:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我的那个开发板上向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;
这几种形式,数码管结果显示是不正确的,为什么写数据的时候可以调换时钟和移位操作的顺序而读数据的时候不行呢??

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

15

主题

26

帖子

0

粉丝