文档库 最新最全的文档下载
当前位置:文档库 › 实验1---BCD码转换成十六进制码

实验1---BCD码转换成十六进制码

实验1---BCD码转换成十六进制码
实验1---BCD码转换成十六进制码

实验1---BCD码转换成十六进制码

实验1 BCD码转换成十六进制码

1.实验目的

(1)熟悉编码转换程序

(2)掌握编写和运行子程序的技巧

2实验设备

计算机一台

硬件配置:pentium2及以上配置,内存为128MB,硬盘剩余空间100MB,配置有串口,并口,和USB口

操作系统:Windows98/2000/xp

应用软件:KeilC51

3实验内容

将片内RAM 20H单元中两位BCD码转换成相应的十六进制码,转换结果保存于22H单元

4实验原理提示

常用BCD码转十六进制码的方法为“乘十加数”法。例如,将BCD码10010010(表示十进制数92)转换成十六进制编码表示形式,算法为:

Y=(09*0A+02)H=5CH。其中Y H为转换后的

H

十六进制数。再二进制运算中乘法可以用移位(左移)实现,*0A可以写成*08+*02,其中*08

是将被乘数左移3为,*02是将被乘数左移1为。则(09*0A+02)

H =(09+08+09*02+02)

D

=(01001000+00010010+00

000010)

B =(01011100)

B

=5CH。

5.BCD码转换成十六进制码的实验程序流程图如图

6.实验参考程序

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN: MOV R0,#12H

MOV R1,#06H

MOV R2,#08H

MOV R3,#11H

MOV A,R0

ADD A,R2

DA A

MOV R2,A

ANL A,#0FH

MOV R0,A

MOV A,R2

ANL A,#0F0H

SWAP A

ADD A,R1

ADD A,R3

DA A

MOV R3,A

ANL A,#0FH

MOV R1,A

MOV A,R3

MOV R3,#0H

ANL A,#0F0H

SWAP A

MOV R2,A

RET

END

7.实验要求

(1)掌握编码转换程序的编写方法(2)根据实验任务要求,编制源程序(3)上机调试程序,记录相关调试信息(4)写出实验报告

实验2 排列程序

1.实验目的

(1)熟悉MCS-51指令系统,掌握程序设计方法。

(2)掌握排序程序算法

(3)掌握循环程序实现数据排序的基本方法。

2.实验设备

计算机一台,配置同上

3.实验内容

编写并调试一个通用排序子程序,其功能为将RAM的40H~4FH单元16个子字节无符号二进制整数按从小到大顺序排列,将排序后数据存储于RAM的50H~5FH单元中。

4. 实验原理提示

从40H单元的第一个数开始依次和相邻单元的另一个数比较,如果顺序对,则不作任何操作;如果顺序不对,则将这两个数交换位置。这样,在完成第1遍n-1次比较后,最大的数到了最后,所以第2遍比较只是比较n-2次,最多作n-1遍比较就可完成排序。在比较中设立一个标志位flag=1说明排序未完成,进入外循环;若flag=0,说明排序已完成,程序结束。

实验程序:

ORG 0

LJMP MAIN

ORG 40H

MAIN: MOV R5,#10H

MOV R0,#40H

MOV A,#0H

MOV R1,#0H

MOV R2,#10H LOOP0: ACALL LOOP

INC R0

INC R1

DJNZ R5,LOOP0 LOOP1: MOV R0,#40H

MOV B,#0FH

LOOP2: MOV A,@R0

MOV 10H,A

INC R0

MOV 11H,@R0 LOOP3: CJNE A,11H,LOOP4 LOOP4: JC LOOP5

MOV A,@R0

MOV @R0,10H

DEC R0

MOV @R0,A

INC R0

LOOP5: DJNZ B,LOOP2

DJNZ R2,LOOP1

SJMP $

LOOP: MOV DPTR,#TAB

MOV A,R1

MOVC A,@A+DPTR

MOV @R0,A

RET

TAB: DB 3,5,4,1,7,9,3,4,6,1,12,45,23,17,34,12 END

实验3 定时器

1.实验目的

(1)、加深对MCS-51单片机定时器内部结

构,工作原理和工作方式的理解

(2)、掌握定时器工作在定时器状态下的编

程方法

(3)、掌握中断服务程序的设计方法

2.实验设备

计算机,单片机实仪,KeilC51和Proteus

软件。

3、实验内容

定时器实验

