用示波器观察写的时候波形正常,但是读的时候就无法读出正确数据,2星期了实在找不出原因来,求救!
/*************************************************
DS1302 写一个字节
**************************************************/
void DS1302_WriteByte(uchar addr,uchar data)
{
uchar i,temp;
IO_OUT; //数据口设置输出模式,输出数据
RST_0; // RST拉低,数据传送终止
_delay_us(10);
CLK_0; // 逻辑控制有效
_delay_us(10);
RST_1;
_delay_us(10);
temp=addr;
for(i=0;i<8;i++)
{
if(temp&0x01)
IO_1;
else
IO_0;
// _delay_us(500); //调试使用
CLK_1; // 上升沿写入数据
_delay_us(10);
CLK_0;
temp>>=1;
}
temp=0xaa;
IO_OUT;
_delay_us(10);
for(i=0;i<8;i++)
{
if(temp&0x01)
IO_1;
else
IO_0;
// _delay_us(500); //调试使用
CLK_1;
_delay_us(10);
CLK_0;
temp>>=1;
}
RST_0;
}
/*************************************************
DS1302 读一个字节
**************************************************/
uchar DS1302_ReadByte(uchar addr)
{
uchar i,temp;
IO_OUT;
_delay_us(10);
RST_0;
_delay_us(10);
CLK_0;
_delay_us(10);
RST_1;
temp=addr;
_delay_us(10);
for(i=0;i<8;i++)
{
if(temp&0x01)
IO_1;
else
IO_0;
CLK_1;
// _delay_us(10);
CLK_0;
temp>>=1;
}
_delay_us(10);
IO_IN;
temp=0;
for(i=0;i<8;i++)
{
_delay_us(10);
temp>>=1;
if(IO_GET)
temp |= 0x80;
else
temp &= 0x7f;
// _delay_us(500);
CLK_1; // 下降沿读出数据
_delay_us(10);
CLK_0;
}
CLK_0;
IO_OUT;
RST_0;
return temp;
}
全部程序在附件里,请大侠看看,读函数哪里出问题了!期待解答!谢谢! |