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

1.8 流程控制

用C語言開發(fā)單片機程序時,流程控制語句if、switch、for、while、do while、goto同樣會大量出現(xiàn),下面僅對單片機程序中幾個不同于常規(guī)的流程控制語句進行簡要說明,例如,本書案例中有類似代碼:

        P1 = 0xFF;
        if (P1 != 0xFF) {//執(zhí)行相應操作}

讀者可能會奇怪,這里的if語句條件不是永遠不會成立嗎?實際情況是:由于P1端口外接一組按鍵,各按鍵一端連接P1端口,另一端接地,如果按鍵中有一個或多個被按下,即使P1先被賦值為0xFF,在執(zhí)行if語句之前P1端口的值仍會被按鍵改變,它不再是初值0xFF。可見,用C語言設計單片機程序時,對某寄存器或端口賦值不同于標準C語言中給某變量賦值,寄存器或端口不會一直保持程序所賦的值,其狀態(tài)會隨時因外部影響而改變。

如果編寫的程序中要用if語句進行多路平行判斷,在這種情況下,讀者可改用switch語句編寫代碼,使用switch語句時要注意各case后的break語句,恰當?shù)厥褂胋reak和省略break可以使分支獨立,或者使多個case分支公用某段操作。

在主程序中還會經(jīng)常有這樣的代碼塊:

        while (1)
        {
          //循環(huán)體;
        }

用標準C語言編寫程序時,這段代碼中的循環(huán)體內(nèi)必定有退出循環(huán)的語句存在,但是用C語言編寫單片機程序時,讀者會發(fā)現(xiàn)幾乎多數(shù)類似程序中都找不到退出循環(huán)的語句,這是因為單片機系統(tǒng)不同于普通的軟件系統(tǒng),一旦開始運行就會一直持續(xù)下去,對外部的操作或狀態(tài)變化作出實時響應或處理,除非系統(tǒng)關(guān)閉或出現(xiàn)其他事故。

讀者還會在很多案例中發(fā)現(xiàn)主程序最后有一行代碼:

        while(1); 或for(;;);

這顯然是兩個死循環(huán)語句,在出現(xiàn)該語句的案例中,外部事件的處理工作多數(shù)被放在中斷程序內(nèi),主程序一旦完成若干初始化工作后就不再執(zhí)行其他操作,它會一直停留在死循環(huán)所在行,它們相當于用匯編指令jmp $。

主站蜘蛛池模板: 宣威市| 吉安县| 广东省| 巨野县| 资阳市| 高邮市| 枣阳市| 龙里县| 施甸县| 湘西| 磴口县| 龙游县| 休宁县| 榆社县| 苏尼特右旗| 常宁市| 吕梁市| 北宁市| 大荔县| 屏山县| 衡南县| 大宁县| 沙坪坝区| 宣恩县| 肥东县| 夏河县| 那坡县| 浙江省| 马公市| 万州区| 岳西县| 万安县| 贵南县| 凉山| 石首市| 黔东| 仪征市| 广水市| 宜良县| 时尚| 光山县|