读到的数据一直为0XFF,就是没读到数据(应该是命令写不进去造成的),上拉电阻也加了,晶振也换了好几个,为何如此?
/********************************************************************
* 说明: 先写地址,后写命令/数据
* 功能: 往DS1302写入数据
***********************************************************************/
void sendByte(uchar command, uchar sendDAT)
{
uchar i;
T_RST = 0;
nop();
T_CLK = 0;
nop();
T_RST = 1;
nop();
for(i=0;i<8;i++)
{
T_IO=command&0x01;
nop();
T_CLK = 0;
nop();
//nop();
T_CLK = 1;
nop();
command=command>>1;
}
for(i=0;i<8;i++)
{
T_IO = sendDAT&0x01;
nop();
T_CLK =0;
nop();
//nop();
T_CLK =1;
nop();
sendDAT=sendDAT>>1;
}
T_RST =0;
}
/********************************************************************
* 说明: 先写地址,后读命令/数据
* 功能: 读取DS1302某地址的数据
* 返回值: ucDa :读取的数据
***********************************************************************/
uchar readbyte(uchar ucAddr)
{
uchar i,ucDa=0;
T_RST = 0;
nop();
T_CLK = 0;
nop();
T_RST = 1;
for(i=0;i<8;i++)
{ //nop();
T_IO=ucAddr&0x01;
nop();
T_CLK =0;
nop();
//nop();
T_CLK =1;
//nop();
ucAddr>>=1;
}
//T_IO=1;
for(i=0;i<8;i++)
{
ucDa=ucDa>>1;
nop();
T_CLK=1;
nop();
//nop();
T_CLK=0;
if(T_IO) ucDa|=0x80;
else ucDa|=0x00;
//ucDa=ucDa>>1;
}
T_RST =0;
return(ucDa);
}
/********************************************************************
* 功能: 设置初始时间
********************************************************************/
void init_time()
{
sendByte(0x80,0x09);
sendByte(0x82,0x07);
sendByte(0x84,0x08);
}
void data_control(void)
{
//(init[0]&0x0f)); //读秒
ucCurtime1[0]=sec/16;
ucCurtime1[1]=sec%16;
ucCurtime1[2]=min/16;
ucCurtime1[3]=min%16;
ucCurtime1[4]=hou/16;
ucCurtime1[5]=hou%16;
}
/********************************************************************
* 功能: 读取DS1302当前时间
*********************************************************************/
void read_time(void)
{
sec = readbyte(0x81);
min = readbyte(0x83);
hou = readbyte(0x85);
}
void init_ds1302(uchar dat)
{
//T_RST=1;
//sendByte(0x8e,0x00);
//sendByte(0x90,0xa5); //使能充电功能,一个二极管,2K电阻
if(dat==1) sendByte(0x80,0x00);
else sendByte(0x80,0x80);
//sendByte(0x8e,0x80);
//T_RST=0;
} |