generování PWM v CTC 328P

[code]#include <default.h>

register unsigned char x asm(“r18”);

ISR(TIMER2_COMPA_vect, ISR_NAKED )
{

if(–x==0)
{
x=40;
reti();
}
if (x<21)
{
PIND=(1<<3);
PINB=(1<<3);
}
reti();
}

int main(void)
{
DDRD=(1<<3);
DDRB=(1<<3);
DDRC=0;
PORTD=255;
PORTC=255;
PORTB=~(1<<3);

x=1;

OCR2A=25;
TIMSK2=(1<<OCIE2A); //mám nastavovat aji OCIE2B?? proč to nedělá chybu při |= respektivě při požití OR?
TCCR2A=(0<<COM2A1)|(0<<COM2A0)|(0<<COM2B1)|(0<<COM2B0)|(1<<WGM21)|(0<<WGM20);
TCCR2B=(0<<WGM22)|(0<<CS22)|(0<<CS21)|(1<<CS20);


sei();

while(1);

return 0;

}
[/code]

Tohle prostě šlape (viz přiložený obrázek). Přikládám i HEX soubor, který, když nasypeš pro procesoru, tak by měl běžet.
Test.hex (631 Bytes)