(实验二)二进制码转换为BCD码实验报告

合集下载

EDA实验报告实验二:二进制码转换成BCD码

EDA实验报告实验二:二进制码转换成BCD码

实验二二进制转换成BCD码
一、实验目的
设计并实现一个4位二进制码转换成BCD码的转换器。

二、实验仪器
SOPC实验箱、Quartus II软件
三、实验原理
对于不同代码之间的转换,有用硬件实现的,也有用软件实现的。

对于硬件实现,可以用一般的组合逻辑电路实现,也可以用译码器、编码器或只读存储器来实现。

本实验的原理见表3-1所示。

四、实验内容
1、启动Quartus II 建立一个空白工程,然后命名。

2、新建VHDL源程序文件并命名,输入程序代码并保存,进行综合编译,若在编译过程中发现错误,则找出并更正错误,直至编译成功为止。

3、新建仿真文件,对各模块设计进行仿真,验证设计结果。

打印仿真结果。

五、实验步骤
1.各模块程序:
1)用文本输入法实现秒的计时,程序如下:
module BCD(D,B);
output [4:0] B;
input [3:0] D;
reg [4:0] B;
always@ (D)
begin
if(D<4'b1010) begin B[3:0]=D[3:0];B[4]=1'b0;end
else begin B[3:0]=D[3:0]-4'b1010;B[4]=1'b1;end
end
endmodule
2.建立工作库文件夹,输入设计项目原理图或vorilog代码并存盘。

3.生成RTL图。

4.进行波形仿真,仿真后波形如下:
六、实验结果与现象验证
输入任何一个十六进制数产生了与二进制码转换成BCD码的转换真值表相对于的BCD码.。

数码显示译码器实训报告

数码显示译码器实训报告

一、实训目的通过本次实训,掌握数码显示译码器的基本原理、工作原理及电路设计方法,了解数码显示译码器在数字电路中的应用,提高动手能力和实践技能。

二、实训内容1. 数码显示译码器原理及分类(1)原理:数码显示译码器是一种将二进制、BCD码等编码转换为数码管显示的电路。

它主要由编码器、译码器、驱动器等组成。

(2)分类:根据编码方式,可分为二进制译码器、BCD码译码器、十六进制译码器等;根据输出方式,可分为共阳极译码器和共阴极译码器。

2. 数码显示译码器电路设计(1)共阳极译码器电路设计以4-7译码器为例,输入端为二进制编码,输出端为7段数码管的驱动信号。

电路图如下:```A||+---+---+---+---+| | | | |B---+ | | +---C| | | | |+---+---+---+---+| | | |D---+ | +---E| | | |+---+---+---+---+| | | | |F---+ | | +---G| | | | |+---+---+---+---+H```(2)共阴极译码器电路设计以CC4511BCD译码器为例,输入端为BCD码,输出端为7段数码管的驱动信号。

电路图如下:```A||+---+---+---+---+| | | | |B---+ | | +---C| | | | |+---+---+---+---+| | | |D---+ | +---E| | | |+---+---+---+---+| | | |F---+ | | +---G| | | |+---+---+---+---+H```3. 数码显示译码器应用(1)计时器:将计数器输出的二进制编码转换为数码管显示,实现计时功能。

(2)数码管显示模块:在嵌入式系统、智能仪表等设备中,将数字信号转换为数码管显示,方便用户读取数据。

(3)地址译码:在存储器、I/O端口等地址译码电路中,将地址信号转换为输出端口,实现数据传输。

二进制转换成十进制BCD码(加3移位法)

二进制转换成十进制BCD码(加3移位法)

⼆进制转换成⼗进制BCD码(加3移位法)“原来的⼆进制数⼗⼏位,则左移时就要左移⼏位”"⼆进制数调整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; I<17; I=I+1)begin{TEMP, C}={TEMP[18:0], C, 1'b0};//左移⼀位 if (TEMP[3:0]>4'b0100)beginTEMP[3:0]=TEMP[3:0]+3; // >4则加3endif (TEMP[7:4]>4'b0100)beginTEMP[7:4]=TEMP[7:4]+3;endif (TEMP[11:8]>4'b0100)beginTEMP[11:8]=TEMP[11:8]+3;endif (TEMP[15:12]>4'b0100)beginTEMP[15:12]=TEMP[15:12]+3;endif (TEMP[19:16]>4'b0100)beginTEMP[19:16]=TEMP[19:16]+3;end{BW, BQ, BB, BS, BG}={TEMP[18:0], A[0]}; endendendmodule。

二进制与BCD码转换资料

二进制与BCD码转换资料

16位二进制数转换成BCD码的的快速算法-51单片机2010-02-18 00:43在做而论道上篇博文中,回答了一个16位二进制数转换成BCD码的问题,给出了一个网上广泛流传的经典转换程序。

程序可见:/%D7%F6%B6%F8%C2%DB%B5%C0/blog/item/6154551f93ba561440341732. html中的HEX2BCD子程序。

.说它经典,不仅是因为它已经流传已久,重要的是它的编程思路十分清晰,十分易于延伸推广。

做而论道曾经利用它的思路,很容易的编写出了48位二进制数变换成16位BCD码的程序。

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

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

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

为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的1/4!.近来,在网上发现了一个链接:/news/Article/uc/uc8051/200803/4751.html,也对这个经典转换程序进行了改进,话是说了不少,只是没有实质性的东西。

这篇文章提到的程序,一直也没有找到,也难辩真假。

这篇文章好像是选自某个著名杂志,但是在术语的使用上,有着明显的漏洞,不像是专业人员的手笔。

比如说文中提到的:“使用51条指令代码,但执行这段程序却要耗费312个指令周期”,就是败笔。

51条指令代码,真不知道说的是什么,指令周期是因各种机型和指令而异的,也不能表示确切的时间。

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

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

(实验二)二进制码转换为BCD码实验报告

(实验二)二进制码转换为BCD码实验报告

实验二二进制码转换为BCD码一、实验目的1、掌握数码转换基本方法,加深对数码的理解。

2、用于十进制BCD码显示。

二、实验内容将AX的内容转换为十进制BCD码。

三、实验程序框图四、实验步骤脱机模式:(1)在P.态,按SCAL键,输入2CE0,按EXEC键。

(2)复位RST键,由于AX中给定数为0FFFF,查看BCD码结果保留在4100H~4104H 单元中,故其值应为06、05、05、03、05。

联机模式:(1)在PC机和实验系统联机状态下,运行该实验程序,可用鼠标左键单击菜单栏“文件”或工具栏“打开图标”,弹出“打开文件”的对话框,然后打开8kAsm文件夹,点击S2.ASM 文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。

(2)复位“系统复位”键,由于AX中给定数为0FFFF,查看BCD码结果保留在4100H~4104H单元中,故其值应为06、05、05、03、05。

注:操作过程参照“实验一二进制多位加法运算”。

五、实验程序清单X:\DICE-8086K3微机原理与接口实验箱CDROM\CODE\86kasm\S2.ASM;将AX拆为5个BCD码,并存入Result开始的5个单元DATA SEGMENT AT 0 ;S2.ASM,BIN-->BCDORG 4000HRESULT DB 5 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATAORG 2CE0HSTART PROC NEARMOV AX, DATAMOV DS, AXMOV DX,0000HMOV AX, 65535MOV CX, 10000DIV CXMOV RESULT, AL ; 除以 10000, 得WAN位数MOV AX,DXMOV DX,0000HMOV CX, 1000DIV CXMOV RESULT+1, AL ; 除以 1000, 得QIAN位数MOV AX,DXMOV DX,0000HMOV CX, 100DIV CXMOV RESULT+2, AL ; 除以 100, 得BAI位数MOV AX,DXMOV DX,0000HMOV CX, 10DIV CXMOV RESULT+3, AL ; 除以 10, 得SHI位数MOV RESULT+4, DL ; 得GE位数JMP $CODE ENDSEND START。

微型计算机实验:二进制到BCD_转换

微型计算机实验:二进制到BCD_转换

上机实践报告一、实验目的:1.掌握Lab2000p实验教学系统基本操作;2.掌握8088/8086汇编语言的基本语法结构;3.熟悉8088/8086汇编语言程序设计基本方法。

二、实验设备b2000p实验教学系统;2.IBM-PC机三、实验内容和实验步骤1.二进制到BCD 转换1)实验要求将地址为2000H的2字节二进制数(<999)转换成BCD码,保存在地址为2010H开始的存储单元中(高位在低地址)。

