Como veis, dentro del codigo de la interrupcion no es necesario verificar que ha saltado la interrupción del temporizador 0 (TMR0IF), ya que es la única interrupción activada, pero si que es necesario resetear el flag de la interrupción ya que de no ser así, estaremos entrando ahí continuamente.
A continuación tenéis el código.
##------------------------------------------------------------
#include <p18F2550.h>
// Bits de configuración
#pragma config WDT=OFF
#pragma config FOSC=HS
#pragma config LVP=OFF
#pragma config MCLRE = OFF
char i; //DECLARAMOS LA VARIABLE QUE HARÁ DE CONTADOR
// Declaración de la rutina de tratamiento interrupción de alta prioridad
void R_Int_Alta(void);
// Vectorización de las interrpciones de alta prioridad
#pragma code Vector_Int_Alta=0x08
void Int_Alta (void)
{
_asm GOTO R_Int_Alta _endasm // Cuando se produce una interrupción de alta
} // Prioridad se ejecuta la función
#pragma code
#pragma interrupt R_Int_Alta
void R_Int_Alta (void)
{
switch(i){
case 1:
PORTB=0x52;
PORTC=0x01; //SEGUNDO CICLO
TMR0H=57723>>8;
TMR0L=57723; //CARGAMOS TEMPORIZACIÓN SEGUNDO CICLO(1s)
INTCONbits.TMR0IF=0; //BORRAMOS FLAG DE TMR0
i++;
break;
case 2:
PORTB=0x85;
PORTC=0x02; //TERCER CICLO
TMR0H=42098>>8;
TMR0L=42098; //CARGAMOS TEMPORIZACIÓN TERCER CICLO(3s)
INTCONbits.TMR0IF=0; //BORRAMOS FLAG DE TMR0
i++;
break;
case 3:
PORTB=0x89;
PORTC=0x02; //CUARTO CICLO
TMR0H=57723>>8;
TMR0L=57723; //CARGAMOS TEMPORIZACIÓN CUARTO CICLO(1s)
INTCONbits.TMR0IF=0; //BORRAMOS FLAG DE TMR0
i++;
break;
case 4:
PORTB=0x32; // PRIMER CICLO
PORTC=0x01; // PRIMER CICLO
TMR0H=26473>>8;
TMR0L=26473; //CARGAMOS EL VALOR PARA EL PRIMER CICLO(5s)
INTCONbits.TMR0IF=0; //BORRAMOS FLAG DE TMR0
i=1;
}
}
void main (void)
{
//CONFIGURACIÓN PUERTOS
TRISB=0; //PUERTO C COMO SALIDA
TRISCbits.TRISC0=0; //BIT 0 PUERTO B COMO SALIDA
TRISCbits.TRISC1=0; //BIT 1 PUERTO B COMO SALIDA
//CONFIGURACIÓN TEMPORIZADOR
T0CON=0x87; //MODO 16 BITS,FUENTE OSCILADOR,PREES.256
//CONFIGURACION INTERRUPCIONES
INTCONbits.GIE=1; //HABILITAMOS LAS INTERRUPCIONES A NIVEL GLOBAL
INTCONbits.PEIE=1; //HABILITAMOS LAS INTERRUPCIONES DE PERIFERICOS
INTCONbits.TMR0IE=1; //HABILITAMOS LA INTERRUPCION DEL TEMPORIZADOR
PORTB=0x32; //INICIALIZAMOS EL PUERTO B PARA PRIMER CICLO
PORTC=0x01; //INICIALIZAMOS EL PUERTO C PARA PRIMER CICLO
TMR0H=26473>>8;
TMR0L=26473; //CARGAMOS EL VALOR PARA EL PRIMER CICLO(5s)
i=1;//INICIALIZAMOS EL CONTADOR
while (1); // Bucle sin fin
}
##------------------------------------------------------------
Espero que os sea útil como siempre.
Un saludo
Descargas:
No hay comentarios:
Publicar un comentario