【精品】八位二进制码转化为BCD码及余三码、BCD码转化余三码
二进制数到BCD码的转换

得分教师签名批改日期课程编号1801770001深圳大学实验报告课程名称:微机原理及应用实验名称:二进制数到BCD码的转换学院:物理科学与技术学院指导教师:报告人:组号:学号实验地点K302实验时间:2014 年10 月22 日提交时间:2014.11.12一、实验要求:将AX中的一个二进制数(对应的十进制数范围是0-65535),转换成压缩性BCD码表示的十进制,并从屏幕输出转换结果。
要求用减法实现,并比较与除法方法进行运行速度比较。
二、实验目的:(1)进一步熟练掌握8086汇编语言编译调试工具和环境的操作;(2)掌握完整8086汇编的程序设计编写方法;(3)掌握简单的数值码制转换方法;(4)掌握键盘输出的DOS功能调用方法。
三、实验说明:计算机中的数值有各种表达方式,这是计算机的基础。
掌握各种数制、码制之间的转换是一种基本功;利用DOS功能调用实现在屏幕上显示字符或数字的方法是本课程的基本要求之一。
四、除法方法:1、算法说明:三位数先除以100,得到的商就是百分位的结果;将之前一次的余数除以10,得到的商就是十分位的结果;剩下来的余数就是个位的结果。
2、程序流程图:图1 除法程序流程图3、程序:DATA SEGMENT ; 数据段RESULT_1 DB 1RESULT_2 DB 1RESULT_3 DB 1DATA ENDSSTACK SEGMENT STACK ; 堆栈段STA DB 64 DUP(0)STACK_TOP DB 0STACK ENDSCODE SEGMENT ; 代码段ASSUME CS:CODE , DS:DATA , ES:DATA , SS:STACKSTART:; 程序开头必须要有的五条指令MOV AX, DATAMOV DS, AX ; 设置数据段MOV AX, STACKMOV SS, AX ; 设置堆栈段LEA SP, STACK_TOP ; 设置栈顶指针;---------------------------------------; 程序的中间部分MOV AX, 467MOV CL, 100DIV CLMOV RESULT_1, AL ; 除以 100, 得百位数MOV AL, AHMOV AH, 0MOV CL, 10DIV CLMOV RESULT_2, AL ; 余数除以 10, 得十位数MOV RESULT_3, AH ; 余数为个位数;------------------------------------------ ; 程序结束必须要有的两条指令MOV AX, 4C00H ;INT 21H ;;------------------------------------------ CODE ENDSEND START ; 最后一行要按回车键五、减法方法1、算法说明:三位数先循环减100,直到不够减了,做减法的次数就是百分位的结果;将不够减之前一次的余数恢复,再循环减去10,直到不够减了,做减法的次数就是十分位的结果;最后恢复的正余数就是个位的结果。
单片机 数值转换 X进制转换BCD码、ASCII码 编程

在片内RAM 30H单元有-个8位二进制数,将其转换成压缩BCD码,存于片内RAM 41H(高位)40H(低位)中。
(方法:2^8=256,所以8位二进制A<=256,A/100商是百位数,存放到41h单元,余数再除以10,再得商是10位数,高低位互换,)
ORG 0100H
START:
MOV A,30H ;取来8位二进制数
MOV B,#100
DIV AB ;除以100
MOV 41H,A ;商是百位数,存放到41h单元
MOV A,B ;取回余数
MOV B,#10
DIV AB ;再除以10
SWAP A;商是10位数,高低位互换
ORL A,B
MOV 40H,A ;将十位数与个位位数存入40h
MOV A,R2
ANL A,#0FH
CJNE A,#0AH,NEQ
NEQ: JC LOOP
ADD A,#37H
JMP LOOP3
LOOP:ADD A,#30H
LOOP3:MOV 31H,A
MOV A,R2
SWAP A
ANL A,#0FH
CJNE A,#0AH,NE1
NE1: JC LOOP1
ADD A,#37H
JMP LOOP4
LOOP1:ADD A,#30H
LOOP4:MOV 32H,A
A1: SJMP A1
END
已知R0的低半个字节为一个四位的二进制数,要求将其转换为ASCAII码后送回R0中。
二进制数与ASCII码的对应关系:
四位二进制ASCII
0000(0)30H
0001(1)31H
1001(9)39H
LJMP MAIN
二进制转BCD码需要几步?

