我的那个开发板上向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;
这几种形式,数码管结果显示是不正确的,为什么写数据的时候可以调换时钟和移位操作的顺序而读数据的时候不行呢??
|