一个时间后舵机会抽风(乱转)。
然后就正常程序执行。
程序:
#include<reg52.h>
sbit SG_PWM1=P2^0;
sbit SG_PWM2=P2^1;
sbit key=P3^2; //开关
unsigned char PWM0=2; //1--0度,2--45度,3--90度,4--135度,5--180度
unsigned char PWM1=2; //1--0度,2--45度,3--90度,4--135度,5--180度
unsigned char count0=0;
unsigned char count1=0;
unsigned char out0;
unsigned char out1;
void timer_init()
{
TMOD = 0x11;//TMOD设置
TH0 = (65536-500)/256;
TL0 = (65536-500)%256;//初值 0.5ms
ET0=1;
TH1= (65536-500)/256;
TL1 = (65536-500)%256;//初值 0.5ms
ET1=1;
EA=1;
TR0=1;
TR1=1;
}
void timer0() interrupt 1
{
TR0=0;
TH0=(65536-500)/256;
TL0=(65536-500)%256;//初值 0.5ms
if(count0>40)
{
count0=0;
}
else count0++;
if(count0<=PWM0)
{
SG_PWM1=1;
}
else SG_PWM1=0;
TR0=1;
}
void timer1() interrupt 3
{
TR1=0;
TH1=(65536-500)/256;
TL1=(65536-500)%256;//初值 0.5ms
if(count1>40)
{
count1=0;
}
else count1++;
if(count1<=PWM1)
{
SG_PWM2=1;
}
else SG_PWM2=0;
TR1=1;
}
void delay_ms(unsigned char z)
{
unsigned int i,j;
for(i=0;i<z;i++)
{
for(j=0;j<1000;j++);
}
}
void main()
{
delay_ms(1);
timer_init();
while(1)
{
PWM1=4;
PWM0=2;
delay_ms(255);
PWM0=4;
PWM1=2;
delay_ms(255);
}
}
|