二进制转BCD码需要几步?Hi,大家好!我是至芯科技的李老师。
今天讲课的题目比较有意思,它是一个小问题:把二进制变成BCD码需要几步?请大家思考一下。
有同学可能回答需要三步,为什么啊?因为啊,把大象放进冰箱里需要三步,第一步,把冰箱门打开,第二步,把大象放进去,第三步,把冰箱门关上。
类似的,把二进制变成BCD码,也需要三步。
blablablabla ......当然啦,这是开玩笑了。
不过,歪打正着,答案确实是三步。
究竟是怎么回事呢?我们下面细细说来,原理说透之后,我们演示一下具体的Verilog实现过程。
首先,看一下下面这张表格,把二进制(8’hFF)转换为BCD (12’h255)的步骤列表。
什么是二进制转BCD?有什么用?4位二进制是16进制数,而生活中常用的数制是10进制数。
怎么样用计算机来理解、表达生活中的10进制数?这就需要进行16进制数与10进制数的相互转换了。
而BCD码(Binary-Coded Decimal)正是计算机常用的一种表达方式。
它是一种以二进制表示的十进制数码。
比如说,至芯科技ZX-1开发板上的六位数码管显示数字可以是16进制的000000~FFFFFF,但是更为方便的方法是000000~999999。
六位数码管显示六位数字用十六进制,比如说是0F423F,谁也不知道是多少,但是它对应的十进制数999999,大家肯定很熟悉。
很多场合,我们和机器之间沟通用10进制更方便,但计算机是用01编码的。
需要进行人机之间的沟通和转换。
解决的方法就是用二进制的方式来存储、计算数值,但是用10进制的方式来显示这些数值,BCD码就起到了桥梁的作用。
注意,16进制属于二进制的一种形式,希望大家理解这点,包括8进制也是。
当然,道理容易明白。
但究竟机器又是怎样实现二进制和BCD码的转换的呢?注意,转换是双向的,既可以把二进制转换成BCD码,也可以把BCD码转换成二进制数。
可以想象BCD码转成二进制相对比较简单。
8421BCD—余3码转换

8421BCD—余3码转换VHDL程序并行语句的应用一、实训目的1.巩固编译、仿真VHDL文件的方法。
2.掌握VHDL程序并行语句的应用。
二、实训器材计算机与Quartus ?工具软件。
三、实训指导(一) 实训原理8421BCD-余3码转换电路的真值表如表3-1所示。
表3-1 8421BCD-余3码转换电路的真值表输入输出a3 a2 a1 a0 y3 y2 y1 y00 0 0 0 0 0 1 10 0 0 1 0 1 0 00 0 1 0 0 1 0 10 0 1 1 0 1 1 00 1 0 0 0 1 1 10 1 0 1 1 0 0 00 1 1 0 1 0 0 10 1 1 1 1 0 1 01 0 0 0 1 0 1 11 0 0 1 1 1 0 0 (二)实训步骤1.设计输入VHDL文件(1)建立工程项目。
(2)建立VHDL文件。
(3)用条件信号赋语句或选择信号赋值语句等并行语句设计VHDL文件。
VHDL 代码如下:LIBRARY ieee;USE ieee.std_logic_1164.ALL; ENTITY ysmzh ISPORT(a:IN STD_LOGIC_VECTOR(3 DOWNTO 0);y:OUT STD_LOGIC_VECTOR(3 DOWNTO 0));END ysmzh;ARCHITECTURE a OF ysmzh IS BEGINPROCESS(a)BEGINCASE a ISWHEN "0000"=>y<="0011";WHEN "0001"=>y<="0100";WHEN "0010"=>y<="0101";WHEN "0011"=>y<="0110";WHEN "0100"=>y<="0111";WHEN "0101"=>y<="1000";WHEN "0110"=>y<="1001";WHEN "0111"=>y<="1010";WHEN "1000"=>y<="1011";WHEN "1001"=>y<="1100";WHEN OTHERS=>NULL;END CASE;END PROCESS;END a;2.编译仿真VHDL文件(1)编译VHDL文件。
二进制转bcd 组合逻辑

