Problem polega na tym , że zmienna nrzn działa poprawnie tylko w ciele funkcji przerwania, w pętli programu już nie. Jej wartość wynosi 0 poza przerwaniem.
Code:
//Biblioteki
#include <avr\io.h>
#include <util/delay.h>
#include <avr\pgmspace.h>
#include <avr/signal.h>
#include <avr/interrupt.h>
//Zmienne
unsigned char znak [10] PROGMEM = {0x3,0x9f,0x25,0x0D,0x99,0x49,0x41,0x1F,0x1,0x09,};
unsigned char nrzn ;
unsigned int licz;
//Program
int main(void)
{
sei();
DDRD = 0b1111;
DDRA = 255;
PORTD =0XE;
TCCR1B =4;
TIMSK =1<<TOIE1;
TCCR0 = 0x4D;
for(;;)
{
_delay_loop_2(0xffff);
PORTC = ~PORTC;
PORTA = pgm_read_byte(&znak[nrzn]);
if(nrzn == 10)
{
nrzn = 0;
}
}
}
SIGNAL(SIG_OVERFLOW1)
{
DDRC = ~DDRC;
++nrzn;
}