常規(guī)單片機運行程序如下:
while(1)
{
.....
}
類似于一種順序執(zhí)行的方法,執(zhí)行起來較為死板,一旦某一行發(fā)生錯誤的時候就會造成整個程序的跑飛,基于以上傳統(tǒng)開發(fā)所有的缺點??梢栽O(shè)置相關(guān)的定時器,進行某種時間片的控制。
首先設(shè)置定時器的中斷,按照正常的配置相關(guān)的時間基點。
例如:將預(yù)裝載寄存器存放20-1,將預(yù)分頻寄存器裝360-1,計數(shù)器沒溢出一次形成的是0.5ms的時間,以此為時間基準(zhǔn),使能溢出中斷。
之后可以在中斷服務(wù)函數(shù)內(nèi)設(shè)置相關(guān)的計數(shù)全局變量,每中斷一次,對相對應(yīng)的時間變量+1:
05ms++;
1ms++;
... ...
1000ms++;
在主函數(shù)之中根據(jù)相關(guān)的全局變量,可以每到達以此時間點變執(zhí)行相關(guān)的時間
類似如下:
if(05ms=ON)
{
05ms=OFF;
... ...
}
else if(1ms=ON)
{
1ms=OFF
... ...
}
。。。
else if(1000ms=ON)
{
1000ms=OFF
... ...
}
注:... ...為添加的函數(shù)
分析:當(dāng)設(shè)置0.5ms為時間基點的時候,第一次溢出的時候,執(zhí)行一次里面的函數(shù)此時計時0.5ms,第二次溢出的時候此時按照順序結(jié)構(gòu)執(zhí)行又一次執(zhí)行05ms內(nèi)的函數(shù)。此時1ms時間變量也被置為故此時也執(zhí)行一次。
總結(jié):可以設(shè)置合適的時間點,沒過一個時間段,此函數(shù)執(zhí)行一次。