二进制转bcd 组合逻辑(原创实用版)目录1.二进制与 BCD 的概述2.二进制转 BCD 的组合逻辑方法3.实例分析4.总结正文一、二进制与 BCD 的概述二进制(Binary)是计算机中最基本的数制系统,它只有两个数码,即 0 和 1,广泛应用于计算机硬件和软件的设计中。
而 BCD(Binary Coded Decimal)即二进制编码十进制,是一种将十进制数转换为二进制数的编码方式,常用于计算机系统中数字信号的表示和处理。
二进制转 BCD,即将二进制数转换为 BCD 数,是在计算机系统中进行数字运算和处理的重要步骤。
组合逻辑是一种实现这一转换的常用方法,它主要通过逻辑门电路来实现二进制数到 BCD 数的转换。
二、二进制转 BCD 的组合逻辑方法二进制转 BCD 的组合逻辑方法主要包括以下两种:1.编码器方法:编码器是一种将多个输入信号转换为一个输出信号的组合逻辑电路。
在二进制转 BCD 的转换中,我们可以使用编码器将二进制数的每一位转换为 BCD 数的对应位。
例如,使用一个 4 位二进制数(2^3=8)来表示一个 BCD 数,即将 4 位二进制数转换为 3 位 BCD 数。
这样,我们可以通过编码器将 4 位二进制数转换为 3 位 BCD 数。
2.中间状态法:中间状态法是指在转换过程中,先将二进制数转换为十进制数,然后再将十进制数转换为 BCD 数。
这种方法需要使用更多的逻辑门电路,但是在一些特定情况下,如二进制数长度较短时,转换效果更佳。
三、实例分析假设有一个 4 位二进制数 1101,我们需要将其转换为 BCD 数。
1.使用编码器方法:首先,我们需要使用一个 4 位编码器,将二进制数的每一位转换为 BCD 数的对应位。
经过转换,得到的 BCD 数为1111。
2.使用中间状态法:首先,将二进制数 1101 转换为十进制数 13。
然后,使用一个 3 位编码器,将十进制数 13 转换为 BCD 数 1111。
8421BCD—余3码转换

VHDL程序并行语句的应用一、实训目的1.巩固编译、仿真VHDL文件的方法。
2.掌握VHDL程序并行语句的应用。
二、实训器材计算机与Qu artusⅡ工具软件。
三、实训指导(一)实训原理8421BC D-余3码转换电路的真值表如表3-1所示。
表3-1 8421BC D-余3码转换电路的真值表输入输出a3 a2 a1 a0 y3 y2 y1 y00 0 0 0 0 0 1 10 0 0 1 0 1 0 00 0 1 0 0 1 0 10 0 1 1 0 1 1 00 1 0 0 0 1 1 10 1 0 1 1 0 0 00 1 1 0 1 0 0 10 1 1 1 1 0 1 01 0 0 0 1 0 1 11 0 0 1 1 1 0 0(二)实训步骤1.设计输入VH DL文件(1)建立工程项目。
(2)建立VHDL文件。
(3)用条件信号赋语句或选择信号赋值语句等并行语句设计VH DL文件。
VHDL代码如下:LIBRAR Y ieee;USE ieee.std_lo gic_1164.ALL;ENTITY ysmzhISPORT(a:IN STD_LO GIC_V ECTOR(3 DOWNTO 0);y:OUT STD_LO GIC_V ECTOR(3 DOWNTO 0));END ysmzh;ARCHIT ECTUR E a OF ysmzhISBEGINPROCES S(a)BEGINCASE a ISWHEN "0000"=>y<="0011";WHEN "0001"=>y<="0100";WHEN "0010"=>y<="0101";WHEN "0011"=>y<="0110";WHEN "0100"=>y<="0111";WHEN "0101"=>y<="1000";WHEN "0110"=>y<="1001";WHEN "0111"=>y<="1010";WHEN "1000"=>y<="1011";WHEN "1001"=>y<="1100";WHEN OTHERS=>NULL;END CASE;END PROCES S;END a;2.编译仿真VH DL文件(1)编译VHDL文件。
8位二进制转字符

