首页 理论教育单片机子程序设计注意事项

单片机子程序设计注意事项

【摘要】:子程序设计时需注意以下几点:1)要给每个子程序赋予一个名字,子程序的名字实际上就是其入口地址的代号。因此,在子程序使用这些寄存器之前,要将其中的内容保存起来,即保护现场。当子程序执行完成后,即在返回主程序之前,再将这些内容取出,送至相应的寄存器,这一过程称为恢复现场。4)为了使子程序具有一定的通用性,子程序中的操作对象应尽量用地址或寄存器形式,而不用立即数。子程序设计时应注意什么?

子程序设计时需注意以下几点:

1)要给每个子程序赋予一个名字,子程序的名字实际上就是其入口地址的代号。

2)要能正确地传递参数。即首先要有入口条件,说明进入子程序时它所要处理的数据如何得到(例如,是把数据放在累加器A中还是某工作寄存器中)。另外,要有出口条件,即处理的结果如何存放。

3)注意保护现场和恢复现场。在执行子程序时,可能要使用到累加器或某些工作寄存器。而在调用子程序之前,这些寄存器可能存放着主程序的中间结果,这些中间结果是不允许被破坏的。因此,在子程序使用这些寄存器之前,要将其中的内容保存起来,即保护现场。当子程序执行完成后,即在返回主程序之前,再将这些内容取出,送至相应的寄存器,这一过程称为恢复现场。保护现场和恢复现场通常是用堆栈来进行的。

4)为了使子程序具有一定的通用性,子程序中的操作对象应尽量用地址或寄存器形式,而不用立即数。另外,子程序中如含有转移指令,应尽量使用相对转移指令,以便它不管放在内存中的哪个区域,都能正确执行。

【例4-12】用程序实现c=a2+b2。设a、b均小于10,a存放在片内RAM的31H单元中,b存放在32H单元中,c存放在33H单元中。

【编程说明】本题中两次用到求平方值,所以在程序中采用把求平方的程序编为子程序的方法。

【程序】

【例4-13】求两个无符号数据块中的最大值。数据块的首地址分别为片内RAM的60H和70H,每个数据块的第一个字节都存放数据块的长度,结果存入40H单元中。

【编程说明】本题可采用分别求两个数据块的最大值,然后比较其大小的方法,求最大值的过程可采用子程序。子程序的入口参数是数据块的首地址,返回参数是最大值,放在累加器A中。

【程序】

习题4

1.简答题(www.chuimin.cn)

(1)试写出汇编语言程序的基本框架

(2)循环程序由哪几部分组成,分别起什么作用?

(3)子程序设计时应注意什么?

2.编程题

(1)将片内RAM 30H~3FH单元中的内容传送到片外RAM的3000H开始的存储区中。

(2)试分别编写延时20ms、1s的程序

(3)用查表程序求0~8之间整数的立方。

(4)片内RAM中60H开始存放20个数据,试统计正数、负数及为零的数据个数,并将结果分别保存在50H、51H和52H单元中。

(5)外部数据区5000H为首址的数据块中存放有BCD码,将其转换为ASCII码,并传送到内部数据区30H为首址的单元中,数据块长度在内部RAM 60H单元中。

(6)设10次采样值依次放在片内RAM的50H~59H中,试编程去掉一个最大值、去掉一个最小值,求剩余8个数的平均值,结果存放在60H中。

(7)试编写程序,将片外RAM的2000H~200FH数据区中的数据由大到小排列起来。

将片内RAM中22H单元存放的以ASCII码表示的数,转换为十六进制数后,存于片内RAM的21H单元中。