#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
sbit ENA=P1^2;
sbit IN1=P1^3;
sbit IN2=P1^4;
sbit ENB=P1^5;
sbit IN3=P1^6;
sbit IN4=P1^7;
uint MA=0;
uint speedA=50;
int flag=0;
void timeinit()
{
TMOD=0x01;
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
EA=1;
ET0=1;
TR0=1;
}
void Ques1()
{
switch(flag/10)
{
case 0: TR0=0;
if(MA<speedA)
{
ENA=1;ENB=1;
IN1=1;IN2=0;
IN3=0;IN4=1;
}
else
{
if(speedA<=MA<100)
{
ENA=0;
ENB=0;
}
else
{
MA=0;
flag++;
}
}
TR0=1;
break;
case 1: TR0=0;
if(MA<speedA)
{
ENA=1;ENB=1;
IN1=0;IN2=1;
IN3=1;IN4=0;
}
else
{
if(speedA<=MA<100)
{
ENA=0;
ENB=0;
}
else
{
MA=0;
flag++;
}
}
TR0=1;
break;
default : flag=0;
break;
}
}
void time0() interrupt 1
{
TH0=(65536-10000)/256;
TL0=(65536-10000)%256;
MA++;
}
void main()
{
timeinit();
while(1)
{
Ques1();
}
}
为什么这个程序无法同时控制电机正反转,现在问题是单片机按着复位键,IN1和IN2控制的电机才会启动,不按复位键不启动,IN3和IN4控制的电机在5s后也会停止转动,这是为什么?我的目的是IN1和IN2控制的电机1正转,同时IN3和IN4控制的电机2反转,过1s之后电机1正转电机2反转。 |