通过采用51单片机设置定时和中断输出PWM波来控制舵机,能实现单次到指定位置,但要在循环之中实现持续来回运动重复动作却会在第一个位置就卡住不动了。希望能够解决这个问题,谢谢,程序如下:
#include <reg52.h>
unsigned char i=0,a,b,c;
sbit P17=P1^7;//舵机 1
sbit P16=P1^6;//舵机 2
sbit P15=P1^5;//舵机 3
unsigned char c1[]={77,75,77,75,77};
unsigned char c2[]={77,76,77,74,77};
unsigned char c3[]={77,74,77,76,77};
void delay(unsigned int j)
{
unsigned int x,y;
for(x=0;x<j;x++);
for(y=0;y<101;y++);
}
void main(void)
{
EA=1;
TMOD=0x01;
TH0=(65536-250)/256;
TL0=(65536-250)%256;
ET0=1;
TR0=1;
while(1)
{ a=c1[0];
b=c2[0];
c=c3[0];//通过数组就可以改变舵机的转角度
delay(5000);//延时5s
a=c1[1];
b=c2[1];
c=c3[1];
delay(5000);
a=c1[2];
b=c2[2];
c=c3[2];
delay(5000);
a=c1[3];
b=c2[3];
c=c3[3];
delay(5000);
}
}
void timer0_int() interrupt 1
{
i++;
if(i==a) {P17=1;}//70--78
if(i==b) {P16=1;}//72--78
if(i==c) {P15=1;}//72--78
if(i==80) {P17=0;P16=0;P15=0;i=0; }//1=0.25ms
TH0=(65536-250)/256;
TL0=(65536-250)%256;
}
|