2)程序框图3)程序代码code segmentassume cs:codestart:mov ax, 0mov ds, axmov bx, 2000hmov ax, [bx]mov cl, 100div clmov [bx+10h], al ; 除以 100, 得百位数mov al, ahmov ah, 0mov cl, 10div clmov [bx+11h], al ; 余数除以 10, 得十位数mov [bx+12h], ah ; 余数为个位数jmp $code endsend start4)实验步骤⑴开启计算机电源,开启Lab2000p实验箱电源;⑵启动WAVE6000软件;⑶确认WAVE6000与Lab2000p连接;⑷输入源代码;⑸编译源代码(F9);⑹在2000H存储单元输入2字节二进制数(<999);⑺单步运行源代码(F8),观察每条指令执行结果;⑻待程序运行结束观察2010H开始的3字节存储单元,并与2000H开始的存储单元比较。

2、BCD码到ASCII码转换1)实验要求将地址为2000H的2位BCD码(高位在低地址)转换成ASCII码,保存在地址为2010H 开始的存储单元中(高位在低地址)。

2)提示采用查表形式,现在数据段建立一个二进制与ASCII的对照表,再用查表指令获取ASCII码。

3、数据排序1)实验要求将2000H开始的10字节数按从小到大排序,结果存回2000H开始的存储单元中。

数字逻辑转换实验报告

数字逻辑转换实验报告

一、实验目的1. 理解和掌握数字逻辑转换的基本原理和方法。

2. 掌握将不同编码形式的数字信号相互转换的技巧。

3. 通过实验验证数字逻辑转换电路的正确性和性能。

二、实验原理数字逻辑转换是指将一种数字信号转换为另一种数字信号的过程。

常见的数字逻辑转换包括BCD码与二进制码之间的转换、格雷码与二进制码之间的转换、8421码与余3码之间的转换等。

本实验主要涉及以下几种转换:1. BCD码与二进制码之间的转换:BCD码(Binary-Coded Decimal)是一种用4位二进制数表示1位十进制数的编码方式。

