关于DS1302读时间问题,我用的单片机是stc12Le5A60S2,11.0952晶振,在while(1)里读时间,读的是乱码?

2024-12-20 05:08:46
推荐回答(3个)
回答1:

stc12Le5A60S2为1T单片机,比普通的快6-12倍,看看时续,该延时的地方要延时呀,不然就会出错的,一般老单片机能用的,在stc12上都不能用,就是有时间的差异

回答2:

void ds_write(uchar dat1,dat2)//ds芯片写入函数
{uchar a2;
ds_ce=0; //拉低 截断数据传输
ds_sclk=0; //时钟线拉低 以便形成上升沿
ds_ce=1; //允许数据传输
ACC=dat1; //将移位寄存器赋值 假设是二进制 0001,0000
for(a2=8;a2>0;a2--) //八次循环
{ ds_io=ACC0; //数据io口 等于移位寄存器第0位
ds_sclk=1; //时钟线拉高 数据被ds1302保存
ds_sclk=0; //将时钟线拉低 以便形成上升沿
ACC=ACC>>= 1; //移位寄存器右移动一位 移动后是二进制 0000,1000 循环八次
}
ACC=dat2; //对移位寄存器赋值
for(a2=8;a2>0;a2--) //循环八次
{ ds_io=ACC0;
ds_sclk=1;
ds_sclk=0;
ACC=ACC>>=1;
}
ds_ce=0; //拉低 截断数据传输
}

uchar ds_rd(uchar dat3)//ds芯片读取函数
{uchar a2;

ds_ce=0;
ds_sclk=0;
ds_ce=1;
ACC=dat3;
for(a2=8;a2>0;a2--)
{ ds_io=ACC0;
ds_sclk=0;
ds_sclk=1;
ACC=ACC>>=1;
}

ds_sclk=0;
for(a2=8;a2>0;a2--)
{ a3=a3>>1;
if(ds_io==1)
a3=a3|0x80;
ds_sclk=1;
ds_sclk=0;
}
ds_ce=0;
return(a3);
}

回答3:

uchar i = 0;
uchar Value = 0;
DS_RST = 0;
DS_CLK = 0;
DS_RST = 1;
for(i = 0; i < 8;i ++)
{
DS_IO = Command & 0x01;
DS_CLK = 0;
DS_CLK = 1;
Command >>= 1;
}