首页 理论教育单片机循环结构程序设计

单片机循环结构程序设计

【摘要】:循环程序是指在程序中有一段程序需要重复执行的一种程序结构。循环程序可以缩短程序,减少程序所占的内存空间。循环控制在程序中还需根据循环计数器的值或其他循环条件,来控制循环是否该结束。假设内循环用两条NOP指令以及一条DJNZ指令,需要4个机器周期。循环24次,需要96个机器周期。显然这是一个双重循环程序。4)多重循环的嵌套,应当注意嵌套的形式。

循环程序是指在程序中有一段程序需要重复执行的一种程序结构。在一些实际应用中往往需要多次反复执行某种相同的操作,而只是参与操作的操作数不同,这时就可采用循环程序结构。循环程序可以缩短程序,减少程序所占的内存空间。循环程序一般包括以下几个部分。

(1)初始化

在进入循环之前,要对循环中需要使用的寄存器和存储器赋予规定的初始值,比如循环次数、循环体中工作单元的初值等。

(2)循环体

循环体就是程序中需要重复执行的部分,是循环结构中的主要部分。

(3)循环修改

每执行一次循环,需要对有关值进行修改,使指针指向下一数据所在位置,为进入下一轮循环做准备。

(4)循环控制

在程序中还需根据循环计数器的值或其他循环条件,来控制循环是否该结束。

(5)结束处理

分析及保存执行结果。

以上5个部分可以有两种组织方式,其结构如图4-6所示。

图4-6 循环结构程序流程图

图4-7 程序流程图

【例4-8】设Xi均为单字节数,并按顺序存放于片内RAM的50H开始的单元中,字节个数n存于R2中,求S=X1+X2+…+Xn,把S(双字节)放在R3和R4中。

【程序】 (www.chuimin.cn)

【例4-9】已知8051单片机使用的晶振为12MHz,要求设计一个软件延时程序,延时时间为1ms。

【编程说明】延时程序的延时时间主要与所用晶振和延时程序中的循环次数有关。假设内循环用两条NOP指令以及一条DJNZ指令,需要4个机器周期。循环24次,需要96个机器周期。根据要求延时的时间,考虑所用指令,即可算出外循环次数。显然这是一个双重循环程序。

【程序】

程序段中每条指令执行时需要的机器周期注明在分号后,整个程序段耗用的机器周期数为

当采用晶振12MHz时,可知一个机器周期为1μs,执行这段程序将用993μs,存在7μs的误差。若要改变延时时间,可以调节NOP指令数,即可改变延时时间。

从上面介绍的几个例子不难看出,循环程序的结构大体上是相同的。要特别注意以下几个问题:

1)在进入循环之前,应合理设置循环初始化变量

2)循环体只能执行有限次。若无限执行,称之为“死循环”。

3)不能破坏和修改循环体,要特别注意避免从循环体外直接跳转至循环体内。

4)多重循环的嵌套,应当注意嵌套的形式。多重循环是从外层向内层一层一层地进入,从内层向外层一层一层地退出。不允许在外层循环中用跳转指令直接跳转到内层循环体内。

5)循环体内可以直接转到循环体外或外层循环中,实现一个循环由多个条件控制结束的结构。

6)对循环体的编程要仔细推敲,合理安排。对其进行优化时,应首先考虑缩短执行时间,其次要考虑程序的长度