“原来的二进制数十几位,则左移时就要左移几位”

"二进制数调整BCD码的方法是将二进制码左移8次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位MSD作同样处理"

一、为什么左移8次

原寄存器是存二进制数的,新寄存器是存十进制数的,当然要左移8次,把数据全部移进去。

但这里要注意两件事,第一,如果只安排一个字节作十进制寄存器,原数据要小于 64H(即100)。第二,由于新寄存器是十进制的,要随时调整。

二、检查 半字节+3 是否大于 7,是,则 +3

在 51 系列里有十进制调节指令(半字节大于 9,则加 6,应该不难理解),PIC 里没有,只好采取变通的方法。

检查 半字节+3 是否大于 7,也就是检查半字节是否大于 4。因为,如果大于 4(比如 5、6),下一步左移就要溢出了,所以加 3,等于左移后的加 6,起到十进制调节的作用。

那为什么要绕个圈子去检测 半字节+3 是否大于 7 呢?这样程序编起来会简练一些。

一个例子

假如有一个八位二进制数255,我把他转255的十进制数

0        1111 1111    原数

1        0000 0001    ;左移一次

2        0000 0011   ; 左移二次

3        0000 0111    ;左移三次,检查低四位+3>7?

3.1     0000 1010    ;大于7,加3进行调整

4        0001 0101    ;左移四次, 检查低四位+3>7?

4.1     0001 1000   ;大于7,加3进行调整

5        0011 0001    ;左移五次

6        0110 0011    ;左移六次,检查高四位+3>7?

6.1      1001 0011   ;大于7,加3进行调整

7           1 0010 0111     ;左移七次,检查低四位+3>7?

7.1       1 0010 1010      ;大于7,加3进行调整

8           10 0101 0101    ;左移八次(得到BCD码255)

附上Verilog代码:

//17位二进制数转BCD码(基本思想是逢十进1)

module BIN_BCD_4 (CLK, A, BW, BQ, BB, BS, BG);

input CLK;

input  [16:0]A;           //二进制输入数据

output [3:0]BW, BQ, BB, BS, BG;//BCD数据输出寄存器

reg    [3:0]BW, BQ, BB, BS, BG;

integer I;

reg  [19:0]TEMP;

reg  [16:0]C;

always @ (posedge CLK)

begin

C=A;

TEMP=0;

for (I=1; I<17; I=I+1)

begin

