Witam, mam pytanie: jak przejść z jednego przerwania TIMER2 do TIMER0 po wykonaniu operacji w pętli przerwania TIMER2???
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/pgmspace.h>
#include "font.h"
static char dd;
unsigned char PROGMEM Fnt[]= Font;
int n=21,k,posun,jj,d,c,pp=0,l,d,riadok;
char Buffer[160];
ISR (TIMER2_OVF_vect)
{
for (jj=1;jj<20;jj++)
{Buffer[(jj)*8+(d+1)] =(pgm_read_byte(&Fnt[(jj)*8+(d+1)]));
jj++;
}
d++;
if (d==7)
d=0;
}
ISR (TIMER0_OVF_vect)
{ unsigned char j;
PORTB = 0;
for (j=1;j<20;j++)
{riadok=j-1+posun;
if (riadok>=20) riadok=riadok-20;
PORTD =(Buffer[(riadok)*8+(dd+1)]);
PORTB =j;}
PORTB=(dd<<4);
dd++;
if (dd==7) {dd=0;pp++;}
if (pp==200) {pp=0;posun++;}
if (posun==20) posun=0;
PORTB |= 0x80;
}
void ioinit (void)
{ DDRB = 255;
DDRD = 255;
dd = 255;
// TIMSK = 0x41;
TIMSK = _BV(TOIE0); // włącz obsługę przerwań T/C1
// TCNT0 = 0xFF;
TIMSK = _BV(TOIE2); // włącz obsługę przerwań T/C1
// TCNT2 = 0xFF;
TCCR2=1;
TCCR0=1;
sei ();
}
int main (void)
{
ioinit ();
while(1)
{
// lcd_goto(4);
//lcd_writebyte(dd);
}
return 0;
}
#include <inttypes.h>
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#include <avr/pgmspace.h>
#include "font.h"
static char dd;
unsigned char PROGMEM Fnt[]= Font;
int n=21,k,posun,jj,d,c,pp=0,l,d,riadok;
char Buffer[160];
ISR (TIMER2_OVF_vect)
{
for (jj=1;jj<20;jj++)
{Buffer[(jj)*8+(d+1)] =(pgm_read_byte(&Fnt[(jj)*8+(d+1)]));
jj++;
}
d++;
if (d==7)
d=0;
}
ISR (TIMER0_OVF_vect)
{ unsigned char j;
PORTB = 0;
for (j=1;j<20;j++)
{riadok=j-1+posun;
if (riadok>=20) riadok=riadok-20;
PORTD =(Buffer[(riadok)*8+(dd+1)]);
PORTB =j;}
PORTB=(dd<<4);
dd++;
if (dd==7) {dd=0;pp++;}
if (pp==200) {pp=0;posun++;}
if (posun==20) posun=0;
PORTB |= 0x80;
}
void ioinit (void)
{ DDRB = 255;
DDRD = 255;
dd = 255;
// TIMSK = 0x41;
TIMSK = _BV(TOIE0); // włącz obsługę przerwań T/C1
// TCNT0 = 0xFF;
TIMSK = _BV(TOIE2); // włącz obsługę przerwań T/C1
// TCNT2 = 0xFF;
TCCR2=1;
TCCR0=1;
sei ();
}
int main (void)
{
ioinit ();
while(1)
{
// lcd_goto(4);
//lcd_writebyte(dd);
}
return 0;
}