将BCD码转换为二进制码时,只需将每一位BCD码直接转换为对应的二进制码即可。

2. 格雷码与二进制码之间的转换:格雷码(Gray Code)是一种循环码,相邻两个码字之间只有一个位码发生改变。

将格雷码转换为二进制码时,只需将格雷码的最低位取反即可。

3. 8421码与余3码之间的转换:8421码是一种有权码,从左到右,第一位1代表2,第二位1代表4,第三位1代表2,第四位1代表1。

余3码是由8421BCD码加上0011形成的一种无权码。

将8421码转换为余3码时,只需将8421码的每一位加3即可。

三、实验设备与器材1. 数字逻辑实验箱2. 数字逻辑转换电路模块3. 示波器4. 信号发生器5. 电源四、实验步骤1. 连接实验电路:根据实验要求,连接数字逻辑转换电路模块,并确保电路连接正确。

2. 设置输入信号:使用信号发生器产生待转换的数字信号,并将其输入到转换电路中。

3. 观察转换结果:使用示波器观察转换电路的输出信号,记录实验数据。

4. 比较理论值与实验值:根据实验原理,计算理论值,并与实验值进行比较。

5. 分析实验数据:分析实验数据,总结实验结果,验证数字逻辑转换电路的正确性和性能。

五、实验数据及分析1. BCD码与二进制码之间的转换输入BCD码:0011理论转换结果:0001 0011实验转换结果:0001 00112. 格雷码与二进制码之间的转换输入格雷码:1100理论转换结果:1110实验转换结果:11103. 8421码与余3码之间的转换输入8421码:0101理论转换结果:0110实验转换结果:0110通过实验数据的对比分析,可以得出以下结论:1. 实验电路能够正确实现BCD码与二进制码、格雷码与二进制码、8421码与余3码之间的转换。

单片机二进制BCD码转换实验程序流程图

单片机二进制BCD码转换实验程序流程图

二进制BCD码转换一、实验目的1.掌握简单的数值转换算法2.基本了解数值的各种表达方法二、实验说明单片机中的数值有各种表达方式,这是单片机的基础。

掌握各种数制之间的转换是一种基本功。

我们将给定的一字节二进制数,转换成二十进制(BCD)码。

将累加器A的值拆为三个BCD码,并存入RESULT开始的三个单元,例程A赋值#123。

三、实验内容及步骤1.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB线)。

2.启动PC机,打开KEIL软件,软件设置为模拟调试状态。

