TMR0 interrumpir pic microcontrolador

0

Compré una placa de desarrollo de Matrix Multimedia, HP488 ( hoja de datos ), pero no sé por qué fallo con un programa pequeño.

El programa debe encender un led con un retraso (4 segundos) usando TMR0. Entonces, a partir de mis cálculos, usando la fórmula: Freq. out = Freq. osc / [prescaler * (256 - TMR0) * count] El preescalador es 1: 256; TMR0 es 0, y el oscilador de frecuencia es 4Mhz (osccon = 0b01100000) Una instrucción se ejecuta en 4 ciclos de reloj. Entonces el reloj de frecuencia es 4Mhz / 4 = 1Mhz. cuenta = 61. Utilizo el IDE de sourceBoost, y el compilador es BoostC.

Mira mi código:

#include<system.h> 
unsigned int counter = 0; 

void Delay(void) 
{    
  if(intcon & 2)                   // check if TMR0IF is set 
   {                      
      clear_bit( intcon, 2 );     // if TMR0IF is set, clear this bit
      counter = counter + 1;      // increments the counter       
      if(counter == 61)           
        {
           counter = 0;
           portb = ~portb;        // flash the Led 0 of Port B
        }
   }             
}

void main(void) 
{    
    trisb = 0x00;                    // set all pins of Port B as output
    portb = 0x01;                    // RB0 is high 
    tmr0 = 0;                        // the value of TMR0 register is zero.
    cmcon = 0x07;                    // comparators is off. 
    option_reg = 0b00000111;         // prescaler is assigned to the WDT, prescaler 1:256
    intcon = 0b10100000;             // GIE - enable, TMR0IE - enable
    while(1)
    {   } 
}

El programa compila bien, carga bien, pero no me muestres el parpadeo del led. Que estoy haciendo mal ? ¿Hay alguna configuración que no conozca?

    
pregunta user18050

1 respuesta

1

Para que funcione como está, en su rutina while (1), debe seguir llamando a su función Delay.
O, preferiblemente, configure una ISR real (Rutina de servicio de interrupción: esta es una rutina a la que el bucle principal salta cuando ocurre la interrupción, luego regresa a donde se dejó)

El manual del compilador tendrá información sobre cómo configurar un ISR.

    
respondido por el Oli Glaser

Lea otras preguntas en las etiquetas