找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1106|回复: 4
打印 上一主题 下一主题
收起左侧

关于单片机程序启停控制问题

[复制链接]
跳转到指定楼层
楼主

现在功能:每个程序给一个信号,相关程序就会执行.
问题: 各部件都是独立运行(例如,我后面的程序还没执行完,只要控制电机的点有信号,电机还是会转,各部件之间无关联性)
希望达到效果: 电机给信号后,后面各程序依次执行,且在执行完整个程序前,前面的程序即使给信号与只会等待不会执行.
例如(我程序还在执行第三步,我给一个信号给START 电机还是不会转,直到后面的执行完电机才会转动然后接着执行后面的程序)
请大神指点要如何修改. 感激

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:688129 发表于 2020-3-25 19:34 | 只看该作者
这种不考虑成本的话还是PLC方便,国产PLC100多些
回复

使用道具 举报

板凳
ID:123289 发表于 2020-3-26 12:27 | 只看该作者
再写一个GL程序,管理你的N个功能程序。
1、程序以GL运行为主,即只在GL中循环运行。
2、每个GL循环里依序执行(调取)你的N个功能程序。
3、每个功能程序只请允许运行0.1秒或更短(越短越好。这就考验你的逻辑能力了,估计你无法做到),如果某个功能某个动作执行超过0.1秒,就拆开某个动作(如何拆是关键)。再下一轮继续完成。
如此就OK了。0.1秒只是个象征性的界限,实际会更短。因为0.1秒对于单片机来说,可运行数万条指令了。

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

地板
ID:367369 发表于 2020-3-26 13:59 | 只看该作者
定义三个标志位如int a,b,c;初值为1,0,0。当a=1;时执行第一步执行完第一步后将a置0并且将b置1;当b=1时执行第二步执行完第二步后将b置0并且将c置1;当c=1时执行第二步执行完第二步后将c置0并且将a置1;这样就会按照第一第二第三步执行了
例如:
int a=1;
int b=0;
int c=0;
if(a==1&&START==0)
{
P0=0x00;
a=0;
b=1;
}
if(b==1&&START==0)
{
P0=0x01;
b=0;
c=1;
}
if(c==1&&START==0)
{
P0=0x02;
c=0;
a=1;
}
这段代码在给相同信号START=0时;会因为abc的值执行不同程序

评分

参与人数 1黑币 +50 收起 理由
admin + 50 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

5#
ID:414469 发表于 2020-3-29 11:22 | 只看该作者
game灬boy 发表于 2020-3-26 13:59
定义三个标志位如int a,b,c;初值为1,0,0。当a=1;时执行第一步执行完第一步后将a置0并且将b置1;当b=1 ...

謝謝你詳細回答
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表