在所建的Project文件中添加TH2.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA) (在MEMORY#3中输入D:30H 回车),点击暂停按钮,观察地址30H、31H、32H的数据变化,30H更新为01,31H更新为02,32H更新为03。

用键盘输入改变地址30H、31H、32H的值,点击复位按钮后,可再次运行程序,观察其实验效果。

修改源程序中给累加器A的赋值,重复实验,观察实验效果。

3.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。

四、流程图及源程序(见光盘中的程序文件夹)1.源程序RESULT EQU 30HORG 0000HLJMP STARTBINTOBCD:MOV B,#100DIV ABMOV RESULT,A ;除以100得百位数MOV A,BMOV B,#10DIV ABMOV RESULT+1,A ;余数除以10得十位数MOV RESULT+2,B ;余数为个位数RETSTART:MOV SP,#40HMOV A,#123CALL BINTOBCDLJMP $END2.流程图。

汇编程序设计—二进制码转换为BCD码

汇编程序设计—二进制码转换为BCD码

汇编程序设计—二进制码转换为BCD码首先,我们需要了解什么是BCD码。

BCD码(二进制编码表达式)是一种用4位二进制数字表示一个十进制数的编码方式。

它的范围是0到9,每个数字使用4位二进制进行表示,因此一个BCD码的范围是0000到1001以下是一个示例汇编程序设计,它将输入的二进制码转换为BCD码,并将结果保存在内存中。

```assemblyorg 100hsection .dataoutput resb 4 ; 输出的BCD码section .textstart:mov ax, input ; 将输入的二进制码加载到寄存器AXmov cx, 4 ; 设置循环次数为4, 一个BCD码使用4位二进制表示convert:rol ax, 1 ; 将二进制码左移1位add dl, 30h ; 将二进制码转换为对应的ASCII码,并保存在寄存器DLmov [output+cx-1], dl ; 将结果保存在内存中loop convert ; 循环exit:mov ah, 4Ch ; 设置退出系统调用功能号int 21h ; 调用系统中断```上述汇编程序设计的主要思路是,使用循环将输入的二进制码逐位转换为BCD码,并将结果保存在内存中。

在每次循环迭代中,我们使用`rol`指令将二进制码左移1位,并通过`and`指令提取最后4位二进制码。

接下来,我们通过`add`指令将二进制码转换为对应的ASCII码,并将结果保存在寄存器DL中。

最后,我们将结果存储在内存中,并通过`loop`指令继续处理下一个二进制位。

以上是一个简单的示例汇编程序设计,它将二进制码转换为BCD码。

你可以根据自己的需求进行修改和扩展。

编写和调试汇编程序需要一定的经验和知识,建议你阅读相关的汇编编程文档和教程,以便更好地理解和掌握汇编程序设计。

二进制数转换为BCD 码

二进制数转换为BCD 码

二进制数转换为BCD 码作者:佚名来源:不详录入:Admin更新时间:2008-7-26 20:09:41点击数:2【字体:】本例为单字节二进制数(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,aMOV 0x25,aMOV a,@0x64 ;对100 的个数计数MOV 0x26,aMOV a,@0x25 ;百位存在0x25 中MOV 0x04,acall a0 ;调计数子程MOV a,@0x0a ;对10 的个数计数MOV 0x26,adec 0x04 ;个位存在0x24 中call a0MOV a,0x22 ;除去百位,十位,余下的即个位,存入0x23MOV 0x23,aself: jmp selfa0: ;计数子程MOV a,0x26sub 0x22,ajbs 0x03,2jmp a1inc 0x00 ;无余数则对应位加1MOV a,@0x0 ;0x21 与0x22 在返回时应保持相同MOV 0x21,areta1: jbs 0x03,0 ;小于则跳a2jmp a2inc 0x00 ;大于则计数值加1MOV a,0x22MOV 0x21,a ;将0x22 保存到0x21 中jmp a0 ;跳回a0 继续计数a2: MOV a,0x21 ;0x21 中保存的减之前的数据,此时恢复到0x22 MOV 0x22,areteop本例为单字节二进制数(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,aMOV 0x25,aMOV a,@0x64 ;对100 的个数计数MOV 0x26,aMOV a,@0x25 ;百位存在0x25 中MOV 0x04,acall a0 ;调计数子程MOV a,@0x0a ;对10 的个数计数MOV 0x26,adec 0x04 ;个位存在0x24 中call a0MOV a,0x22 ;除去百位,十位,余下的即个位,存入0x23 MOV 0x23,aself: jmp selfa0: ;计数子程MOV a,0x26sub 0x22,ajbs 0x03,2jmp a1inc 0x00 ;无余数则对应位加1MOV a,@0x0 ;0x21 与0x22 在返回时应保持相同MOV 0x21,areta1: jbs 0x03,0 ;小于则跳a2jmp a2inc 0x00 ;大于则计数值加1MOV a,0x22MOV 0x21,a ;将0x22 保存到0x21 中jmp a0 ;跳回a0 继续计数a2: MOV a,0x21 ;0x21 中保存的减之前的数据,此时恢复到0x22 MOV 0x22,areteop。

译码器应用设计实验报告

译码器应用设计实验报告

译码器应用设计实验报告引言译码器(Decoder)是数字电路中常用的逻辑电路之一,它实现了将输入数字码转换成输出端口的控制信号。

译码器被广泛应用于数字系统中,如计算机、通信、测控等领域。

通常情况下,译码器基于真值表或卡诺图设计,可以根据输入的不同编码方式,输出相应的解码结果。

本实验主要介绍译码器的应用设计。

通过实验,我们将学会如何使用译码器来实现数字系统的控制和数据处理任务。

本实验所涉及的译码器有BCD-7段译码器、数值译码器、时序译码器以及存储器译码器等。

实验器材1. 逻辑计算器2. 示波器3. 数字电路实验箱4. 5V直流电源5. 译码器(BCD-7段译码器、数值译码器、时序译码器和存储器译码器)6. LED数码管实验原理1. BCD-7段译码器BCD-7段译码器是将4位BCD码转换成7段数码管显示的译码器。

8个BCD码,分别对应着数字0~9和字母A~F,输出接到控制7个LED数码管的段选端口和1个公共阴极的位选端口。

2. 数值译码器数值译码器是将4位二进制数转换成BCD码的译码器。

通过数值译码器,可以将数字的二进制编码转换成BCD编码,从而实现数字的BCD码显示。

译码器输出接LED数码管的输入端口。

时序译码器是根据不同状态的时序信号,将输入的二进制数码转换成对应的控制信号的译码器。

将时序信号和数码信号分别输入至译码器的两个输入端口,译码器将输出对应的动作信号。

常用于时序控制电路的设计中。

4. 存储器译码器存储器译码器是将存储芯片中的地址码转换成控制芯片的输入信号的译码器。

存储芯片中的地址码分别对应着芯片的不同存储单元,译码器将地址码转换成控制信号,使控制芯片可以正确访问存储芯片中的数据。

实验设计实验步骤:(1)将BCD码8个输入引脚分别接到译码器的8个输入端口上。

(4)将5V直流电源连接到译码器和LED数码管上。

实验结果:输入BCD码0000~1111时,LED数码管正确显示相应的数字0~9和字母A~F。

51单片机实验-实验一 二进制到BCD转换

51单片机实验-实验一 二进制到BCD转换

实验一二进制到BCD转换一、实验内容将存放在R2中的一个单字节二进制数,转换成非压缩的二—十进制(BCD)码,并存放到R3R4R5中。

二、实验仪器和设备PC机、星研Star16L仿真器系统+仿真头PODPH51(DIP)、EL-Ⅱ型通用接口板实验电路。

三、实验过程及结果①使用星研仿真软件建立新工程文件1)进入星研仿真软件2)系统基本参数设置\辅助\仿真器\选择Star16L,且取消模拟调试器\辅助\通信\USB2)建立项目文件\项目\新建项目文件\输入项目文件名后,进入项目文件设置选项其中:仿真头选择:PODPH51(DIP);CPU选择:8051类;其它选项一般选择默认值。

