//*****************************************************************

//bcd hex

//此函数用于将8421BCD码转换为十进制数,从函数参数可以看出此BCD码是由两位十进制数组成的。BCD码是用二进制数对十进制数的各个位数进行编码,比如十进制数58,那么转换为BCD码为0x58,356对应BCD码就是0x356。注意这是编码不是数进制间的转换,他们之间不存在等价关系。只是进行编号,为了方便对编号后的数据用十六进制数表示。对应编码规则如下:

十进制数---8421BCD码----编码后用等价的十六进制数表示

0-----------0000----------0x0

1-----------0001----------0x1

2-----------0010----------0x2

3-----------0011----------0x3

4-----------0100----------0x4

5-----------0101----------0x5

6-----------0110----------0x6

7-----------0111----------0x7

8-----------1000----------0x8

9-----------1001----------0x9

知道了编码规则,那么将2位8421bcd码编号的数,还原为十进制数也就方便了。函数参数是一个字节那么决定了此8421BCD码是两位码即高四位是一个码值、低四位是一个码值,将高四位乘以10加上低四位码值就得到了十进制数。

byte bcd2_hex(byte val)

{

byte i;

i = val&0x0f; //按位与,i得到低四位数。

val >>= 4;

//右移四位,将高四位移到低四位的位置,得到高四位码值。

val &= 0x0f; //防止移位时高位补进1,只保留高四位码值

val *= 10; //高位码值乘以10

i += val; //然后与第四位码值相加。

return i; //将得到的十进制数返回

}

//*****************************************************************

//这个应该是一个类似I2C协议的字节写操作。

static void DS1302_WriteByte(byte val)

{

byte i;

//MinCardClk(0); //stop clk

//Sys_SetCpuClk(clockdiv1);

for(i = 0; i < 8; i++)

//通过循环将1字节也即8位二进制数送给i2c数据线。

{

if(val&0x01)DS1302_SDA_W(1);

//如果此位是1,那么送给数据线1

else DS1302_SDA_W(0); //如果是0,那么给数据线0

DS1302_SCK(0); //时钟线置0也即拉低

DS1302_SCK(1);

//时钟线置1,通过这两个动作时钟线产生一个从低到高的跳变,作用是通知从器件取走数据线上的数据。

val >>= 1;// FOR DELAY AND SHIFT

//右移数据,接着发送下一位数据,数据是从低位到高位发送。

}

//DS1302_SCK(0);

//Sys_SetCpuClk(clockdiv0);

//MinCardClk(1); //start clk

}

//*****************************************************************

//同理i2c读字节

static byte DS1302_ReadByte(void)

{

byte i,val;

//MinCardClk(0); //stop clk

//Sys_SetCpuClk(clockdiv1);

val=0;

DS1302_SDA_W(1);

for(i = 0; i < 8; i++)

//循环从数据线上读取8位数据,然后凑成一字节。

{

DS1302_SCK(1);

DS1302_SCK(0); //时钟一个从高到低的跳变,通知从器件将数据放到数据线上。

val >>= 1;

//接收完1位后右移数据,准备接收下一位,这里也是从低位到高位接收数据。

if(DS1302_SDA_R())val |= 0x80;

//如果是1那么与0x80或后就得到了1,如果是0,就不用管了因为在移位时直接补的是0.

}

//Sys_SetCpuClk(clockdiv0);

//MinCardClk(1); //start clk

return val;

}

一下是汇编的:

re: asm

BCD2BIN:

;

INPUT: R3:R2 -- BCD

; OUTPUT: R5:R4 -- BIN

; USE: A, B,

PWS

MOV A,

R2

CALL

BCD_BYTE2BIN

MOV R4,

A

MOV A,

R3

CALL

BCD_BYTE2BIN

MOV B,

#100

MUL AB

ADD A,

R4

MOV R4,

A

CLR A

ADDC A,

B

MOV R5,

A

RET

BCD_BYTE2BIN:

; 10*Y + X =

(16*Y + X)-6*Y = 250 * Y + (16*Y + X) - 256 *

Y MOV R5,

A

ANL A,

#0F0H

SWAP A

MOV B,

#250

MUL AB

ADD A,

R5

RET

