资源描述:
《二进制 转换成十进制 bcd码(加3移位法)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、二进制转换成十进制BCD码(加3移位法)(2010-07-0515:53)分类:算法“原来的二进制数十几位,则左移时就要左移几位” "二进制数调整BCD码的方法是将二进制码左移8次,每次移位后都检查低四位LSD+3是否大于7,如是则加3,否则不加,高4位MSD作同样处理"一、为什么左移8次原寄存器是存二进制数的,新寄存器是存十进制数的,当然要左移8次,把数据全部移进去。但这里要注意两件事,第一,如果只安排一个字节作十进制寄存器,原数据要小于64H(即100)。第二,由于新寄存器是十进制的,要随时调整。二、检查半字节+3是否大于7,是,则+3在51系列里有十进制调节指令(半字
2、节大于9,则加6,应该不难理解),PIC里没有,只好采取变通的方法。检查半字节+3是否大于7,也就是检查半字节是否大于4。因为,如果大于4(比如5、6),下一步左移就要溢出了,所以加3,等于左移后的加6,起到十进制调节的作用。那为什么要绕个圈子去检测半字节+3是否大于7呢?这样程序编起来会简练一些。一个例子假如有一个八位二进制数255,我把他转255的十进制数0 11111111 原数1 00000001 ;左移一次2 00000011 ;左移二次3 00000111 ;左移三次,检查低四位+3>7?3.1
3、00001010 ;大于7,加3进行调整4 00010101 ;左移四次,检查低四位+3>7?4.1 00011000 ;大于7,加3进行调整5 00110001 ;左移五次6 01100011 ;左移六次,检查高四位+3>7?6.1 10010011 ;大于7,加3进行调整7 100100111 ;左移七次,检查低四位+3>7?7.1 100101010 ;大于7,加3进行调整8 1001010101 ;左移八次(得到BCD码255)附上Ve
4、rilog代码://17位二进制数转BCD码(基本思想是逢十进1)moduleBIN_BCD_4(CLK,A,BW,BQ,BB,BS,BG); inputCLK; input [16:0]A; //二进制输入数据 output[3:0]BW,BQ,BB,BS,BG;//BCD数据输出寄存器 reg [3:0]BW,BQ,BB,BS,BG; integerI; reg [19:0]TEMP; reg [16:0]C; always@(posedgeCLK) begin C=A; TEMP=0; for(I=1;I<
5、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
6、: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