首页 理论教育 单片机循环程序设计实例

单片机循环程序设计实例

时间:2023-11-05 理论教育 版权反馈
【摘要】:解:主程序是双重循环程序,循环移位是外循环,灯闪烁5次是内循环,内循环程序不能与外循环程序交叉。延时1s采用三重循环程序。晶振频率为6MHz时,机器周期为2μs,延时程序的延时时间计算方法如下: P1口为输出口,控制步进电动机的四相绕组。编写程序,控制步进电动机每2s正向转动一步。图4-7 冒泡排序程序流程图在实际排序中,10个数不一定要经过9轮排序冒泡,可能只要几次就可以了。

单片机循环程序设计实例

【例4-3】 片内RAM中存放有10个数据,首地址为30H,编程将数据块传送到片外RAM以1000H为首地址的存储单元

解:该程序是单重循环程序,片内RAM首地址30H、片外RAM首地址1000H和数据块长度10都是循环初始化的内容。

循环控制是对数据块长度进行判断,每传送一个数据,存放数据块长度的寄存器减1;10个数据传送完,存放数据块长度的寄存器内容正好为零,退出循环。

978-7-111-44921-8-Chapter04-9.jpg

【例4-4】 P1口为输出口,控制8盏灯(P1口输出低电平时灯被点亮)。编写程序,使灯按以下规律显示:同一时间只有两盏灯点亮,用P1.7、P1.6口控制的灯开始,每盏灯闪烁5次,再移向下两盏灯,同样闪烁5次,循环往复,延时时间1s。晶振频率为6MHz。

解:主程序是双重循环程序,循环移位是外循环,灯闪烁5次是内循环,内循环程序不能与外循环程序交叉。

延时1s采用三重循环程序。晶振频率为6MHz时,机器周期为2μs,延时程序的延时时间计算方法如下:

978-7-111-44921-8-Chapter04-10.jpg

978-7-111-44921-8-Chapter04-11.jpg

【例4-5】 P1口为输出口,控制步进电动机的四相绕组。编写程序,控制步进电动机每2s正向转动一步。晶振频率为6MHz。

解:步距角(°)θb=360/mZ

电动机转速(r/min)n=60f/mZ

式中f———脉冲频率(Hz或步/s);

m———拍数,本例中为4;

Z———转子齿数,本例中为5。

拍数m=4,若使用的步进电动机转子齿数Z为5,则步距角θb=18°。题目要求步进电动机每2s正向转动一步,即T=2s,则f=0.5Hz,电动机转速n=1.5r/min。(www.xing528.com)

用三重循环设计2s的循环程序。晶振频率为6MHz时,机器周期为2μs,延时程序的延时时间计算方法如下:

{1+[1+(1+1+2×123+2)×200+2]×20+2}×2μs

=2000126μs=2.000126s

P1.0~P1.3口为输出口,分别控制步进电动机的四相绕组,步进电动机的控制状态与P1口的控制码的对应关系见表4-1。

表4-1 步进电动机的控制状态与P1口控制码的关系

978-7-111-44921-8-Chapter04-12.jpg

978-7-111-44921-8-Chapter04-13.jpg

【例4-6】 片内RAM从50H单元开始存放了10个无符号数,编程将它们按由小到大的顺序排列。

解:数据排序的方法有很多,本例采用常用的冒泡排序法,又称为两两比较法,程序流程图如图4-7所示。

想象把10个数纵向排列,自上而下将存储单元相邻的两个数进行比较,若前数大于后数,则存储单元中的两个数互换位置;若前数小于后数,则存储单元中的两个数保持原来位置。按同样的原则依次比较后面的数据,直到该组数据全部比较完,经过第1轮的比较,最大的数据就像冒泡一样排在了存储单元最末的位置上。经过9轮冒泡,便可完成10个数据的排序。

978-7-111-44921-8-Chapter04-14.jpg

图4-7 冒泡排序程序流程图

在实际排序中,10个数不一定要经过9轮排序冒泡,可能只要几次就可以了。为了减少不必要的冒泡次数,可以设计一个交换标志,每一轮冒泡的开始将交换标志位清0,在该轮数据比较中若有数据位置互换,则将交换标志位置1;每轮冒泡结束时,若交换标志位仍为0,则表明数据排序已完成,可以提前结束排序。

978-7-111-44921-8-Chapter04-15.jpg

978-7-111-44921-8-Chapter04-16.jpg

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