8位二进制转字符
8位二进制转字符的方法是将8位二进制数转换为对应的ASCII码,再将ASCII码转换为相应的字符。
首先,将8位二进制数分为两部分,前面7位用于表示ASCII 码,最后一位用于表示奇偶校验位。
奇偶校验位用于检测传输过程中的错误。
然后,将前面7位的二进制数转换为对应的十进制数,即将二进制数转换为十进制数。
最后,根据ASCII码表找到对应的字符。
例如,要将二进制数"01001000"转换为字符:首先将前面7位的二进制数"0100100"转换为十进制数,得到36。
然后根据ASCII码表,36对应的字符是"H"。
所以,二进制数"01001000"对应的字符是"H"。
八位二进制码转化为BCD码及余三码、BCD码转化余三码

河南科技大学课程设计说明书课程名称 EDA技术题目八位二进制转化为BCD码及余三码、BCD码转化为余三码学院车辆与动力工程学院班级学生姓名指导教师日期2012年7月14号八位二进制码转化为BCD码及余三码、BCD码转化余三码摘要八位二进制数转化为BCD码和余三码的转换在计算机语言中起到了非常重要的作用,通过这次的课程设计让我们更好地掌握二进制数转化为BCD 码和余三码。
二进制转化为余三码不能直接转化,只能通过BCD码为中介进而转化成余三码。
余三码(余3码)是由8421BCD码加上0011形成的一种无权码,由于它的每个字符编码比相应的8421BCD码多3,故称为余三码。
BCD码的一种。
余三码是一种对9的自补代码,因而可给运算带来方便。
其次,在将两个余三码表示的十进制数相加时,能正确产生进位信号,但对“和”必须修正。
修正的方法是:如果有进位,则结果加3;如果无进位,则结果减3。
如,(526)10进制=(0101 0010 0110)8421BCD码=(1000 0101 1001)余3码EDA技术打破了软件和硬件间的壁垒,使计算机的软件技术与硬件实现、设计效率与产品性能合二为一,它代表了电子设计技术和应用技术的发展方向。
VHDL主要用于描述数字系统的接口,结构和功能,它的语法简单易懂,移植性好。
本设计采用VHDL,Altera公司的Quartus II软件仿真,来实现八位二进制到BCD和BCD到余三码的转换。
由于八位二进制的最大范围是0~255,而八位BCD码的范围是0~99,故在转换时输入信号只能取99以内的数。
关键词:八位二进制、BCD码、余三码、VHDL目录第一章绪论 (1)§1.1 课程设计题目 (1)§1.2 设计目的 (2)§1.3 课程设计要求 (2)第二章EDA、VHDL简介 (3)§2.1 EDA简介 (3)§2.2 VHDL简介 (3)第三章设计过程 (5)§3.1设计规划 (5)§3.2各个模块设计及原理图 (5)§3.2.1八位二进制码转化为八位BCD码 (5)§3.2.2八位BCD码转化为八位余三码 (6)§3.2.3八位二进制码转化为8位余三码 (7)第四章系统仿真 (9)§4.1八位二进制码转化为八位BCD码仿真及分析 (9)§4.2八位BCD码转化为八位余三码仿真及分析 (9)§4.3八位二进制码转化为八位余三码仿真及分析 (10)第五章总结 (11)参考文献 (12)第一章绪论随着计算机科学与技术突飞猛进地发展,用数字电路进行信号处理的优势也更加突出,自20世纪70年代开始,这种用数字电路处理模拟信号的所谓“数字化”浪潮已经席卷了电子技术几乎所有的应用领域EDA是电子设计自动化(Electronic Design Automation)的缩写,在20世纪90年代初从计算机辅助设计(CAD)、计算机辅助制造(CAM)、计算机辅助测试(CAT)和计算机辅助工程(CAE)的概念发展而来的。
原码、反码、补码、移码、阶码、BCD码、余3码

