打印
[STC单片机]

sct89c52用4个接近开关控制4路继电器发生了奇怪的问题。。。

[复制链接]
楼主: 6825681
手机看帖
扫描二维码
随时随地手机跟帖
21
输入信号也需要消抖的,如果是洞头产的接近开关那劝楼主赶快换掉,你那些dealy看着真不顺眼

使用特权

评论回复
22
6825681|  楼主 | 2013-8-7 12:00 | 只看该作者
qqcaiyin 发表于 2013-8-7 08:34
你说的这个单独运行是什么意思?
假如去掉下面这句
if(lj1==0 && lj4==0)   //如果接近开关1和接近开关4同 ...

就是说整个程序都注释点就运行if(lj1==0 && lj4==0)  这句,结果relay4=0;继电器4就吸合

使用特权

评论回复
23
6825681|  楼主 | 2013-8-7 12:42 | 只看该作者
luodongming 发表于 2013-8-7 10:59
我觉得你的接近开关的程序不对····我原来用的接近开关输出的是模拟量,不知道你的是不是?如果是你还得 ...

我的接近开关是三根线的!黑色的是信号线。     stc125a60s2都说这个好抗干扰强!!!不知道是怎么样想试试。

使用特权

评论回复
24
6825681|  楼主 | 2013-8-7 12:44 | 只看该作者
现在我是一头沮丧啊!!!!!!!!!没用一定方向感。。。哎 。。。╮(╯▽╰)╭

使用特权

评论回复
25
luodongming| | 2013-8-7 14:00 | 只看该作者
6825681 发表于 2013-8-7 12:42
我的接近开关是三根线的!黑色的是信号线。     stc125a60s2都说这个好抗干扰强!!!不知道是怎么样想试 ...

你手头有没有示波器????如果有的话你可以检测一下信号线的输出情况··这样就知道是不是输出的模拟量!125a60s2运行速度快···我这有一个ad转换的源程序如果你想用的话就留邮箱吧

使用特权

评论回复
26
luodongming| | 2013-8-7 14:05 | 只看该作者
6825681 发表于 2013-8-7 12:42
我的接近开关是三根线的!黑色的是信号线。     stc125a60s2都说这个好抗干扰强!!!不知道是怎么样想试 ...

看你的程序你直接判断的是信号线的高低电平··估计程序不好就出在它

使用特权

评论回复
27
6825681|  楼主 | 2013-8-7 14:24 | 只看该作者
luodongming 发表于 2013-8-7 14:05
看你的程序你直接判断的是信号线的高低电平··估计程序不好就出在它

加我qq吧!!421294968    或者你qq是多少??

使用特权

评论回复
28
6825681|  楼主 | 2013-8-7 17:13 | 只看该作者
luodongming 发表于 2013-8-7 14:05
看你的程序你直接判断的是信号线的高低电平··估计程序不好就出在它

能给点建议不,真郁闷啊:dizzy:

使用特权

评论回复
29
6825681|  楼主 | 2013-8-7 17:16 | 只看该作者
ningling_21 发表于 2013-8-6 12:52
先确定硬件后软件,继电器能不能被驱动,继电器不吸和说明驱动电路有问题. ...

大虾能具体点不留个联系方式吧!!问题一直解决不了啊

使用特权

评论回复
30
ningling_21| | 2013-8-7 18:49 | 只看该作者
6825681 发表于 2013-8-7 17:16
大虾能具体点不留个联系方式吧!!问题一直解决不了啊

把问题缩小,看看是哪些器件有问题的,先解决器件问题。

使用特权

评论回复
31
6825681|  楼主 | 2013-8-7 21:05 | 只看该作者
ningling_21 发表于 2013-8-7 18:49
把问题缩小,看看是哪些器件有问题的,先解决器件问题。

加我qq咯421294968

使用特权

