打印
[51单片机]

从业将近十年!手把手教你单片机程序框架(连载)

[复制链接]
楼主: jianhong_wu
手机看帖
扫描二维码
随时随地手机跟帖
441
jianhong_wu|  楼主 | 2014-8-4 13:36 | 只看该作者 |只看大图 回帖奖励 |倒序浏览
第六十一节:组合BCD码,非组合BCD码,以及数值三者之间的相互转换和关系。
开场白:
本来这一节打算讲大数据的加法运算的,但是考虑大数据运算的基础是非组合BCD码,所以多增加一节讲BCD码的内容。
计算机中的BCD码,经常使用的有两种格式,即组合BCD码,非组合BCD码。
组合BCD码,是将两位十进制数,存放在一个字节中,例如:十进制数51的存放格式是0101 0001。
非组合BCD码,是将一个字节的低四位编码表示十进制数的一位,而高4位都为0。例如:十进制数51的占用了两个字节的空间,存放格式为:00000101 00000001。
    这一节要教大家两个知识点:
第一个:如何编写组合BCD码,非组合BCD码,以及数值三者之间的相互转换函数。
第二个:通过转换函数的编写,重温前面几节所讲到的指针用法。

具体内容,请看源代码讲解。

(1)硬件平台:
    基于朱兆祺51单片机学习板。

(2)实现功能:
波特率是:9600 。
通过电脑串口调试助手模拟上位机,往单片机发送EB 00 55 XX YY YY … YY YY  指令,其中EB 00 55是数据头,XX 是指令类型。YY是具体的数据。
指令类型01代表发送的是数值,需要转成组合BCD码和非组合BCD码,并且返回上位机显示。
指令类型02代表发送的是组合BCD码,需要转成数值和非组合BCD码,并且返回上位机显示。
指令类型03代表发送的是非组合BCD码,需要转成数值和组合BCD码,并且返回上位机显示。

返回上位机的数据中,中间3个数据EE EE EE是分割线,为了方便观察,没实际意义。

例如:十进制的数据52013140,它的十六进制数据是03 19 A8 54。
(a)上位机发送数据:eb 00 55 01 03 19 a8 54
单片机返回:52 01 31 40 EE EE EE 05 02 00 01 03 01 04 00
(b)上位机发送组合BCD码:eb 00 55 02 52 01 31 40
单片机返回:03 19 A8 54 EE EE EE 05 02 00 01 03 01 04 00
(c)发送非组合BCD码:eb 00 55 03 05 02 00 01 03 01 04 00
单片机返回:03 19 A8 54 EE EE EE 52 01 31 40

(3)源代码讲解如下:
第六十一节源代码讲解.rar (3.6 KB)
总结陈词:
有了这一节非组合BCD的基础知识,下一节就开始讲大数据的算法程序。这些算法程序经常要用在计算器,工控,以及高精度的仪器仪表等领域。C语言的语法中不是已经提供了+,-,*,/这些运算符号吗?为什么还要专门写算法程序?因为那些运算符只能进行简单的运算,一旦数据超过了unsigned long(4个字节)的范围就会出错。而这种大数据算法的程序是什么样的?欲知详情,请听下回分解----大数据的加法运算。

(未完待续,下节更精彩,不要走开哦)

使用特权

评论回复
442
hww5408| | 2014-8-4 14:08 | 只看该作者
哈哈, 第六十一节讲解,俺第一个占座位。

使用特权

评论回复
443
riddickwoo| | 2014-8-4 15:02 | 只看该作者
辛苦辛苦,学习了!

使用特权

评论回复
444
1316014468| | 2014-8-5 00:27 | 只看该作者
好牛X啊、、、

使用特权

评论回复
445
蔚蓝柳叶| | 2014-8-5 00:33 | 只看该作者
顶一个,我要慢慢消化。

使用特权

评论回复
446
zxb忘记| | 2014-8-5 12:51 | 只看该作者
对应的源代码压缩包什么时候可以下载啊,怎么老是说我没登陆嗯

使用特权

评论回复
447
5swords| | 2014-8-5 15:06 | 只看该作者
可学可鉴

使用特权

评论回复
448
huzeng168| | 2014-8-7 08:04 | 只看该作者
本帖最后由 huzeng168 于 2014-8-7 09:40 编辑