原码、反码、补码、移码、阶码、BCD码、余3码原码:原码(true form)是一种计算机中对数字的二进制定点表示方法。
源码表示法在数值前面增加了一位符号位(即最高位为符号位),该位为0表示正数,该位为1表示负数。
反码:反码表示法规定:正数的反码于原码相同;负数的反码是其原码除符号位外逐位取反。
补码:补码(two’s complement) 1、在计算机中,数值一律用补码表示(存储)。
主要原因:使用补码,可以将符号位和其它位统一处理;同时,减法也可按加法处理。
另外,两个用补码表示的数相加时,如果最高位(符号位)有进位,则进位被舍弃。
2、补码与原码的转换过程几乎是相同的。
==补码的概述==求给定数值的补码表示分以下两种情况:(1)正数的补码:与原码相同。
【例1】+9的补码是00001001。
(这个+9的补码说的是用8位的2进制来表示补码的,补码表示表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等。
)(2)负数的补码:符号位为1,其余位为该数绝对值的原码按位取反;然后加1。
同一数字在不同的补码表示形式里头是不同的。
【例2】求-7的补码。
因为给定数是负数,则符号位为“1”。
后七位:+7的原码(0000111)→按位取反(1111000)→加1(1111001),所以-7的补码为1111001。
已知一个数的补码,求原码的操作分两种情况:(1)如果补码的符号位为“0”,表示是一个正数,其原码就是补码。
(2)如果补码的符号位为“1”,表示是一个负数,那么求给定的这个补码的补码就是要求的原码。
另一种方法求负数的补码,如下:例如:求-15的补码第一步:+15:00001111第二步:逐位取反,然后在末位加1。
11110001【例3】已知一个补码11111001则原码是10000111(-7)。
(补码的补码)“模”的概念“模”是指一个计量系统的计数范围。
如时钟等。
计算机也可以看成一个计量机器,它也有一个计量范围,即都存在一个“模”。
二进制转换成BCD码 实验报告