{TEMP, C}={TEMP[18:0], C, 1'b0};//左移一位

if (TEMP[3:0]>4'b0100)

begin

TEMP[3:0]=TEMP[3:0]+3; // >4则加3

end

if (TEMP[7:4]>4'b0100)

begin

TEMP[7:4]=TEMP[7:4]+3;

end

if (TEMP[11:8]>4'b0100)

begin

TEMP[11:8]=TEMP[11:8]+3;

end

if (TEMP[15:12]>4'b0100)

begin

TEMP[15:12]=TEMP[15:12]+3;

end

if (TEMP[19:16]>4'b0100)

begin

TEMP[19:16]=TEMP[19:16]+3;

end

{BW, BQ, BB,  BS, BG}={TEMP[18:0], A[0]};

end

end

endmodule

二进制 转换成十进制 BCD码(加3移位法)的更多相关文章

  1. 用Linux/Unix命令把十六进制转换成十进制(转)

    那天写个脚本,需要把十六进制的数字转成十进制的打出来,发现不知道要怎么弄,搜一下,原来还是很简单的,比用C语言什么的容易多了,就一些现成的命令就解决了. 先列两种简单的方法: 1) echo 自己就能 ...

  2. C语言十六进制转换成十进制:要从右到左用二进制的每个数去乘以16的相应次方

    #include <stdio.h> /* 十六进制转换成十进制:要从右到左用二进制的每个数去乘以16的相应次方: 在16进制中:a(A)=10 b(B)=11 c(C)=12 d(D)= ...

  3. 输入二进制数转换成十进制数(在cin>>和cin.get()上掉的坑)

    题目:输入一个二进制数转换成十进制. 题目分析:书上说,在一般情况下,c++的键盘输入可以识别是十进制数.八进制数和十六进制数,因此输入的二进制数据要作为字符处理.(其实我觉得数字也没问题吧). 正确 ...

  4. JS框架_(Qrcode.js)将你的内容转换成二维码格式

    百度云盘 传送门 密码:304e 输入网址点击按钮生成二维码,默认为我的博客首页 二维码格式演示 <!DOCTYPE html> <html lang="en"& ...

  5. Java中将0x开头的十六进制字符串转换成十进制整数

    1.Integer.toString(int i) 由于input(输入数据)是以0x开头的字符串,并不是整型.因而在用 String s = Integer.toString(input); 时用会 ...

  6. qrcode.js插件将你的内容转换成二维码格式

    ---qrcode.js插件将你的内容转换成二维码格式--- 我之前一直想知道二维码是怎么生成,所以就了解了一下, 最后还是不知道它的原理, 但是,我知道怎么生成. 现在就让我带你制作一个你喜爱的二维 ...

  7. URL转换成二维码

    转载请注明出处:http://www.cnblogs.com/cnwutianhao/p/6685804.html 二维码已经成为我们日常生活中的一个不可获取的产物,火车票上,景区门票,超市付款等等都 ...

  8. curl命令转换成php源码

    curl命令转换成php源码 获取状态: curl -X GET -H "Content-Type:application/json" -H "Authorization ...

  9. Gson字符串编码,字符串转换成图片保存,二进制转换成图片保存

    import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import ...

随机推荐

  1. c3p0 操作

    E3p0连接池 c3p0-config.xml c3p0-config.xml(必须叫这个名字),然后必须放在工程目录的src下面 注意:c3p0里面可以配置多个连接信息,可以给每个配置起个名字,这样 ...

  2. Kali linux 2016.2(Rolling)里安装OpenVAS

    不多说,直接上干货! 本博文,是在Kali 2.0 linux里,安装OpenVAS. 前言 OpenVAS是一款开放式的漏洞评估工具,主要用来检测目标网络或主机的安全性.与安全焦点的X-Scan工具 ...

  3. Python 总结一

    '''形式参数不占内存,在调用时开辟内存,在函数结束时释放内存默认参数 调用方式:位置参数.关键字参数 *args (元组) **kwargs(字典) 局部变量:在子程序中使用的变量全局变量:glob ...

  4. 添加浏览器back操作时的响应事件

    https://blog.csdn.net/xcqingfeng/article/details/70800118 $(function(){ pushHistory(); window.addEve ...

  5. 最全的测试用例(UI)

    一.文本框为字符型 必填项非空校验:      1.必填项未输入--程序应提示错误:      2.必填项只输入若干个空格,未输入其它字符--程序应提示错误: 字段唯一性校验:(不是所有字段都作此项校 ...

  6. nisght heap increase

    sudo gedit /usr/local/cuda-5.5/libnsight/nsight.ini --launcher.defaultActionopenFile-vm../jre/bin/ja ...

  7. tensoFlow之DNN文本分类

    TensorFlow文本分类: 亲测可用:https://blog.csdn.net/u012052268/article/details/77862202 简单实例:https://www.leip ...

  8. reduction_indices in tensorflow

    https://www.cnblogs.com/likethanlove/p/6547405.html

  9. RSA加密及加签

    1.对方要求我们的私钥是pkcs8格式,但是实际的公钥没有用pkcs8转换之后的私钥完成,所以是可以不是pkcs8的格式的.我们加签跟格式没有关系. 2.数据格式很重要,to_mpint而非crypt ...

  10. eclipse工具类及插件(修改eclipse.ini文件及作者名字)

    https://jingyan.baidu.com/album/9158e0005633c0a254122807.html?picindex=1 (修改eclipse.ini文件及作者名字) http ...