在使用12MHz晶振的条件下,用T1产生50ms定时,两个7段LED数码管从“00”开始显示,每1s加1,到达“59”后,再从“00”开始,完成60s定时功能。

4、实验原理提示

定时/计数器实际上是加1计数器,当它对具有固定时间间隔的内部机器周期进行计数时,它是定时器;当它对外部事件进行计数时,它是计数器。MCS-51单片机内部包括T0和T1两个定时/计数器。每个定时/计数器有4种工作方式。

一、定时器计数初值的确定

在定时工作状态下,输入的时钟脉冲是由晶体振荡器的输出经12分频取得的,因此,定时器可看作是对单片机机器周期的计数器。若晶振频率为12MHz,则定时器的加1计数器每隔s 1加1。加1计数器满溢出时才申请中断,所以在给加1计数器赋计数初值时,输入的是加1计数器计数的最大值与这一计数的差值。设加1计

数器计数的最大初值为M,计数值为N,计数初值为Count,则Count的计算方法如下。

定时状态:Count=M-定时时间/T,T=12/fosc

若单片机的时钟频率为12MHz,T1工作在定时方式1,定时时间为50ms,则其计数初值Count为:

Count=M-定时时间/T=216-50000/1=65536-50000=15536=3CB 0H

所以,定时器的计数初值为TH1=3CH,TL1=0B0H。

二、定时器初始化程序

定时器包括两个控制寄存器TMOD和TCON,向TMOD和TCON写入相应的值来设置各个定时器的操作模式和控制功能。

启动定时器的步骤如下:

(1)、设定TMOD的值:TMOD=10H,设置T1工作于定时方式1(16位方式)(2)、设定IE的值:启动中断

SETBET1。

(3)、设定TL1和TH1的值:TL1=0B0H,TH1=3CH。

(4)、启动T1定时:SETBTR1。

实验电路图

实验程序流程图

实验程序:

ORG 0000H

AJMP START

ORG 001BH

AJMP TIME1

ORG 0030H

START: MOV SP, #60H

MOV TMOD, #10H

SETB EA

SETB ET1

MOV R3, #60

MOV R0, #0

MOV R1, #0

MOV TH1, #3CH

MOV TL1, #0B0H

SETB TR1

AJMP $

TIME1: PUSH ACC

PUSH PSW

INC R0

MOV A, R0

CJNE A, #20, T_LP2

MOV A, R1

MOV B, #10

DIV AB

SWAP A

ADD A,B

MOV P1, A

INC R1

CJNE R1, #60, LP0

MOV R1, #00H

LP0: MOV R0,#00H

T_LP2: MOV TH1, #3CH

MOV TL1, #0B0H

POP PSW

POP ACC

RETI

END

试验要求

(1)画出实验程序流程图:编写汇

编语言和C51程序。

(2)上级调试该程序。

实验四-基本输入/输出

1.实验目的

(1)掌握MCS-51单片机I/O口的基本输入/输出功能。

(2)学习延时子程序的编写和使用。

2.实验设备

计算机一台;单片机试验仪一台;Keil C51和Proteus软件。

3.实验内容

(1)P0作为输出口,接8只发光二极管,编写程序使发光二极管实现“单灯左移”。

(2)P0作为输出口,接8只发光二极管,P2作为输入口,P2.0和P2.1接两个按键

PB和1PB;

当按下

PB时P0口上连接的8只发光二极管全0

亮;当按下

PB时P0口上连接的8只发光二极管

1

全灭。

4.实验原理提示

(1)P0口为双向I/O口,具有较大的负载能力,

除作为地址、数据复用口外,还可以用作通用I/O 口。P2口味准双向口,常作为通用I/O使用。当某一口线作为输入口线时,必须向锁存器相应位写入“1”,该位才能作为输入。

(2)常用延时方法

常用循环指令来实现延时,设晶振为12MHz,因此1个机器周期为1us。

DELAY: MOV R5,#250 ;

T=1个机

1

器周期,设定外循环次数为250次

D1:MOV R6,200 ;

T=1个机

2

器周期,设定内循环次数为250次

DJNZ R6,$ ;

T=2个机

3

器周期,本次执行200次

DJNZ R5,D1 ;

T=2个机

4

器周期,本次执行250次

RET ;

T=2个机

5

器周期,返回子程序

T=

T+(2T+(3T*200)+4T)250+5T=1+(1+(2*200)1

+2)*250+2=100753个机器周期

共延时100753*1us=100753us=0.1us

5.实验电路图

I/O实验电路图如下图所示

