矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 2975|回复: 5

从DS1302读出来的数据,怎么两处处理方式有差别

[复制链接]
     
发表于 2019-8-30 16:17:45 | 显示全部楼层 |阅读模式
从从DS1302读出来的数据,放到结构体上,然后对数据进行处理。
这是我用的方法:
ledbuf[6]=ledchar[((buftime.sec)/10)];  //取出秒的10位数
ledbuf[7]=ledchar[(buftime.sec)%10];  //取出秒的个位数
为什么读出来的数据不对呢,时本来是21点,显示的却是33点。秒经常会跳字

后来改用下面的程序,显示才正常了:
ledbuf[6]=ledchar[((buftime.sec)>>4)];
ledbuf[7]=ledchar[(buftime.sec)&0x0f];

     
发表于 2019-8-30 17:04:56 | 显示全部楼层
没去查DS1302的数据手册,但从你的描述看,1302的秒数值应该是以BCD码形式存放的,也就是高4位放十位数,低4位放个位数,如你例子中说的21点,取出来就是十六进制的21(高4位是2,低4位是1),转换成十进制正好是33。
回复 支持 反对

使用道具 举报

     
发表于 2019-8-30 17:24:24 | 显示全部楼层
再补充一下
你的二个处理方式实际上是不一样的,第一种是将数值直接处理成十进制的二位数,第二种是按BCD方式将数值处理成十进制的2位数,本来二种处理方法就是不一样的
回复 支持 反对

使用道具 举报

     
发表于 2019-8-30 17:58:10 | 显示全部楼层
是BCD码的,你的转码程序不对
回复 支持 反对

使用道具 举报

     
 楼主| 发表于 2019-8-30 19:04:22 | 显示全部楼层
谢谢,果然是高手,这么一说,我就明白了
高手就是高手,有些在网上找的教程,说的也不对

回复 支持 反对

使用道具 举报

     
发表于 2019-8-30 19:57:56 | 显示全部楼层
本帖最后由 fshwen 于 2019-8-30 20:00 编辑

当初搞PCF8583也和楼主一样犯了同样的错误,仔细看了芯片文档才知道是8421BCD码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-5-1 04:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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