(实验二)二进制码转换为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码.。

二进制转换成十进制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码转换器

实验报告: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段显示管程序,将相应的十进制数在开发板的显示管上显示出来。

数字逻辑转换实验报告

数字逻辑转换实验报告

一、实验目的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码转换

(软件仿真性实验,2017/2018(2))课程名称:单片机原理与应用实验题目:BCD码转换指导教师:一、实验目的和任务1、掌握Keil μVision4软件的使用(创建工程与设置、编写代码、添加文件和软件调试);2、掌握STC15系列单片机C语言程序的基本写法;3、掌握通过指针,对内部RAM的读写操作;二、实验内容及原理1.通过软件仿真对寄存器进行地址操作,了解单片机的内部结构。

三、实验步骤或程序流程配置数码管与独立按键端口—>对端口进行赋值操作—>编译程序—>下载程序—> 硬件操作四、实验数据及程序代码//#include "REG51.H"#include "STC15F2K60S2.h"#include <absacc.h>void main( ){unsigned char x,xh,xl;unsigned char *p;p =0x30;*p =0x26;x =*p;xh =(*p)/16;xl =(*p)%16;p =0x40;*p =xh;p =p+1;*p =xl;while(1){;}}五、实验数据分析及处理通过对试验箱的观察,结合程序的编程,能够实现对数码管的正确操作,对寄存器地址进行直接分配,实现端口的配置,深刻了解BCD原理并结合实验。

图1.1 BCD码转换图1.2 BCD码转换六、实验结论与感悟(或讨论)了解keil的仿真原理,掌握了对单片机寄存器的操作,明白其工作原理,并能正确的实现其功能,对BCD码有了更深刻的了解,能够开发实验应用操作。

能够学以致用。

二进制转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。

实验一_二进制转BCD码实验

实验一_二进制转BCD码实验

实验一、二进制转BCD 码实验 一、实验目的(1)掌握keil 软件的程序编辑、编译、调试过程; (2)学习二进制与BCD 码转换程序的编写。

二、实验内容将123对应二进制数转换为十进制数百位、十位、个位BCD 码,依次存放在RAM 的30H 、31H 、32H 单元。

三、实验步骤1、创建文件:运行uvision ,点击File ->New …选项。

再点击File ->Save 选项保存文件*.asm ;2、创建工程:点击Project ->New Project …选项创建一个新的工程;选择CPU ;3、添加已创建的文件:选择“Source Group 1”点击鼠标右键,点击 “Add Files to Group ‘Source Group 1’”。

4、编译链接工程:1)点击Project ->Options for target ‘Target 1’ 选项。

点击Output 标签,Create HEX File 复选框打钩;Trial1_BCD.ASMRESULT EQU 30H ORG 0000H LJMP S1 ORG 0100H S1: MOV SP,#40H MOV A,#123 MOV B,#100DIV AB ;A,商;B,余数 MOV RESULT,A MOV A,B MOV B,#10 DIV ABMOV RESULT+1,A MOV RESULT+2,B LJMP $ END图1-1 主程序流程图2)点击Project->Build target …;5、检错、纠错;6、调试工程:1)点击Debug->Start/Stop Debug Session进入/退出调试状态。

2)运行程序后,观察RAM 30~32H单元存放的数据:View->Memory Window->Address:d:30H(RAM);c:0100H(ROM);四、实验结果五、思考题1、用C51编写源程序,实现本实验要求的功能。

实验二报告

实验二报告

实验二报告实验一:实验题目:测试74LS153的逻辑功能,验证是否和题目中所给的表相同。

实验目的:掌握中规模集成数据选择器的逻辑功能及测试方法,掌握数据选择器的工作原理及使用方法。

实验器材:数字电路实验箱,稳压电源,74LS153;实验原理:数据选择器有若干个数据输入端,D0,D1,D2,.....若干个控制输入端A0,A1,A2....和一个(或两个)输出端Q(或Q’).当控制输入码A0,A1...具有不同数据组合时,将选择组合码所对应的二进制数Dx输出。

由于控制输入端的作用是选择数据输入端的地址,故又称为地址码输入端。

其功能表如图输入输出A1 A0 1S Q1 Q2S2* * 1 1 0 00 0 0 0 1D0 2D00 1 0 0 1D1 2D11 0 0 0 1D2 2D21 1 0 0 1D3 2D3实验内容:将74LS153插入实验箱中,按照原理图用导线进行连接,最后将输出与一个LED灯相连,根据LED灯的亮灭来判断逻辑功能是否正确。

实验结果:实验测得的真值表与题目所给的真值表相同。

实验二:实验题目:用多路选择器设计一个8421-BCD非法码检测电路,使得当输入端为非法码组合是输出1,否则为0。

二进制数与BCD码的对应关系如表所示。