6.实验程序流程图

实验内容(1)的输出实验程序流程图如下图a所示。

实验内容(2)的输入实验程序流程图如下图b所示。

7.实验程序

ORG 0000H

MOV P0,#0FFH

MOV A,#0FEH START:MOV P0,A

ACALL DELAY

RL A

AJMP START DELAY:MOV R5,#250

D1: MOV R6,#200

DJNZ R6,$

DJNZ R5,D1

RET

END

ORG 0000H

MOV P2,0FFH START:JB P2.0,LP0

MOV P0,#00H

LP0: JB P2.1,START

MOV P0,#0FFH

AJMP START

END

8实验要求

(1)编写相应的程序。

(2)上机调试通过的程序。(3)写出实验报告。

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

进制及编码练习

进制 1、有一种利用打孔透光原理设计的简易身份识别卡:每张卡在规定位置上有一排顶打孔位,读卡器根据透光检测判断哪些孔位已打孔,哪些未打孔,从而识别出卡的编码。如果要设计一种供1000人使用的身份卡,则卡上的预打孔位至少需要() A、5个 B、7个 C、9个 D、10个 2、某一数字显示器由7段发光二极管组成,通过各二极管的亮灭来显示数字。若用“1”表示亮,“0”表示灭,按第2题图1所示的字母先后顺序对各二极管的亮灭状态编码,按此编码方法,第2题图2中数字“9”所对应的编码是 第2题--1图第2题--2图 A.1111011 B.1110011 C.1111100 D.1111110 3.算式1011B + 10D的运算结果是() (A)11101B (B)51H (C)15H (D)20D 4.算式1010B*4D的值是() (A)100100B (B) 44D (C) 101001B (D) 28H 5.当你升入高中后,学校会给每个学生一个固定的学号,比如:09071233,你觉得学号的的确定应该属于() (A)信息的采样(B)信息的编码(C)信息的处理(D)信息的加工 内码 6.小明用UltraEdit软件观察“SMTP协议”,显示的十六进制内码如第6题图所示,从中可以推断出字符“S”存储在计算机内部的编码是………………………………………() 第6题图 A.53H B.1010011B C.01010011B D.83D 7.字符“A”比“a”的ASCII码值小32(十进制),已知字符“G”的二进制ASCII码值为1000111,则字符“g”的二进制ASCII码值是( ) A.1001111 B.101011 C.1011111 D.1100111 8、用UltraEdit软件观察“Book”这几个字符的内码,如图所示,则“Look ”这几个字

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

16进制颜色代码对照表 -

颜色代码大全 AA 指定透明度。 00 是完全透明。 FF 是完全不透明。超出取值范围的值将被恢复为默 认值。 ffff00 ffff33 ffff66 ffff99 ffffcc ffffff ffcc00 ffcc33 ffcc66 ffcc99 ffcccc ffccff ff9900 ff9933 ff9966 ff9999 ff99cc ff99ff ff6600 ff6633 ff6666 ff6699 ff66cc ff66ff ff3300 ff3333 ff3366 ff3399 ff33cc ff33ff ff0000 ff0033 ff0066 ff0099 ff00cc ff00ff ccff00 ccff33 ccff66 ccff99 ccffcc ccffff cccc00 cccc33 cccc66 cccc99 cccccc ccccff cc9900 cc9933 cc9966 cc9999 cc99cc cc99ff cc6600 cc6633 cc6666 cc6699 cc66cc cc66ff cc3300 cc3333 cc3366 cc3399 cc33cc cc33ff cc0000 cc0033 cc0066 cc0099 cc00cc cc00ff 99ff00 99ff33 99ff66 99ff99 99ffcc 99ffff 99cc00 99cc33 99cc66 99cc99 99cccc 99ccff 999900 999933 999966 999999 9999cc 9999ff 996600 996633 996666 996699 9966cc 9966ff 993300 993333 993366 993399 9933cc 9933ff 990000 990033 990066 990099 9900cc 9900ff 66ff00 66ff33 66ff66 66ff99 66ffcc 66ffff 66cc00 66cc33 66cc66 66cc99 66cccc 66ccff 669900 669933 669966 669999 6699cc 6699ff 666600 666633 666666 666699 6666cc 6666ff 663300 6633336633666633996633cc 6633ff 660000 660033 660066 660099 6600cc 6600ff 33ff00 33ff33 33ff66 33ff99 33ffcc 33ffff 33cc00 33cc33 33cc66 33cc99 33cccc 33ccff 339900 339933 339966 339999 3399cc 3399ff 336600 336633 336666 336699 3366cc 3366ff 333300 333333 333366 3333993333cc 3333ff 330000 330033 330066 330099 3300cc 3300ff

