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

二进制转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码中的1我们也可以在移位之前进⾏判断,如果移位之前的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_cn 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)begin data_bcd_r <= data_bcd_r<<1;shift_cnt <= shift_cnt + 1;state <= state + 1;endelse state <= 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 码

;已知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位变换的计算方法极为简单,只是使用左移、加减等指令即可,基本上不涉及多字节的运算。

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

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

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

最佳答案:两个字节的二进制数转换成BCD码,必须编写程序来解决。

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

library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity transform2_to_10 isport( RST,CLK:in std_logic;start:in std_logic;binary_operands:in std_logic_vector(7 downto 0);--待转换的二进制数LED_baiwei:out std_logic_vector(3 downto 0);--百位LED_shiwei:out std_logic_vector(3 downto 0);--十位LED_gewei:out std_logic_vector(3 downto 0);--个位out_all:out std_logic_vector(19 downto 0);aa:out std_logic_vector(7 downto 0);cb,cc,ca:out std_logic_vector(3 downto 0);dd:out std_logic_vector(19 downto 0));end ;architecture behave of transform2_to_10 isbeginprocess(RST,CLK,binary_operands)variable operands:std_logic_vector(7 downto 0);--存放输入操作数variable MA:std_logic_vector(3 downto 0);--暂存个位的二进制数variable MB:std_logic_vector(3 downto 0);--暂存十位的二进制数variable MC:std_logic_vector(3 downto 0);--暂存百位的二进制数variable post:std_logic_vector(19 downto 0);--将二进制操作数、个位、十位、百位的二进制数集总variable Q:std_logic_vector(3 downto 0);--计数移位的脉冲数beginif RST='1'then operands:="00000000";MA:="0000";MB:="0000";MC:="0000";post:="00000000000000000000" ;elsif CLK'event and CLK='1'thenif start='1'then operands:=binary_operands;MA:="0000";MB:="0000";MC:="0000";post:=MC&MB&MA&operands(7 downto 0);out_all(7 downto 0)<=post(7 downto 0);--dd:="00000000";elseif Q<=8 thenif Q=8 then Q:="0000";LED_gewei<=MA; LED_shiwei<=MB;LED_baiwei<=MC;else Q:=Q+1;end if;post(19 downto 8):=MC&MB&MA;post(19 downto 0):=post(18 downto 0)&'0'; dd<=post(19 downto 0); --dd 为观测信号aa<=post(7 downto 0);out_all(19 downto 8)<=post(19 downto8);--out_all(19 downto 8)为观测信号MA(3 downto 0):= post(11 downto 8);ca<=post(11 downto 8);--ca观测信号MB(3 downto 0):= post(15 downto 12);cb<=post(15 downto 12);--cb观测信号MC(3 downto 0):= post(19 downto 16);cc<=post(19 downto 16);--cc观测信号if MA>=5 then MA:=MA+3;end if;if MA>=5 then MA:=MA+3;end if;if MB>=5 then MB:=MB+3;end if;if MC>=5 then MC:=MC+3;end if;end if;end if;end if;end process;end ;实现思想:使用俗称的移位加3法则,规则是:1、将该二进制数左移一位;2、对于25位的二进制数,最大8位十进制数,从千万位开始,分别是千万,百万,十万,万,千,百,十,个位,所以如果转换为BCD码,共需要32位二进制序列缓冲,每4位为一组,按上述顺序排列;3、如果移位后,该组的数据如果大于等于5,则对该组数据加3处理;4、左移一位;5、回第三步循环,直到所有数据移位完毕看下表的一个8位二进制转BCD,引申一下即可,原理是一样的Operation | Hundreds| Tens | Units | Binary | HEX | | | | F F |Start | | | | 1 1 1 1 1 1 1 1 |Shift1 | | |1 | 1 1 1 1 1 1 1 |Shift2 | | | 1 1 | 1 1 1 1 1 1 |Shift3 | | | 1 1 1 | 1 1 1 1 1 |Add3 | | | 1 0 1 0 | 1 1 1 1 1 | Shift4 | | 1 | 0 1 0 1 | 1 1 1 1 | Add3 | | 1 | 1 0 0 0 | 1 1 1 1 | Shift5 | | 1 1 | 0 0 0 1 | 1 1 1 | Shift6 | | 1 1 0 | 0 0 1 1 | 1 1 | Add3 | | 1 0 0 1 | 0 0 1 1 | 1 1 | Shift7 | 1 | 0 0 1 0 | 0 1 1 1 | 1 | Add3 | 1 | 0 0 1 0 | 1 0 1 0 | 1 | Shift8 | 1 0 | 0 1 0 1 | 0 1 0 1 | | BCD | 2 | 5 | 5 | |。

实验二二进制到BCD转换讲述