一、实验目的(1)进一步熟练掌握8086汇编语言编译调试工具和环境的操作;(2)掌握完整8086汇编的程序设计编写方法;(3)掌握简单的数值码制转换方法;(4)掌握键盘输出的DOS功能调用方法。
二、实验要求:将AX中的一个二进制数(对应的十进制数范围是0-65535),转换成压缩性BCD码表示的十进制,并从屏幕输出转换结果。
要求用减法实现,并比较与除法方法进行运行速度比较。
三、实验及报告要求:3.1、简要说明算法,并画出正确的程序流程图;3.2、给出完整正确的源程序代码,要求给每一句伪指令或指令加上注释;3.3、分别在DOS和Windows下编译、连接源程序生成可执行文件并调试,比较两个环境下生成的机器码的长度、寄存器内容、计算结果的异同。
3.4、如何观察转换过程中标志寄存器中各标志位的结果?如何观察转换结果的变化?试改变被转换数值,对结果与编制为的变化加以说明和解释。
3.5、写出完整的实验报告,特别是“实验结果”与“实验总结体会”部分,是评分的主要依据。
3.6、实验总结中要求结合实验中的经验、教训或体会对汇编语言格式、调试方法和微机原理学习方法作出总结。
四、程序流程图减法。
即五位数先循环减10000,直到不够减了,做减法的次数就是万分位的结果;将不够减之前一次的余数恢复,再循环减去1000,直到不够减了,做减法的次数就是千分位的结果;以此类推,最后恢复的正余数就是个位的结果.除法。
即五位数先除以10000,得到的商存放万位数的变量上;再将余数除以1000,得到的商存放千位数的变量上;之后将余数除以100,得到的商存放百分位的变量上;以此类推,最后的余数存放在个位的变量上。
A 、减法结束 将余数保存到个位数 恢复正余数 恢复余数计数器清零 Y 将数减去100 计数值加1 将计数器的值保存到百分位 够减否 N 输入二进制数 Y将数减去10000计数值加1 将计数器的值保存到万分位恢复余数 够减否 计数器清零零 N计数器清零 Y 将数减去1000 计数值加1 将计数器的值保存到千分位 恢复余数够减否 计数器清零 N Y 将数减去10 计数值加1 将计数器的值保存到十分位 够减否 NB、除法五、源程序代码A、减法源程序DATA SEGMENT ; 数据段RESULT_1 DB 0RESULT_2 DB 0RESULT_3 DB 0RESULT_4 DB 0RESULT_5 DB 0DATA ENDSSTACK SEGMENT STACK ; 堆栈段STA DB 64 DUP(0);开辟100单元作为堆栈空间STACK_TOP DB 0STACK ENDSCODE SEGMENT ; 代码段ASSUME CS:CODE , DS:DATA , ES:DATA , SS:STACK START:MOV AX, DATAMOV DS, AX ; 设置数据段MOV AX, STACKMOV SS, AX ; 设置堆栈段LEA SP, STACK_TOP ; 设置栈顶指针MOV AX,25468MOV CL, 0; 计数器清零NEXT1: SUB AX, 10000; 减10000JC OVER1; 有借位说明不够减INC CL ; 否则够减,计数器加1JMP NEXT1; 无条件跳转OVER1: ADD AX,10000; 最后恢复不够减时AL的余数MOV BX,AXMOV RESULT_1,CLADD CL,30HMOV AH,02MOV DL,CLINT 21HMOV CL,0MOV AX,BXNEXT2: SUB AX, 1000; 减1000JC OVER2; 有借位说明不够减INC CL ; 否则够减,计数器加1JMP NEXT2; 无条件跳转OVER2: ADD AX,1000; 最后恢复不够减时AL的余数MOV BX,AXMOV RESULT_2,CLADD CL,30HMOV AH,02MOV DL,CLINT 21HMOV CL,0MOV AX,BXNEXT3: SUB AX, 100; 减100JC OVER3 ; 有借位说明不够减INC CL ; 否则够减,计数器加1JMP NEXT3 ; 无条件跳转OVER3: ADD AX,100; 最后恢复不够减时AL的余数MOV BX,AXMOV RESULT_3,CLADD CL,30HMOV AH,02MOV DL,CLINT 21HMOV CL,0MOV AX,BXMOV CL, 0; 计数器清零NEXT4: SUB AL, 10; 减10JC OVER4; 有借位说明不够减INC CL ; 否则够减,计数器加1JMP NEXT4; 无条件跳转OVER4: ADD AL,10; 最后恢复不够减时AL的余数MOV BL,ALMOV RESULT_4,CLADD CL,30HMOV AH,02MOV DL,CLINT 21HMOV CL,0MOV AX,BXMOV RESULT_5,ALADD AL,30HMOV AH,02MOV DL,ALINT 21HMOV AX,4C00H ; 返回DOS(两句)INT 21H ;CODE ENDSEND START ; 最后一行要按回车键B、除法源程序DATA SEGMENT ; 数据段RESULT_1 DB 1 ; 结果1为低八位,初始量为’1’RESULT_2 DB 1 ; 结果1为低八位RESULT_3 DB 1 ; 结果1为低八位RESULT_4 DB 1 ; 结果1为低八位RESULT_5 DB 1 ; 结果1为低八位DATA ENDS ; 结束数据段STACK SEGMENT STACK ; 堆栈段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 ;把具体DATA送至寄存器中MOV DS, AX ; 设置数据段MOV AX, STACK ; 把STACK送至寄存器中MOV SS, AX ; 设置堆栈段LEA SP, STACK_TOP ; 设置栈顶指针MOV AX,32345 ;赋予立即数32345给AXMOV DX,0 ;余数清零MOV CX, 10000 ;赋予立即数10000给CXDIV CX ;除于CX中的立即数MOV RESULT_1, AL ; 除以10000, 得万位数MOV AX, DX ;将DX中的余数给AXMOV DX,0 ;余数清零MOV CX, 1000 ;赋予立即数1000给CXDIV CX ;除以1000MOV RESULT_2, AL ; 除以1000, 得千位数MOV AX, DX ;将DX中的余数给AXMOV DX,0 ;余数清零MOV CL, 100 ;赋予立即数100给CLDIV CL ;除以100 ;MOV RESULT_3, AL ;除以100, 得百位数MOV AL, AH ; 将AH中的余数给ALMOV AH, 0 ;余数清零MOV CL, 10 ; 赋予立即数10给CLDIV CL ;除以10MOV RESULT_4, AL ; 余数除以10, 得十位数MOV RESULT_5, AH ; 余数为个位数MOV CX,05H ;循环5次MOV AH,02H ;显示符LEA DI, RESULT_1 ;将结果1的偏移量给DI LP: MOV DL,BYTE PTR[DI] ;将[SI]中的字节内容给DL ADD DL,30H ;DL中的内容加30,显示数字INT 21H ;DOS INT 21 功能调用INC DI ;每显示一个字符,DI加1LOOP LP ;LP循环MOV AX,4C00H ; 返回DOS(两句)INT 21HCODE ENDS ;代码段结束END START ; 最后一行要按回车键六、实验结果6.1分别在DOS和Windows 下编译、连接源程序生成可执行文件并调试,比较两个环境下生成的机器码的长度、寄存器内容、计算结果的异同。
八位二进制——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码转余3码的串行verilog实现

