我写了一个红外遥控 控制PWM调速的程序,可是一个电机正常工作,可以产生PWM,另一个电机不行,两端电压一直不变,也就是不产生PWM波形,请高手看看怎么回事。程序如下
#include<reg52.h>
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define motor_c P1
//uchar
time_delay;
uchar count=0;
sbit PWM_R=P1^3;
sbit PWM_L=P1^0;
sbit PWM_HL=P1^1;
sbit PWM_HR=P1^2;
sbit en1=P1^4;
sbit en2=P1^5;
sbit IRIN=P3^2; //红外数据线
uchar IRCOM[7];
uchar m1=0;
uchar m2=0; //电机2速度值
uchar tmp1,tmp2; //电机当前速度值
//控制电机程序
void motor(uchar index,char speed)
{
if(index==1) // 第一个电机
{
m1=abs(speed);
if(speed>0) //正转
{PWM_L=1;PWM_HL=0;}
else //反转
{PWM_L=0;PWM_HL=1;}
}
if(index==2) // 第二个电机
{
m2=abs(speed);
if(speed>0)
{PWM_R=1;PWM_HR=0;}
else
{PWM_R=0;PWM_HR=1;}
}
}
void main()
{
//uchar i;
IRIN=1;
TMOD=0x02;
TH0=0x9B;
TL0=0x9B;
EA=1;
ET0=1;
TR0=1;
IT0=1;
EX0=1;
while(1)
{
//for(i=0;i<100;i++)
//motor(1,i);
//delay(5000);
}
}
void timer0() interrupt 1
{
if(count==0) /* 1个PWM周期完成后才会接受新数值 */
{tmp1=m1;tmp2=m2;}
if(count<tmp1) en1=1; else en1=0;//产生电机1的PWM信号
if(count<tmp2) en2=1; else en2=0;//产生电机1的PWM信号
count++;
if(count>=100)
count=0; //1gePWM信号有100次中断产生
}
void delay(uchar x) //x*0.14MS
{
uchar i;
while(x--)
{
for(i=0;i<13;i++);
}
}
void IR_IN(void) interrupt 0
一周热门 更多>