設計主要思想:
單片機不可能同時執行多個函數,但是可以先後執行程序給他安排的每壹件事,假如每個事件間隔時間非常短,ms、us級別,或者間隔時間更短,那麽連續壹段時間內執行的事件,看起來就是同時執行的。每壹個事件可以看做壹個或多個函數,也就意味著只要程序安排的合理,很多函數看起來是同時運行的;
模型舉例:假如要做幾件事,燒開水,洗衣服,打遊戲;
A:燒開水,等好了之後,洗衣服,洗完之後,打遊戲;
B:燒開水,洗衣服時監聽水壺的聲音,兩件事執行完,打遊戲;
C:選擇壹個燒水開了會停止工作的電水壺,不要等了,用洗衣機洗衣服,打遊戲;
耗時:A最長,其次B,C最短。
不同的工具占用人時間精力也是不同的,同理單片機周圍外設選擇不同,也會影響CPU占用時間;
實例:
要求:假如單片機要“同時”執行,數碼管顯示、蜂鳴器、流水燈移動;
具體實施A:設置壹個定時器,假如每隔1ms進入中斷,設置幾個全局變量x、y、z,定時器中斷裏自加,在程序主循環裏查詢全局變量的數值,當x大於500後,清零x,讓流水燈移位,當y大於,1000時清零y,數碼管加1,當z大於2時,清零z,反轉控制蜂鳴器的IO電平,以此類推其他事情也是如此。
具體實施B:設置單片機本身PWM驅動蜂鳴器,設置壹個定時器,假如每隔1ms進入中斷,設置幾個全局變量x、y、z,定時器中斷裏自加,在程序主循環裏查詢全局變量的數值,當x大於500後,清零x,讓流水燈移位,當y大於,1000時清零y,數碼管加1,以此類推其他事情也是如此。
使用內部PWM資源可以更省CPU時間!
總結:
如果外設資源不足只能算法來補充;
以上方法適合資源較少的單片機,若是單片機資源夠多(RAM>4K,Flas>8K),很多實時操作系統可以選擇:ucos,FreeRTOS等,這些實時操作系統可以方便管理事件的切換。