BCD码转余3码的串行verilog实现默认分类 2009-10-17 15:57 阅读9 评论0字号:大中小1.功能描述:一个串行发送的BCD码通过设计的模块转换成一个余3码串行比特流。
2.模块简介:yu3:接收并且检验发送来的串行数据流,并将发送来的串行BCD码流转换成相应的余3串行比特数据流。
yu3_data:根据yu3模块发来的握手协议,更新BCD数据,并将数据以相应的串行发送协议发送给yu3模块。
yu3_test:测试文件,对yu3和yu3_data两个模块进行测试。
在测试文件中进行输入变量的初始化操作、时钟信号的操作、顶层模块下调用模块并对测试文件中的所有变量进行观察测试结果。
3.模块间的串行发送数据协议:yu3模块在要转化BCD码的开始会置1ack(ack=1),yu3_data模块接收到ack的上升沿后立即准备并更新数据,并且在下一个时钟上升沿或者下降沿时将串行总线拉低(串行总线不发送数据时是高的),产生发送标志位0,提示yu3模块发送已经开始了,当yu3模块检测到发送标志位后,就会在下时钟的下降沿或者上升沿串行检测4位BCD串行比特数据,并将其根据转换原理串行转换成余3串行比特数据流(余3串行比特数据流比BCD数据流要晚半个时钟周期,接收串行余3码时要注意);当yu3_data将4位BCD码串行发送完成后,会立即在下个时钟的上升沿或下降沿产生发送结束标志位,即将总线拉低,当yu3模块检测到发送结束标志后,在下一个适中的下降沿或者上升沿将总线拉高,一个BCD转余3的过程结束。
下一个过程开始,同样是yu3模块置一ack,向yu3_data要BCD串行码,过程如上所述,依次往下循环进行。
在整个过程中,yu3和yu3_data模块都是相互进行通信的,进行所谓的“握手”。
4.yu3中同步有限状态机状态编码说明:用状态变量记住电路现在所处的状态,记住已完成了哪些工作。
start:检测ack,直至置位ack,索要新的BCD串行码s_0:正在检测发送开始标志位sda=0s_1:正在检测第一位:0/1>>s_2 or 1/0>>s_3s_2 :正在检测第二位,并且已经检测出第一位为0:0/1>>s_4 or 1/0>>s_6s_3:正在检测第二位,并且已经检测出第一位为1:0/0>>s_5 or 1/1>>s_7s_4:正在检测第三位,并且已经检测出前两位为00:0/0>>s_8 or 1/1>>s_8s_5:正在检测第三位,并且已经检测出前两位为01:0/1>>s_8 or 1/0>>s_10s_6:正在检测第三位,并且已经检测出前两位为10:0/1>>s_9 or 1/0>>s_10s_7:正在检测第三位,并且已经检测出前两位为11:0/1>>s_9 or 1/0>>s_10s_8:正在检测第四位,并且前三位已经测测出000或者001:0/0>>stop or 1/1>>stops_9:正在检测第四位,不管前三位是什么:0或1/ 0>>stops_10:正在检测第四位,不管前三位是什么:0或1/ 1>>stop stop:检测发送结束标志位(sda=0)>>start5.yu3_data中的状态说明:start:正在检测ack=1;延后的动作是:更新数据并且拉低中线,产生发送开始标志位.>>bit0bit0:已经产生了发送开始标志位,正在等待发送data[0].>>bit1bit1:已经传送了data[0],正在等待发送data[1]>>>bit2bit2:已经传送了data[1],正在等待发送data[2]>>>bit3bit3:已经传送了data[2],正在等待发送data[3]>>>bit4bit4:已经发送完了一个4位的BCD串行码,正在等待拉低总线,产生发送结束标志位>>stopstop:发送标志位操作已完成,正在等待拉高中线>>>start6.各模块的verilog源代码:(1)yu3.v:用于转换的功能实现module yu3(sda,ack,clock,out,rst);input sda,clock,rst;output ack,out;reg ack,outbuf,link_out;reg[12:0] state;parameter start=13'b0_0000_0000_0001, s_0 =13'b0_0000_0000_0010,s_1 =13'b0_0000_0000_0100,s_2 =13'b0_0000_0000_1000,s_3 =13'b0_0000_0001_0000,s_4 =13'b0_0000_0010_0000,s_5 =13'b0_0000_0100_0000,s_6 =13'b0_0000_1000_0000,s_7 =13'b0_0001_0000_0000,s_8 =13'b0_0010_0000_0000,s_9 =13'b0_0100_0000_0000,s_10 =13'b0_1000_0000_0000,stop =13'b1_0000_0000_0000; assign out=link_out?outbuf:1'bz;always@(negedge clock or negedge rst) if(!rst)beginack<=0;link_out<=0;state<=start;endelsecase(state)start:if(ack)beginlink_out<=1;state<=s_1;endelsebeginstate<=start;ack<=1;ends_0:if(!sda)beginstate<=s_1;endelse state<=s_0; s_1:if(sda)beginstate<=s_3;outbuf<=0;endelsebeginstate<=s_2;outbuf<=1;ends_2:if(sda)beginstate<=s_6;outbuf<=0;endelsebeginstate<=s_4;ends_3:if(sda)beginstate<=s_7;outbuf<=1;endelsebeginstate<=s_5;outbuf<=0;ends_4:if(sda)beginstate<=s_8;outbuf<=1;endelsebeginstate<=s_8;ends_5:if(sda)beginstate<=s_10;outbuf<=0;endelsebeginstate<=s_8;outbuf<=1;ends_6:if(sda)beginstate<=s_10;outbuf<=0;endelsebeginstate<=s_8;ends_7:if(sda)beginstate<=s_10;outbuf<=0;endelsebeginstate<=s_9;outbuf<=1;ends_8:if(sda)beginstate<=stop;outbuf<=1;endelsebeginstate<=stop;ends_9:beginstate<=stop;outbuf<=0; ends_10:beginstate<=stop;outbuf<=1; endstop:if(sda)beginstate<=start;link_out<=0;ack<=0;outbuf<=0;endelsebeginstate<=stop;enddefault:beginstate<=start;link_out<=0;endendcaseendmodule(2)yu3_data.v:BCD码的更新及串行发送。
数字进制转换方法

