文档库 最新最全的文档下载
当前位置:文档库 › 将两个二进制数分别转换为ASCII码程序

将两个二进制数分别转换为ASCII码程序

将两个二进制数分别转换为ASCII码程序
将两个二进制数分别转换为ASCII码程序

将两个二进制数分别转换为ASCII码

程序总体功能:

主程序提供待转换的数、数据位数(8/16位)和存放ASCII码的首址等三个参数。子程序完成二进制到ASCII码的转换。

程序语句:

DATA SEGMENT

BIN1 DB 35H ;待转换数

BIN2 DW 0AB48H

BUF DB 20H DUP (0) ;结果单元

DATA ENDS

STACK1 SEGMENT STACK

DB 20H DUP (0)

STACK1 ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA ,SS:STACK1

START: MOV AH,BIN1 ;转换8位数据

XOR AL,AL

PUSH AX ;待转换数据压栈

LEA AX,BUF

PUSH AX ;存ASCII码首址压栈

MOV AX,8

PUSH AX ;待转换数据的位数压栈 CALL BINASC ;调用子程序

MOV AX,BIN2 ;转换16位数据

PUSH AX

LEA AX,BUF+10H

PUSH AX

MOV AX,16

PUSH AX

CALL BINASC ;调用子程序

MOV AH,4CH

INT 21H

BINASC PROC ;转换子程序

PUSH CX ;保存信息

PUSH DX

PUSH DI

PUSH BP

MOV BP,SP ;BP指向堆栈顶部

MOV DX,[BP+14] ;待转换数

MOV DI [BP+12] ;ASCII码首址

MOV CX,[BP+10] ;十进制位数

LOP: ROL DX,1

MOV AL,DL

AND AL,01H

OR AL,30H ;将一位二进制数转换为ASCII码 MOV [DI],AL

INC DI

LOOP LOP

POP BP ;恢复信息

POP DI

POP DX

POP CX

RET 6

BINASC ENDP

CODE ENDS

END START

二进制转BCD码

