作者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