博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何将有符号数转化为BCD码?
阅读量:4223 次
发布时间:2019-05-26

本文共 773 字,大约阅读时间需要 2 分钟。

在做协议传输时,通常需要将数据转化为BCD码格式用于传输,例如水资源206通讯协议,通常我们在处理数据转化时,用的往往是无符号数的转化,也就是将unsigned int 或者unsigned long int 类型的数据转化为BCD码格式,这个相对来说比较方便,按照hex数转化为BCD码数据的计算方法转化就可以了,但是有些数据是有符号数格式的,比如水位数据,水位数据的真实值等于水位基值+水位传感器测量值,按照协议要求,水位的取值范围是-7999到+7999,当我们计算出负值的时候应该怎么转换呢?

    首先,我们要明白负数在单片机或者编译器中的存储格式,负数是以补码的形式存储的,这样我们在做hex数转化为BCD码数据的时候不能按照正数hex数转化为BCD码数的计算方法,这里推荐使用下面的方法:第一,我们判断一下计算结果是不是负数,如果是负数,那么我们先将其转化为正数;第二,我们按正常转化方法将此正数转化为BCD码;第三,手动添加负号,即最高位填负1,程序示例如下:

if(CurrentLevel<0)

{

    CurrentLevel = 0-CurrentLevel;

    Hex32ToBCD32(CurrentLevel,CurrentLevel_BCD);  //此函数为常用hex数转BCD码函数,比较简单

    CurrentLevel_BCD[3] =(CurrentLevel_BCD[3] | 0xF0); //206协议规定高四位表示符号位

}

————————————————
版权声明:本文为CSDN博主「单片机程序猿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42285365/article/details/96479723

你可能感兴趣的文章
Visual Studio 单元测试之三---压力测试
查看>>
Visual Studio 单元测试之五---数据库测试
查看>>
Visual Studio 单元测试之六---UI界面测试
查看>>
窗体间利用属性(property)来传递值时应注意的问题。
查看>>
动态代理技术的实现与理解
查看>>
使用Beyond Compare合并代码后出现乱码问题
查看>>
dmp数据文件导入问题
查看>>
使用Beyond Compare对比文件夹
查看>>
深入理解java虚拟机 -- jVM高级特性与最佳实践
查看>>
阿里巴巴 java 开发规约
查看>>
impdp命令出现ora-39070解决方案
查看>>
ora-01756
查看>>
java 核心技术Ⅱ--章四:网络
查看>>
java 核心技术Ⅱ--章五:JDBC数据库编程
查看>>
java 核心技术Ⅱ--章六:时间与日期API
查看>>
链表,循环链表,双向链表,判环和入环点
查看>>
浅谈HashMap,HashTable,ConcurrentHashMap,WeakHashMap,HashMap源码分析
查看>>
云创大数据校企合作项目斩获“全国校企合作十佳案例”
查看>>
云创大数据与宽泛科技签订战略合作协议
查看>>
免费!免费!免费!全国高校大数据师资实战免费培训班
查看>>