标题:
DS1302为什么读不出来?
[打印本页]
作者:
电子爱好者life
时间:
2015-5-28 19:01
标题:
DS1302为什么读不出来?
unsigned char Read_DS1302(unsigned char addr)
{
unsigned char i,temp,date;
temp = addr;
RST = 0;
delay(1);
RST = 1;
SCLK = 1;
for(i=8;i>0;i--)
{
IO = temp&0x01;//先写低位
SCLK = 0; //上升沿有效
_nop_() ;
SCLK = 1; //为下一个数据的输入做准备
temp = temp>>1;
}
SCLK = 0;
for(i=8;i>0;i--)
{
date |= (unsigned char)IO;
SCLK = 1;
_nop_();
SCLK = 0;
date = date<<1;
}
RST = 0;
SCLK = 0;
return date/16*10+date%16; //返回调整好的16进制数
}
程序逻辑有问题吗?
作者:
wthdyfg2004
时间:
2015-5-28 19:45
好像是上升沿才是写地址啊。
作者:
电子爱好者life
时间:
2015-5-28 20:21
wthdyfg2004 发表于 2015-5-28 19:45
好像是上升沿才是写地址啊。
我的第一个for就是写地址,用的是上升沿,这样写有什么问题吗?
作者:
admin
时间:
2015-5-28 20:28
你现在这个程序读出来的内容是什么?
作者:
电子爱好者life
时间:
2015-5-28 20:35
admin 发表于 2015-5-28 20:28
你现在这个程序读出来的内容是什么?
读秒、分、时 都是02
作者:
电子爱好者life
时间:
2015-5-31 11:39
unsigned char Read_DS1302(unsigned char addr)
{
unsigned char i,temp,date;
temp = addr;
RST = 0;
SCLK = 0;
_nop_();
_nop_();
RST = 1;
for(i=8;i>0;i--)
{
DIO= (bit)(temp&0x01);//先写低位
SCLK = 0;
_nop_();
_nop_();
temp>>=1;
SCLK = 1; //上升沿 把数据送入
_nop_();
_nop_();
}
SCLK = 0;
_nop_();
_nop_();
for(i=8;i>0;i--)
{
date |= (unsigned char)DIO;
SCLK = 1;
_nop_();
_nop_();
date<<=1; //左移 先读低位
SCLK = 0;
_nop_();
_nop_();
}
SCLK = 0;
_nop_();
_nop_();
RST = 0;
return ((date&0x70)>>4)+(date&0x0f);
}
这个能读出数据,有时并不是程序问题,而是硬件电路问题
复制代码
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1