二进制转换成十进制 BCD码(加3移位法 底下还附带了BCD码转二进制码转化的VHDL程序 算法 "二进制数调整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 Library ieee; --16位二进制转BCD码(0到9999) Use ieee.std_logic_unsigned.all; Use ieee.std_logic_1164.all; Entity B_BCD is Port ( clk,ena:in std_logic; a: in std_logic_vector(15 downto 0); q: out std_logic_vector(15 downto 0)); end B_BCD; architecture behav of B_BCD is begin process(clk,a) variable i: std_logic_vector(4 downto 0); variable in_a,out_a :std_logic_vector(15 downto 0); begin if ena='0'then in_a:=a; i:="00000"; out_a:="0000000000000000"; elsif clk'event and clk='1' then if i="10000" then out_a:=out_a; else out_a:=out_a(14 downto 0)&in_a(15); in_a:=in_a(14 downto 0)&'0'; i:=i+1; if i<"10000" then if out_a( 3 downto 0)>4 then out_a( 3 downto 0):=out_a( 3 downto 0)+3; end if; if out_a( 7 downto 4)>4 then out_a( 7 downto 4):=out_a( 7 downto 4)+3; end if; if out_a(11 downto 8)>4 then out_a(11 downto 8):=out_a(11 downto 8)+3;

格雷码转二进制原理

在精确定位控制系统中,为了提高控制精度,准确测量控制对象的位置是十分重要的。目前,检测位置的办法有两种:其一是使用位置传感器,测量到的位移量由变送器经a/d转换成数字量送至系统进行进一步处理。此方法精度高,但在多路、长距离位置监控系统中,由于其成本昂贵,安装困难,因此并不实用;其二是采用光电轴角编码器进行精确位置控制。光电轴角编码器根据其刻度方法及信号输出形式,可分为增量式、绝对式以及混合式三种。而绝对式编码器是直接输出数字量的传感器,它是利用自然二进制或循环二进制(格雷码)方式进行光电转换的,编码的设计一般是采用自然二进制码、循环二进制码、二进制补码等。特点是不要计数器,在转轴的任意位置都可读出一个固定的与位置相对应的数字码;抗干扰能力强,没用累积误差;电源切断后位置信息不会丢失,但分辨率是由二进制的位数决定的,根据不同的精度要求,可以选择不同的分辨率即位数。目前有10位、11位、12位、13位、14位或更高位等多种。 其中采用循环二进制编码的绝对式编码器,其输出信号是一种数字排序,不是权重码,每一位没有确定的大小,不能直接进行比较大小和算术运算,也不能直接转换成其他信号,要经过一次码变换,变成自然二进制码,在由上位机读取以实现相应的控制。而在码制变换中有不同的处理方式,本文着重介绍二进制格雷码与自然二进制码的互换。 一、格雷码(又叫循环二进制码或反射二进制码)介绍 在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的3转换成4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。下表为几种自然二进制码与格雷码的对照表: 十进制数自然二进制数格雷码十进制数自然二进制数格雷码 0 0000 0000 8 1000 1100 1 0001 0001 9 1001 1101 2 0010 0011 10 1010 1111 3 0011 0010 11 1011 1110 4 0100 0110 12 1100 1010 5 0101 0111 13 1101 1011 6 0110 0101 14 1110 1001 7 0111 0100 15 1111 1000 二、二进制格雷码与自然二进制码的互换 1、自然二进制码转换成二进制格雷码 自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。 2、二进制格雷码转换成自然二进制码 二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制

单片机实验二进制ASCII码转换

实验三二进制ASCII码转换 一、实验目的 1.了解BCD值和ASCII值的区别 2.掌握用查表的方法将BCD值转换成ASCII值 二、实验说明 此实验主要让学生了解数值的BCD码和ASCII码的区别,利用查表方法可以快速地进行数值转换。进一步掌握数值的各种表达方式。现在我们给出一个BCD数,将其转换成ASCII 值。如下:将累加器A的值拆为二个ASCII码,并存入Result开始的二个单元,例程A赋值#1AH。 三、实验内容及步骤 1.安装好仿真器,用串行数据通信线连接计算机与仿真器,把仿真头插到模块的单片机插座中,打开模块电源,插上仿真器电源插头(USB线)。 2.启动PC机,打开KEIL软件,软件设置为模拟调试状态。在所建的Project文件中添加TH 3.ASM源程序进行编译,编译无误后,全速运行程序,打开数据窗口(DATA)(在MEMORY#1中输入D:30H 回车),点击暂停按钮,观察地址30H、31H的数据变化,30H更新为31,31H 更新为41。用键盘输入改变地址30H、31H的值,点击复位按钮后,可再次运行程序,观察其实验效果。修改源程序中给累加器A的赋值,重复实验,观察实验效果。 3.打开CPU窗口,选择单步或跟踪执行方式运行程序,观察CPU窗口各寄存器的变化,可以看到程序执行的过程,加深对实验的了解。 四、流程图及源程序(见光盘中的程序文件夹) 1.源程序 RESULT EQU 30H ORG 0 LJMP START ASCIITAB: DB ‘0123456789ABCDEF' ;定义数字对应的ASCII表 BINTOHEX: MOV DPTR,#ASCIITAB MOV B, A ;暂存A SWAP A ANL A,#0FH ;取高四位 MOVC A,@A+DPTR ;查ASCII表 MOV RESULT, A MOV A,B ;恢复A ANL A,#0FH ;取低四位 MOVC A,@A+DPTR ;查ASCII表 MOV RESULT+1,A RET START: MOV SP,#40H

二进制转换成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,得到的商存放百分位的变量上;以此类推,最后的余数存放在个位的变量上。

单片机实验4 子程序设计-- BCD码转换为二进制

实验4. 子程序设计----BCD 码转换为二进制 单字节可存放两位压缩BCD 码(0—99) 为0 —9) 单字节BCD 码转换为二进制子程序 入口:(R0)= 压缩BCD 码的地址 出口:(A)= 转换结果 DSFR::MOV A,@R0 ANL A,#0F0H ;取十位数 SWAP A ;变为标准BCD 码 MOV B,#10 MUL AB ;(A)=D1×10 MOV R7,A ;D1× 10暂存 R7 MOV A,@R0 ANL A,#0FH ;取个位 ADD A,R7 ;A=D1×10+D0 RET 1、实验内容: 子程序设计要点: 1) 子程序一般为多次返复使用的程序段,一般应说明入口条件,DSFR 子程序的 入口条件是:被转换为二进制的单字节BCD 码为间接寻址,间接寻址寄存器为R0。要调用DFSR 子程序必需先将压缩BCD 码的存放地址赋与R0。而出口条件是指最后结果在哪儿存放。本子程序转换结果在ACC 内。 2) 主程序调用子程序,在调试时一般要先调试子程序、再调试主程序。

