1樓:無中生有
設計主要思想:
微控制器不可能同時執行多個函式,但是可以先後執行程式給他安排的每一件事,假如每個事件間隔時間非常短,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等,這些實時作業系統可以方便管理事件的切換。
2樓:匿名使用者
簡單點的可以在定時中斷裡執行每個各個任務。
複雜點的必須引入實時作業系統可以解決,
3樓:匿名使用者
微控制器多個函式功能同時執行是不可能的。
設計主要思想:
微控制器不可能同時執行多個函式,但是可以先後執行你給他安排的每一件事。
簡單的講,(每乙個事件可以看做乙個或多個函式)充分利用時間:把a事件的延時去做b事件,把b做完後,或者做完n個b事件後,a事件所需要的延時到了,開始做a事件延時之後的事情。
具體實現方法:設定乙個定時器,假如每隔10ms進入中斷,中斷裡設定幾個全域性變數想,x、y,自加,在程式主迴圈裡查詢全域性變數的數值,當x大於100後,清零x讓流水燈移位,當y大於50時清零y,數碼管加·1,以此類推其他事情也是如此。
4樓:蕭然沁芳
多個函式功能同時執行是不可能的。由於微控制器本身的條件限制。對於你的問題可以採用如下方法解決。
1. 加鎖存器,也就是說你把io口狀態改變後,鎖存器會自動鎖存輸出狀態,直到你改變為止;
2. 對於數碼管來說,可以用掃瞄來實現,即每隔一段時間點亮一次,但人的肉眼又分辨不出來。這就要求時間要短。
人眼的視覺暫留時間是,因此如果每20ms點亮一次人眼是完全分辨不出來的。
3. 使用並行語句,這就不能使用微控制器了,可以使用cpld,我見過用微控制器來控制cpld的,你也可以這樣。
微控制器除法運算,微控制器中C語言如何實現浮點除法運算
如果直接用c程式寫,那就沒必要考慮除法的細節了,比如unsigned int a,b,c a 0x3456 b 0x1040 c a b 如果你想用匯編搞定,那沒辦法,老老實實的寫或者網上 書上 找這樣的程式,肯定能找到的。不過我可以說一下演算法,那就是相減,被除數連續不斷的減去除數,直到差小於除數...
微控制器基本結構,簡述微控制器的基本結構與功能
簡述微控制器的基本結構與功能 微控制器的基本結構 運算器 控制器 主要暫存器。運算器功能 執行各種算術運算 桐滾氏執行各種邏輯運算,並進行邏輯測試,如零值測試或兩個值的比較。主要暫存器功能 用於儲存當前cpu所要訪問的記憶體單元或i o裝置的位址。控制器功能 從記憶體中取出一條指令,並指出下一條指令在記憶體中...
微控制器點陣怎麼實現左移右移,謝謝
include unsigned char code tab 8 列選通控制,0有效 unsigned char tab1 4 8 6 7 8 9unsigned char tt 0 unsigned char i,jk i定義列,j定義行,k定義移動變數 void delay void main ...