实验二二进制到BCD转换讲述
深 圳 大 学 实 验 报 告
课程名称:微机原理及应用实验
实验项目名称:二进制到BCD转换
学院:物理科学与技术学院
专业:应用物理
指导教师:
报告人:学号:班级:应用物理班
实验时间:2015-10-19
实验报告提交时间:2015-11-02
教务处制
一、实验名称:
二进制到BCD转换
二、实验目的
(1)进一步熟练掌握8086汇编语言编译调试工具和环境的操作;
JZ LP ;两个数比较,相等,比较后ZF=0,跳转至LP
;OR DL,30H
INT 21H ;返回DOS
;------------------------------------------
;程序结束必须要有的两条指令
MOV AX, 4C00H ;
INT 21H ;
;------------------------------------------
CODE ENDS
END START ;最后一行要按回车键
MOV CL, 0 ;计数器清零
NEXT4:
SUB AX, 10000 ;减10000
JC OVER4 ;有借位说明不够减
INC CL ;否则够减,计数器加1
JMP NEXT4 ;无条件跳转
OVER4:
ADD AX, 10000 ;最后恢复不够减时AL的余数
MOV BCD_0,CL ; CL累计的计数值赋予万位变量
用到主要寄存器:
AX:开始用于目标数接收,后面用于每次保存被除数
CX:用作每次除数保存
DX:用作每次除数保存
减法实现:
算法说明:
五位数先循环减10000,直到不够减了,做减法的次数就是万分位的结果,用CL累加次数得到;将不够减之前一次的余数恢复,再循环减去1000,直到不够减了,做减法的次数就是千分位的结果,用CL累加次数得到;将不够减之前一次的余数恢复,再循环减去100,直到不够减了,做减法的次数就是百分位的结果,用CL累加次数得到;将不够减之前一次的余数恢复,再循环减去10,直到不够减了,做减法的次数就是十分位的结果,用CL累加次数得到;最后恢复的正余数就是个位的结果。

二进制到BCD转换实验报告[本站推荐]

二进制到BCD转换实验报告[本站推荐]

二进制到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教学目标:知识目标:知道二进制与十进制之间的转换方法操作目标:能在二进制与十进制之间进行进制转换教学重点:二进制与十进制之间的转换教学难点:二进制与十进制之间的转换教学过程:一、复习引入上一节课已经学习了什么是二进制以及二进制的运算。

FPGA二进制转bcd的设计和验证

FPGA二进制转bcd的设计和验证

中考感谢信11篇中考感谢信1尊敬的学校领导和老师们:时光荏苒,日月如梭,3个春夏秋冬仿佛只是一瞬间,而我已在你的呵护下由一个稚气未脱的小学生成长为一名蓬勃向上的少年。

对花城学校的感情,也在我心中点点滴滴地沉淀。

在花城,我深切地感受到了每位可亲的老师们对我的'关怀:语文老师不厌其烦的叮嘱,数学老师教会我细致和严谨,英语老师总会耐心地解答我各种刁难的问题直到我恍然大悟;政治和历史老师一份又一份提纲做得一丝不苟,物理和化学老师幽默风趣,黑板上的板书工工整整……记得为了中考,你们呕心沥血,在我们身上花的时间比自己的孩子还多;记得中考百日誓师大会上,你们的宣誓那么铿锵有力,真的让我非常感动。

老师,你们辛苦了,你们兢兢业业,以身作则,为我树立了为人处事的榜样。

在花城,最爱的是当雨后初晴的时候,与同学们结伴走在美丽的校园里,或倾听细碎的鸟语,或轻嗅红色墙下娇嫩的小花,或追逐嬉戏,或轻言细语地诉说烦恼。

彼此之间就好像亲密无间的兄弟姐妹,共同分享快乐,分担忧愁,是你们给我无限的动力,让我无时无刻不感受到家庭般的温暖。

千言万语还是一个“谢”字,我们会用未来的成就回报母校!最后,再次对老师们对我的培养表示最诚挚的感谢!祝校领导和老师们身体健康!工作顺利!祝母校越办越好,为社会培育更多的人才!__x7月7日中考感谢信2敬爱的老师:您好!老师,您已经教我们语文一年多了,对我的教育,我终身难忘。

我想对您说:老师,谢谢您! 在去年里,当我做了不对的事情时,又是您及时对我进行了教育;当我遇到语文的题不会做的时候,您给了的帮助我想对您说:“谢谢您,我的老师!因为在你的课堂里,我们都感到很轻松和开心,没有丝毫的紧张和压抑感!以至每次放学了,我们都舍不得走!你真的是一个特优秀的好老师!老师您说过在课堂上,我们不仅仅是师生关系,更是朋友关系!能够成为你的学生,我感到非常荣幸!老师您还叫我们用感情朗读课文、__。

以前,我们说话都是一个一个的吐出来的,您来的时候就让我们回家练吐字要快,现在我们和您的吐字都差不多了,而且还用感情朗读课文。

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

实验二二进制码转换为
B C D码实验报告
公司内部档案编码:[OPPTR-OPPT28-OPPTL98-OPPNN08]
实验二二进制码转换为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文件夹,点击文件,单击“确定”即可装入源文件,再单击工具栏中编译,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。

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

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

五、实验程序清单
X:\DICE-8086K3微机原理与接口实验箱CDROM\CODE\86kasm\
;将AX拆为5个BCD码,并存入Result开始的5个单元
DATA SEGMENT AT 0 ;,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。

相关文档
最新文档