我写了一个红外遥控 控制PWM调速的程序,可是一个电机正常工作,可以产生PWM,另一个电机不行,两端电压一直不变,也就是不产生PWM波形,请高手看看怎么回事。程序如下#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=1WM_HL=0;} 
   else         //反转 
    {PWM_L=0WM_HL=1;} 
  } 
  if(index==2)   // 第二个电机 
   { 
    m2=abs(speed); 
    if(speed>0) 
     {PWM_R=1WM_HR=0;} 
    else  
     {PWM_R=0WM_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) 
{ 
  } 
} 
void timer0() interrupt 1 
{ 
if(count==0)     /* 1个PWM周期完成后才会接受新数值 */  
  {tmp1=m1;tmp2=m2;} 
else 
  {;} 
  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次中断产生 
  else 
    {;} 
} 
 
 
void delay(uchar x)    //x*0.14MS 
{ 
uchar i; 
while(x--) 
{ 
for(i=0;i<13;i++); 
} 
} 
 
 
void IR_IN(void) interrupt 0          //外部中断服务程序 
{ 
 
。。。。。红外解码接省略了,下面只写了控制速度 
switch(IRCOM[2]) 
         { 
           case 0x0c: motor(1,20);motor(2,20); break;//1 
           case 0x18: motor(1,50);motor(2,50); break;//2 
           case 0x5E: motor(1,90);motor(2,90); break;//3 
           case 0x08: motor(1,-10); break;//4 
           case 0x1C: motor(1,-50); break; 
           case 0x5A: motor(1,-90); break; 
          // case 0x42: hsudu7(); break; 
       case 0x46: motor_c=0x09; break; 
           case 0x47: motor_c=0x06; break; 
       case 0x40: motor_c=0x0d; break; 
           case 0x43: motor_c=0x07; break; 
         
         case 0x45: motor_c=0x0f; break; 
         } 
EX0=1; 
} |   
     
  
 |