㈠ 怎麼實現單片機多個函數功能同時執行
設計主要思想:
單片機不可能同時執行多個函數,但是可以先後執行程序給他安排的每一件事,假如每個事件間隔時間非常短,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等,這些實時操作系統可以方便管理事件的切換。
㈡ 求教:單片機怎麼同時運行幾個程序啊
你說的是狀態機。你可以立一個flag表示模式,模式一,模式二,模式三,這樣循環運行,那你可能要問了,我每個模式程序的有延時怎麼辦?
這時可以用定時器,定時器flag時間到了,主程序判斷運行某一個模式的下一步。
又或者你是比較簡單的程序不用定時器,比如電機,每4S開關,蜂鳴器每2S開關,取你最小的延時時間。那麼程序只需要放一個2S延時對應的flag,flag%1==0,蜂鳴器開關,flag%2==0,電機開關。
㈢ 單片機開機後,怎麼繼續上次運行的程序
外接一個鐵電
單片機每執行一條指嫌春令 就給指針賦一次當前flash地址 然後往鐵電里 寫一次當前指攔做針地址
鐵電掉電數據不丟失
單片機上電後 先執行 讀取鐵電中指針地址 然後指令跳轉到目標地址 鐵電無地芹衡耐址 則跳出函數 從下面開始執行