用C语言开发的单片机程序中,会大量出现流程控制语句if、switch、for、while、do while、goto。下面仅对单片机程序中几个不同于常规的流程控制语句作简要说明,例如:
初学者可能会奇怪,这里的if语句条件不是永远不会成立吗?实际情况是:P1引脚外接一组按键,而各按键一端连接P1引脚、另一端接地;如果按键中有一个或多个被按下,即使P1先被赋值为0xFF,在执行if语句之前P1的值仍会被按键改变,它可能不再是初始值0xFF。可见,在用C语言开发单片机程序时,对某寄存器或端口赋值不同于标准C语言给某变量赋值,寄存器或端口不会一直保持所赋的值,其值会随时因外部影响而改变。
在用if语句进行多路平行判断时,宜改用switch语句编写程序。使用switch语句时要注意各case后的break语句,恰当地使用break和省略break可以使分支独立,或者使多个case分支共同使用某段操作。
在主程序中还会经常有这样的代码:
用标准C语言编写程序时,这段代码中的循环体内必定有退出循环的语句存在。但是在用C语言编写单片机程序时会发现,几乎所有类似程序中都找不到退出循环的语句。这是因为单片机系统不同于普通的软件系统,一旦开始运行就会一直运行下去,并始终对外部操作或状态变化做出实时响应及处理,除非系统关闭或出现异常情况。
在很多单片机C语言程序中,还常常会发现主程序最后有一行代码:
这显然是两个死循环语句,使用了上述语句的C语言程序中,外部事件的处理工作多数被放在中断函数内;主程序一旦完成若干初始化工作后就不再执行其他操作,且会一直停留在死循环所在行。该语句相当于汇编语言程序中最后面常见的语句:JMP $。