如下是 DS1302的 读时钟或ram的 子代码。scl为clock。 sda为data(I/0)。 en为RST信号。 uchar read(uchar a2) //a2 为地址 { uchar j,d2=0x00; en=0; scl=0; en=1; for(j=0;j<8;j++) //发送地址 { scl=0; sda=(a2 & 0x01); a2=a2>>1; scl=1; } for(j=0;j<8;j++) //读数据 { if(sda==1) //在这句执行前SCL还是高电平。 {d2=d2|0x80;} //读取数据不是应该是下降沿读取么?但现在高电平直接读取了? else //读完再产生下降沿? 这样写才能用。 //如果先把scl=0 再去判断sda 就不能用。这是为什么? {d2=d2&0x7f;} scl=0; d2=d2>>1; scl=1; } en=0; //以下为DS1302复位的稳定时间 //没有看到什么资料上有什么DS1302什么复位稳定时间这段代码的啊,但少了这段还不能工作。这段代码是干嘛的?有什么资料上写么? scl=0; scl=1; sda=0; sda=1; return d2; }
|