8421码转16进制的c语言,将8421BCD码转换为十进制数(转)相关推荐

  1. c语言中如何将字符串转成16进制,用c语言写一个函数把十进制转换成十六进制,该如何处理...

    用c语言写一个函数把十进制转换成十六进制 用c语言写一个函数把十进制转换成十六进制 网上找到一些,感觉有占乱 分享到: ------解决方案-------------------- #include ...

  2. 16进制(CRC16)(MODBUS RTU通讯)校验码在线计算器

    最近在项目上遇到,用485协议命令控制灯光继电器的开关需要计算16进制(CRC16)(MODBUS RTU通讯)校验码来写控制命令,这种在网上有现成的计算器,我们直接使用即可,以下为我用的一个计算器的 ...

  3. ASCII码转16进制 十六进制转ASCII码

    ASCII码转16进制 十六进制转ASCII码 //ASCII码转16进制 function strToHexCharCode(str) { if (str === "") { r ...

  4. C语言输出字符,字符串的ASCII码的16进制数

    C语言输出字符,字符串的ASCII码的16进制数 /* file name : test.c cmd code : gcc -o test.exe test.c */ #include<stdi ...

  5. Ascii码 、16进制与 char

         对于一个非计算机专业出身的人,以前只知道计算机中所有的数据都是以二进制形式进行存储,计算,通信的.但是人类文明中,主要的信息展现以文本的形式展现的.如果使用内存中的0和1来表示文本一直都是一 ...

  6. tostring 16进制_ToString:身份哈希码的十六进制表示形式

    tostring 16进制 我以前在方便的Apache Commons ToStringBuilder上写过博客,最近有人问我,在生成的String输出中出现的看似神秘的文本是什么构成的. 询问该问题 ...

  7. C语言实现ASCII字符、压缩BCD码值与BIN码(16进制)互转 - (已编译,亲试可用)

    目录 1.将压缩BCD码转为BIN码 2.将压缩BCD码数组转为BIN码数组 3.将BIN码转为压缩BCD码 4.将BIN码数组转为压缩BCD码数组 5.将ASCII码转为BIN码 6.将ASCII码 ...

  8. asic码转16进制c语言,十六进制数转换成ascii码

    本文收集整理关于十六进制数转换成ascii码的相关议题,使用内容导航快速到达. 内容导航: Q1:一个十六进制数转换成ASCII码的单片机程序 HASC:MOVA,R0:从R0中取一个16进制(二进制 ...

  9. bcd码和16进制的区别

    http://bbs.gongkong.com/D/200707/173493_1.shtml 举个例子:比如对于一个数:0000 0010 0011 1111 其16进制就是:23F 如果转换为BC ...

  10. C++ 中ASCII码转16进制数

    工作中大佬给我布置了一个串口接收数据转换的任务,把接收的ASCII码转换成16进制数,我本来想上网找一个,但发现好像并没有什么特别有用的,所以自己研究一下,写一个吧. 我的思路是先把ASCII码强转成 ...

最新文章

  1. 可高效训练超大规模图模型,PyTorch BigGraph是如何做到的?
  2. 数据蒋堂 | 倍增分段技术
  3. 【KVM系列01】KVM简介及安装
  4. 2019_8_1python
  5. php 获取文件大小 修改时建,php遍历目录输出文件大小,类型,修改时间.
  6. Spring Boot EasyPoi导出Excel下载
  7. web前端的渐进增强式开发模型
  8. es6 数组排序_重读《学习JS数据结构与算法-第三版》- 第3章 数组 二
  9. 【C语言】最大的两个数(指针专题)
  10. Web前端的学习路线,你真的知道吗?
  11. Regionals 2014 Asia - Dhaka H 暴力
  12. Screen命令让Linux shell在后台运行
  13. python难学吗-Python为什么那么受欢迎?学习Python难不难?
  14. DirectShow录屏,帧率不可控制?
  15. 制作Ubuntu系统的USB启动盘
  16. 全链路监控及普罗米修斯学习
  17. 无刷直流电动机矢量控制(一)——无刷直流电机(BLDC)与永磁同步电机(PMSM)的相同点和区别
  18. 第十四篇,STM32的CAN总线通信
  19. 如何搭建java环境_vscode搭建java环境
  20. 数据库安全小白紧急求助论坛大神,困扰许久

热门文章

  1. IDEA集成Gerrit插件
  2. 解读群体机器人合力协作精神
  3. 惠普台式计算机耳机插口,惠普耳机插在台式电脑上没声音,为什么
  4. js 身份证号码验证包含15位和18位
  5. 从消费互联网到产业互联网:平台思维始终是主导
  6. '什么意思 怎么输入
  7. YOLOV5 Detetct.py 流程分析
  8. 【技美百人计划】屏幕空间实现dither等溶解效果
  9. httpclient发布application/octet-stream
  10. 百思不得其姐关注模块的推荐关注中 右侧TableView刷新细节