我這個舵機歸中程序舵機轉了好幾圈才歸中,怎么改才能讓它只轉一圈。是改while嗎?
#include<AT89x52.H>
#include <intrins.h>
#define Sevro_moto_pwm P1^7 //接舵機信號端輸入PWM信號調節速度
unsigned char pwm_val_left = 0;//變量定義
unsigned char push_val_left =14;//舵機歸中,產生約,1.5MS 信號
unsigned long S=0;
unsigned long S1=0;
unsigned long S2=0;
unsigned long S3=0;
unsigned long S4=0;
unsigned int time=0; //時間變量
unsigned int timer=0; //延時基準變量
unsigned char timer1=0; //掃描時間變量
/************************************************************************/
/* PWM信號產生控制舵機 */
/************************************************************************/
/* */
/*調節push_val_left的值改變電機轉速,占空比 */
void pwm_Servomoto(void)
{
if(pwm_val_left<=push_val_left)
Sevro_moto_pwm=1;
else
Sevro_moto_pwm=0;
if(pwm_val_left>=200)
pwm_val_left=0;
}
/***************************************************/
///*TIMER1中斷服務子函數產生PWM信號*/
void time1()interrupt 3 using 2
{
TH1=(65536-100)/256; //100US定時
TL1=(65536-100)%256;
//定時器100US為準。在這個基礎上延時
pwm_val_left++;
pwm_Servomoto();
}
/***************************************************/
void main(void)
{
TMOD=0X11;
TH1=(65536-100)/256; //100US定時
TL1=(65536-100)%256;
TH0=0;
TL0=0;
TR1= 1;
ET1= 1;
ET0= 1;
EA = 1;
push_val_left=14; //舵機歸中
while(1) /*無限循環*/
{
}
}
|