1.10 流程控制 |
|
用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 $。