Autor Tema: Problema en interrupcion  (Leído 2035 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Problema en interrupcion
« en: 16 de Junio de 2010, 16:08:26 »
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.
Código: [Seleccionar]
#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);

   
   }


}


Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!

Desconectado QIQE

  • PIC18
  • ****
  • Mensajes: 335
Re: Problema en interrupcion
« Respuesta #1 en: 17 de Junio de 2010, 14:38:15 »
me respondo a mi mismo la variable que se emplea en la interrupción hay que declararla como volatile.
Muchas gracias por vuestro tiempo.

Saludos desde valencia!!!


 

anything