我读的ds1302的数据有个奇怪的现象
秒 对
分 错
时 对
日 错
月 对
周 错
年 对
下一次读时
秒 错
分 对
时 错
日 对
月 错
周 对
年 错
下一次读取
又反过来
源程序如下:
void Read_1302_Time()
{
uchar i;
uchar idata ucCurtime[7];
uchar idata uc[7];
uchar ucAddr = 0x81;
for (i=0; i<7; i++)
{
ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
uc[i] = R1302(ucAddr);//这里加了一句测试用的语句
ucAddr += 2;
}
Time_1302.u8_Second = BcdToHex(ucCurtime[0]);
Time_1302.u8_Minute = BcdToHex(ucCurtime[1]);
Time_1302.u8_Hour = BcdToHex(ucCurtime[2]);
Date_1302.u8_day = BcdToHex(ucCurtime[3]);
Date_1302.u8_month = BcdToHex(ucCurtime[4]);
Date_1302.u8_week = BcdToHex(ucCurtime[5]);
Date_1302.u8_year = BcdToHex(ucCurtime[6]);
}
在第10行的地方,加了一句uc[i] = R1302(ucAddr);(uc[i]是没用的数组)
后,可以实现,读出准确数据。
但是,系统初始化时,有时会出错,正好反过来了,
也就是uc[i] = R1302(ucAddr);(uc[i]里全是有用的数据,ucCurtime[i]里成乱码了)
为什么?
纠结了两天了,急需解决啊。 |