好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

【2017年整理】二进制 转换成十进制 BCD码(加3移位法).doc

4页
  • 卖家[上传人]:豆浆
  • 文档编号:1012868
  • 上传时间:2017-05-25
  • 文档格式:DOC
  • 文档大小:34.50KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 二进制 转换成十进制 BCD 码(加 3 移位法) (2010-07-05 15:53) 分类: 算法 “原来的二进制数十几位,则左移时就要左移几位”"二进制数调整 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)beginC=A;TEMP=0;for (I=1; I4'b0100)beginTEMP[3:0]=TEMP[3:0]+3;// >4 则加 3end if (TEMP[7:4]>4'b0100)beginTEMP[7:4]=TEMP[7:4]+3;end if (TEMP[11:8]>4'b0100)beginTEMP[11:8]=TEMP[11:8]+3;end if (TEMP[15:12]>4'b0100)beginTEMP[15:12]=TEMP[15:12]+3;end if (TEMP[19:16]>4'b0100)beginTEMP[19:16]=TEMP[19:16]+3;end {BW, BQ, BB, BS, BG}={TEMP[18:0], A[0]};end endendmodule。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.