DS1302时钟芯片的读程序问题
时间:10-02
整理:3721RD
点击:
下面的程序,写程序没问题,但是1302读数据的时候把下面那段程序去掉之后LCD显示的时候就出现了一些地方时钟显示?的问题。谁能解释一下
ds_io=0;
_nop_();
_nop_();
ds_io=1;
_nop_();
_nop_();
void write_ds1302_byte(uchar dat)//向DS1302写一个字节
{
uchar i;
for(i=0;i<8;i++)
{
sck=0;
_nop_();_nop_();
ds_io=dat&0x01;
_nop_();_nop_();
sck=1;
dat=dat>>1;
}
}
void write_ds1302(uchar add,uchar dat)//向DS1302写数据
{
rst=0;
_nop_();
sck=0;
_nop_();
rst=1;
_nop_();
write_ds1302_byte(add);
write_ds1302_byte(dat);
rst=0;
}
uchar read_ds1302(uchar add)//从1302读数据
{
uchar i,tmp=0;
rst=0;
_nop_();
sck=0;
_nop_();
rst=1;
_nop_();
write_ds1302_byte(add);
for(i=0;i<8;i++)
{
if(ds_io)
tmp=tmp|0x80;
sck=0;
tmp=tmp>>1;
_nop_();
_nop_();
_nop_();
sck=1;
}
rst=0;//下面DS1302复位稳定时间,必不可少!
_nop_();
sck=0;
_nop_();
ds_io=0;
_nop_();
_nop_();
ds_io=1;
_nop_();
_nop_();
return tmp;
}
ds_io=0;
_nop_();
_nop_();
ds_io=1;
_nop_();
_nop_();
void write_ds1302_byte(uchar dat)//向DS1302写一个字节
{
uchar i;
for(i=0;i<8;i++)
{
sck=0;
_nop_();_nop_();
ds_io=dat&0x01;
_nop_();_nop_();
sck=1;
dat=dat>>1;
}
}
void write_ds1302(uchar add,uchar dat)//向DS1302写数据
{
rst=0;
_nop_();
sck=0;
_nop_();
rst=1;
_nop_();
write_ds1302_byte(add);
write_ds1302_byte(dat);
rst=0;
}
uchar read_ds1302(uchar add)//从1302读数据
{
uchar i,tmp=0;
rst=0;
_nop_();
sck=0;
_nop_();
rst=1;
_nop_();
write_ds1302_byte(add);
for(i=0;i<8;i++)
{
if(ds_io)
tmp=tmp|0x80;
sck=0;
tmp=tmp>>1;
_nop_();
_nop_();
_nop_();
sck=1;
}
rst=0;//下面DS1302复位稳定时间,必不可少!
_nop_();
sck=0;
_nop_();
ds_io=0;
_nop_();
_nop_();
ds_io=1;
_nop_();
_nop_();
return tmp;
}