avr單片機(jī) TC1的16位PWM輸出程序
********************************************/
*工作頻率:內(nèi)部8M*
*編譯器:ICCAVR6.31A*
*輸出:PD4輸出PWMB,PD5輸出PWMA*
*產(chǎn)生的PWM頻率為8M/65536約122Hz*
********************************************/
#include
#include
//延時(shí)函數(shù):入口time需延時(shí)的MS數(shù)
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模式,位數(shù)可調(diào),預(yù)分頻1
ICR1=0xFFFF;//計(jì)數(shù)上限值,此數(shù)為16位PWM
}
//器件初始化
voidinit_devices(void)
{
port_init();//端口初始化
timer1_init();//TC1初始化
MCUCR=0x00;
GICR=0x00;
}
//主函數(shù)
voidmain(void)
{
unsignedinta=32768,b=32768;
init_devices();//器件初始化
OCR1A=a;//匹配初值
OCR1B=b;
while(1)
{
a-=10;//兩個(gè)值向不同方向變化
b+=10;//PWMA寬度減小,PWMB寬度增加
if(a<=20)//上下限
{
a=65530;
b=5;
}
OCR1A=a;
OCR1B=b;
delay_ms(20);
}
}