2、实验步骤 1)打开PV32编程序。汇编正确进入调试界面。否则修改程序重新汇编直到通过。 2)打开DATD窗口给20H、21H、R6、R7赋值 3)单步调试DSFR子程序观察并记禄寄存器、内存的变化。判断程序是否正确。若发现 问题重返编辑界面,修改、存盘、汇编。返回调试界面调试通过。 4) 设断点调试主程序观察并记禄寄存器、内存的变化。判断程序是否正确。若发现问 题重返编辑界面,修改、存盘、汇编。返回调试界面调试通过。 3.实验报告 1.写出主程序流程图、子程序流程图、程序清单 2.根据记渌数据给程序加注解 3.调试心得

符号与ASCII码的转换

实验一符号与ASCII码的转换 一、实验目的: 1、熟悉英文字母和常用符号的基本编码理论。 2、了解数字符号和数字ASCII码值的区别。 3、使用高级语言实现符号与ASCII码的转换。 二、实验要求: 1、界面友好、简洁 2、变量和函数要有注释 3、实验报告中要有程序流程图 三、实验环境: 1、硬件环境:主流配置计算机 2、操作系统:Windows xp (替换成实际应用系统) 3、编译平台:Visual C++ 6.0 (替换成实际应用平台) (可选语言包括C、C++、Java等等) 四、实验内容: 1、介绍一下ASCII编码(查找整理资料) –编写ASCII码转换程序(用流程图表示)

2、输入符号,打印出对应的ASCII码表(十进制、16进制、二进制) 3、输入ASCII码值(十进制、或16进制、或二进制), 打印出对应的符号。 4、创建一个文件(内容为一段英文),读入文件并将 其中的符号转换为ASCII码,写入另一个文件。 –调试并通过该程序(抓图示例,实验体会) 五、实验报告内容: 1、实验名称 2、实验目的 3、实验要求 4、实验环境 5、实验内容(算法描述、算法流程) 6、实验体会 六、实验报告正文: 1、ASCII编码的介绍 ASCII(American Standard Code for Information Interchange,美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。它主要用于显示现代英语,而其扩展版本EASCII则可以部分支持其他西欧语言,并等同于国际标准ISO/IEC 646。由于万维网使得ASCII广为通用,直到2007年12月,逐渐被Unicode取代。 ASCII码使用指定的7位或8位二进制数组合来表示128或256种可能的字符。标准ASCII码也叫基础ASCII码,使用7位二进制数来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符。其中:

格雷码、二进制转换及译码电路

EDA技术与应用 实验报告 实验名称:格雷码、二进制转换及译码电路 姓名:陈丹 学号:100401202 班级:电信(2)班 时间:2012.11.27 南京理工大学紫金学院电光系

一、实验目的 1)学习用VHDL代码描述组合逻辑电路的方法。 2) 掌握when….else….,generate和case并行语句的使用。 二、实验原理 1)学习VHDL的when….else….,generate和case并行语句。 2)利用when….else….并行语句描述4位二进制码/格雷码转换电路。 3)利用generate并行语句描述n位格雷码/二进制码转换电路。 4)利用case并行语句实现译码电路。 5)利用实验箱验证所设计的电路的正确性,要求将输入输出的数据用数码管显示。 三、实验内容 1、二进制转换为格雷码 4位二进制格雷码转换的真值表如图所示:

