登录
首页 单片机论坛
回帖 发帖
正文

主题:真是怪,MCU控制继电器乱动,请指教

点击:1410 回复:4

附件:
[本地下载]
单片机控制继电器+直流电机,程序不一样,干扰也不一样,???请指教,有电路图
#include
#define uint unsigned int
#define uchar unsigned char
sbit s1=P3^5;//执行控制开关
sbit s2=P3^4;//主刀控制开关
sbit k1=P1^0;//继电器1输出主刀电机用
sbit k2=P1^5;//继电器2输出主刀电机用
sbit k3=P1^6;//继电器3输出移动电机用
void delay(uint z);//延时声明
void main()//主程序
{
s1=1;
s2=1;
k1=1;
k2=1;
k3=1;
if(s1==0)
 {
  k1=0;
  delay(5000);
  k2=0;
  delay(500);
  while(!s1)//BT1上电程序运行,当把电机直接到BT2时,K1就会不停的乱动。
     // 当把while(!s1),改为while(1)时,同样把电机直接到BT2,这时K1不乱动
  {
  k1=1;
  }
 }
 else{k1=1;k2=1;k3=1;}
}
/***********************************/
void delay(uint z)//延时子程序
{
uint x,y;
for(x=1;x>0;x--)
   for(y=z;y>0;y--);
}  
/***********************************/
09-04-23 22:19
s1=1的时候,程序飞出?
09-04-24 13:41
当S1S2都没按下时,程序只运行一次就飞了,
在主程序里加上
for(;;)
{
   if(s1==0)
 {
  k1=0;
  delay(5000);
  k2=0;
  delay(500);
  while(!s1)//BT1上电程序运行,当把电机直接到BT2时,K1就会不停的乱动。
     // 当把while(!s1),改为while(1)时,同样把电机直接到BT2,这时K1不乱动
  {
  k1=1;
  }
 }
 else{k1=1;k2=1;k3=1;}
}
/***********************************/
void delay(uint z)//延时子程序
{
uint x,y;
for(x=1;x>0;x--)
   for(y=z;y>0;y--);
}  
}
才对,主程序是不能结束的
09-05-10 00:16
这样写逻辑控制是不好的!!!
中间延时不要等待停顿,要想PLC一样循环扫描。
09-05-12 08:06
学习了
10-07-13 15:02

工控新闻

更多新闻资讯