标题:ds1302的写、读数据问题
只看楼主
A磊
Rank: 2
等 级:论坛游民
帖 子:7
专家分:17
注 册:2015-10-9
 问题点数:0 回复次数:4 
ds1302的写、读数据问题
大神们求助啊!
1、为什么在写入数据时,地址要先把地位最地位置零呢?,即 addr = addr & 0xFE;     //最低位置零
2、为什么在读数据时,地址为什么又要先把最低位置高呢?,即 addr = addr | 0x01;    //最低位置高   
   具体代码如下:
/*------------------------------------------------
           向DS1302写入一字节数据
------------------------------------------------*/
void Ds1302_Write_Byte(unsigned char addr, unsigned char d)
{

    unsigned char i;
    RST_SET;   
   
    //写入目标地址:addr
    addr = addr & 0xFE;     //最低位置零
    for (i = 0; i < 8; i ++)
        {
        if (addr & 0x01)
            {
            IO_SET;
            }
        else
            {
            IO_CLR;
            }
        SCK_SET;
        SCK_CLR;
        addr = addr >> 1;
        }
   
    //写入数据:d
    for (i = 0; i < 8; i ++)
       {
        if (d & 0x01)
            {
            IO_SET;
            }
        else
            {
            IO_CLR;
            }
        SCK_SET;
        SCK_CLR;
        d = d >> 1;
        }
    RST_CLR;                    //停止DS1302总线
}
/*------------------------------------------------
           从DS1302读出一字节数据
------------------------------------------------*/

unsigned char Ds1302_Read_Byte(unsigned char addr)
{

    unsigned char i;
    unsigned char temp;
    RST_SET;   

    //写入目标地址:addr
    addr = addr | 0x01;//最低位置高
    for (i = 0; i < 8; i ++)
        {
         
        if (addr & 0x01)
           {
            IO_SET;
            }
        else
            {
            IO_CLR;
            }
        SCK_SET;
        SCK_CLR;
        addr = addr >> 1;
        }
   
    //输出数据:temp
    for (i = 0; i < 8; i ++)
        {
        temp = temp >> 1;
        if (IO_R)
           {
            temp |= 0x80;
            }
        else
           {
            temp &= 0x7F;
            }
        SCK_SET;
        SCK_CLR;
        }
   
    RST_CLR;    //停止DS1302总线
    return temp;
}
搜索更多相关主题的帖子: 美国 决策者 美联储 大跌 国际 
2015-10-13 16:01
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
看代码猜呗,对于同一个位置,可能是偶地址用于写入,奇地址用于读取。

同一个仓库有两个大门,一个门只许进,一个门只许出,就这么简单。
2015-10-13 16:23
A磊
Rank: 2
等 级:论坛游民
帖 子:7
专家分:17
注 册:2015-10-9
得分:0 
回复 2楼 rjsp
嗯嗯,秒懂了!非常感谢!
刚刚也去找了一下ds1302的控制字,确实是这样的:地址最低位置0表示写数据,置1表示读数据。

见与不见——情都在那儿
2015-10-13 16:29
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
肯定把低位地址线作为读写开关了。

能编个毛线衣吗?
2015-10-13 16:39
A磊
Rank: 2
等 级:论坛游民
帖 子:7
专家分:17
注 册:2015-10-9
得分:0 
回复 4楼 wmf2014
谢谢!恩,就是这个意思

见与不见——情都在那儿
2015-10-13 16:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-458148-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035017 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved