二进制到BCD转换实验报告
- 格式:doc
- 大小:61.50 KB
- 文档页数:3
实验二二进制转换成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码.。
⼆进制转换成⼗进制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。
实验报告: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码一、实验目的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转换实验报告[本站推荐]二进制到BCD转换实验报告班级姓名学号日期一、实验目的:1.掌握简单的数值转换算法2.基本了解数值的各种表达方法二、实验要求:将给定的一个二进制数,转换成十进制(BCD)码。
三、实验内容:1、给累加器赋值,如#1232、将累加器的内容拆分为三个BCD码,并存入Result开始的三个单元。
四、程序及运行结果截图DATASEGMENT RESULT_1DBRESULT_2DBRESULT_3DBDATAENDSSTACKSEGMENTATACK STADBDUP(0)STACK_TOP DB0 STACKENDSCODESEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX LEASP,ATACK_TOP MOVAX,123H MOVCL,100 DIVCL MOVRESULT_1,ALMOVCL,8 SHRAX,CL MOVCL,10 DIVCL MOVRESULT_2,AL MOVRESULT_3,AHADDRESULT_1,30H ADDRESULT_2,30H ADDRESULT_3,30HMOVDL, RESULT_1 MOVAH,02H INT21HMOVAX,4C00H INT21H CODEENDSENDSTART五、实验过程中遇到的主要问题;将 A 拆为三个 BCD 码, 并存入 Result 开始的叁个单元Result equ20horgljmp StartBinT oBCD:movb, #100divabmovResult, a;除以 100, 得百位数mova, bmovb, #10divabmovResult+1, a;余数除以 10, 得十位数movResult+2, b;余数为个位数retStart:movsp, #40hmova, #123call BinT oBCDljmp $end六、实验后的心得体会第二篇:二进制与十进制的转换二进制与十进制的转换2007年07月06日星期五 13:21教学目标:知识目标:知道二进制与十进制之间的转换方法操作目标:能在二进制与十进制之间进行进制转换教学重点:二进制与十进制之间的转换教学难点:二进制与十进制之间的转换教学过程:一、复习引入上一节课已经学习了什么是二进制以及二进制的运算。
一、实验目的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码转换一、实验目的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 码作者:佚名来源:不详录入: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。
汇编语言8位二进制转bcd码
将8位二进制数转换为BCD码(Binary Coded Decimal)需要将每个二进制数转换为其对应的十进制数,然后将十进制数转换为BCD码。
首先,将8位二进制数分为两组,每组4位。
然后将每组4位二进制数转换为对应的十进制数。
例如,如果我们有一个8位二进制数1101 1010,将其分为1101和1010两组。
对于第一组1101:
1 2^3 + 1 2^
2 + 0 2^1 + 1 2^0 = 13。
对于第二组1010:
1 2^3 + 0 2^
2 + 1 2^1 + 0 2^0 = 10。
现在我们得到了两个十进制数13和10。
接下来将这两个十进制数分别转换为BCD码。
对于十进制数13,将其转换为BCD码:
13 = 0001 0011。
对于十进制数10,将其转换为BCD码:
10 = 0001 0000。
因此,将二进制数1101 1010转换为BCD码后得到0001 0011 0001 0000。
这样,我们就完成了将8位二进制数转换为BCD码的过程。
希望这个回答能够帮到你!如果还有其他问题,欢迎继续提问。
二进制到BCD转换实验报告
班级姓名学号日期
一、实验目的:1.掌握简单的数值转换算法
2.基本了解数值的各种表达方法
二、实验要求:
将给定的一个二进制数,转换成十进制(BCD)码。
三、实验内容:1、给累加器赋值,如#123
2、将累加器的内容拆分为三个BCD码,并存入Result开始的三
个单元。
四、程序及运行结果截图
DATA SEGMENT
RESULT_1 DB 1
RESULT_2 DB 1
RESULT_3 DB 1
DATA ENDS
STACK SEGMENT ATACK
STA DB 64 DUP(0)
STACK_TOP DB 0
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START:
MOV AX,DATA
MOV DS,AX
MOV AX,STACK
MOV SS,AX
LEA SP,ATACK_TOP
MOV AX,123H
MOV CL,100
DIV CL
MOV RESULT_1,AL
MOV CL,8
SHR AX,CL
MOV CL,10
DIV CL
MOV RESULT_2,AL
MOV RESULT_3,AH
ADD RESULT_1,30H
ADD RESULT_2,30H
ADD RESULT_3,30H
MOV DL, RESULT_1
MOV AH,02H
INT 21H
MOV AX,4C00H
INT 21H
CODE ENDS
END START
</PIXTEL_MMI_EBOOK_2005>
五、实验过程中遇到的主要问题
; 将A 拆为三个BCD 码, 并存入Result 开始的叁个单元Result equ 20h
org 0
ljmp Start
BinToBCD:
mov b, #100
div ab
mov Result, a ; 除以100, 得百位数
mov a, b
mov b, #10
div ab
mov Result+1, a ; 余数除以10, 得十位数
mov Result+2, b ; 余数为个位数
ret
Start:
mov sp, #40h
mov a, #123
call BinToBCD
ljmp $
end
六、实验后的心得体会。