谢谢,继续等待

使用特权

评论回复
449
kerby81| | 2014-8-7 08:47 | 只看该作者
很给力,看看先

使用特权

评论回复
450
lyym| | 2014-8-8 09:39 | 只看该作者
楼主厉害!学习之~

使用特权

评论回复
451
lyym| | 2014-8-8 09:40 | 只看该作者
之前只是学习过单片机的皮毛,现在全忘光了。。。惭愧

使用特权

评论回复
452
ycdhonker| | 2014-8-8 10:04 | 只看该作者
挺好的 支持楼主,谢谢分享

使用特权

评论回复
453
xlsf1048| | 2014-8-8 11:08 | 只看该作者
mark

使用特权

评论回复
454
lsc201100| | 2014-8-12 14:34 | 只看该作者
     还是有学习的地方,顶起,走起。

使用特权

评论回复
455
wuhanrf| | 2014-8-12 16:56 | 只看该作者
撸主已经8天没更了

使用特权

评论回复
456
jianhong_wu|  楼主 | 2014-8-13 01:14 | 只看该作者
第六十二节:大数据的加法运算。

开场白:
直接用C语言的“+”运算符进行加法运算时,“被加数”,“加数”,“和”,这三个数据的最大范围是unsigned long 类型,也就是数据最大范围是4个字节,十进制的范围是0至4294967295。一旦超过了这个范围,则运算会出错。因此,当进行大数据加法运算时,我们要额外编程序,实现大数据的算法。其实这种算法并不难,就是我们在小学里学的四则运算算法。
      我们先要弄清楚一个新的概念。不考虑小数点的情况下,数据有两种表现形式。一种是常用的变量形式,另外一种是上一节讲到的BCD码数组形式。变量的最大范围有限,而BCD码数组的形式是无限的,正因为这个特点,所以我们可以进行大数据运算。
    这一节要教大家两个知识点:
第一个:如何通过用for循环语句改写上一节的组合BCD码跟非组合BCD码的转换函数。
第二个:如何编写涉及到大数据加法运算的算法程序函数,同时也复习了指针的用途。
第三个:如何在串口程序中通过关键字来截取所需要的数据。

具体内容,请看源代码讲解。

(1)硬件平台:
    基于朱兆祺51单片机学习板。

(2)实现功能:
波特率是:9600 。
通过电脑串口调试助手模拟上位机,往单片机发送组合BCD码的被加数和加数。单片机把组合BCD码的运算结果返回到上位机。最大范围4位,从0到9999,如果超范围则返回EE EE EE报错。往单片机发送的数据格式:EB 00 55 XX XX 0d 0a  YY YY  0d 0a指令,其中EB 00 55是数据头,XX 是被加数,可以是1个字节,也可以是2个字节。YY是加数,可以是1个字节,也可以是2个字节。0d 0a是固定的结束标志。
例如:
(a)1234+5678=6912
上位机发送数据:eb 00 55 12 34 0d 0a 56 78 0d 0a
单片机返回:69 12

(b)9999+56=10055  超过4位的9999,所以报错
上位机发送数据:eb 00 55 99 99  0d 0a 56 0d 0a
单片机返回:EE EE EE  表示出错了

(3)源代码讲解如下:
第六十二节源代码讲解.rar (4.88 KB)
总结陈词:
既然这节讲了加法程序,那么下一节接着讲常用的减法程序,这种大数据的减法程序是什么样的?欲知详情,请听下回分解----大数据的减法运算。

(未完待续,下节更精彩,不要走开哦)

使用特权

评论回复
457
d865841995| | 2014-8-13 07:31 | 只看该作者
jianhong_wu 发表于 2014-8-13 01:14
第六十二节:大数据的加法运算。

开场白:

新人一枚,才开始看鸿哥的帖子,很受用,支持鸿哥,感谢鸿哥的分享!大半夜的还在些帖子,好辛苦!

使用特权

评论回复
458
zhjyuanji| | 2014-8-13 14:02 | 只看该作者
更新太慢了啊 楼主

使用特权

评论回复
459
swordbraveljy| | 2014-8-13 14:54 | 只看该作者
HEN HAO

使用特权

评论回复
460
zf470| | 2014-8-13 17:28 | 只看该作者
好东西

使用特权

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

本版积分规则