写出函数Y的表达式,并进行化简,然后画出电路图,接线调试电路,用发光二极管显示输出结果,观察是否与表相符。

设Y=0表示发光二极管熄灭,Y=1表示发光二极管点亮。

二进制B BCD码B3 B2 B1 B0 Q3 Q2 Q1 Q0 Y0 0 0 0 0 0 0 0 00 0 0 1 0 0 0 1 00 0 1 0 0 0 1 0 00 0 1 1 0 0 1 1 00 1 0 0 0 1 0 0 00 1 0 1 0 1 0 1 00 1 1 0 0 1 1 0 00 1 1 1 0 1 1 1 01 0 0 0 1 0 0 0 01 0 0 1 1 0 0 1 01 0 1 0 0 0 0 0 1 1 0 1 1 0 0 0 1 1 1 1 0 0 0 0 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 0 0 1 0 0 1 1111111实验目的:掌握数据选择器的工作原理,会设计简单的数据选择器。

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码在单片机里面,如:显示个温度值,这时,要取一个数的个位、十位、百位,可以用/和 %(求商和求余)来解决。

但是,在FPGA里面用求商和求余将会非常消耗资源,这样就必须用到二进制转BCD码了,这里介绍一种简单的加3移位算法。

注:B代表二进制,D代表十进制,0x代表十六进制,BCD为BCD 码,下同。

1、加3移位法以二进制数(0000_101 Xn)B=(10+Xn)D为例,串行输入三位后,(0101)B=5(D)左移一位后:(0000_101Xn)B=(10+Xn)D如果(0000_101Xn)B直接输出显示为:当Xn=0时,0000_1010=0x0A。

此为错误的BCD码。

采用加3移位法,修正移位结果:串行输入三位后,结果大于4(0101)B=5(D)加3:(0101)B+(0011)B=(1000)B --十进制表示:5+3=8 再左移一位后:(1000Xn)B=(0001_000Xn)BCD对应十进制显示:1 Xn每四位BCD码对应一位十进制数,即:(10+Xn)D,转换成功注:Xn为下一位串行输入的二进制数。

2、设计思路这里一共需要四个模块:计数器、移位器、加法器、寄存器输出。

分别设计好之后,用状态机控制它们,就完成了。

3、仿真结果注:图中clk为时钟,en为高电平使能,rst为高电平复位,data_in为输入的12位二进制码,以十进制的形式显示在时序图;qout为输出的16位BCD码,以十六进制的形式显示在时序图,17个时钟上升沿可完成转换任务。

4、综合结果5、难点分析要搞懂这个加3移位算法,必须要按照8位二进制(11101011)转BCD过程图,自己手动推导一下,才容易理解。

此算法的难点在于,需要把输入的二进制数,按照每四个bit来划分为一个单元(所以输入的二进制数,位宽必须是4的倍数),然后,每个单元都要同时判断是否大于4,大于就要加3,否则不加.理解了这个算法之后,那么BCD转二进制就非常容易了,减3移位即可,减3可以用补码来解决。

汇编实验报告--二进制到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的控制符不显示。

16位二进制数转换成BCD码

16位二进制数转换成BCD码

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

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

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

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

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

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

为了提高整机运行的速度,在多年前,做而论道就另外编写了一个转换程序,程序的长度为81字节,执行时间是81个机器周期,(这两个数字怎么这么巧!)执行时间仅仅是经典程序的1/4!.近来,在网上发现了一个链接:/news/Article/uc/uc8051//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码变换的意思来了。

汇编程序设计—二进制码转换为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。

中国地质大学机电学院单片机报告

中国地质大学机电学院单片机报告

中国地质大学(武汉)单片机实习报告姓名:_ _班号:_ _学号:院系:__机电学院_ _专业:__通信工程指导教师:__ 王巍实验一实验开发环境学习1、实验目的1) 学习Keil软件的使用方法;2) 学习单片机汇编程序的开发流程;3) 学习程序的调试仿真方法。

2、实验要求(a)设有两个4位的BCD码,分别存放在片内RAM的23H,22H单元和33H,32H单元中,求他们的和,并送入43H,42H单元中(低位在低字节中,高位在高字节中)。

(b)将8bit二进制数转换为3位BCD码。

(c)找出放在内存单元40H开始的10个数中的最大值,并放在内存单元50H中。

设计思路:BCD码相加:要将内部RAM 23H,22H中的4位BCD码与33H,32H中4位BCD码相加,相加的两个4位BCD码是分别存储在两个字节的存储空间中,低字节与低字节相加,高字节与高字节相加,高字节相加时必须注意加上进位位(即ADDC指令)。

然后在执行加法指令(ADD或ADDC)后,将和转换成BCD码,再存到相应的存储空间内,并分配三个字节的存储空间来存放两数之和。

