微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新手求助,DS1302读出来的都是0XFF?

新手求助,DS1302读出来的都是0XFF?

时间:10-02 整理:3721RD 点击:
/*************************
写一个字节
**************************/
void DS1302_Write(uchar add,uchar dat)
{
         uchar i;
         DS1302_CE=0;
         Delay10us();
         DS1302_SCLK=0;
         Delay10us();
         DS1302_CE=1;
         Delay10us();
         for(i=0;i<8;i++)//最低位开始送
        {
                 DS1302_IO=add&0X01;
                 add=add>>1;
                 Delay10us();
                 DS1302_SCLK=1;
                 Delay10us();
                 DS1302_SCLK=0;
                 Delay10us();
         }
         for(i=0;i<8;i++)
         {
                 DS1302_IO=dat&0X01;
                 dat=dat>>1;
                 Delay10us();
                 DS1302_SCLK=1;
                 Delay10us();
                 DS1302_SCLK=0;
                 Delay10us();
         }
         DS1302_CE=0;
         Delay10us();
}
/*************************
读一个字节
**************************/
uchar DS1302_Read(uchar add)
{
         uchar i,abit,dat;
         DS1302_CE=0;
         Delay10us();
         DS1302_SCLK=0;
         Delay10us();
         DS1302_CE=1;
         Delay10us();
         for(i=0;i<8;i++)//先写地址
        {
                 DS1302_IO=add&0X01;
                 add=add>>1;
                 Delay10us();
                 DS1302_SCLK=1;
                 Delay10us();
                 if(i==7)break;
                 DS1302_SCLK=0;
                 Delay10us();
         }
         for(i=0;i<8;i++)//再读数据
        {
                 DS1302_SCLK=0;
                 Delay10us();
                 abit=DS1302_IO;
                 abit=abit<<i;
                 dat=dat|abit;
                 if(i==7)break;
                 DS1302_SCLK=1;
                 Delay10us();
         }
         DS1302_CE=0;
         Delay10us();
         //////////////////////////////
         DS1302_SCLK=1;
         Delay10us();
         DS1302_IO=0;
         Delay10us();
         DS1302_IO=1;
         Delay10us();
         //////////////////////////////
         return dat;
}
_______________________________________________________________
先说明几点,让大家方向弄对来。
1硬件都是好的,是我代码写错了(我用别人写的试过了,是能读出来的)。
2写保护已经关闭了。
问题一:为什么IO读出来的都是1?貌似根本没读到。
问题二:为什么要加最后面那几句(////里面的)?那几句时序图上并没有出现。
_______________________________________________________________
菜鸟求助,好人一生平安!

你看看你写的时序是不是对的,

问题已解决。
是错在了“读一个字节”里面的第一句:
uchar i,abit,dat=0;
给dat赋个初值程序就能正确显示了。
不过没赋初值不是会自动赋为0么?我看其他人写的没赋也不会出错。
细节,小小的细节别忽略了。

时序图是对了,检查了好几次,没问题的。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top