找回密码
 注册
关于网站域名变更的通知
查看: 1138|回复: 8
打印 上一主题 下一主题

DS1302真是麻烦啊,里面的bcd转换我看的头都大了

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-4-18 10:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
本帖最后由 码农 于 2019-4-18 10:19 编辑
7 q8 _5 |( G4 e3 z0 @! F6 T  G" p4 `8 |- R0 C# H
DS1302真是麻烦啊,里面的bcd转换我看的头都大了0 W9 D. ]# h/ ~4 T' r- L1 y
$ t7 Z; \" m' f0 a
正常不是把用户输出的十进制数据转为BCD码才能被DS1302识别吗<blockquote>/*------------------------------------------------
3 W* C4 d! f. h0 |
3 ~4 b, i: Q% _/ I- \) E' \* O, e5 r. g7 L$ A8 ?& |
前面数组定义是) Z0 u7 @3 L; h# A' c
unsigned char time_buf1[8] = {20,15,11,6,20,59,00,5};//空年月日时分秒周* j. c! O/ @4 |- }% w  B; S+ w4 \+ i
unsigned char time_buf[8] ; ' J( U5 l; v# N. A/ y0 q* Y
麻烦大家看一下这个函数吧,这个函数的功能应该就是把十进制的时间改为二进制然后写入DS1302
4 B& N5 }7 _( r4 x7 x所以注释的BCD码处理应该指的就是十进制转bcd码,可是安装这个算法完全算不出来BCD码,我们取i=1吧,那么就是
. M0 S. `9 V" Y* u- O
                tmp=time_buf1[1]/10;                            //15/10=1=tmp
                time_buf[1]=time_buf1[1]%10;             //15%10=5=time_buf[1]
                time_buf[1]=time_buf[1]+tmp*16;       //5+1*16=21=time_buf[1]
这个21很明显绝不是BCD码啊,还是我里面什么想错了?

& {& j, r3 {) Y  N
2 n% m2 Q5 R, @/ |0 h

该用户从未签到

2#
发表于 2019-4-18 10:28 | 只看该作者
其实你程序应该是对的:15H = 21,所以15H转换为BCD码就是21H.
! }# u2 i, _3 S, |1 Y- c) C" O$ C4 D) R+ O- w. q0 k

8 i! P/ h* ~% O例如:11H要转换为BCD码,结果应该为11H = 17(十进制) ->17H(BCD码);8 K7 p+ u# k  `" n5 ^/ b! d" _
所以,可以这么算:11H/10 =1;11H%10 = 7; BCD码等于1*16+7=17H。
# \0 }  R  k8 u( Y& V7 Q3 d程序应该为- n5 X8 p  ?2 U
unsigned char Hex2BCD(unsigned char hex)- I* W" v: z$ c* N; f
{% s5 N! x. r) G" \$ h, ?
        unsigned char res;: T! Q8 s5 ?( @8 |
        res = hex/10*16+hex%10;% D0 r8 h& k0 J2 T1 E# Q0 e
        ruturn res;
' w  _$ M' _; y/ f) c  B}

点评

BCD码不是一个四位的二进制数字吗?17H是怎么表示BCD码?而且这个BCD码处理后是要串行输出的,单单17H是怎样串行输出的呢?一口气问了两句,还望解答  详情 回复 发表于 2019-4-18 10:34

该用户从未签到

3#
 楼主| 发表于 2019-4-18 10:34 | 只看该作者
helendcany 发表于 2019-4-18 10:28
0 ~/ C5 j( d4 Z( ~8 }& L其实你程序应该是对的:15H = 21,所以15H转换为BCD码就是21H.

' ^+ g* p9 M+ s1 g5 m: LBCD码不是一个四位的二进制数字吗?17H是怎么表示BCD码?而且这个BCD码处理后是要串行输出的,单单17H是怎样串行输出的呢?一口气问了两句,还望解答
; x, J- b% i/ X

点评

附注:压缩BCD码与非压缩BCD码的区别—— 压缩BCD码的每一位用4位二进制表示,一个字节表示两位十进制数。例如10010110B表示十进制数96D;非压缩BCD码用1个字节表示一位十进制数,高四位总是0000,低4位的0000~1001  详情 回复 发表于 2019-4-18 11:13

该用户从未签到

4#
发表于 2019-4-18 11:13 | 只看该作者
码农 发表于 2019-4-18 10:34
( J2 {, `) r$ YBCD码不是一个四位的二进制数字吗?17H是怎么表示BCD码?而且这个BCD码处理后是要串行输出的,单单17H是 ...
! l' ^) g# |" j3 y
附注:压缩BCD码与非压缩BCD码的区别—— 压缩BCD码的每一位用4位二进制表示,一个字节表示两位十进制数。例如10010110B表示十进制数96D;非压缩BCD码用1个字节表示一位十进制数,高四位总是0000,低4位的0000~1001表示0~9.例如00001000B表示十进制数8.1 K/ L4 m/ Y9 S% [

点评

还是不明白计算出来的17H是怎么进行串口输出的,难道还要转一遍,把1和7再转成高四位和低四位二进制数字吗。不过明白了17H就是压缩BCD码了,只是那个算BCD码的算法是根据什么式子变得?我知道它是分别把个位和十位提  详情 回复 发表于 2019-4-18 11:22

该用户从未签到

5#
 楼主| 发表于 2019-4-18 11:22 | 只看该作者
helendcany 发表于 2019-4-18 11:13* Z2 T" p; ]& U  Q
附注:压缩BCD码与非压缩BCD码的区别—— 压缩BCD码的每一位用4位二进制表示,一个字节表示两位十进制数 ...

4 {; u- F$ m  j2 U还是不明白计算出来的17H是怎么进行串口输出的,难道还要转一遍,把1和7再转成高四位和低四位二进制数字吗。不过明白了17H就是压缩BCD码了,只是那个算BCD码的算法是根据什么式子变得?我知道它是分别把个位和十位提出来,为什么最后个位还要加上十位乘16呢& z$ c: K! g  {

点评

若DS1302输出的是BCD码,你要转成为十进制,则 unsigned char res BCD2HEX(unsigned char bcd) { unsigned char res; res = bcd/16 *10 +bcd%16; return res; }; 例如:BCD码17H,则它代表的是  详情 回复 发表于 2019-4-18 11:34

该用户从未签到

6#
发表于 2019-4-18 11:34 | 只看该作者
码农 发表于 2019-4-18 11:22
! j. `2 l& f5 r$ l7 W: [: r( ]还是不明白计算出来的17H是怎么进行串口输出的,难道还要转一遍,把1和7再转成高四位和低四位二进制数字 ...

. J$ ~& O% f! G* v5 B" P7 a, W若DS1302输出的是BCD码,你要转成为十进制,则
- o$ g. ^( B. N& Q' a' W, sunsigned char res BCD2HEX(unsigned char bcd)
! W  Q5 N0 d; ^3 e6 p& z{+ C6 a7 e3 j0 d9 O1 F* A
     unsigned char res;9 V2 H3 o. ^8 q4 z
     res = bcd/16 *10 +bcd%16;
  I0 \8 K" E. v7 e     return res;3 r; H$ j# [( ?
};- ^! d5 x3 h' e: ^0 L5 N! B8 T/ k
例如:BCD码17H,则它代表的是十进数17,而十进数17 = 11H;
) r; ^. t; L; p7 r4 @. j计算过程为:分离出17H的高四位(为1),低四为(为7),再1*10 +7 = 17 =11H
" z2 f& p- X$ I2 z9 z

点评

说的太好了。  详情 回复 发表于 2019-4-19 09:52

该用户从未签到

8#
发表于 2019-4-19 09:52 | 只看该作者
helendcany 发表于 2019-4-18 11:34
) H" e. b; e+ R- W! a3 P7 F若DS1302输出的是BCD码,你要转成为十进制,则/ b% b0 W( p# c- L. x) X/ J
unsigned char res BCD2HEX(unsigned char bcd)
& u$ U: E( K, Y: D# g1 j{

* X, ?6 E, k  Z' \说的太好了。8 `# n- E7 w: i2 Z1 P. j, l  ^& z, y
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-8-23 14:58 , Processed in 0.140625 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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