1.1建立工程,输入代码 先建立工程,工程命名为“btog”,顶层文件名为“btog”。 选择“file→new”,在弹出的窗口中选择“VHDL File”建立“VHDL”文件。 在新建的VHDL文件中输入二进制格雷码转换的VHDL代码,将文件保存。 二进制转换为格雷码的代码: 1.2 编译仿真 对当前文件进行编译,编译通过以后建立仿真波形,保存为“b_to_g.vwf”.为波形文件添加节点,将“end time”设置为100μs ,将输入输出编组,并为输入信号赋值,其中“start value”为“0000”,“count every”设置为5μs.其波形如下:

仿真结果 2、generate语句实现格雷码转换为二进制 对于n位二进制转换为格雷码的码转换电路,转换表达式如下: Bn=Gn Bi=Gi⊕B(i+1) 2.1建立工程,输入代码 先建立工程,工程命名为“gtob”,顶层文件名为“g_to_b2”。 选择“file→new”,在弹出的窗口中选择“VHDL File”建立“VHDL”文件。 在新建的VHDL文件中输入格雷码二进制转换的VHDL代码,将文件保存。 转换代码:

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

二进制数到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 1

RESULT_2 DB 1 RESULT_3 DB 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 MOV DS, AX ; 设置数据段 MOV AX, STACK MOV SS, AX ; 设置堆栈段 LEA SP, STACK_TOP ; 设置栈顶指针 ;--------------------------------------- ; 程序的中间部分 MOV AX, 467 MOV CL, 100 DIV CL MOV RESULT_1, AL ; 除以 100, 得百位数 MOV AL, AH MOV AH, 0 MOV CL, 10 DIV CL MOV RESULT_2, AL ; 余数除以 10, 得十位数 MOV RESULT_3, AH ; 余数为个位数 ;------------------------------------------ ; 程序结束必须要有的两条指令 MOV AX, 4C00H ; INT 21H ; ;------------------------------------------ CODE ENDS

格雷码和二进制码的转换

二进制格雷码与自然二进制码的互换 中国科学院光电技术研究所游志宇 示例工程下载 在精确定位控制系统中,为了提高控制精度,准确测量控制对象的位置是十分重要的。目前,检测位置的办法有两种:其一是使用位置传感器,测量到的位移量由变送器经A/D转换成数字量送至系统进行进一步处理。此方法精度高,但在多路、长距离位置监控系统中,由于其成本昂贵,安装困难,因此并不实用;其二是采用光电轴角编码器进行精确位置控制。光电轴角编码器根据其刻度方法及信号输出形式,可分为增量式、绝对式以及混合式三种。而绝对式编码器是直接输出数字量的传感器,它是利用自然二进制或循环二进制(格雷码)方式进行光电转换的,编码的设计一般是采用自然二进制码、循环二进制码、二进制补码等。特点是不要计数器,在转轴的任意位置都可读出一个固定的与位置相对应的数字码;抗干扰能力强,没用累积误差;电源切断后位置信息不会丢失,但分辨率是由二进制的位数决定的,根据不同的精度要求,可以选择不同的分辨率即位数。目前有10位、11位、12位、13位、14位或更高位等多种。 其中采用循环二进制编码的绝对式编码器,其输出信号是一种数字排序,不是权重码,每一位没有确定的大小,不能直接进行比较大小和算术运算,也不能直接转换成其他信号,要经过一次码变换,变成自然二进制码,在由上位机读取以实现相应的控制。而在码制变换中有不同的处理方式,本文着重介绍二进制格雷码与自然二进制码的互换。 一、格雷码(又叫循环二进制码或反射二进制码)介绍 在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的3转换成4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。下表为几种自然二进制码与格雷码的对照表: 十进制数自然二进制数格雷码十进制数自然二进制数格雷码 0 0000 0000 8 1000 1100 1 0001 0001 9 1001 1101 2 0010 0011 10 1010 1111 3 0011 0010 11 1011 1110 4 0100 0110 12 1100 1010 5 0101 0111 13 1101 1011 6 0110 0101 14 1110 1001 7 0111 0100 15 1111 1000

