|
#include<reg52.h>
#include <intrins.h>
sbit Sevro_moto_pwm = P2^0 ; //接舵機(jī)信號(hào)端輸入PWM信號(hào)調(diào)節(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; //時(shí)間變量
unsigned int timer=0; //延時(shí)基準(zhǔn)變量
unsigned char timer1=0; //掃描時(shí)間變量
/************************************************************************/
/* PWM信號(hào)產(chǎn)生控制舵機(jī) */
/************************************************************************/
/* */
/*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比 */
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中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
void time1()interrupt 3 using 2
{
TH1=(65536-100)/256; //100US定時(shí)
TL1=(65536-100)%256;
//定時(shí)器100US為準(zhǔn)。在這個(gè)基礎(chǔ)上延時(shí)
pwm_val_left++;
pwm_val_left1++;
// S1++;
pwm_Servomoto();
// pwm_Servomoto1();
}
/***************************************************/
void main(void)
{
TMOD=0X11;
TH1=(65536-100)/256; //100US定時(shí)
TL1=(65536-100)%256;
TH0=0;
TL0=0;
TR1= 1;
ET1= 1;
ET0= 1;
EA = 1;
//unsigned char push_val_left=15; //舵機(jī)歸中
while(1) /*無(wú)限循環(huán)*/
{
push_val_left=5;
// delay();
delay();
push_val_left=20;
// delay();
delay();
}
}
|
|