评论回复
32
anycrying| | 2013-8-7 22:22 | 只看该作者
6825681 发表于 2013-8-6 13:45
安装你的方法试了下,
        if(lj1==0)                        //如果接近开关1触发了为0那么继电器2就断开
           {

你的逻辑出问题了:按你上面的,是在lj1==0后再lj4==0后才判断两个同时为0的情况。

使用特权

评论回复
33
cjseng| | 2013-8-7 23:36 | 只看该作者
看汇编程序,看看程序到底是怎么回事,确定是不是优化的问题,还是逻辑错误。
不过,if((lj1==0)&&(lj4==0))这一句在这里确实是多余的,能执行到这里,这两个条件确实是都判断过了,去掉这一句,同事去掉上下两个大括号,就剩下RELAY4=0;这一句试试。

我感觉你这种写法有点问题,现在是4个输入,4个输出,用这么多if,假如有更多的输入,更多的输出,怎么办?要是我来做的话,我会把4个输入,看成一个4位的二进制数字,每一位用0、1表示,共有16种状态;4个输出也组成一个4位的二进制,每一位也用0、1表示;建一个表,每一种确定的输入状态对应一种输出,这样程序就简单多了。
另外,对于输入状态最好做一下消抖滤波处理,以免输出跳动。

使用特权

评论回复
34
6825681|  楼主 | 2013-8-8 17:27 | 只看该作者
cjseng 发表于 2013-8-7 23:36
看汇编程序,看看程序到底是怎么回事,确定是不是优化的问题,还是逻辑错误。
不过,if((lj1==0)&&(lj4==0) ...

谢谢你的回答,,看了很有感触!!

使用特权

评论回复
35
6825681|  楼主 | 2013-8-8 17:28 | 只看该作者
anycrying 发表于 2013-8-7 22:22
你的逻辑出问题了:按你上面的,是在lj1==0后再lj4==0后才判断两个同时为0的情况。 ...

你这么一说!!我还真是发现逻辑上有错误哦!!

使用特权

评论回复
36
duhemayi| | 2013-8-9 08:20 | 只看该作者
应该是个很简单的东西,搞的那么复杂

使用特权

评论回复
37
guangbiao| | 2013-8-9 15:13 | 只看该作者
楼主不要心浮气躁,做这行的最忌讳这种心态了。。。。你可以一个开关一个开开关的来试,等软硬件都正常后,再把软件组合起来。。。看你的设计需求很简单的,没那么难的。。。如果你担心优化的问题,在编译器里选择不优化就好了。。。好好体验这个过程吧,这是你成长的必经之路。。。啥都是人家告诉你的,估计就算你做出来了也不会像预期的那么开心。。。

使用特权

评论回复
38
6825681|  楼主 | 2013-8-10 09:42 | 只看该作者
guangbiao 发表于 2013-8-9 15:13
楼主不要心浮气躁,做这行的最忌讳这种心态了。。。。你可以一个开关一个开开关的来试,等软硬件都正常后, ...

啥都是人家告诉你的,估计就算你做出来了也不会像预期的那么开心。。。
你这句话不敢苟同!什么叫啥都是人家告诉我?只是碰到问题解决不了。虽然算不上什么难东西,但是也 是我一手一脚的搞的没有一人帮忙参与!有问题问问大家而已!你既探讨问题说一大堆的没用的话!

使用特权

评论回复
39
林志财| | 2013-8-11 00:41 | 只看该作者
你是单步跟踪看到的程序执行吧? 如果是的话就是程序优化的结果.   f((lj1==0) &&( lj4==0) )    这句话好像是纯粹多余了吧,前面都已经判断过了...
      
if(lj1==0)   //如果接近开关1触发了为0那么继电器2就断开
    {
  relay2 = 1;    //  当接近开关被触发 那么 reLay2 就断开,灯灭               
  
  if(lj4==0)   //如果接近开关4触发了为0那么继电器3就断开
   {
    relay3 = 1;     
              relay4 = 0;     //当继电器2和3都断开时  继电器4吸合
      
            
   }        
}

使用特权

评论回复
40
林志财| | 2013-8-11 00:43 | 只看该作者
楼主如果一定要用那一句,就用SWITCH   ,CASE;BREK.重新来做

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则