循环结构的特点和组成在上一节中已经介绍。由于循环程序可以大大缩短程序长度,程序所占的内存单元数量少,从而使得程序结构紧凑且可读性好。因此,很多实际设计中都包含循环结构部分。下面介绍一些循环结构程序设计例题。
【例5-7】 设有一串字符,依次存储在内部RAM从30H单元开始的连续单元中,该字符串以0FFH为结束标志,要求编程测试字符串长度。
本例采用逐个字符与“0FFH”比较的方法。用一个长度计数器来累计字符串的长度,用一个字符串指针来找指定字符。如果指定字符与“0FFH”不相等,则长度计数器和字符串指针都加1,以便继续往下比较;如果比较相等,则标识该字符为“0FFH”,字符串结束,长度计数器的值就是字符串的长度。程序流程图如图5-8所示。
图5-8 字符串长度测试流程
参考程序如下:
上述循环结构中的循环程序内不包含其他循环程序,则称该循环程序为单循环结构。如果一个循环程序中包含了其他循环程序,则称为多重循环结构。如下面由DJNZ指令构成的延时程序就是双重循环结构的程序。
【例5-8】 设8051使用12MHz晶振,试设计延迟100ms的延时程序。(www.xing528.com)
机器周期T=12/fosc=12/(12×106)=1ms,执行一条DJNZ指令的时间为2ms。这时,可用双重循环方法写出如下的延时程序:
以上计算的延时时间不够精确,没有考虑到除DJNZ B,LOOP2指令外的其他指令的执行时间,如把其他指令的执行时间计算在内(指令的执行周期可以在指令附录中查阅),它的延时时间为
[((250×2)+1+2)×200+1+2]×1μs=100.603ms
如果要求比较精确的延时,可修改程序:
该段程序的实际延时时间是100.003ms。需要注意的是,用软件试验延时程序时,不允许有中断,否则将严重影响定时的准确性。对于需要更长的延时时间,可采用更多重的循环,如1s延时,则需要用三重循环。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。