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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 码农 于 2019-4-18 10:19 编辑
$ q4 [/ r, k6 }  @* }5 v  y* M: K, n6 {* l
DS1302真是麻烦啊,里面的bcd转换我看的头都大了$ t) _2 m( K2 R+ x
# j( y3 {7 M3 W7 z) p) b' ?% A& f
正常不是把用户输出的十进制数据转为BCD码才能被DS1302识别吗<blockquote>/*------------------------------------------------# \& p) g% Z& C7 s- Q$ a. L
. v. s9 n' W" @9 C  x* n, T

- J1 \, Z9 e% J: X! R前面数组定义是  }7 ~6 w( h+ t, J
unsigned char time_buf1[8] = {20,15,11,6,20,59,00,5};//空年月日时分秒周; m; e! [4 {2 N4 W
unsigned char time_buf[8] ;
9 Q- H  t# T5 x- N$ a2 d& |麻烦大家看一下这个函数吧,这个函数的功能应该就是把十进制的时间改为二进制然后写入DS13022 w) M* c5 v! j" W" [( G9 E
所以注释的BCD码处理应该指的就是十进制转bcd码,可是安装这个算法完全算不出来BCD码,我们取i=1吧,那么就是& c# T7 }; h5 l' J& S
                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码啊,还是我里面什么想错了?
0 ^, t7 b7 d+ b9 ~( g
, b# B+ c; r1 e8 k

该用户从未签到

2#
发表于 2019-4-18 10:28 | 只看该作者
其实你程序应该是对的:15H = 21,所以15H转换为BCD码就是21H.
  {. M) b+ d% E4 M# _9 T; l
; z1 R/ c$ K- L. @2 A# ^4 D+ c) X1 g1 e! w4 i# M  `& `
例如:11H要转换为BCD码,结果应该为11H = 17(十进制) ->17H(BCD码);7 o& `6 @& }7 J- h+ @/ r
所以,可以这么算:11H/10 =1;11H%10 = 7; BCD码等于1*16+7=17H。+ _4 h+ W  k' z7 @7 k- X2 b9 o
程序应该为8 h1 t1 W2 [  g* c5 n
unsigned char Hex2BCD(unsigned char hex)
9 k) w6 `( k" I5 g: m% P3 S{
1 X# ~( H6 x$ e- j, s# X$ k* z        unsigned char res;
% e, R: Y% \; |- N( J9 b8 N. M        res = hex/10*16+hex%10;+ E' W+ H) l# i, Z$ v) g
        ruturn res;8 ?) ~2 x/ D% L, O0 m" G  v( ?+ T. _
}

点评

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

该用户从未签到

3#
 楼主| 发表于 2019-4-18 10:34 | 只看该作者
helendcany 发表于 2019-4-18 10:28# g* r1 E2 G# n0 c! Z
其实你程序应该是对的:15H = 21,所以15H转换为BCD码就是21H.

9 T. e% N% ?( B- ?; a1 P. TBCD码不是一个四位的二进制数字吗?17H是怎么表示BCD码?而且这个BCD码处理后是要串行输出的,单单17H是怎样串行输出的呢?一口气问了两句,还望解答
: }& d" |  v9 T- z

点评

附注:压缩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, D8 @% l; i5 |. K/ |) s3 ^8 ]! R
BCD码不是一个四位的二进制数字吗?17H是怎么表示BCD码?而且这个BCD码处理后是要串行输出的,单单17H是 ...
: g1 @+ C9 G% c1 F
附注:压缩BCD码与非压缩BCD码的区别—— 压缩BCD码的每一位用4位二进制表示,一个字节表示两位十进制数。例如10010110B表示十进制数96D;非压缩BCD码用1个字节表示一位十进制数,高四位总是0000,低4位的0000~1001表示0~9.例如00001000B表示十进制数8.9 q0 B4 b" x: }  H

点评

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

该用户从未签到

5#
 楼主| 发表于 2019-4-18 11:22 | 只看该作者
helendcany 发表于 2019-4-18 11:13
9 H; M7 V9 I6 P附注:压缩BCD码与非压缩BCD码的区别—— 压缩BCD码的每一位用4位二进制表示,一个字节表示两位十进制数 ...
7 G0 Q# Y( m# R2 c% e. V7 {. W
还是不明白计算出来的17H是怎么进行串口输出的,难道还要转一遍,把1和7再转成高四位和低四位二进制数字吗。不过明白了17H就是压缩BCD码了,只是那个算BCD码的算法是根据什么式子变得?我知道它是分别把个位和十位提出来,为什么最后个位还要加上十位乘16呢% E. W. b2 V) d* K

点评

若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
6 m# T& w. q% A& G1 S- G% t还是不明白计算出来的17H是怎么进行串口输出的,难道还要转一遍,把1和7再转成高四位和低四位二进制数字 ...
; R1 P% S4 w9 d
若DS1302输出的是BCD码,你要转成为十进制,则: V3 Z6 F+ J# k
unsigned char res BCD2HEX(unsigned char bcd)/ @8 i6 q6 C# {2 G* N& X4 f' Q8 c
{
+ q/ [5 H9 ~& K: ?; s     unsigned char res;
/ K/ `6 K) r9 W8 R8 w! u, W     res = bcd/16 *10 +bcd%16;
) o1 w9 A5 T/ Q& D7 y+ Y     return res;  z3 h/ U: i: ?) i# Q5 w
};
* T: x8 C* c- y* b3 l例如:BCD码17H,则它代表的是十进数17,而十进数17 = 11H;+ V: t. G, d) M1 B2 K
计算过程为:分离出17H的高四位(为1),低四为(为7),再1*10 +7 = 17 =11H4 A; T5 o+ ^1 B  x

点评

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

该用户从未签到

8#
发表于 2019-4-19 09:52 | 只看该作者
helendcany 发表于 2019-4-18 11:340 r- E+ a9 u( B, r; F
若DS1302输出的是BCD码,你要转成为十进制,则" [' d7 P5 D' _
unsigned char res BCD2HEX(unsigned char bcd). M! I1 w5 P& Q( m0 P; O/ c
{
; m+ P! S' u+ f  F5 n
说的太好了。
. n& _( c: L  [3 W
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-10-11 23:47 , Processed in 0.156250 second(s), 31 queries , Gzip On.

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

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

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