STC52+DS1302读出数据都是FF,求助

2019-03-24 18:45发布

各位善良的大哥哥大姐姐们,帮帮偶吧,这是偶的部分代码
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);
} 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
yan1994
1楼-- · 2019-03-24 22:54
求人来看看

一周热门 更多>