打印

我的DS1687程序无效,请求帮助

[复制链接]
2129|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
单片机用的是C8051F020,12MHz。不知道为什么,读出来的数据一直是0。看了很久芯片说明也没想出究竟,希望帮我找找问题点。
代码如下:


  //DS1687控制定义
sbit DS1687_CS=P1^4;//DS1687.13
sbit DS1687_ALE=P1^5;//DS1687.14
sbit DS1687_WR=P1^6;//DS1687.15
sbit DS1687_RD=P1^7;//DS1687.17
#define DS1687_DATA P6//AD7~AD0
   //---地址定义--------------------
#define RegisterA 0x0a
#define RegisterB 0x0b
#define Seconds   0x00
#define Minutes   0x02
#define Hours     0x04
#define Day       0x06 //周1~周日
#define Date      0x07 //日
#define Month     0x08
#define Year      0x09 //00~99
#define Century   0x48



  /******************************************************
函 数 名:Read_DS1687
功    能:对DS1687进行读取操作
参数列表:
        unsigned char iAdress  所要读取的数据的地址
********************************************************/
unsigned char Read_DS1687(unsigned char iAdress)
{
     unsigned char Data;
  DS1687_CS=1;DS1687_ALE=1;DS1687_WR=1;DS1687_RD=1;
   DS1687_CS=0;
  DS1687_DATA=iAdress;
  DS1687_ALE=1;DS1687_ALE=0;//ALE下降沿锁入地址
  
  DS1687_RD=0;Data=DS1687_DATA;
  DS1687_RD=1;      
   DS1687_CS=1;DS1687_ALE=1;DS1687_WR=1;DS1687_RD=1;
   return Data;
}


/******************************************************
函 数 名:Writ_DS1687
功    能:对DS1687进行写操作
参数列表:unsigned char iAdress--要写入的地址
    unsigned char iData----要写入的数据
sbit DS1687_CS=P1^4;//DS1687.13
sbit DS1687_ALE=P1^5;//DS1687.14
sbit DS1687_WR=P1^6;//DS1687.15
sbit DS1687_RD=P1^7;//DS1687.17
********************************************************/
Writ_DS1687(unsigned char iAdress,unsigned char iData)
{
  DS1687_CS=1;DS1687_ALE=1;DS1687_WR=1;DS1687_RD=1;
   DS1687_CS=0;
  DS1687_DATA=iAdress;
  DS1687_ALE=1;DS1687_ALE=0;//ALE下降沿锁入地址
  
  DS1687_WR=0;DS1687_DATA=iData;
  DS1687_WR=1;      
   DS1687_CS=1;DS1687_ALE=1;DS1687_WR=1;DS1687_RD=1;
}


main()
{
  ...
     Writ_DS1687(RegisterA,0x30); //启动倒计时计数器,启动内部晶振,启动外部寄存器
     Writ_DS1687(RegisterB,0x86); //将SET位置1,即时间更新被阻止,并且允许程序初始化时钟和日历,2进制,24小时制
     
     Writ_DS1687(Hours,10);Writ_DS1687(Minutes,10);Writ_DS1687(Seconds,50);//时分秒
     Writ_DS1687(Century,20);Writ_DS1687(Year,10); //2010年
     Writ_DS1687(Month,11);Writ_DS1687(Date,8);//
     Writ_DS1687(RegisterB,0x06);//将SET位置0,开启时间更新
  ...

  Display(Read_DS1687(Date));


}

资料的时序图:


相关帖子

沙发
电子小生|  楼主 | 2010-7-8 08:22 | 只看该作者
帮帮忙啊   一个晚上了   都没人理我

使用特权

评论回复
板凳
电子小生|  楼主 | 2010-7-9 09:42 | 只看该作者
众位高手,有没有人用过这个RTC啊,这2天又试了很多次,没招了

使用特权

评论回复
地板
电子小生|  楼主 | 2010-7-9 15:15 | 只看该作者
哎   木有人理我   是我发错了版  还是贸然提问不合这里的规矩?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

30

帖子

0

粉丝