数字进制转换方法
数字进制是计算机中用来表示数字的一种方式,常见的进制有二进制、八进制、十进制和十六进制。
数字进制转换有以下方法:
1. 二进制转八进制或十六进制:将二进制数按从右到左每三位或四位一组,将每组转换成对应的八进制或十六进制即可。
2. 八进制或十六进制转二进制:将八进制或十六进制数中的每一位转换成对应的三位或四位二进制数即可。
3. 十进制转二进制、八进制或十六进制:用除基取余法将十进制数不断除以对应的进制数,将余数从下往上依次排列即是转换后的二进制、八进制或十六进制数。
4. 二进制、八进制或十六进制转十进制:将每一位的值乘以对应进制的基数的幂次方相加即可。
上述方法都需要熟练掌握基本的数字运算和进制的概念,数字进制转换在计算机科学中应用广泛,尤其在编程中常常需要进行进制转换。
用Verilog实现BCD码到余3码的转换

用Verilog实现BCD码到余3码的转换
邵东瑞;金迪
【期刊名称】《微处理机》
【年(卷),期】2008(029)003
【摘要】BCD码和余3码是串行通讯中比较常见的两种编码方式,二者的转换在不同的通讯场合中也经常用到,文章主要介绍二者之间的关系并用Vetilog语言实现了二者之间的转换.
【总页数】2页(P51-52)
【作者】邵东瑞;金迪
【作者单位】东软派斯通医疗系统有限公司,沈阳,110179;辽宁省医疗器械产品质量监督检验所,沈阳,110179
【正文语种】中文
【中图分类】TN4
【相关文献】
1.将C算法转换为Verilog HDL实现的一种改进方法 [J], 贺敬凯
2.巧用EPROM2716实现BCD码到二进制码的转换 [J], 柴录全
3.一种BIN码与BCD码转换电路的设计与实现 [J], 邬杨波;胡建平;李宏
4.面向新工科的BCD码-余三码转换电路设计应用 [J], 褚馨怡;辛佳宇;秦嘉琦;刘峰良
5.BCD码和二进制码转换的硬件实现 [J], 陈龙;樊晓桠
因版权原因,仅展示原文概要,查看原文内容请购买。