实验二二进制码转换为bcd码实验报告终审稿)

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

格雷码与二进制代码的转换规则

格雷码与二进制代码的转换规则 一、什么是格雷码? 首先我们来了解一下格雷码。前面我们介绍了一些常见的BCD码,8421BCD、2421BCD、5421BCD,还有余三码,那么这个格雷码我们接触较少,什么是格雷码呢?这种码是一个叫弗兰克*格雷的人在1953年发明的,最初用于通信。 格雷码,又叫循环二进制码或反射二进制码,它的基本的特点就是任意两个相邻的代码只有一位二进制数不同,这点在下面会详细讲解到。在数字系统中,常要求代码按一定顺序变化。例如,按自然数递增计数,若采用8421码,则数0111变到1000时四位均要变化,而在实际电路中,4位的变化不可能绝对同时发生,则计数中可能出现短暂的其它代码(1100、1111等)。在特定情况下可能导致电路状态错误或输入错误。使用格雷码可以避免这种错误。格雷码属于可靠性编码,是一种错误最小化的编码方式。 举个例子来说吧,如果用一个8位的二进制数表示热水壶的温度,温度是不断连续变化的,36°C、37°C、38°C......,那么温度每升高一度,二进制数就加1。这时候,二进制数有可能是多个位同时变化的:当温度由119°C变成120°C时,二进制数由01110111变化成01111000,有四个位发生变化;当二进制数由177°C变化成178°C时,二进制数由01111111变化成10000000,有8个位发生了变化。也就是说,自然二进制数在表示一个连续变化的数值时,可能会有多个位同时发生变化,每个位翻转(变化)的频率是比较高的,这在某些应用场合,是十分不利的。而格雷码,由于具有循环特性和单步特性,当用它表示

一个连续变化的数值时,仅有一个位会翻转,大大的降低了位翻转的频率,因而可以保证传输的稳定性,较少传输误码率。格雷码的单步特性呢就是是指,当格雷码表示的一个数值,连续变化时,格雷码只有一个位会变化。就是我刚才说的它最基本的特点了。还有格雷码的单步特性是指,当格雷码表示的一个数值,连续变化时,格雷码只有一个位会变化。看表,1000变到0000,格雷码只有一位翻转。 二、格雷码与二进制码转换规则 大家看一下这个表,有没有发现二进制转为格雷码的规律?看上去,格雷码似乎很乱,不像8421码那样连续的。我们记8421码的时候很轻松,因为它每位的值都是固定的数,有位权。那么我们怎么记格雷码呢?死背真值表?当然了,这是一种方法,有能力又勤奋的同学可以用这种方法。不过呢,很多东西都是有它独特的规律的,格雷码也不例外。现在我们先来看二进制转换为格雷码的过程,也就是编码。 最初就说了,格雷码的基本特点就是任意两个相邻的代码只有一位二进制 十进制数 自然二进制数 格雷码 十进制数 自然二进制数 格雷码 0 0000 0000 8 1000 1100 1 0001 0001 9 1001 1101 2 0010 0011 10 1010 1111 3 0011 0010 11 1011 1110 4 0100 0110 12 1100 1010 5 0101 0111 13 1101 1011 6 0110 0101 14 1110 1001 7 0111 0100 15 1111 1000

ASCII码转16进制对照表

