Hola buenas, tengo un problema, estoy empezando con los atmel, vengo de los pics.
Pues resulta, que tengo una interrupción por timer0, y cuando llego a ella, el programa llega a entrar en ella y ejecuta las lineas de código,
peero cuando leo una variable global, no actualiza su valor si este a cambiado en el main, uso WINAVR
a continuación el programa.
#include <avr/io.h>
//#include <avr/iom16.h>
#define F_CPU 12000000
#include <util/delay.h>
#include <avr/interrupt.h>
//Variables
int j=0;
long int k=0;
int DISP1=0;
int DISP2=7;
int DISP3=4;
int DISP4=2;
void mostrar (void);
unsigned POSIC=0;
long int contador=0;
int numero []={1,2,3,5};
const int valores[]=
{
0b00111111,
0b00000110,
0b01011011,
0b01001111,
0b01100110,
0b01101101,
0b01111100,
0b00000111,
0b01111111,
0b01100111
};
ISR(TIMER0_OVF_vect) //interrupción por overflow del timer
{
PORTA|=(_BV(7));
PORTA&=~(_BV(6));
PORTA&=~(_BV(5));
PORTA&=~(_BV(4));
PORTB = DISP1;
}
int main (void)
{
DDRA =0xFF;
DDRB =0xFF;
DDRD =0xFF;
PORTA=0x00;
// prescaler
TCCR0|=(_BV(CS02));
// NO PWM MODO NORMAL OC0 DESCONECTADO PREESCALER /256
TCCR0&=~(_BV(FOC0)|_BV(WGM01)|_BV(WGM00)|_BV(COM00)|_BV(COM01)|_BV(CS01)|_BV(CS00));
// Habilita timer0 int
TIMSK|=(_BV(TOIE0));
sei(); //Habilita las interrupciones
while (1)
{
DISP1++;
_delay_ms(1000);
}
}