您好,欢迎访问三七文档
16位二进制转BCD码华侨大学$龙之魂1/3二进制转换成十进制BCD码(加3移位法底下还附带了BCD码转二进制码转化的VHDL程序算法二进制数调整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的十进制数011111111原数100000001;左移一次200000011;左移二次300000111;左移三次,检查低四位+37?3.100001010;大于7,加3进行调整400010101;左移四次,检查低四位+37?16位二进制转BCD码华侨大学$龙之魂2/34.100011000;大于7,加3进行调整500110001;左移五次601100011;左移六次,检查高四位+37?6.110010011;大于7,加3进行调整7100100111;左移七次,检查低四位+37?7.1100101010;大于7,加3进行调整81001010101;左移八次(得到BCD码255Libraryieee;--16位二进制转BCD码(0到9999)Useieee.std_logic_unsigned.all;Useieee.std_logic_1164.all;EntityB_BCDisPort(clk,ena:instd_logic;a:instd_logic_vector(15downto0);q:outstd_logic_vector(15downto0));endB_BCD;architecturebehavofB_BCDisbeginprocess(clk,a)variablei:std_logic_vector(4downto0);variablein_a,out_a:std_logic_vector(15downto0);beginifena='0'thenin_a:=a;i:=00000;out_a:=0000000000000000;elsifclk'eventandclk='1'thenifi=10000thenout_a:=out_a;elseout_a:=out_a(14downto0)&in_a(15);in_a:=in_a(14downto0)&'0';i:=i+1;ifi10000thenifout_a(3downto0)4thenout_a(3downto0):=out_a(3downto0)+3;endif;ifout_a(7downto4)4thenout_a(7downto4):=out_a(7downto4)+3;endif;ifout_a(11downto8)4thenout_a(11downto8):=out_a(11downto8)+3;16位二进制转BCD码华侨大学$龙之魂3/3endif;ifout_a(15downto12)4thenout_a(15downto12):=out_a(15downto12)+3;endif;endif;endif;endif;q=out_a;endprocess;endbehav;以下为(0到99)BCD码转二进制码Libraryieee;--(0到99)BCD码转二进制码Useieee.std_logic_unsigned.all;Useieee.std_logic_1164.all;EntityBCD_BisPort(a:instd_logic_vector(7downto0);q:outstd_logic_vector(7downto0));endBCD_B;architecturebehavofBCD_Bissignala1,a2,a3,a4,cq:std_logic_vector(7downto0);beginprocess(a)begina1=0000&a(3downto0);a2=0000&a(7downto4);a3=a2(6downto0)&'0';a4=a2(4downto0)&000;cq=a4+a3+a1;q=cq;endprocess;endbehav;
本文标题:二进制转BCD码
链接地址:https://www.777doc.com/doc-7303065 .html