(也可以在建立项目文件后,在\项目\设置项目文件\选项下修改仿真头和CPU的设置)3)新建源文件\文件\新建\新建文件\选择项目文件,然后设置文件后缀为.ASM(汇编语言)②基本程序ORG 0000H ;设置起始地址BCD1:MOV R2,# 00100000B ;给R2赋初值,二进制数0010 0000BMOV A,R2 ;将R2单元里的数值,也就是00100000B送入累加器A中MOV B,#100 ;100作为除数送入BDIV AB ;A单元中的数除以B单元中的数MOV R3,A ;百位数送R3,余数在B中MOV A,#10 ;分离十位和个位数XCH A,B ;余数送A,除数10留在B中DIV AB ;分离出十位在A, 个位在B中MOV R4,A ;十位送R4MOV A,BMOV R5,A ;个位送R5NOPSJMP $END运算结果:二进制数00100000B换算成非压缩BCD码应该为32,则R3单元里的数值应该为0,R4单元里的数值应该为3,R5单元里的数值应该为2。

运行结果:R3为0,R4中为3,R5中为2,与运算结果相同,实验程序正确。

③将基本程序进行修改,添加子程序后验证ORG 0000H ;设置初始地址START:MOV R2,#00100000B ;给R2赋初值00100000BLCALL BCD ;调用子程序BCDSJMP $BCD: ;子程序BCDMOV A,R2 ;将R2单元里的数值,也就是00100000B送入累加器A中MOV B,#100 ;100作为除数送入BDIV AB ;A单元中的数除以B单元中的数MOV R3,A ;百位数送R3,余数在B中MOV A,#10 ;分离十位和个位数XCH A,B ;余数送A,除数10留在B中DIV AB ;分离出十位在A, 个位在B中MOV R4,A ;十位送R4MOV A,BMOV R5,A ;个位送R5RET ;返回主程序END运行结果:R3为0,R4中为3,R5中为2,与上面基本程序的运行结果相同,所以改编后的实验程序是正确的。

汇编实验报告--二进制到BCD码转换

汇编实验报告--二进制到BCD码转换

实验二:二进制到BCD码转换学生姓名:何茂杰学号:2010305104 专业班级:计算机本科一班指导老师:文远熔实验日期:实验成绩:一、实验目的1.掌握无条件转移指令、条件转移指令;2.掌握利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法;3.掌握直接向视频RAM送ASCII码进行屏幕显示的方法;4.掌握屏幕字符显示程序编写与调试。

二、实验内容将存放在BIN的一个16位无符号数转换为BCD码,结果的万、千,百、十、个位依次存放在BCD+0、BCD+1、BCD+2、BCD+3、BCD+4单元内三、实验环境PC微机DOS操作系统或Windows 操作系统四、实验要求对操作数的寻址、转换方法至少要由两种以上。

五、主要实验步骤及结果1.直接向VRAM送ASCII码显示字符(1)用A命令在100H处键入下列程序MOV AX,B000MOV DS,AXXOR AL,ALXOR BX,BXMOV CX,100LOP:MOV [BX],ALINC BXINC ALPUSH CXMOV CX,8DELY:PUSH CXMOV CX,0J:LOOP JPOP CXLOOP DELYPOP CXLOOP LOPINT 20(2)用N命令和W命令将此程序存入文件中。

(一定要先存入!)(3)用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT 21H 2号功能调用有何不同?控制字符区在该程序中没有显示,在上一个程序中显示为笑脸等符号。

(4)自编程序:将存放在BIN的一个16位无符号数转换为BCD码反汇编;-U10013A3:0100 BB0010 MOV BX,100013A3:0103 8B07 MOV AX,[BX]13A3:0105 BB0000 MOV BX,000013A3:0108 BA0000 MOV DX,000013A3:010B BB0A00 MOV BX,000A13A3:010E F7F3 DIV BX13A3:0110 A21310 MOV [1013],AL13A3:0113 89161410 MOV [1014],DX13A3:0117 BB6400 MOV BX,006413A3:011A F7F3 DIV BX13A3:011C A21210 MOV [1012],AL13A3:011F 89D0 MOV AX,DX执行情况:-t=100AX=0000 BX=1000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000DS=13A3 ES=13A3 SS=13A3 CS=13A3 IP=0103 NV UP EI PL NZ NA PO NC 13A3:01038B07 MOV AX,[BX] DS:1000=0000六、思考题利用INT 21H 显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?答:利用INT 21H显示时,07H-0DH的控制符会用笑脸之类的符号显示;直接向VRAM 送ACSII码时,07H-0DH的控制符不显示。

汇编程序设计—二进制码转换为BCD码

汇编程序设计—二进制码转换为BCD码

汇编程序设计—二进制码转换为BCD码
一、算法原理
BCD(Binary Coded Decimal)码是把十进制数据以二进制的方式进
行编码,每四位二进制数字表示一个十进制的数字,比如数字“7”用二
进制表示为“0111”,把“0111”放在一起就是十进制数“7”的BCD码。

