ds1302从13:59:59到14:00:00的问题

[复制链接]
3187|14
 楼主| yezhenyu 发表于 2011-11-19 17:04 | 显示全部楼层 |阅读模式
TI, DMA, AI, dc, DM
现用DS1302做个时钟,就写了一个测试程序,发现小时老是在13点变到14点时读出不对(其他小时点都对)从13点应该变到14点可老是变到4,仿真时看到的寄存器的值。搞了
3天了很是头疼,请各位老师指教,不胜感激。主程序如下:void main(void)
{
unsigned char data time_wbuff[7]={89,89,13,0x0A,0x0B,0x04,0X0B};//时间初始化为11年11月10日星期四13:59:59
  time_write(0x80,time_wbuff);
  while(1)
          {
      time_read(0x81,time_buff);
    }
}
HWM 发表于 2011-11-19 18:21 | 显示全部楼层
本帖最后由 HWM 于 2011-11-19 22:12 编辑

re LZ:

13应该是0x13。
老鱼探戈 发表于 2011-11-19 23:22 | 显示全部楼层
1302读出来的数是16进制的吧
HWM 发表于 2011-11-19 23:26 | 显示全部楼层
应该是BCD码。
xyz769 发表于 2011-11-20 14:13 | 显示全部楼层
  LZ的结贴率为0。。。我还是打酱油先。。。
meteor_lcj 发表于 2011-11-20 18:34 | 显示全部楼层
Ryanhsiung 发表于 2011-11-20 19:51 | 显示全部楼层
  LZ的结贴率为0。。。我还是打酱油先。。。
xyz769 发表于 2011-11-20 14:13

恩,大家都来打酱油!
 楼主| yezhenyu 发表于 2011-11-21 09:39 | 显示全部楼层
那13不管是十进制还是BCD码,变成4总是不对的
 楼主| yezhenyu 发表于 2011-11-21 09:40 | 显示全部楼层
把问题解决了,不就结贴了吗,不解决当然不能结贴啦
123654789 发表于 2011-11-21 09:44 | 显示全部楼层
程序问题

你尝试一下 不设置12小时制
HWM 发表于 2011-11-21 10:02 | 显示全部楼层
那13不管是十进制还是BCD码,变成4总是不对的
yezhenyu 发表于 2011-11-21 09:39

原本是BCD码,给了个13(0xD),估计芯片给你掐掉个10(0xA)自然就是3了。再进位那便就是4。

你的其他数据都是BCD,为何单单那个13搞个特殊呢?

89,89,13,0x0A,0x0B,0x04,0X0B

0x59,0x59,0x0D,0x0B,0x04,0x0B
 楼主| yezhenyu 发表于 2011-11-21 10:02 | 显示全部楼层
我设置的是24小时制,14:59:59变成15:00:00等等都正常,就是13:59:59变成14:00:00不正常
 楼主| yezhenyu 发表于 2011-11-21 10:30 | 显示全部楼层
谢谢HWM,把初始值都设成BCD码后,就一切正常了!这个问题解决了,还是有点疑问,我的秒和分初始值都是89(0x59)是十进制啊,可是都能正常走时变成00,单单小时不成,不知为啥。
HWM 发表于 2011-11-21 10:36 | 显示全部楼层
to 13L:

其实你的分秒已经是BCD(四位二进数表示一位十进数)了。89(0x59)就是十进制数59。
 楼主| yezhenyu 发表于 2011-11-21 10:47 | 显示全部楼层
HWM说的对,是这样,89对应的BCD码是0X59,就是59秒,而13对应的是0X0D芯片不认识这个数所以把前面的给舍掉了,就只剩4了,哎呀,真晕。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

29

主题

352

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部