| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2040 人关注过本帖
标题: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
等 级:版主
威 望:528
帖 子:9007
专家分:53942
注 册: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
快速回复:ds1302的写、读数据问题
数据加载中...
 
   



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

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