#include<reg52.h>
#include <intrins.h>
sbit Sevro_moto_pwm = P2^0 ; //接舵機信號端輸入PWM信號調節(jié)速度
unsigned char push_val_left=0;
int pwm_val_left = 0;//變量定義
int pwm_val_left1 = 0;//變量定義
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信號產(chǎn)生控制舵機 */
/************************************************************************/
/* */
/*調節(jié)push_val_left的值改變電機轉速,占空比 */
void delay(void)
{
unsigned int i,j;
for(i=0;i<=500;i++)
for(j=110;j>0;j--);
}
void pwm_Servomoto(void)
{
if(pwm_val_left<=push_val_left) //0
Sevro_moto_pwm=1;
else
Sevro_moto_pwm=0;
if(pwm_val_left>=200)
pwm_val_left=0;
}
void pwm_Servomoto1(void)
{
if(pwm_val_left1<=20) //135
Sevro_moto_pwm=1;
else
Sevro_moto_pwm=0;
if(pwm_val_left1>=200)
pwm_val_left1=0;
}
/***************************************************/
///*TIMER1中斷服務子函數(shù)產(chǎn)生PWM信號*/
void time1()interrupt 3 using 2
{
TH1=(65536-100)/256; //100US定時
TL1=(65536-100)%256;
//定時器100US為準。在這個基礎上延時
pwm_val_left++;
pwm_val_left1++;
// S1++;
pwm_Servomoto();
// pwm_Servomoto1();
}
/***************************************************/
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;
//unsigned char push_val_left=15; //舵機歸中
while(1) /*無限循環(huán)*/
{
push_val_left=5;
// delay();
delay();
push_val_left=20;
// delay();
delay();
}
}
|