書名: 單片機C語言程序設計實訓100例:基于STC8051+Proteus仿真與實戰作者名: 彭偉本章字數: 647字更新時間: 2022-05-05 20:18:23
1.11 流程控制
用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 $。
推薦閱讀
- Vue 3移動Web開發與性能調優實戰
- JavaScript從入門到精通(微視頻精編版)
- Mastering Selenium WebDriver
- Python網絡爬蟲從入門到實踐(第2版)
- Python數據可視化之Matplotlib與Pyecharts實戰
- Linux:Embedded Development
- PHP 7+MySQL 8動態網站開發從入門到精通(視頻教學版)
- SQL 經典實例
- Node.js區塊鏈開發
- Go語言入門經典
- Maven for Eclipse
- 自己動手構建編程語言:如何設計編譯器、解釋器和DSL
- 跟小樓老師學用Axure RP 9:玩轉產品原型設計
- Scala編程(第4版)
- Python程序設計案例教程