[問題] 如何用C語言寫出自保持電路及多工處理?

看板Electronics作者 (我在玩)時間15年前 (2011/04/13 00:08), 編輯推噓7(7013)
留言20則, 9人參與, 最新討論串1/1
最近上課上到單晶片89S52 寫程式進去執行 老師給了一題 "3個馬達 按個on按鈕 開始第1馬達啟動 5秒後第2馬達啟動    再5秒後第3馬達啟動 再5秒後第1馬達停止 再5秒後第2馬達停止 再5秒後第3馬達停止 回復初始狀態  並且在任何時間 按下緊急off按鈕 所有馬達停止 " 就是馬達順序起動順序停止+緊急按鈕 問題來了 若沒有延遲時間 我會寫的出3個on按鈕的順起順停+緊急按鈕 但若在程式中加入delay(5000)的延遲時間函數 就變的無法取得off按鈕的狀態 main() { while(1) { 馬達1=動 delay(時間) 馬達2=動 .... if(off按鈕=按)   { 馬達1=停 馬達2=停   .... } } } 類似這樣 延遲時間就會導致整個程式停止 請問 有任何可以解決同時延遲時間 又能同時檢查按鈕狀態 的方法嗎??? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.85.8.149

04/13 00:58, , 1F
你用的是單晶片,不要只是用單單的語言去思考
04/13 00:58, 1F

04/13 00:58, , 2F
用計時中斷延遲.並用迴圈方式一直判別按下OFF鍵
04/13 00:58, 2F

04/13 00:59, , 3F
比較好的作法應該是用ISR
04/13 00:59, 3F

04/13 11:39, , 4F
用一個for去數,數完後跳出~
04/13 11:39, 4F

04/13 20:48, , 5F
二三樓正解
04/13 20:48, 5F

04/13 23:41, , 6F
請問何謂計時中斷延遲? 跟delay有何不同?
04/13 23:41, 6F

04/14 00:47, , 7F
譬如你可以設計1秒 執行程式一次 執行完就跳出去了
04/14 00:47, 7F

04/14 00:47, , 8F
多久執行程式一次 可以設定 用for迴圈可以啦 不過不是正常
04/14 00:47, 8F

04/14 00:48, , 9F
作法 主要是計數次數可能要用TRY的 耗cpu資源也大
04/14 00:48, 9F

04/15 08:50, , 10F
我想到的是 就卡在delay連抓按鈕狀態也會被delay麻
04/15 08:50, 10F

04/15 08:51, , 11F
那就設定一個變數 在按下按鈕時存下當時”時間“
04/15 08:51, 11F

04/15 08:52, , 12F
然後就可以計算每個馬達要啓動的該點時間
04/15 08:52, 12F

04/15 08:53, , 13F
用一個while loop 開頭去判斷緊急停止是否有按下
04/15 08:53, 13F

04/15 08:54, , 14F
再來判斷各馬達啓動的時間是否到
04/15 08:54, 14F

04/15 08:54, , 15F
這樣緊急中斷就不會被 延遲了
04/15 08:54, 15F

04/15 09:01, , 16F
我是用Arduino有millis() 8051我就不知了 沒有玩過QQ
04/15 09:01, 16F

04/15 09:12, , 17F
剛查一下f大和a大 方法比較好 Google上蠻多資料
04/15 09:12, 17F

04/16 15:29, , 18F
用 timer interrupt 吧..
04/16 15:29, 18F

08/13 19:11, , 19F
作法 主要是計數次數 https://noxiv.com
08/13 19:11, 19F

09/17 23:05, , 20F
用計時中斷延遲.並用迴 https://daxiv.com
09/17 23:05, 20F
文章代碼(AID): #1Df7Zvjr (Electronics)