进制、编码及应用专题复习.doc

进制、编码及其应用 一、二、十、十六进制原理及其互相转换(仅要求整数) 进制的表 示 二进制 十进制 十六进制 符号 0 1 0123456789 0123456789ABCDEF 进制标识 B D H 运算规则 逢二进一 逢十进一 逢十六进一 1.二一十进制 按权相加 权 2n 十六一十进制 按权相加 权 16n 2. 十二进制 除二取余 十六f 十进制 除十六取余 3. 二一十六进制 互相转换 每1位十六进制数转换成 4 位二进制数。(24=16)从右往左,不足添零 9 1001 — 9H 10 1010->A 11 12 1100->C 13 110—D 14 1110-*E 15 1111—F 16 10000 — 10H (进位) 4.进制的一些特点: 转换为十进制:按权相加,X 进制,权就是X 的n 次方 十进制转换X 进制:除X 取余 二进制数尾数0,偶数,尾数1,奇数,后面加“0”,X2,加“00”,X22 二、ASCII 码及汉字编码 1. 7位编码(128种编码27=128), 8位存储(1个字节),最高位添“0”,顺序编码 00H->7FH (十六进制) “A” ASCII 编码:100 0001B “a” ASCII 编码:110 0001B 数字 “0 ” ASCII 编码:011 0000 48D 30H 2.汉字编码:输入码(输入法)、交换吗(区位码) 处理吗(机内码、内码)计算机内码表示,占2个字节 (80H 字形码(点阵、矢量方式) (汉字显示、打印等相当于位图、矢量图的表示类似,可类比) 65D 41H 97D 61H 以上) 如16X16点阵的黑白像素点表示的汉字“天”

单片机实验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.调试心得

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

16进制颜色对照表

最初,216 跨平台 web 安全色被用来确保:当计算机使用 256 色调色板时,所有的计算机能够正确地显示所有的颜色。

在下面的色表中,垂直的数值是绿色值,水平的数值是蓝色值: 00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0 FF 8 10 18 20 28 30 38 40 48 50 58 60 68 70 78 80 88 90 98 A0 A8 B0 B8 C0 C8 D0 D8

E8 F0 F8 100 在下面的色表中,垂直的数值是绿色值,水平的数值是蓝色值: 00 10 20 30 40 50 60 70 80 90 A0 B0 C0 D0 E0 F0 FF 8 10 18 20 28 30 38 40 48 50 58 60 68 70 78 80 88 90 98 A0 A8 B0 B8 C0 C8

D8 E0 E8 F0 F8 100 1600万种不同的颜色 通过计算 256 x 256 x 256,从 0 到 255 的红色、绿色和蓝色的值一共可以组合出 1600 万种不同的颜色。 大多数现代的显示器有能力显示出至少 16384 种不同的颜色。 你可以查看下面的色表,你会看到当绿色和蓝色的值为零时,红色值从 0 到 255 时的具体的颜色。 如需查看基于红色从 0 到 255 变化时的 16384 种不同的颜色,请单击下面的十六进制值或者 rgb 颜色值: Red Light HEX RGB rgb(0,0,0) rgb(8,0,0) rgb(16,0,0) rgb(24,0,0) rgb(32,0,0) rgb(40,0,0) rgb(48,0,0) rgb(56,0,0) rgb(64,0,0) rgb(72,0,0) rgb(80,0,0) rgb(88,0,0) rgb(96,0,0) rgb(104,0,0) rgb(112,0,0)

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

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

数码管二进制和十六进制字符编码表

一、数码管显示字符表 一个数码管有八段:a,b,c,d,e,f,g,dp(小数点),即由八段发光二极管组成。 因为发光二极管导通的方向是一定的(导通电压一般取为1.7V),这八个 发光二极管的公共端有两种:可以分别接+5V(即为共阳极数码管)或接地(即 为共阴极数码管); 故可分共阳极(公共端接高电平或+5V电压)和共阴极(共低电平或接地)两种数码管。 其中每个段均有0(不导通)和1(导通发光)两种状态,但共阳极数码管和共阴极数码管显然是不同的。 一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即a,b,c,d,e,f,g,dp)连在一起,而各自的公共端称为位选线。 对于共阳数极码管: 各段选为低电平(即0接地时)选中各数码段, 位选为高电平(即1)选中数码管。 对于共阴极数码管: 各段选为高电平(即1接+5V时)选中各数码段,位选为低电平(即0)选中数码管。 显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。所以如果想让数码管显示数字0,那么共阴数码管的字符编码为00111111,即0x3f;共阳数码管的字符编码为11000000,即0xc0。可以看出两个编码的各位正好相反。 字母显示: 共阳极的数码管0~f的段编码:

