1. 无法初始化写入的时间值
void InitDS1302()
{
unsigned char i = 0;
unsigned char InitTime[7] = {0x23,
0x34,
0x10,
0x31,
0x05,
0x03,
0x23};
DS1302_RST = 0;
DS1302_SCLK = 0;
// i = DS1302Read(0);
// if ((i & 0x80) != 0)
//{
// LCD_ShowString(0, 0, "hello");
DS1302Write(7, 0x00);
for (i = 0; i < 7; i++)
{
DS1302Write(i, InitTime[i]);
}
}
读取寄存器0的值再进行判断,后面一直无法解除写保护,初值无法写入。目前没找到原因,只能把判断去掉,直接写入解除保护。
2. 调试发现读取初值一直有错误,比如读取0寄存器的秒数,一直是83或者85什么的。调试过程中发现,DS1302Read()函数局部变量dat未赋初值有影响。
unsigned char DS1302RedaByte()
{
unsigned char mask;
unsigned char dat = 0;//此处如果不赋值,读取的数据一直不对,其他函数如果局部变量未赋值,未发现影响。
for (mask = 0x01; mask != 0; mask <<= 1)
{
if (DS1302_IO != 0)
{
dat |= mask;
}
DS1302_SCLK = 1;
DS1302_SCLK = 0;
}
return dat;
}
3.定义的T0定时器,不工作,每隔200ms的设置一直未启动。
函数内部设置的局部变量数据类型有错误,应该设置为long,定时器中断内部计数值应该为int类型。