51单片机汇编程序范例文档格式.docx

上传人:b****0 文档编号:13937689 上传时间:2022-10-15 格式:DOCX 页数:14 大小:119.69KB
下载 相关 举报
51单片机汇编程序范例文档格式.docx_第1页
第1页 / 共14页
51单片机汇编程序范例文档格式.docx_第2页
第2页 / 共14页
51单片机汇编程序范例文档格式.docx_第3页
第3页 / 共14页
51单片机汇编程序范例文档格式.docx_第4页
第4页 / 共14页
51单片机汇编程序范例文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

51单片机汇编程序范例文档格式.docx

《51单片机汇编程序范例文档格式.docx》由会员分享,可在线阅读,更多相关《51单片机汇编程序范例文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

51单片机汇编程序范例文档格式.docx

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码变换的意思来了。

上式中后面的位:

[b11~b0]-4*x,如果小于256,那就太简单了,马上就可以去按照常规转换BCD了。

如果数值较大,就要把[b11~b7]看成128的个数y;

在百位中加上y、在十位加上3*y、并在[b6~b0]中减去2*y。

那么就有:

n=4*x(千位)+(x+y)(百位)+3*y(十位)+[b6~b0]-2*y

由此,就可以明确由高9位[b15~b7]变换出来十进制的各个位的数值,可能大于9,到最后整理一下即可。

剩下的低7位[b6~b0],已经是单字节数据,变换成BCD码那就十分简单了。

从最后的表达式中可以看出,高9位变换的计算方法极为简单,只是使用左移、加减等指令即可,基本上不涉及多字节的运算。

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

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

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

51单片机把4位16进制数转成10进制数的方法2010-02-1023:

33,2位16进制转10进制,用除以10求商跟余数的方法,即可。

4位16进制数呢DIV指令只可以对2位16进制数进行除法运算啊,求高手解答。

例如把TH1TL1的数值转成十进制,分别存入R4R3R2R1R0。

我要的是汇编的方法,C语言还没学到。

悬赏分:

30-解决时间:

2010-2-1022:

47

------------------------------------------------------------------

最佳答案:

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

下面把这段转换程序,写成子程序的结构,便于网友移植。

程序经过仿真调试通过,如下所示:

MOVR0,TH1

MOVR1,TL1

CALLHEX2BCD;

调用子程序把R0R1中的数字,转换成压缩的BCD码,送到R2R3R4

-------下面,把万千百十个位,分别存入R4R3R2R1R0

MOVA,R4;

先分离R4中的压缩型BCD码,包含的是十位与个位的数

MOVB,#16

DIVAB;

除以16,目的是分离出高、低四位

MOVR1,A;

存放十位

MOVR0,B;

存放个位

MOVA,R2;

万位数不超过6,即R2中的压缩型BCD码只有一个,直接放到万位R4中

MOVR4,A;

存放万位

MOVA,R3;

分离R3中的压缩型BCD码,其包含的是千位和百位数

MOVB,#16;

半字节分离

DIVAB

MOVR3,A

MOVR2,B

SJMP$;

到此,完成了题目要求

两个字节的二进制数转换成BCD码的程序如下:

功能:

16位二进制数变换成为BCD码;

入口:

R0R1中是16位二进制数,其中R0中是高8位;

出口:

R2R3R4中是BCD码,其中R2中是万位,R3中是千、百位,R4中是十、个位。

HEX2BCD:

CLRA

MOVR2,A;

先对要放入转换后的压缩型BCD码的寄存器通通清零

MOVR3,A

MOVR4,A

MOVR5,#16;

共转换十六位数

LOOP:

CLRC

MOVA,R1;

从待转换数的高端移出一位到Cy(从低8位R1开始转换)

RLCA

MOVR1,A

MOVA,R0

MOVR0,A

送到BCD码的低端

ADDCA,R4;

带进位加。

自身相加,相当于左移一位

DAA;

十进制调整,变成BCD码

MOVR4,A

MOVA,R3

ADDCA,R3

DAA

MOVA,R2

ADDCA,R2

MOVR2,A

DJNZR5,LOOP;

RET

将A中的二进制数转换为3位的BCD码,其中百位数存放......2010-01-1109:

13请各位懂得帮写下这个程序片段。

将A中的二进制数转换为3位的BCD码。

其中百位数存放到31H中,十位和个位数压缩后,存放到30H中。

80-解决时间:

2009-10-1909:

59

------------------------------------------

看来这个题目是属于MCS-51单片机的。

下面用51单片机的汇编语言来求解。

MOVB,#100

MOV31H,A;

存百位数

MOVA,#10

XCHA,B

SWAPA;

十位数换到高四位

ADDA,B;

加上个位数

MOV30H,A;

保存

R0中的8位二进制数转换成3位BCD码-单片机编程2010-01-1023:

18单片机的不难编程题!

急!

!

将R0中的8位二进制数转换成3位BCD码,结果存入外部RAM的1002H~1000H(从高位到低位)单元中。

例如:

地址:

R0执行后:

1002H1001H1000H

数据:

81H010209

15-解决时间:

2009-10-1519:

10

提问者:

stefine_-一级

-------------------------------------------------------

呵呵,楼上的程序,使用了DECDPTR,要知道,51单片机指令系统里面,是没有DECDPTR指令的。

按照下面的思路做,还可以再简练些。

R0中的8位二进制数转换成3位BCD码:

 MOVDPTR,#1000H;

个位的地址

MOVB,#10

MOVX@DPTR,A

INCDPTR

RET

 

仅用了24字节

16位二进制转BCD码--单片机2010-01-0314:

19要求:

编写一段程序,把计数器中T0中计的数(TH0和TL0)转成8421BCD码。

并且高8位给p1口,低8位给p0口,要是转成BCD码超过16位,则给高电平。

我是做单片机课设的,这段程序实在编不明白了,向各位大侠请教了!

无比感谢中!

答对有额外加分啊!

200-解决时间:

2010-1-313:

03

16bit表示:

65536,万位不超6

――――――――――――――――――――――――――

程序如下:

MOVR0,TL0;

MOVR1,TH0;

待转换的16bit数分别放入(由高到低)R1R0中

先清零

共转换16位数

CLRC;

c=0

MOVA,R0;

从待转换低8bit数的高端移出一位到Cy(转换最先由低8位开始)

RLCA;

R0中的最高位移入到A中

(高8位二进制数)

此时C中的由低8位所移入的数重新移入高8位的低端

相当于16bit的高端移出了1bit到C中了

MOVA,R

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1