单片机ds1302 读取程序问题

void ds1302_write(uint8 dat)
{
uint8 mask;
SCLK=0;
for(mask=0x01;mask!=0;mask<<=1)
{
if(dat&mask!=0) DSIO=1;
else DSIO=0;
SCLK=1;
NOP;
SCLK=0;
}
}
uint8 ds1302_read()
{
uint8 i,date=0x00;

for(i=0;i<8;i++)
{

if(DSIO==1) date|=0x80;
date>>=1;
SCLK=1;
NOP;
SCLK=0;
NOP;
}
return date;
}
uint8 read_byte(uint8 addr)
{
uint8 time;
CE=0;
NOP;
SCLK=0;
NOP;
CE=1;
NOP;
ds1302_write(addr);
time=ds1302_read();
CE=0;
NOP;
SCLK=1;
NOP;
DSIO=0;
NOP;
DSIO=1;
return time;
}
哪里有问题 ? 在LCD上显示的都是问号。。 其他部分都没问题 求大神

第1个回答  推荐于2016-08-14
读函数出错,
for(i=0;i<8;i++)
{
if(DSIO==1) date|=0x80;
date>>=1;
……
}
假设现在读 最后一位,i=7;
读到 SDIO ,然后 赋值给 date 最高位,到此,8个位就 全了。
可惜,后面还有 一条 ,date>>=1,最低位 不见了。本回答被提问者和网友采纳
第2个回答  2015-04-01
需要给你完成一份吗追问

不用 我就想知道哪里错了 我的和光盘里带的程序差不多就是把他拆分了一下
如果能帮我指出错误的话十分感谢

追答

好的

相似回答