|
STC52+DS1302读出数据都是FF,求助
[复制链接]
各位善良的大哥哥大姐姐们,帮帮偶吧,这是偶的部分代码
void InputByte(unsigned char byte1) //被FF痛苦的折磨了一整天之后,这时突然想到了用SBUF来将写入的函数看一下
{ //记结果发现写进去的都是FF,要死了
unsigned char i,ucdata; //结果写进去的调对了,读出来的还是FF,又不能用VC6.0试一下,晕死
for(i=8;i>0;i--) //这里通过循环将值加到ucdata上去
{
DS1302_SCLK=0;
delay(5);
DS1302_IO=(bit)(byte1&0x01);
delay(5);
ucdata>>=1;
delay(5);
if(DS1302_IO)ucdata|=0x80;
DS1302_SCLK=1;
delay(5);
byte1>>=1;
}
ES=0;
SBUF=ucdata;while(TI==0);TI=0; //用SBUF来看看到底读出来了什么数据
ES=1;
}
void write_ds1302(unsigned char addr,unsigned char TDat) //write应该是没有问题的,检查写的东西都正常写进去了
{
DS1302_RST=0;
_nop_();
DS1302_SCLK=0;
_nop_();
DS1302_RST=1;
_nop_();
InputByte(addr);
_nop_();
InputByte(TDat);
DS1302_SCLK=1;
_nop_();
DS1302_RST=0;
}
unsigned char OutputByte(void) //问题就出在这
{
unsigned char i, ucdat=0,a=0;
for(i=8;i>0;i--)
{
ucdat>>=1;
DS1302_SCLK=0;
delay(5);
if(DS1302_IO)ucdat|=0x80; //这里应该是IO口一直都是1,因为我用if(((a=DS1302_IO)+1)%2)ucdat|=0x80;读出来的数据全部都是00了
DS1302_SCLK=1;
delay(5);
ES=0;
SBUF=ucdat;while(TI==0);TI=0;
ES=1;
}
ES=0;
SBUF=ucdat;while(TI==0);TI=0;
ES=1;
return(ucdat);
}
unsigned char read_ds1302(unsigned char addr) //大概这里是没有问题的
{
unsigned char timedata;
DS1302_RST=0;
_nop_();
DS1302_CLK=0;
_nop_();
DS1302_RST=1;
_nop_();
_nop_();
InputByte(addr);
timedata=OutputByte();
DS1302_RST=0;
return(timedata);
}
|
|