官术网_书友最值得收藏!

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 $。

主站蜘蛛池模板: 宁陕县| 顺平县| 宁阳县| 嘉黎县| 巴东县| 万源市| 宾川县| 乌拉特后旗| 砚山县| 高青县| 华池县| 天镇县| 元谋县| 龙南县| 亚东县| 南丰县| 德阳市| 莱芜市| 桐城市| 聂拉木县| 八宿县| 汝城县| 黑龙江省| 桐庐县| 嵊州市| 龙口市| 驻马店市| 尉犁县| 玛沁县| 通辽市| 玛曲县| 沾益县| 伊春市| 民勤县| 仁寿县| 城步| 修水县| 黄冈市| 仁布县| 西丰县| 白水县|