二进制码转换为BCD码:要将一个8位的二进制数转换为3位BCD码,分别将百位、十位和个位分别转换为对应数值的BCD码然后存储起来,按高位到低位分别存在R2 R1 R0中,这里主要通过分别对100和10取模然后分离出百位和十位(DA指令)。

最大值比较:用间接寻址的方式来读取数据,然后通过对寄存器内容加一操作来实现地址指针的移动(INC R1),通过将地址值与4AH进行比较来控制循环的结束,相等则跳出循环。

用到相减操作,判断进位位C的值来判断两个数据(即减数和被减数)哪一个更大,将大的数据缓存起来,以方便下一次比较。

流程图:BCD码相加开始低四位不带进位的加法BCD调整,结果存入41H 高四位不带进位的加法BCD调整,结果存入42H高四位带进位的加法结果存入43H结束二进制码转换为BCD码:最大值比较:实验程序:BCD码相加:ORG 0000HSJMP STARTORG 0030H START: CLR CMOV A,R2;32HADD A,R0;22HDA AMOV R5,A;42H,AMOV A,R3;33HADDC A,R1;23HDA AMOV R6,A;43H,AMOV A,#00HADDC A,#00HMOV R7,AEND二进制码转换为BCD码:ORG 0000HSJMP STARTORG 0030H START: MOV A,R0MOV B,#100DIV ABMOV R1,AMOV A,BMOV B,#10DIV ABMOV R2,AMOV R3,BEND最大值比较:ORG 0000HSJMP STARTORG 0020HSTART: MOV 3FH,40HMOV R1,#41Hloop: MOV A,@R1MOV R2,39HSUBB A,R2JC XIAOYUDAYU: MOV 3FH,@R1XIAOYU: INC R1CLR CCJNE R1,#4AH,LOOPMOV R0,3FHEND实验二单片机输入及输出实验1、实验目的1) 学习单片机的I/O口的使用方法;2) 学习延时子程序的编写和使用;3) 学习分支指令的使用;4) 学习使用定时器完成延时的方法。

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。

实验二 数码转换程序实验

实验二 数码转换程序实验

数码转换程序实验实验目的掌握不同进制数及编码相互转换的程序设计方法。

实验内容及说明计算机输入设备输入的信息一般是由ASCII码或BCD码表示的数据或字符,CPU一般均用二进制数进行计算或其他信息处理,处理结果的输出又必须依照外设的要求变为ASCII码、BCD码或七段显示码等。

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

计算机与外设间的数码转换关系如图1所示,数码对应关系如表1所示。

图1表11.将ASCII码表示的十进制数转换为二进制数十进制数可以表示为:D n×10n+D n-1×10n-1+…+D0×100=D i×10i其中D i代表十进制数1、2、3…9、0。

上式可以转换为:∑D i×10i=((…(D n×10+D n-1)×10)+D n-2)×10+…+D1)×10+D0由上式可归纳十进制数转换为二进制的方法:从十进制数的最高位D n开始作乘10加次位的操作,依次类推,则可求出二进制数结果。

本实验要求将缓冲区中的一个五位十进制数00012的ASCII码转换成二进制数,并将转换结果按位显示在屏幕上。

转换过程的参考流程如图2所示。

The ascii code of decimal code are:000C。

执行了几步单步之后才有结果的。

图22.将十进制数的ASCII码转换为BCD码本实验要求将键盘输入的一个五位十进制数54321的ASCⅡ码存放在数据区中,转换为 BCD 码后,并将转换结果按位分别显示于屏幕上。

若输入的不是十进制数的ASCⅡ码,则输出“FF”。

提示:一字节ASCⅡ码取其低四位即变为BCD码。

转换部分的实验流程参见图3。

The BCD code of decimal are:01 02 03 04 05.图33.将十六进制数的ASCII码转换为十进制数十六位二进制数的值域为0-65535,最大可转换为五位十进制数。

数字编码实验报告(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)。

实验二二进制码转换为 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-->BCD
ORG 4000H
RESULT DB 5 DUP(?)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
ORG 2CE0H
START PROC NEAR
MOV AX, DATA
MOV DS, AX
MOV DX,0000H
MOV AX, 65535
MOV CX, 10000
DIV CX
MOV RESULT, AL;除以 10000,得 WAN位数
MOV AX,DX
MOV DX,0000H
MOV CX, 1000
DIV CX
MOV RESULT+1, AL;除以 1000,得 QIAN位数
MOV AX,DX
MOV DX,0000H
MOV CX, 100
DIV CX
MOV RESULT+2, AL;除以 100,得 BAI 位数
MOV AX,DX
MOV DX,0000H
MOV CX, 10
DIV CX
MOV RESULT+3, AL;除以 10,得 SHI 位数
MOV RESULT+4, DL;得 GE位数
JMP $
CODE ENDS
END START。

相关文档
最新文档