|
楼主 |
发表于 2010-7-10 17:24:01
|
显示全部楼层
#include <iom16v.h>
#include <macros.h>
void delay_MS(unsigned int i)
{unsigned int j;
for (;i!=0;i--)
{
for (j=500;j!=0;j--)
;
}
}
void main()
{
unsigned int i=15;
DDRD|=BIT(PD5); //设置输出,OC1A
TCCR1A=0x82; //10位快速PWM,且OC1A输出反向
TCCR1B=0x1B; //设置10位快速PWM,且64分频
ICR1H=0x01; //设置ICR1值为311,调节PWM波周期为20ms
ICR1L=0x37;
while(1)
{
while(31-i) //脉宽从1ms往上加 注释(1) 15/311=1/20(ms)
{
OCR1AH=0;
OCR1AL=i;
delay_MS(10);
i++;
}
while(i-15) //脉宽从2ms往下减 注释(2)
{
OCR1AH=0;
OCR1AL=i;
delay_MS(10);
i--;
}
}
}
费了一天的劲,终于学会了用T/C1生成PWM波,已经测试,可以控制舵机正常运转了(本程序从前辈的程序改进而来,区别是可以调节PWM波的周期),自己摸索效率实在太低了,后悔大学没好好学习啊! |
|