作者OAzenO (我在玩)
看板Electronics
標題[問題] 如何用C語言寫出自保持電路及多工處理?
時間Wed Apr 13 00:08:22 2011
最近上課上到單晶片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
1F:→ asneo:你用的是單晶片,不要只是用單單的語言去思考 04/13 00:58
2F:→ fmdjyl:用計時中斷延遲.並用迴圈方式一直判別按下OFF鍵 04/13 00:58
3F:→ asneo:比較好的作法應該是用ISR 04/13 00:59
4F:推 kitconan:用一個for去數,數完後跳出~ 04/13 11:39
5F:推 wuonline:二三樓正解 04/13 20:48
6F:→ OAzenO:請問何謂計時中斷延遲? 跟delay有何不同? 04/13 23:41
7F:推 joy830:譬如你可以設計1秒 執行程式一次 執行完就跳出去了 04/14 00:47
8F:→ joy830:多久執行程式一次 可以設定 用for迴圈可以啦 不過不是正常 04/14 00:47
9F:→ joy830:作法 主要是計數次數可能要用TRY的 耗cpu資源也大 04/14 00:48
10F:推 SamWaa:我想到的是 就卡在delay連抓按鈕狀態也會被delay麻 04/15 08:50
11F:→ SamWaa:那就設定一個變數 在按下按鈕時存下當時”時間“ 04/15 08:51
12F:→ SamWaa:然後就可以計算每個馬達要啓動的該點時間 04/15 08:52
13F:→ SamWaa:用一個while loop 開頭去判斷緊急停止是否有按下 04/15 08:53
14F:→ SamWaa:再來判斷各馬達啓動的時間是否到 04/15 08:54
15F:→ SamWaa:這樣緊急中斷就不會被 延遲了 04/15 08:54
16F:推 SamWaa:我是用Arduino有millis() 8051我就不知了 沒有玩過QQ 04/15 09:01
17F:推 SamWaa:剛查一下f大和a大 方法比較好 Google上蠻多資料 04/15 09:12
18F:推 TroyLee:用 timer interrupt 吧.. 04/16 15:29