ASCII与16进制转换 ASCII16进制ASCII16进制ASCII16进制ASCII16进制NUL00H DLE10H SP20H030H SOH01H DC111H!21H131H STX02H DC212H"22H232H ETX03H DC313H#23H333H EOT04H DC414H$24H434H ENQ05H NAK15H%25H535H ACK06H SYN16H&26H636H BEL07H ETB17H'27H737H BS08H CAN18H(28H838H HT09H EM19H)29H939H LF0AH SUB1AH*2AH:3AH VT0BH ESC1BH+2BH;3BH FF0CH FS1CH,2CH<3CH CR0DH GS1DH_2DH=3DH SO0EH RS1EH.2EH>3EH SI0FH US1FH/2FH?3FH ASCII16进制ASCII16进制ASCII16进制ASCII16进制@40H P50H、60H p70H A41H Q51H a61H q71H B42H R52H b62H r72H C43H S53H c63H s73H D44H T54H d64H t74H E45H U55H e65H u75H F46H V56H f66H v76H G47H W57H g67H w77H H48H X58H h68H x78H

I49H Y59H i69H y79H J4AH Z5AH j6AH z7AH K4BH[5BH k6BH{7BH L4CH\5CH l6CHㄧ7CH M4DH]5DH m6DH}7DH N4EH↑5EH n6EH~7EH O4FH←5FH o6FH DEL7FH

格雷码与二进制转换

在数字系统中只能识别0和1,各种数据要转换为二进制代码才能进行处理,格雷码是一种无权码,采用绝对编码方式,典型格雷码是一种具有反射特性和循环特性的单步自补码,它的循环、单步特性消除了随机取数时出现重大误差的可能,它的反射、自补特性使得求反非常方便。格雷码属于可靠性编码,是一种错误最小化的编码方式,因为,自然二进制码可以直接由数/模转换器转换成模拟信号,但某些情况,例如从十进制的3转换成4时二进制码的每一位都要变,使数字电路产生很大的尖峰电流脉冲。而格雷码则没有这一缺点,它是一种数字排序系统,其中的所有相邻整数在它们的数字表示中只有一个数字不同。它在任意两个相邻的数之间转换时,只有一个数位发生变化。它大大地减少了由一个状态到下一个状态时逻辑的混淆。另外由于最大数与最小数之间也仅一个数不同,故通常又叫格雷反射码或循环码。 二、二进制格雷码与自然二进制码的互换 1、自然二进制码转换成二进制格雷码 自然二进制码转换成二进制格雷码,其法则是保留自然二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或,而格雷码其余各位与次高位的求法相类似。 例如:自然二进制编码如下: 1001 那么转换为格雷码的方法是:保留最高位1,然后将第二位0与第一位1做异或操作,第三位的0与第二位的0做异或操作,第四位的1与第三位的0做异或操作,得到结果如下: 1 1 0 1 Gray

2、二进制格雷码转换成自然二进制码 二进制格雷码转换成自然二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。例如:将格雷码1000转换为自然二进制码: 1000 1111 上排为格雷码,下排为自然二进制,从左到右分别为1~4位 将上排的第一位高位作为自然二进制的最高位,因此在下排的第一位填入1,然后以上排第二位与下排第一位做异或操作,得到下排第二位结果为1,将上排第三位与下排第二位做异或操作,得到下排第三位的结果为1,同理,下排第四位的结果为1,因此,我们得到了转换结果如下: 1 1 1 1 Bin 二进制码->格雷码(编码):从最右边一位起,依次将每一位与左边一位异或(XOR),作为对应格雷码该位的值,最左边一位不变(相当于左边是0); 格雷码-〉二进制码(解码):从左边第二位起,将每位与左边一位解码后的值异或,作为该位解码后的值(最左边一位依然不变).

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

智能仪表多字节二进制数转换BCD码