1)对任意两个BCD码,可以按位相加,得到结果,其运算规则如下:(1)如果两个BCD码都是规范的BCD码,其相加结果也是BCD码;
(2)如果两个BCD码的相加结果不是正确的BCD码,则可以在最高
位1的位置添加1,使之成为BCD码,另一个BCD位置上也添加1,然后
最低位置上的1被移位,最终结果也是BCD码。

2)工程实现
该BCD码转换程序主要由二进制转换为BCD码的过程组成,根据算法
原理,实现程序如下:
1.首先把输入的二进制码按4位1组进行分组,得到分组后的二进制数,如果分组后的高位不足4位,则用0补足,得到规范的二进制码;
2.对二进制码进行转换,将2进制码转换成BCD码,得到相应的BCD 码;
3.对于每组BCD码,检查它是否是正确的BCD码,如果不是则需要添
加1;
4.最后将BCD码拼接起来,就是最终的BCD码结果。

二、汇编代码
MOV AL, offset BinaryCode ; 把二进制码移到AL中MOVCL,4;CL设置为4。

华工微机原理实验二数码转码编程及程序调试实验报告

华工微机原理实验二数码转码编程及程序调试实验报告

实验二 数码转码编程及程序调试一、实验目的1.掌握不同进程数及编码相互转换的程序设计方法,加深对数码转换的理解;2.进一步熟悉键盘使用方法;3.进一步熟悉调试程序的方法。

二、实验设备装有汇编软件的IBMPC 机一台 三、实验内容及步骤计算机输入设备输入的信息一般ASCii 码或BCD 码表示的数据或字符,CPU 处理信息一般均用二进制数进行计算或其它处理,处理结果输出的外设一般要求变为ASCII 码,BCD 码或七段显示码等。

因此,在应用软件中各累数制的转换和代码的转换是必不可少的。

将ASCII 码表示的十进制数转换为二进制数,十进制数可表示为: l nl l n n nn D D D D 10*10* (10)*10*60011∑=--=+++L D 代表十进制1,2,3,···9,0;((...(10*0=∑=l nl lD012110*)...10*)10*)10*D D D D D n n l n +++++--由式(2)可归纳十进制数转换为二进制数的方法:从十进制的最高位Dn 开始作乘10加次位的操作,将结果再乘10再加下一个次位,如此重复,则可求出二进制的数结果来。

这里我们规定:被转换的五位ASCII 码十进制数存放在3500h ~3504h 单位中。

而转换结果在3800~3801单位中。

实验步骤(1) 绘制流程图;(2)输入程序并检查无误,编译链接通过。

程序代码:DATA SEGMENTORG 33FEHBUF DB 50 ;缓冲区长度DB ? ;预留用来存放实际长度DB 50 DUP(?) ;接收来自键盘的输入下信息MESG DB 'please input the BCD number you want to tranfer: $'ORG 3700HRES DW ? ;存放16进制数(输出结果)MESG1 DB 0DH,0AH,'the result is:'ARES DB 4 DUP(?), 'H$'DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 50 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACKSTART: MOV AX, DATAMOV DS, AXMOV D X, OFFSET MESGMOV AH, 09H ;屏幕显示提示信息INT 21H ;输出字符串‘please input the BCD number you want to transfer:MOV DX, OFFSET BUFMOV AH, 0AH ;接收键盘输入INT 21H ;接收来自键盘输入的5位BCD码LEA SI, BUFADD SI, 2 ;偏移地址+2 使指针指向BCD码开始的地方MOV DX, 0MOV AX, 0MOV CX, 5 ;LOOP TIMES=5MOV BX, 10L1: MUL BXMOV DL,[SI]SUB DL, 30H ;将输入的BCD码转成十进制数ADD AX, DXINC SILOOP L1LEA SI, RESMOV [SI],AXMOV BX, AXLEA SI,ARESMOV CH,4MOV CL,4OUTPUT: ROL BX,CLMOV AX, BXAND AL, 0FHADD AL, 30HCMP AL, 39HJA ADDIJMP PRINTADDI: ADD AL, 07HPRINT: MOV [SI], ALINC SIDEC CHJNZ OUTPUTMOV DX, OFFSET MESG1MOV AH, 09H ;屏幕显示提示信息INT 21HMOV AH, 4CHINT 21HCODE ENDSEND START编译链接程序:(3)运行程序,输入待转换的五位ASCII码十进制数,得到输出结果;示例:输入 12345 ,则输出3039H。

八位二进制——BCD码转换器

八位二进制——BCD码转换器

实验报告:8位二进制-BCD码转换器姓名:学号:指导教师:一.实验目的了解二进制-BCD码转换器实现原理,掌握移位加3算法,熟悉Verilog编程中模块复用模式。

二.实验任务1.掌握用移位加三算法实现二进制-BCD码转换器的设计;2.设计Verilog实验程序;3.生成比特流文件,将文件下载到开发板中进行硬件验证。

三.实验设备1.计算机(安装Xilinx ISE 10.1软件平台);2.NEXYS2 FPGA开发板一套(带USB-MIniUSB下载线)四.实验原理设计任意数目输入的二进制-BCD码转换器的方法就是采用移位加三算法(Shift and Add 3 Algorithm)。

此方法包含以下4个步骤:1)把二进制左移1位;2)如果共移了8位,那么BCD数就在百位、十位和个位列;3)如果在BCD列中,任何一个二进制数是5或者比5更大,那么就在BCD列的数值加上3;4)回到步骤1)。

