- 单片机C语言程序设计实训100例
- 彭伟编著
- 680字
- 2025-02-19 23:22:27
1.8 流程控制
用C语言开发单片机程序时,流程控制语句if、switch、for、while、do while、goto同样会大量出现,下面仅对单片机程序中几个不同于常规的流程控制语句进行简要说明,例如,本书案例中有类似代码:
P1 = 0xFF; if (P1 != 0xFF) {//执行相应操作}
读者可能会奇怪,这里的if语句条件不是永远不会成立吗?实际情况是:由于P1端口外接一组按键,各按键一端连接P1端口,另一端接地,如果按键中有一个或多个被按下,即使P1先被赋值为0xFF,在执行if语句之前P1端口的值仍会被按键改变,它不再是初值0xFF。可见,用C语言设计单片机程序时,对某寄存器或端口赋值不同于标准C语言中给某变量赋值,寄存器或端口不会一直保持程序所赋的值,其状态会随时因外部影响而改变。
如果编写的程序中要用if语句进行多路平行判断,在这种情况下,读者可改用switch语句编写代码,使用switch语句时要注意各case后的break语句,恰当地使用break和省略break可以使分支独立,或者使多个case分支公用某段操作。
在主程序中还会经常有这样的代码块:
while (1) { //循环体; }
用标准C语言编写程序时,这段代码中的循环体内必定有退出循环的语句存在,但是用C语言编写单片机程序时,读者会发现几乎多数类似程序中都找不到退出循环的语句,这是因为单片机系统不同于普通的软件系统,一旦开始运行就会一直持续下去,对外部的操作或状态变化作出实时响应或处理,除非系统关闭或出现其他事故。
读者还会在很多案例中发现主程序最后有一行代码:
while(1); 或for(;;);
这显然是两个死循环语句,在出现该语句的案例中,外部事件的处理工作多数被放在中断程序内,主程序一旦完成若干初始化工作后就不再执行其他操作,它会一直停留在死循环所在行,它们相当于用汇编指令jmp $。