微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51指令系统(2)

51指令系统(2)

时间:11-26 来源:互联网 点击:
编程1:将存于内部RAM地址20H~25H的6位非压缩BCD码转换为对应的ASCII码依次存至30H开始的连续内部RAM单元中。

分析:非压缩BCD码00H、01H、02H、…、09H对应ASCII码30H、31H、32H、…、39H,两者差为30H;

程序如下:

LL: MOV R0,#20H;源数据串开始地址装入R0

MOV R1,#30H;目的数据串开始地址装入R1

MOV R2,#6;循环次数装入R2

L0:MOV A,@R0;取一字节非压缩BCD码

ORL A,30H;转化为对应ASCII码

MOV @R1,A;保存至对应目的位置

INC R0;修改源数据地址以指向下一位置

INC R1;修改目的数据地址指向下一位置

DJNZ R2,L0;循环进行下一字节的处理

RET;处理结束,程序返回

编程2:实现将0~49之间的偶数依次存于内部RAM地址20H开始的字节单元,将奇数依次存于内部RAM地址40H开始的字节单元。

程序如下:

LL: MOV R0,#20H;偶数存放开始地址装入R0

MOV R1,#40H;奇数存放开始地址装入R1

CLR A;起始数码=0

L0:MOV A,@R0;存放一个偶数

INC A;数码加1

MOV A,@R1;存放一个奇数

INC A;数码加1

INC R0;修改偶数存放地址指针指向下一位置

INC R1;修改奇数存放地址指针指向下一位置

CJNE A,#50,L0 ;是否所有数码都已放完,未完则继续循环

RET;工作完成,程序返回

编程3:实现5字节10位压缩BCD码加法。设两个加数分别存放于内部RAM地址40H和45H开始的字节单元(低位字节在前),相加结果存放于内部RAM地址4AH开始的字节单元,不考虑超出5字节压缩BCD码存储范围以外的进位。

程序如下:

LL: MOV R0,#40H;加数A的开始地址装入R0

MOV R1,#45H;加数B的开始地址装入R1

MOV R2,#4AH;和数存放开始地址装入R2

MOV R3,#5;循环次数装入R3

CLR C;初始清零CY

L0:MOV A,@R0;取加数A当前字节

ADDC A,@R1;加上加数B当前字节,通过带进位加法考虑低位字节可能的进位

AD A;调整运算结果为BCD码,可能的进位保存在CY中(以下的指令执行均不影响CY)

XCH A,R2;以下三条交换指令交换和数指针到R1,加数B指针到R2

XCH A,R1

XCH A,R2

MOV @R1,A;保存和数当前字节

XCH A,R2;以下三条交换指令恢复加数B指针到R1,和数指针到R2

XCH A,R1

XCH A,R2

INC R0;修改加数A存放地址指针指向下一位置

INC R1;修改加数B存放地址指针指向下一位置

INC R2;修改和数存放地址指针指向下一位置

DJNZ R3,L0;循环次数减1,若不为0则继续循环

RET;工作结束,程序返回

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top