附上源程序,版主进来,帮帮忙,关于DS1302读取问题现象:
秒读对
分 错
时对
日错。。。。。
依次是一个对,一个错
春阳版主,说的时序问题,找了好久,没看到问题所在
附上源程序,帮忙看看
uchar RTOutputByte(void) //读出1字节
{
uchar i;
//T_IO = 1;
for(i = 0; i < 8; i++)
{
T_CLK = 1;
AACC7 = T_IO;
AACC = AACC >>1; /*相当于汇编中的 RRC */
T_CLK = 0;
}
return(AACC);
}
void RTInputByte(uchar d) //发送一字节
{
uchar i;
AACC = d;
for(i = 0; i < 8; i++)
{
T_CLK = 0;
T_IO = AACC0; /*相当于汇编中的 RRC */
AACC = AACC >> 1;
T_CLK = 1;
}
T_IO = 1;
}
uchar R1302(uchar ucAddr)//读一字节,先发地址,再收数据
{
uchar ucData;
T_RST = 0;
T_CLK = 0;
T_RST = 1;
RTInputByte(ucAddr); /* 地址,命令 */
ucData = RTOutputByte(); /* 读1Byte数据 */
T_RST = 0;
T_CLK = 1;
return(ucData);
}
void Read_1302_Time() //读一组数据,秒------年。
{
uchar i;
uchar idata ucCurtime[7];
//uchar idata uc[7];
uchar ucAddr = 0x81;
for (i=0; i<7; i++)
{
ucCurtime = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
//uc = 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]);
}
Uchar BcdToHex(Uchar u8_Par)//译码
{
Uchar u8_Temp;
u8_Temp = 0;
u8_Temp += (u8_Par & 0xf);
u8_Temp += ((u8_Par & 0xf0) >> 4)*10;
return u8_Temp;
} |
|