精华内容
下载资源
问答
  • 2021-05-23 10:38:13

    16位二进制转换为BCD码的C51汇编程序

    16位二进制转换为BCD码的C51汇编程序

    16位二进制转BCD码的程序算法及51汇编实现:

    n=b15~b0

    n=[b15~b8]*256+[b7~b0]

    =[b15~b12]*4096+[b11~b0]

    ,高四位[b15~b12]取值范围为0~15,代表了4096的个数

    n=[b15~b12]*4000+{[b15~b12]*(100-4)+[b11~b0]}

    用x 代表[b15~b12],有:

    n=x*4000+{x*(100-4)+[b11~b0]

    即:n=4*x(千位)+x(百位)+[b11~b0]-4*x

    上式中后面的位:[b11~b0]-4*x,如果,,,,于356,就直接转换成BCD码,如果

    数值较大,就要把11~7位看成128的个数y,在百位中加上y,在十位加上3*y,并在

    [b6~b0]中减去2*y

    就有:

    n=n=4*x(千位)+(x+y)(百位)+3*y(十位)+[b6~b0]-2*y

    由此,就可以明确由高9位[b15~b7]变换出来十进制的各个位的数值,可能大于9,到最后整理一下即可。

    剩下的低7位变成BCD 码已经很简单了。

    这是别人的思路,容易理解,但用汇编也不太好写,期待有人能写出来,下面是我同,,,,的一个算法:

    高八位减一,让第八位加上256,(存放压缩BCD码的三个字节百位加2,十位加5,各位加6)

    ORG 0000H

    AJMP MAIN

    ORG 0003H

    AJMP int0

    ORG 0100H

    MAIN:MOV SP,#60H

    MOV R4,#30

    MOV TMOD,#01H

    MOV TH0,#00H

    MOV TL0,#00H

    MOV IE,#81H

    SETB TR0

    SETB IT0

    LOOP:LCALL BCD

    LCALL UBCD

    LOOP1: LCALL XIANSHI

    LCALL DELAY

    DJNZ R4,LOOP1

    AJMP LOOP

    BCD:MOV A,#00H

    MOV 38H,41H

    MOV 37H,40H

    MOV 34H,A

    MOV 35H,A

    MOV 36H,A

    MOV A,37H

    MOV B,#100

    DIV AB

    MOV 35H,A

    MOV A,B

    MOV B,#10

    DIV AB

    SWAP A

    ADD A,B

    MOV 36H,A

    MOV R3,38H

    CJNE R3,#0,JIA

    AJMP RETURN

    JIA: CLR C

    MOV A,36H

    ADDC A,#56H

    DA A

    MOV 36H,A

    MOV A,35H

    ADDC A,#02H

    DA A

    MOV 35H,A

    MOV A,34H

    ADDC A,#0

    MOV 34H,A

    DJNZ R3,JIA

    RETURN:RET

    UBCD: MOV A,34H

    CJNE A,#00H,WUWEI

    MOV R1,#35H

    MOV R0,#36H

    MOV A,#00H

    XCHD A,@R0

    MOV 30H,A

    MOV A,@R0

    SWAP A

    MOV 31H,A

    MOV A,#00H

    XCHD A,@R1

    MOV 32H,A

    MOV A,@R1

    更多相关内容
  • 74185是用途很广的芯片,它可以将二进制转换进制BCD码。 但是,无论Multism还是Proteus,均没有...作者参考74185的Datasheet,利用分立元件制作了74185仿真电路,可将8位二进制转换十进制BCD码(范围0~255)。
  • 本文主要介绍了如何利用左移的原理去进行16位带符号数二进制转换为BCD码,用Quartus II软件和Modelsim软件进行编译仿真,最后再从Quartus II软件上下载到开发板上进行测试。
  • 74185是用途很广的芯片,它可以将二进制转换进制BCD码。 但是,无论Multism还是Proteus,均...作者参考74185的Datasheet,利用分立元件制作了74185仿真电路,可将12位二进制转换十进制BCD码(范围0~4095)。
  • 16位二进制BCD码的程序算法及51汇编实现:n=b15~b0n=[b15~b8]*256+[b7~b0]=[b15~b12]*4096+[b11~b0],高四[b15~b12]取值范围0~15,代表了4096的个数n=[b15~b12]*4000+{[b15~b12]*(100-4)+[b11~b0]}用x 代表[b15...

    16位二进制转BCD码的程序算法及51汇编实现:

    n=b15~b0

    n=[b15~b8]*256+[b7~b0]

    =[b15~b12]*4096+[b11~b0]

    ,高四位[b15~b12]取值范围为0~15,代表了4096的个数

    n=[b15~b12]*4000+{[b15~b12]*(100-4)+[b11~b0]}

    用x 代表[b15~b12],有:

    n=x*4000+{x*(100-4)+[b11~b0]

    即:n=4*x(千位)+x(百位)+[b11~b0]-4*x

    上式中后面的位:[b11~b0]-4*x,如果小于356,就直接转换成BCD码,如果

    数值较大,就要把11~7位看成128的个数y,在百位中加上y,在十位加上3*y,并在

    [b6~b0]中减去2*y

    就有:

    n=n=4*x(千位)+(x+y)(百位)+3*y(十位)+[b6~b0]-2*y

    由此,就可以明确由高9位[b15~b7]变换出来十进制的各个位的数值,可能大于9,到最后整理一下即可。

    剩下的低7位变成BCD 码已经很简单了。

    这是别人的思路,容易理解,但用汇编也不太好写,期待有人能写出来,下面是我同学的一个算法:

    高八位减一,让第八位加上256,(存放压缩BCD码的三个字节百位加2,十位加5,各位加6)

    ORG 0000H

    AJMP MAIN

    ORG 0003H

    AJMP int0

    ORG 0100H

    MAIN:MOV SP,#60H

    MOV R4,#30

    MOV TMOD,#01H

    MOV TH0,#00H

    MOV TL0,#00H

    MOV IE,#81H

    SETB TR0

    SETB IT0

    LOOP:LCALL BCD

    LCALL UBCD

    LOOP1: LCALL XIANSHI

    LCALL DELAY

    DJNZ R4,LOOP1

    AJMP LOOP

    BCD:MOV A,#00H

    MOV 38H,41H

    MOV 37H,40H

    MOV 34H,A

    MOV 35H,A

    MOV 36H,A

    MOV A,37H

    MOV B,#100

    DIV AB

    MOV 35H,A

    MOV A,B

    MOV B,#10

    DIV AB

    SWAP A

    ADD A,B

    MOV 36H,A

    MOV R3,38H

    CJNE R3,#0,JIA

    AJMP RETURN

    JIA: CLR C

    MOV A,36H

    ADDC A,#56H

    DA A

    MOV 36H,A

    MOV A,35H

    ADDC A,#02H

    DA A

    MOV 35H,A

    MOV A,34H

    ADDC A,#0

    MOV 34H,A

    DJNZ R3,JIA

    RETURN:RET

    UBCD: MOV A,34H

    CJNE A,#00H,WUWEI

    MOV R1,#35H

    MOV R0,#36H

    MOV A,#00H

    XCHD A,@R0

    MOV 30H,A

    MOV A,@R0

    SWAP A

    MOV 31H,A

    MOV A,#00H

    XCHD A,@R1

    MOV 32H,A

    MOV A,@R1

    SWAP A

    ADD A,#10

    MOV 33H,A

    RET

    WUWEI:MOV R1,#34H

    MOV R0,#35H

    MOV A,#00H

    XCHD A,@R0

    MOV 31H,A

    MOV A,@R0

    SWAP A

    ADD A,#10

    MOV 32H,A

    MOV A,#00H

    XCHD A,@R1

    MOV 33H,A

    MOV A,@R1

    SWAP A

    ANL 36H,#0F0H

    MOV A,36H

    SWAP A

    MOV 30H,A

    展开全文
  • 本文章是关于二进制码转换BCD码的相关设计。
  • 16位二进制转换为bcd码的c51汇编程序(16 bit binary converted to BCD code C51 assembler)16位二进制转换为bcd码的c51汇编程序(16 bit binary converted to BCD code C51 assembler)Algorithm 16 bit binary code ...

    16位二进制转换为bcd码的c51汇编程序(16 bit binary converted to BCD code C51 assembler)

    16位二进制转换为bcd码的c51汇编程序(16 bit binary converted to BCD code C51 assembler)

    Algorithm 16 bit binary code to BCD and 51 assembly:

    N=b15~b0

    N=[b15~b8]*256+[b7~b0]

    =[b15~b12]*4096+[b11~b0]

    Four, the high [b15~b12] value range is 0~15, represents the number 4096

    N=[b15~b12]*4000+{[b15~b12]* (100-4) +[b11~b0]}

    X [b15~b12], a:

    N=x*4000+{x* (100-4) +[b11~b0]

    Namely: n=4*x (1000) +x (100) +[b11~b0]-4*x

    Back on the site: [b11~b0]-4*x, if less than 356, is directly converted into BCD code, if

    Larger, take 11~7 as the number 128 y, plus y at 100, ten plus 3*y, and in

    [b6~b0] minus 2*y

    There:

    N=n=4*x (1000) + (x+y) (100) +3*y (ten) +[b6~b0]-2*y

    Thus, it can be defined by the high 9 bits each numerical [b15~b7] transform out decimal places, may be greater than 9, to the end to tidy up.

    The rest of the low 7 bits into BCD code is very simple.

    This is someone else's ideas, easy to understand, but the assembly is not too good to expect someone to write, write, here is an algorithm of my classmates:

    Eight minus one, eighth and 256, (stored in compressed BCD code three bytes 100 2, ten and 5 members, plus 6)

    ORG 0000H

    AJMP MAIN

    ORG 0003H

    AJMP INT0

    ORG 0100H

    MAIN: MOV SP, #60H

    MOV R4, #30

    MOV TMOD, #01H

    MOV TH0, #00H

    MOV TL0, #00H

    MOV IE, #81H

    SETB TR0

    SETB IT0

    LOOP: LCALL BCD

    LCALL UBCD

    LOOP1: LCALL XIANSHI

    LCALL DELAY

    DJNZ R4, LOOP1

    AJMP LOOP

    BCD: MOV A, #00H

    MOV 38H, 41H

    MOV 37H, 40H

    MOV 34H, A

    MOV 35H, A

    MOV 36H, A

    MOV A, 37H

    MOV B, #100

    DIV AB

    MOV 35H, A

    MOV A, B

    MOV B, #10

    DIV AB

    SWAP A

    ADD A, B

    MOV 36H, A

    MOV R3,38H

    CJNE R3, #0, JIA

    AJMP RETURN

    JIA: CLR C

    MOV A, 36H

    ADDC A, #56H

    DA A

    MOV 36H, A

    MOV A, 35H

    ADDC A, #02H

    DA A

    MOV 35H, A

    MOV A, 34H

    ADDC A, #0

    MOV 34H, A

    DJNZ R3, JIA

    RETURN:RET

    UBCD: MOV A, 34H

    CJNE A, #00H, WUWEI

    MOV R1, #35H

    MOV R0, #36H

    MOV A, #00H

    XCHD A, @R0

    MOV 30H, A

    MOV A, @R0

    SWAP A

    MOV 31H, A

    MOV A, #00H

    XCHD A, @R1

    MOV 32H, A

    MOV A, @R1

    SWAP A

    ADD A, #10

    MOV 33H, A

    RET

    WUWEI: MOV R1, #34H

    MOV R0, #35H

    MOV A, #00H

    XCHD A, @R0

    MOV 31H,

    MOV A,R0

    交换

    添加,# 10

    MO

    展开全文
  • 16位二进制转换BCD码的verilog代码,Quartus II软件打开。Keil也可以打开。EDA课程实验作业参考。
  • 可以将8位二进制码转换为BCD码二进制表示12
  • 一直感觉这是个很简单的问题,直到突然自己连BCD都不太清楚的时候,才发现这没有看起来那么简单,这里介绍里任意位二进制转为BCD的verilog代码,这个转换方法也可以用在C上面,此原创,转载请注明,谢谢。
  • 51单片机中常用的多字节二进制码转压缩BCD码的示例代码(含清晰的注释),后3页使用代码编辑器重排版(对齐、美观)。 需要doc版本的可通过邮件zjyzfn@139.com联系。
  • 74185是用途很广的芯片,它可以将二进制转换进制BCD码。 但是,无论Multism还是Proteus,均...作者参考74185的Datasheet,利用分立元件制作了74185仿真电路,可将16位二进制转换十进制BCD码(范围0~65535)。
  • 方便读者学习,本文小编给读者提供了用verilog将二进制码转换为十进制BCD码的程序设计方法,供读者参考。
  • 本文大家介绍了二进制BCD转换电路。
  • 二进制BCD码(内含完整C语言的代码)
  • 74185是用途很广的芯片,它可以将二进制转换进制BCD码。 但是,无论Multism还是Proteus,均没有...作者参考74185的Datasheet,利用分立元件制作了74185仿真电路,可将7位二进制转换十进制BCD码(范围0~127)。
  • 51单片机中常用的多字节二进制码转压缩BCD码的示例代码(含清晰的注释),后3页使用代码编辑器重排版(对齐、美观)。 需要doc版本的可通过邮件zjyzfn@139.com联系。
  • Multisim仿真 二进制转换为BCD码 multisim14仿真源文件
  • 在做而论道上篇博文中,回答了一个16位二进制转换BCD码的问题,给出了一个网上广泛流传的经典转换程序。.说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经...

    在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。

    .

    说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。

    但是这个程序有个明显的缺点,就是执行时间太长,转换16位二进制数,就必须循环16遍,转换48位二进制数,就必须循环48遍。

    上述的HEX2BCD子程序,虽然长度仅仅为26字节,执行时间却要用331个机器周期。

    .

    单片机系统多半是用于各种类型的控制场合,很多时候都是需要“争分夺秒”的,在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。

    为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!) 执行时间仅仅是经典程序的1/4!

    .

    近来,在网上发现了一个链接:http://www.mcu123.com/news/Article/uc/uc8051/200803/4751.html,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。这篇文章提到的程序,一直也没有找到,也难辩真假。

    这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。比如说文中提到的:“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。

    .

    下面说说做而论道的编程思路。

    ;-----------------------------------------------------------------------

    ;已知16位二进制整数n以b15~b0表示,取值范围为0~65535。

    ;那么可以写成:

    ; n = [b15 ~ b0]

    ;把16位数分解成高8位、低8位来写,也是常见的形式:

    ; n = [b15~b8] * 256 + [b7~b0]

    ;那么,写成下列形式,也就可以理解了:

    ; n = [b15~b12] * 4096 + [b11~b0]

    ;式中高4位[b15~b12]取值范围为0~15,代表了4096的个数;

    ;上式可以变形为:

    ; n = [b15~b12] * 4000 + {[b15~b12] * (100 - 4) + [b11~b0]}

    ;用x代表[b15~b12],有:

    ; n =   x * 4000 + {x * (100 - 4) + [b11~b0]}

    ;即:

    ; n =   4*x (千位) + x (百位) + [b11~b0] - 4*x

    ;写到这里,就可以看出一点BCD码变换的意思来了。

    ;

    ;上式中后面的位:[b11~b0] - 4*x,如果小于256,那就太简单了,马上就可以去按照常规转换BCD了。

    ;如果数值较大,就要把[b11~b7]看成128的个数y;在百位中加上y、在十位加上3*y、并在[b6~b0]中减去2*y。

    ;那么就有:

    ; n = 4*x (千位) + x (百位) + [b11~b0] - 4*x

    ; n = 4*x (千位) + (x + y) (百位) + 3*y (十位) + [b6~b0] - 2*y

    ;由此,就可以明确由高9位[b15~b7]变换出来十进制的各个位的数值,可能大于9,到最后整理一下即可。

    ;剩下的低7位[b6~b0],已经是单字节数据,变换成BCD码那就十分简单了。

    ;-----------------------------------------------------------------------

    从最后的表达式中可以看出,高9位变换的计算方法极为简单,只是使用左移、加减等指令即可,基本上不涉及多字节的运算。

    编程的时候,要充分利用单字节、单周期的指令,使程序的长度和执行时间尽量缩短。

    做而论道的编程思路已经给出,程序代码还是过一段时间再公布,给大家留下一个发挥的时间。

    感兴趣的网友可以留言,写出自己编写的程序。

    展开全文
  • 74185是用途很广的芯片,它可以将二进制转换进制BCD码。 但是,无论Multism还是Proteus,均...作者参考74185的Datasheet,利用分立元件制作了74185仿真电路,可将10位二进制转换十进制BCD码(范围0~1023)。
  • 8位二进制BCD码.docx

    2019-06-20 16:54:49
    使用Verilog语言开发的将8转入二进制数据转换为BCD码,其中转换后分别输出个、、百位。
  • 使用LABVIEW 生成的子VI 可以有效得将二进制数,转换16进制数的BCD码。 常用于校验和分析上。
  • 本例单字节二进制数(0X20)转换为非压缩BCD ,存在0X25,0X24,0X23 中,0X25 百位,0X23 。main: MOV a,@0xa4 ;赋值MOV 0x20,aMOV 0x21,aMOV 0x22,aMOV a,@0x0 ;0x23,0x24,0x25 单元清0MOV 0x23,aMOV 0x24,a...
  • 浅谈BCD码二进制转换

    千次阅读 2021-12-06 10:33:40
    一、BCD码 1、BCD码概述 2、BCD分类 1、有权 2、无权 3、BCD运算问题 二、二进制BCD码 1、原理实现 2、模块划分 3、仿真调试 4、仿真验证 三、BCD码二进制 1、原理实现 2、模块划分 3、仿真验证
  • 4位二进制-BCD码转换

    千次阅读 2021-04-03 16:34:10
    module bin2bcd_4bits ( input [3 : 0] bin, input EN, output logic [4 : 0] bcd, output logic valid ); always_comb begin if(EN==1) begin case(bin) 4'b0001: begin bcd = 5'b00001 ; ...
  • 目录写在前面正文快速认识实现方式一实现方式写在最后写在前面FPGA基础知识极简教程(9)讲到了七段数码管的显示Verilog设计,我们都知道,要在数码管上显示的数字,使用BCD编码是具有优势的(或者是最正确的)。...
  • 二进制转8421BCD码的算法

    千次阅读 2021-05-20 12:35:15
    1. BCD码的求和BCD码使用4位二进制数来表示进制中0~9这10个数的数码。例如,进制的237,其BCD码就是0010_0011_0111,但是其二进制是1110_1101。我们先来研究两个4BCD码相加的情况。设这两个BCD码对应的...
  • 微机原理实验六二进制转换为BCD码.pdf

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 12,081
精华内容 4,832
关键字:

16位二进制转换为bcd码