理论教育 零点起步—PIC单片机常用模块与典型实例

零点起步—PIC单片机常用模块与典型实例

时间:2023-10-19 理论教育 版权反馈
【摘要】:while语句的一般形式为或其中,表达式就是循环条件,语句或由大括号括起来的语句集合称为循环体。while语句的语义是,计算表达式的值,当值为真(非0)时,重复执行循环体,直到表达式为假时结束。使用while语句应注意以下两点。这样改的原因是降低了单片机的主频,使其指令执行时间增加,故上例代码中的内层while循环耗时也增加了,使两次PORTC输出数据的时间间隔更长了。2)增加内层while循环的执行次数。

零点起步—PIC单片机常用模块与典型实例

while语句的一般形式为

978-7-111-33274-9-Chapter04-92.jpg

978-7-111-33274-9-Chapter04-93.jpg

其中,表达式就是循环条件,语句或由大括号括起来的语句集合称为循环体。

while语句的语义是,计算表达式的值,当值为真(非0)时,重复执行循环体,直到表达式为假(0)时结束。其执行过程如图4-11所示。

使用while语句应注意以下两点。

●while语句中的表达式一般是关系表达式或逻辑表达式,只要表达式的值不为0即可继续循环。

●如果循环体中有两条以上的语句,则必须用大括号括起来,组成复合语句。

下面通过一个小例子来看一下循环的用途。

978-7-111-33274-9-Chapter04-94.jpg

图4-11 while语句流程图

【例4-16】硬件电路如图4-10所示。编程实现把字符变量Counter的值(初值为0)每隔一段时间加1,并送C口输出显示。

程序分析(www.daowen.com)

●根据题意要求可知Counter应该为char型变量。

●问题的难点是如何实现每隔一段时间加1。一个简单的方法是在Counter两次加1之间执行若干条无用的语句,由于单片机执行每条语句都需要时间,所以执行若干条无用语句就会消耗掉单片机的一段执行时间。这样就能使Couner两次加1之间具有时间间隔了。

●如何让单片机很简单地执行若干条无用语句呢?这时循环语句就能派上用场了。可以让单片机执行一个循环次数很多的循环语句,但循环体什么也不做,这样在执行此循环时单片机就是在执行若干条无用语句。当然看似无用,实则有用。

设计过程

1)修改S042项目中的main.c的内容,改为如下所示。

978-7-111-33274-9-Chapter04-95.jpg

2)将以上代码编译后用Proteus VSM运行一次,查看PORTC值的变化规律。

在本例运行时,读者会发现PORTC的值在快速地变化,导致读者看不清楚其变化规律,那么如何能降低其变化速度呢?常用的方法有两种。

1)降低单片机主频。停止Proteus VSM的程序模拟,然后双击单片机,进入单片机属性编辑窗口,把Processor Clock Frequnency改为1MHz或者更低。重新运行,这样就能看清C口的变化规律了。这样改的原因是降低了单片机的主频,使其指令执行时间增加,故上例代码中的内层while循环耗时也增加了,使两次PORTC输出数据的时间间隔更长了。这样用肉眼就能看清楚C口的变化情况。

2)增加内层while循环的执行次数。对于当前的内层while循环执行了10000次,如果想再增加循环次数,可以把10000改为更大的数,但是并不能无限大,因为对于int型的变量i,其最大值是32767。再大的数int型就存不下了,如果希望循环次数大于32767,可以把int型改为unsignedint或者long型后再将10000修改为更大的值。例如,把源程序改为

978-7-111-33274-9-Chapter04-96.jpg

978-7-111-33274-9-Chapter04-97.jpg

while语句常用于循环次数未知的循环语句,对于循环次数已知的循环,建议用for语句完成。下面学习for语句用法。

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

我要反馈