打印

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

[复制链接]
2160|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码。

使用特权

评论回复
5
xyz769| | 2011-11-20 14:13 | 只看该作者
  LZ的结贴率为0。。。我还是打酱油先。。。

使用特权

评论回复
6
meteor_lcj| | 2011-11-20 18:34 | 只看该作者
:)

使用特权

评论回复
7
Ryanhsiung| | 2011-11-20 19:51 | 只看该作者
  LZ的结贴率为0。。。我还是打酱油先。。。
xyz769 发表于 2011-11-20 14:13

恩,大家都来打酱油!

使用特权

评论回复
8
yezhenyu|  楼主 | 2011-11-21 09:39 | 只看该作者
那13不管是十进制还是BCD码,变成4总是不对的

使用特权

评论回复
9
yezhenyu|  楼主 | 2011-11-21 09:40 | 只看该作者
把问题解决了,不就结贴了吗,不解决当然不能结贴啦

使用特权

评论回复
10
123654789| | 2011-11-21 09:44 | 只看该作者
程序问题

你尝试一下 不设置12小时制

使用特权

评论回复
11
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

使用特权

评论回复
12
yezhenyu|  楼主 | 2011-11-21 10:02 | 只看该作者
我设置的是24小时制,14:59:59变成15:00:00等等都正常,就是13:59:59变成14:00:00不正常

使用特权

评论回复
13
yezhenyu|  楼主 | 2011-11-21 10:30 | 只看该作者
谢谢HWM,把初始值都设成BCD码后,就一切正常了!这个问题解决了,还是有点疑问,我的秒和分初始值都是89(0x59)是十进制啊,可是都能正常走时变成00,单单小时不成,不知为啥。

使用特权

评论回复
14
HWM| | 2011-11-21 10:36 | 只看该作者
to 13L:

其实你的分秒已经是BCD(四位二进数表示一位十进数)了。89(0x59)就是十进制数59。

使用特权

评论回复
15
yezhenyu|  楼主 | 2011-11-21 10:47 | 只看该作者
HWM说的对,是这样,89对应的BCD码是0X59,就是59秒,而13对应的是0X0D芯片不认识这个数所以把前面的给舍掉了,就只剩4了,哎呀,真晕。

使用特权

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

本版积分规则

29

主题

352

帖子

0

粉丝