智能仪表多字节二进制数转换BCD码 作者:湖南大学电气与信息工程系邓勇刘琪来源:《电子产品世界》 摘要:多字节无符号二进制数转BCD码在以单片机为核心的智能仪表中应用很普遍。本文介绍一种新的转换方法,并给出三字节二进制数转BCD码的源程序,该程序执行时间仅为原来的1.3%,效率提高显著。 关键词:多字节二进制整数 BCD码转换 一、引言 在以MCS-51单片机为核心的智能仪表系统中,常遇到二进制整数转换为BCD码的情况。国内许多单片机书籍都对此进行了介绍并给出了子程序,但效率不高。本文参考文献作者剖析了二进制整数转BCD码的子程序,分析了程序效率低的原因,给出了改进后的源程序,效率有所提高。以3字节 的二进制整数为例,程序 执行时间由2.856ms减小到 2.410ms。还有没有其它的 办法进一步大幅度减少转 换设计时间?本文介绍一 种新的程序设计思路,给 出的源程序将3字节二进 制整数转BCD码执行时间 仅为0.374ms。 二、改进思路 由进制数转BCD码的原理可知,这一转换的实现的过程是(以3字节为例):首先把结果单元(这里是4个字节)清零,然后将待转换的二进制数的最高位移入进位位C,把结果单元的值进行乘2加C运算的值又作为结果单元的值,循环24次后得出转换的BCD码。如果能完全避开效率运行的时间。这可用下例来说明: 设结果单元某时的值为3456H,分别存放在R1、R2中,用如下的程序来完成结果单元乘2加(设C的当前值为1): MOV A,R1 ADDC A,ACC DA A MOV R1,A MOV A,R2

ADDC A,ACC DA A MOV R2,A 程序中使用ADDC A,ACC指令完成乘2加C的工作,经过执行上面的程序,进位位C 的值为0,R1、R2单元中的内容分别为69H、13H,该值即为结果单元的值。这样就使程序避免了循环而又实现了结果单元乘2加C的功能。这个例子的结果单元为2字节,随着进一步的运算,结果单元会变为3字节并最终变为4字节(以二进制数是3字节为例)。只要在程序中加以适当的控制,则可避免过多的运算,从而使转换的速度加快。 三、源程序 程序名:FBCD 程序功能:将三字节二进制数转换为BCD码。 程序入口:20H,21H,22H, 存放被转换的三字节二进制数。 程序出口为R1,R2,R3,R4,存放转换的BCD码的结果(见程序清单)。 四、结语 为了尽可能地减少转换时间,使用了一些小技巧。例如:在程序开始转换二进制数前3位时,考虑到这3位在进行乘2加C的操作时不会有进位位,则使用3条RL A,完成了前3位的转换。该程序完成3字节二进制无符号整数转BCD码所需时间仅为374微秒,转换时间缩短为原来的13%,效率提高是显著的。另外,该程序比较灵活,程序中标注(****)处,已完成了2字节二进制整数转三字节的BCD码,程序执二字节二进制数转BCD码所需时间仅为194微秒,使用一条MOV R1,A指令,则转换结果按由高到低的次序依次存放在R1,R2,R3中。当然,很容易在此程序基础之上,实现4字节或更高字节无符号二进制整数向BCD码的转换。

16位二进制转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 Library ieee; --16位二进制转BCD码(0到9999) Use ieee.std_logic_unsigned.all; Use ieee.std_logic_1164.all; Entity B_BCD is Port ( clk,ena:in std_logic; a: in std_logic_vector(15 downto 0); q: out std_logic_vector(15 downto 0)); end B_BCD; architecture behav of B_BCD is begin process(clk,a) variable i: std_logic_vector(4 downto 0); variable in_a,out_a :std_logic_vector(15 downto 0); begin if ena='0'then in_a:=a; i:="00000"; out_a:="0000000000000000"; elsif clk'event and clk='1' then if i="10000" then out_a:=out_a; else out_a:=out_a(14 downto 0)&in_a(15); in_a:=in_a(14 downto 0)&'0'; i:=i+1; if i<"10000" then if out_a( 3 downto 0)>4 then out_a( 3 downto 0):=out_a( 3 downto 0)+3; end if; if out_a( 7 downto 4)>4 then out_a( 7 downto 4):=out_a( 7 downto 4)+3; end if; if out_a(11 downto 8)>4 then out_a(11 downto 8):=out_a(11 downto 8)+3; end if; if out_a(15 downto 12)>4 then out_a(15 downto 12):=out_a(15 downto

相关文档