unsigned char code table[]={ //共阳极0~f数码管编码0xc0,0xf9,0xa4,0xb0,//0~3 0x99,0x92,0x82,0xf8,//4~7 0x80,0x90,0x88,0x83,//8~b 0xc6,0xa1,0x86,0x8e //c~f }; 共阴极的数码管0~f的段编码是: unsigned char code table[]={//共阴极0~f数码管编码0x3f,0x06,0x5b,0x4f, //0~3 0x66,0x6d,0x7d,0x07, //4~7 0x7f,0x6f,0x77,0x7c, //8~b 0x39,0x5e,0x79,0x71 //c~f }; 共阳极数码管字符表

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

十六进制颜色大全

基本介绍 人的眼睛看到的颜色有两种: ⒈一种是发光体发出的颜色,比如计算机显示器屏幕显示的颜色; ⒉另一种是物体本身不发光,而是反射的光产生的颜色,比如看报纸和杂志上的颜色。 我们又知道任何颜色都是由三种最基本的颜色叠加形成的,这三种颜色称为“三原色”。 ⒈对于上面提到的第一种颜色,即发光体的颜色模式,又称为“加色模式”,三原色是“红”、“绿”、“蓝”三种颜色。加色模式又称为“RGB模式”; ⒉而对于印刷品这样的颜色模式,又称为“减色模式”,它的三原色是“青”、“洋红”、“黄”三种颜色。减色模式又称为“CMY”模式。 例如,在网页上要指定一种颜色,就要使用RGB模式来确定,方法是分别指定R/G/B,也就是红/绿/蓝三种原色的强度,通常规定,每一种颜色强度最低为0,最高为255,并通常都以16进制数值表示,那么255对应于十六进制就是FF,并把三个数值依次并列起来,以#开头。 例如,颜色值“#FF0000”为红色,因为红色的值达到了最高值FF(即十进制的255),其余两种颜色强度为0。在例如“#FFFF00”表示黄色,因为当红色和绿色都为最大值,且蓝色为0时,产生的就是黄色。 到这里,我们就清楚了常用的颜色的表达方法了。例如在HTML语言规范中定义,可以通过两种方式指定颜色。 ⒈一种方式是以定义好的颜色名称表示,具体的颜色名称针对不同的浏览器也有所不同。 ⒉另一种方式通过一个以“#”开头的6位十六进制数值表示一种颜色。6位数字分为3组,每组两位,依次表示红、绿、蓝三种颜色的强度。在RGB 颜色模式,颜色由表明代表多少各成份红色,绿色,和蓝色应该包括在它。每个可能与极小值(没有颜色)不同对最大值(充分的强度)。当所有颜色是在最低值,被显示的颜色然后将是黑的。并且当所有颜色是在他们的最大值然后被显示的颜色将是白色的。但是,一个缠扰不清的方面在RGB 颜色模式是,所有这些颜色可能代表以各种各样的方法。

数码管二进制和十六进制字符编码表

精选文档 」、数码管显示字符表 一个数码管有八段:a,b,c,d,e,f,g,dp(小数点),即由八段发光二极管组成。 因为发光二极管导通的方向是一定的(导通电压一般取为 1.7V),这八个 发光二极管的公共端有两种:可以分别接+5V (即为共阳极数码管)或接地(即为共阴极 数码管); 故可分共阳极(公共端接高电平或+5V电压)和共阴极(共低电平或接地)两种数码管。 其中每个段均有0 (不导通)和1 (导通发光)两种状态,但共阳极数码管和共阴极数码管显然是不 同的。 一个八段数码管称为一位,多个数码管并列在一起可构成多位数码管,它们的段选线(即 a,b,c,d,e,f,g,dp )连在一起,而各自的公共端称为位选线。 对于共阳数极码管: 各段选为低电平(即0接地时)选中各数码段,位选为高电平(即1)选中数码管。 对于共阴极数码管: 各段选为高电平(即1接+5V时)选中各数码段,位选为低电平(即0)选中数码管。 显示时,都从段选线送入字符编码,而选中哪个位选线,那个数码管便会被点亮。数码管的8段,对应一个字节的8位,a对应最低位,dp对应最高位。所以如果想让数码管显示数字0,那么共阴数码管的 字符编码为00111111 ,即0x3f ;共阳数码管的字符编码为11000000 ,即0xc0。可以看出两个编码的各位正好相反。 字母显示: /xT J cj ZZ? 9 共阳极的数码管0~f的段编码: 精选文档

unsigned char code table[]={ // 共阳极0~f 数码管编码0xc0,0xf9,0xa4,0xb0,//0~3 0x99,0x92,0x82,0xf8,//4~7 0x80,0x90,0x88,0x83,//8~b 0xc6,0xa1,0x86,0x8e //c~f }; 共阴极的数码管0~f的段编码是: unsigned char code table[]={〃共阴极0~f 数码管编码 0x3f,0x06,0x5b,0x4f, //0~3 0x66,0x6d,0x7d,0x07, //4~7 0x7f,0x6f,0x77,0x7c, //8~b 0x39,0x5e,0x79,0x71 //c~f }; 共阳极数码管字符表

国际标准色卡(16进制代码)

红色和粉红色,以及它们的16进制代码。 #990033 #CC6699#FF6699#FF3366#993366#CC0066#CC0033#FF0066#FF0033#CC3399 #FF3399#FF9999#FF99CC#FF0099#CC3366#FF66CC#FF33CC#FFCCFF#FF99FF#FF00CC 紫红色,以及它们的16进制代码。 #FF66FF#CC33CC#CC00FF#FF33FF#CC99FF#9900CC#FF00FF#CC66FF#990099#CC0099 #CC33FF#CC99CC#990066 #993399#CC66CC#CC00CC#663366 蓝色,以及它们的16进制代码。 #660099 #666FF#000CC #9933CC#666699#660066 #333366 #0066CC#9900FF#333399 #99CCFF#9933FF#330099 #6699FF#9966CC#3300CC #003366 #330033 #3300FF #6699CC #663399#3333FF#006699#6633CC#3333CC#3399CC#6600CC #0066FF#0099CC#9966FF #0033FF #66CCFF#330066 #3366FF#3399FF#6600FF #3366CC#003399 #6633FF#000066 #0099FF#CCCCFF#000033 #33CCFF#9999FF#0000FF #00CCFF#9999CC#000099 #6666CC #0033CC 黄色、褐色、玫瑰色和橙色,以及它们的16进制代码。 #FFFFCC #FFCC00#CC99090#663300 #FF6600#663333#CC6666#FF6666#FF0000#FFFF99 #FFCC66#FF9900#FF9966#CC3300#996666#FFCCCC#660000 #FF3300#FF6666#FFCC33 #CC6600#FF6633#996633#CC9999#FF3333#990000 #CC9966#FFFF33 #CC9933#993300 #FF9933#330000 #993333#CC3333#CC0000#FFCC99#FFFF00 #996600#CC6633 绿色,以及它们的16进制代码。 #99FFFF #33CCCC #00CC99 #99FF99 #009966 #33FF33 #33FF00 #99CC33 #CCC33 #66FFFF #66CCCC #66FFCC #66FF66 #009933 #00CC33 #66FF00 #336600 #33300 #33FFFF #339999 #99FFCC #339933 #33FF66 #33CC33 #99FF00 #669900 #666600 #00FFFF #336666 #00FF99 #99CC99 #00FF66 #66FF33 #66CC00 #99CC00 #999933 #00CCCC #006666 #339966 #66FF99 #CCFFCC #00FF00 #00CC00 #CCFF66 #CCCC66 #009999 #003333 #006633 #33FF99 #CCFF99 #66CC33 #33CC00 #CCFF33 #666633 #669999 #00FFCC #336633 #33CC66 #99FF66 #006600 #339900 #CCFF00 #999966 #99CCCC #33FFCC #669966 #00CC66 #99FF33 #003300 #99CC66 #999900 #CCCC99 #CCFFFF #33CC99 #66CC66 #66CC99 #00FF33 #009900 #669900 #669933 #CCCC00 白色、灰色和黑色,以及它们的16进制代码。 #FFFFF #CCCCCC #999999#666666#333333 #000000 16色和它们的16进制代码。 Aqua Black Fuchsia Gray Gree Lime Maroon Navy Olive Purple Red Silver Teal White Yellow Blue

相关文档
相关文档 最新文档