单片机控制舵机程序

哪位大侠帮我编一个“可以产生周期为20ms,在一个周期内高电平占的时间为1ms的PMW波”的程序,用单片机的内部定时器中断,单片机为AT89C52,产生的PWM波从P1^2输出。
跪谢!刚买到舵机,想小试一下............好的话多加分!
我想让舵机转过45度后停止,底下两个程序舵机都转了180度,不知为何。

//12MHz
#include <reg51.h>

void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0B1;
TL0 = 0x0E0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void delay(void) //误差 0us 延时1ms 此处可以修改高电平周期
//修改此处的延时可以更改舵机转的角度 ,45度具体是多少 你可以试试
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void main(void)
{
InitTimer0();
P1_2=0;
while(1);
}

void Timer0Interrupt(void) interrupt 1
{
//20ms中断
TH0 = 0x0B1;
TL0 = 0x0E0;
P1_2=1;
delay();
P1_2=0;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2009-10-10
//晶振频率11.0592MHz----12MHz

#include "AT89X52.h"

void timer0(void) interrupt 1
{
TH0=0xfc;
TL0=0x18;
P1_2=~P1_2; PWM波从P1^2输出

}

//the main fun
void main(void)
{
TMOD=0x1;
TH0=0xfc;
TL0=0x18;
TR0=1;
ET0=1;
EA=1;
while(1);
}
第2个回答  2009-10-09
如果你自己不会写程序,就用555来做吧,很容易,在网上可以查到用555做的振荡器电路图。
相似回答