其工作过程如图1所示:图1. 一个8位的二进制数转换成BCD码的步骤五.实验内容在Xilinx ISE 10.1上完成8位二进制-BCD码转换器设计,输入设计文件,仿真后,生成二进制码流文件下载到FPGA开发板上进行验证;1)依照实验1的方式,在Xilinx ISE 10.1中新建一个工程example02;2)在工程管理区任意位置单击鼠标右键,在弹出的快捷菜单中选择“New Source”命令,弹出新建源代码对话框,这里我们选择“Verilog Module”类型,输入Verilog文件名“binbcd8.v”,完整代码如下:module binbcd8(input [7:0] b,output reg [9:0] p);reg [17:0] z;integer i;always @(*)beginfor (i=0;i<=17;i=i+1)z[i]=0;z[10:3]=b;repeat(5) //重复5次beginif (z[11:8]>4)z[11:8]=z[11:8]+3;if (z[15:12]>4)z[15:12]=z[15:12]+3;z[17:1]=z[16:0];endp=z[17:8];endendmodule3)设计相应的7段显示管程序,将相应的十进制数在开发板的显示管上显示出来。

二进制转BCD码

二进制转BCD码

⼆进制转BCD码应⽤:⽤fpga实现对数码管显⽰,以前通常的⽅法是进⾏整除和取余进⾏运算,但是fpga并不擅长乘法除法运算,所以可以⽤BCD码来转换。

BCD码:通俗的可以理解为⽤四位⼆进制数表⽰⼀位⼗进制数字。

例如,256就可以⽤bcd码表⽰为:0010_1001_0110因此在数码管显⽰中,也就是把256各位分出来,就可以⽤bcd码来表⽰,下⾯说⼀种⼆进制转换bcd码的⽅法。

加3移位法:bcd码中只有0~9⼗进制数,但是在四位⼆进制中是16进制进1,因此在移位过程中要对⼆进制进⾏判断,当在移位之后的状态Qn+1⼤于9,要对Qn加6才可以。

例如1000移位⼤于9加6为0001_0110,对应bcd码中的16。

我们也可以在移位之前进⾏判断,如果移位之前的Qn数据⼤于4,说明Qn+1会溢出,所以可以+3再进⾏移位,例如1000⼤于4,加3为1011然后再进⾏移位0001_0110,16和刚才结果是⼀样的。

简单的说,判断的⽬的是防⽌下⼀次移位,发⽣数据溢出的情况思路:代码可以总结为三个部分:移位,加⼆进制数,判断(最后⼀次不需要判断)例如15 --- 1111(1)移位 0000_0000 加 0000_0001 判断 0000_0001(2)移位 0000_0010 加 0000_0011 判断 0000_0011(3)移位 0000_0110 加 0000_0111 判断 0000_1010(4)移位 0001_0100 加 0001_0101/*********************************功能:实现对6位⼗进制数以内的bcd码转换time: 2017/4/29vision:1.0*********************************/`define data_in_num 19`define data_bcd_num 23module pro_bcd(clk,rst_n,data_in,data_bcd);input clk;input rst_n;input [`data_in_num :0] data_in;output [`data_bcd_num:0] data_bcd;reg [`data_bcd_num:0] data_bcd_r;reg [1:0] state;reg [5:0] shift_cnt;always @(posedge clk or negedge rst_n)if(!rst_n)begindata_bcd_r <= 0;state <= 0;shift_cnt <= 0;endelsecase(state)2'd0:beginshift_cnt <= 0;data_bcd_r <= 0;state <= state + 1;end2'd1:begin //移位if(shift_cnt < `data_in_num + 1)begindata_bcd_r <= data_bcd_r<<1;shift_cnt <= shift_cnt + 1;state <= state + 1;endelsestate <= 0;end2'd2:begin //相加data_bcd_r <= data_bcd_r + data_in[`data_in_num + 1 - shift_cnt];state <= state + 1;end2'd3:begin //判断if(data_bcd_r[3:0] > 4 ) //1data_bcd_r <= data_bcd_r + 3;if(data_bcd_r[7:4]>4) //2data_bcd_r[7:4] <= data_bcd_r[7:4] + 3;if(data_bcd_r[11:8]>4) //3data_bcd_r[11:8] <= data_bcd_r[11:8] + 3;if(data_bcd_r[15:12]>4) //4data_bcd_r[15:12] <= data_bcd_r[15:12] + 3;if(data_bcd_r[19:16]>4) //5data_bcd_r[19:16] <= data_bcd_r[19:16] + 3;if(data_bcd_r[`data_bcd_num:20]>4) //6data_bcd_r[`data_bcd_num:20] <= data_bcd_r[`data_bcd_num:20] + 3;state <= 1;enddefault:state <= 0;endcaseassign data_bcd = (state == 3)&&(shift_cnt == `data_in_num + 1) ? data_bcd_r : data_bcd; endmodule。

fpga的bcd与二进制的转换实验原理

fpga的bcd与二进制的转换实验原理

fpga的bcd与二进制的转换实验原理
FPGA的BCD(二进制编码十进制)与二进制转换实验原理如下:
BCD码也称为8421码,它使用4位二进制数来表示一个十进制数。

