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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
本帖最后由 码农 于 2019-4-18 10:19 编辑
: y! |  a" j( R# s, h8 I& h9 K" d3 q0 B* b
DS1302真是麻烦啊,里面的bcd转换我看的头都大了
3 ]* s& z3 ~0 _+ k) x8 C% ~4 ?6 y: B5 F+ X& q+ i6 L6 j* T
正常不是把用户输出的十进制数据转为BCD码才能被DS1302识别吗<blockquote>/*------------------------------------------------1 ^3 Z  j+ G7 W. v- a7 r7 H
: I( A$ D  G4 U3 V9 d/ b3 F: I
" [) V1 _+ w2 |  R' n, l* E/ E$ t. y
前面数组定义是
$ g3 S8 r! A* ^unsigned char time_buf1[8] = {20,15,11,6,20,59,00,5};//空年月日时分秒周
* ~3 t6 Z' C# C) g& sunsigned char time_buf[8] ;
+ k& j# y0 f& Q麻烦大家看一下这个函数吧,这个函数的功能应该就是把十进制的时间改为二进制然后写入DS13029 d# y3 e& t7 \: d9 C
所以注释的BCD码处理应该指的就是十进制转bcd码,可是安装这个算法完全算不出来BCD码,我们取i=1吧,那么就是1 W- z4 l  m5 Q: c8 H. ?5 n
                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码啊,还是我里面什么想错了?

# y6 c0 Y" Q$ P- L" _. f  z/ `
2 c' i6 |% b0 V

该用户从未签到

2#
发表于 2019-4-18 10:28 | 只看该作者
其实你程序应该是对的:15H = 21,所以15H转换为BCD码就是21H.: _7 s* B. n, L, K7 F2 {& e; M

9 Z2 i; ~! U$ {9 N( `/ ?% {6 x. h2 X2 O, y9 l" a
例如:11H要转换为BCD码,结果应该为11H = 17(十进制) ->17H(BCD码);1 r: l. v- X1 M6 [* r
所以,可以这么算:11H/10 =1;11H%10 = 7; BCD码等于1*16+7=17H。( F& Y& c- A3 ^( N
程序应该为0 ?& z- _, U$ L' Z/ J8 K/ ]: `
unsigned char Hex2BCD(unsigned char hex)+ `- q- M5 Z& H' |% H, p  y* g+ I
{
# j) A0 ^' ^! R7 }; b- s        unsigned char res;4 H- S' ?2 E' \8 W
        res = hex/10*16+hex%10;
9 T# D, M% y# y( q! {        ruturn res;# t; ]: d: x1 J& |
}

点评

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

该用户从未签到

3#
 楼主| 发表于 2019-4-18 10:34 | 只看该作者
helendcany 发表于 2019-4-18 10:28/ O; S$ z, G6 v* S, x
其实你程序应该是对的:15H = 21,所以15H转换为BCD码就是21H.

3 b7 f" [& O4 g8 r6 _0 e. o5 ZBCD码不是一个四位的二进制数字吗?17H是怎么表示BCD码?而且这个BCD码处理后是要串行输出的,单单17H是怎样串行输出的呢?一口气问了两句,还望解答
7 n& i$ Q( m8 J

点评

附注:压缩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:346 q/ ^/ ]6 Y* j* h; v" i
BCD码不是一个四位的二进制数字吗?17H是怎么表示BCD码?而且这个BCD码处理后是要串行输出的,单单17H是 ...

& U! {6 n7 P8 t0 r附注:压缩BCD码与非压缩BCD码的区别—— 压缩BCD码的每一位用4位二进制表示,一个字节表示两位十进制数。例如10010110B表示十进制数96D;非压缩BCD码用1个字节表示一位十进制数,高四位总是0000,低4位的0000~1001表示0~9.例如00001000B表示十进制数8.
: _4 ^- k+ I3 w; w6 p

点评

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

该用户从未签到

5#
 楼主| 发表于 2019-4-18 11:22 | 只看该作者
helendcany 发表于 2019-4-18 11:13- R4 ]( x4 h$ v1 j# o9 J
附注:压缩BCD码与非压缩BCD码的区别—— 压缩BCD码的每一位用4位二进制表示,一个字节表示两位十进制数 ...

( U/ J* q, p  Q4 b( h9 {. C还是不明白计算出来的17H是怎么进行串口输出的,难道还要转一遍,把1和7再转成高四位和低四位二进制数字吗。不过明白了17H就是压缩BCD码了,只是那个算BCD码的算法是根据什么式子变得?我知道它是分别把个位和十位提出来,为什么最后个位还要加上十位乘16呢
" R6 s! L  b2 B3 D

点评

若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
& Y- D0 E& o1 ~8 d; D4 v2 P还是不明白计算出来的17H是怎么进行串口输出的,难道还要转一遍,把1和7再转成高四位和低四位二进制数字 ...
4 |; `- a% i& ?* _/ a
若DS1302输出的是BCD码,你要转成为十进制,则9 z9 O0 l0 I" E& m) _6 W7 s: [
unsigned char res BCD2HEX(unsigned char bcd)
! \2 l; H2 E! B* |! }# g{
+ ]8 }3 k% Q7 Y     unsigned char res;6 ^3 i6 A/ A( Q3 I. O. J
     res = bcd/16 *10 +bcd%16;7 t7 F. s+ ]: p% e1 ]* ~0 k# I3 N
     return res;) q9 p' f+ _  y% Q
};
% K9 e( S: a- r+ M" O8 G$ M例如:BCD码17H,则它代表的是十进数17,而十进数17 = 11H;
4 D6 J0 z; F% \) `% \计算过程为:分离出17H的高四位(为1),低四为(为7),再1*10 +7 = 17 =11H- ^* \3 F  L; K$ P, p! @$ p- l

点评

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

该用户从未签到

8#
发表于 2019-4-19 09:52 | 只看该作者
helendcany 发表于 2019-4-18 11:341 X+ s" q3 Y' O  M4 [
若DS1302输出的是BCD码,你要转成为十进制,则
9 N. z; y( N  f1 T. z' Y# k$ Q! Funsigned char res BCD2HEX(unsigned char bcd)
3 u( K- U4 X. F2 j{

% D* j$ q/ J9 p& k9 C" Q说的太好了。9 W5 F7 f: N; _, }' j
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

EDA365公众号

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

GMT+8, 2025-8-24 20:16 , Processed in 0.156250 second(s), 31 queries , Gzip On.

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

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

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