找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3328|回复: 5
打印 上一主题 下一主题
收起左侧

DS1302为什么读不出来?

[复制链接]
跳转到指定楼层
楼主
ID:79908 发表于 2015-5-28 19:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char Read_DS1302(unsigned char addr)
{
           unsigned char i,temp,date;
        temp = addr;
        RST = 0;
        delay(1);
        RST = 1;
        SCLK = 1;
        for(i=8;i>0;i--)
        {
                IO = temp&0x01;//先写低位       
                SCLK = 0;     //上升沿有效
                _nop_()        ;
                SCLK = 1; //为下一个数据的输入做准备
                temp = temp>>1;       
        }
        SCLK = 0;
        for(i=8;i>0;i--)
        {
                date |= (unsigned char)IO;
                SCLK = 1;
                _nop_();
                SCLK = 0;
                date = date<<1;                       
        }
        RST = 0;
        SCLK = 0;
        return date/16*10+date%16;  //返回调整好的16进制数
}

程序逻辑有问题吗?

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:81084 发表于 2015-5-28 19:45 | 只看该作者
好像是上升沿才是写地址啊。

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

板凳
ID:79908 发表于 2015-5-28 20:21 | 只看该作者
wthdyfg2004 发表于 2015-5-28 19:45
好像是上升沿才是写地址啊。

我的第一个for就是写地址,用的是上升沿,这样写有什么问题吗?
回复

使用道具 举报

地板
ID:1 发表于 2015-5-28 20:28 | 只看该作者
你现在这个程序读出来的内容是什么?
回复

使用道具 举报

5#
ID:79908 发表于 2015-5-28 20:35 | 只看该作者
admin 发表于 2015-5-28 20:28
你现在这个程序读出来的内容是什么?

读秒、分、时 都是02
回复

使用道具 举报

6#
ID:79908 发表于 2015-5-31 11:39 | 只看该作者
  1. unsigned char Read_DS1302(unsigned char addr)
  2. {
  3.            unsigned char i,temp,date;
  4.         temp = addr;
  5.         RST = 0;
  6.         SCLK = 0;
  7.         _nop_();
  8.         _nop_();
  9.         RST = 1;
  10.         for(i=8;i>0;i--)
  11.         {
  12.                 DIO= (bit)(temp&0x01);//先写低位       
  13.                 SCLK = 0;
  14.                 _nop_();
  15.                 _nop_();     
  16.                 temp>>=1;
  17.                 SCLK = 1;      //上升沿 把数据送入
  18.                 _nop_();
  19.                 _nop_();       
  20.         }
  21.         SCLK = 0;
  22.         _nop_();
  23.         _nop_();
  24.         for(i=8;i>0;i--)
  25.         {
  26.                 date |= (unsigned char)DIO;
  27.                 SCLK = 1;
  28.                 _nop_();
  29.                 _nop_();
  30.                 date<<=1;        //左移 先读低位       
  31.                 SCLK = 0;
  32.                 _nop_();
  33.                 _nop_();       
  34.         }
  35.         SCLK = 0;
  36.         _nop_();
  37.         _nop_();
  38.         RST = 0;
  39.         return ((date&0x70)>>4)+(date&0x0f);  
  40. }

  41. 这个能读出数据,有时并不是程序问题,而是硬件电路问题
复制代码

评分

参与人数 1黑币 +35 收起 理由
admin + 35 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表