因此,BCD码的范围是0到9。

为了将一个十进制数转换为BCD码,我们可以使用以下公式:A = 2^3 + 2^2 + 2^1 + 2^0。

这表示我们将十进制数的每一位分别转换为4位二进制数。

例如,要将十进制数189转换为BCD码,结果为0001_1000_1001,可以看出189占据12位,每个数占4位。

反过来,要将BCD码转换为二进制数,可以使用移位和加三的方法。

这种方法首先将无符号二进制数和对应位数的BCD码的若干个0拼接在一起,然后不断地左移x次,每次移位后判断BCD码的各个位是否大于4,如果大于则对其加三后移位,否则直接移位。

x次移位完成后,BCD码的部分对应的即为转换好的无符号BCD码数据。

需要注意的是,在BCD码移位后进入到某一位数的前2位时最大数据为0011一定小于4,无需对其判断。

只有在移位3次后个位才有可能出现0111>4,所以在第3次移位后的数据在加3以后最高位的1可能蹦到第四位。

同样地,第6次移位后十位的最高位在第7位,BCD码的十位可能出现0100>4,+3后可能最高位蹦到第8位;第9次移位后最高位蹦到第11位,BCD码百位可能出现0100>4,需要判断百位>4。

总的来说,通过上述方法可以实现FPGA的BCD与二进制之间的转换。

在实际实验中,为了减小两个D触发器间组合逻辑的延迟,可以在每次的算法移位以后都插入寄存器,最后构成一个类似LSFR(线性反馈移位寄存器)的结构。

二进制转化为8421bcd码

二进制转化为8421bcd码

二进制转化为8421bcd码
二进制转化为8421BCD码是一种将二进制数转换为BCD码的方法。

BCD码是一种十进制数系统的二进制表示形式,即每个十进制数位用一个4位二进制数表示。

8421BCD码是BCD码中最常用的一种,根据位权原理,每个4位二进制数的位权依次为8、4、2、1。

因此,将一个二进制数转化为8421BCD码,需要将每个二进制数位分别转化为4位二进制数,并分别赋予对应的位权。

具体转换过程如下:
1. 将原二进制数从右往左按位分组,每组分别为4位二进制数。

如果最高位不足4位,则在左侧补0,直至凑成4位二进制数。

2. 对于每个4位二进制数,按照8421BCD码的位权原则,将其转化为对应的十进制数。

即,将每个二进制数位与对应的位权相乘,再将结果相加,得到该4位二进制数所表示的十进制数。

3. 将每个4位二进制数转化为对应的十进制数后,将它们按从左往右的顺序排列,得到最终的8421BCD码。

例如,将二进制数1101101011转化为8421BCD码的过程如下: 1. 将二进制数从右往左每4位分组,得到:
1101 1010 11
2. 将每个4位二进制数转化为对应的十进制数,得到:
1101 -> 13
1010 -> 10
0011 -> 3
3. 将每个十进制数按从左往右的顺序排列,得到最终的8421BCD码:
13 10 3
因此,1101101011的8421BCD码为13103。

数字编码实验报告(3篇)

数字编码实验报告(3篇)

第1篇一、实验目的1. 理解数字编码的基本原理和方法。

2. 掌握几种常见的数字编码技术,如BCD编码、格雷码编码等。

3. 通过实验验证数字编码的正确性和实用性。

二、实验原理数字编码是将数字信号转换成另一种数字信号的过程。

数字编码技术广泛应用于数字通信、计算机技术、工业控制等领域。

常见的数字编码有BCD编码、格雷码编码、二进制编码等。

BCD编码(Binary-Coded Decimal)是一种将十进制数转换为二进制数的编码方式。

格雷码编码(Gray Code)是一种将数字信号转换成相邻码之间只有一个二进制位差别的编码方式,具有自同步性。

三、实验设备与材料1. 实验箱:包括数字电路模块、逻辑门、计数器等。

2. 实验指导书:提供实验原理、步骤、注意事项等。

3. 实验数据记录表。

四、实验步骤1. BCD编码实验(1)将十进制数转换为BCD编码。

(2)使用实验箱中的数字电路模块,将BCD编码转换为二进制编码。

(3)观察并记录实验结果。

2. 格雷码编码实验(1)将二进制数转换为格雷码编码。

(2)使用实验箱中的数字电路模块,将格雷码编码转换为二进制编码。

(3)观察并记录实验结果。

3. 数字编码比较实验(1)将十进制数分别转换为BCD编码和格雷码编码。

(2)比较两种编码方式的优缺点。

(3)记录实验数据。

五、实验结果与分析1. BCD编码实验结果将十进制数123转换为BCD编码,得到0011 0010。

使用实验箱将BCD编码转换为二进制编码,得到0111 0010。

实验结果表明,BCD编码能够正确地将十进制数转换为二进制数。

2. 格雷码编码实验结果将二进制数1101转换为格雷码编码,得到0111。

使用实验箱将格雷码编码转换为二进制编码,得到1101。

实验结果表明,格雷码编码能够正确地将二进制数转换为格雷码编码,并且相邻码之间只有一个二进制位差别。

3. 数字编码比较实验结果将十进制数123分别转换为BCD编码和格雷码编码,得到BCD编码为0011 0010,格雷码编码为0111。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档