avr单片机 TC1的16位PWM输出程序
扫描二维码
随时随地手机看文章
********************************************/
*工作频率:内部8M*
*编译器:ICCAVR6.31A*
*输出:PD4输出PWMB,PD5输出PWMA*
*产生的PWM频率为8M/65536约122Hz*
********************************************/
#include
#include
//延时函数:入口time需延时的MS数
voiddelay_ms(unsignedinttime)
{
unsignedcharc;
for(;time;time--)
{
for(c=220;c;c--)
{
;
}
}
}
//端口初始化
voidport_init(void)
{
PORTA=0xFF;
DDRA=0x00;
PORTB=0xFF;
DDRB=0xFF;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x30;
}
//TC1初始化
voidtimer1_init(void)
{
TCCR1A=0xA2;//两路PWM,匹配清零
TCCR1B=0x19;//快速PWM模式,位数可调,预分频1
ICR1=0xFFFF;//计数上限值,此数为16位PWM
}
//器件初始化
voidinit_devices(void)
{
port_init();//端口初始化
timer1_init();//TC1初始化
MCUCR=0x00;
GICR=0x00;
}
//主函数
voidmain(void)
{
unsignedinta=32768,b=32768;
init_devices();//器件初始化
OCR1A=a;//匹配初值
OCR1B=b;
while(1)
{
a-=10;//两个值向不同方向变化
b+=10;//PWMA宽度减小,PWMB宽度增加
if(a<=20)//上下限
{
a=65530;
b=5;
}
OCR1A=a;
OCR1B=b;
delay_ms(20);
}
}