//********************************************************************************
/* ** Programa para generar una Interrupcion cada 4,096ms usando el TIMER0 ** */
/* ** Con Interrupcion de Baja Prioridad ** */
//********************************************************************************
/* ** Archivo con definicion de registros y bits del microcontrolador elegido ** */
#include <p18f4550.h>
/* ** Include para realizacion de Demoras ** */
/* ** Include para Timer0 ** */
#include <timers.h>
/* ** Configuracion de los Fuses del microcontrolador ** */
#pragma config FOSC = XT_XT,FCMEN = OFF,IESO = OFF,CPUDIV = OSC1_PLL2
#pragma config PWRT = ON,BOR = OFF,BORV =0,WDT = OFF
#pragma config WDTPS = 32768,CCP2MX = OFF,PBADEN = OFF,LPT1OSC = OFF
#pragma config MCLRE = ON,STVREN = OFF,LVP = OFF,ICPRT = OFF
#pragma config XINST = OFF,DEBUG = OFF,CP0 = OFF,CP1 = OFF
#pragma config CP2 = OFF,CP3 = OFF,CPB = OFF,CPD = OFF
#pragma config WRT0 = OFF,WRT1 = OFF,WRT2 = OFF,WRT3 = OFF
#pragma config WRTC = OFF,WRTB = OFF,WRTD = OFF,EBTR0 = OFF
#pragma config EBTR1 = OFF,EBTR2 = OFF,EBTR3 = OFF,EBTRB = OFF
/* ** Directivas de Preprocesador ** */
//#define LED_ROJO LATBbits.LATB0
//#define LED_VERDE LATBbits.LATB1
/* ** Declaracion de Funciones a utilizar ** */
void Temporizacion(void);
/* ** Variables de uso General ** */
volatile int Cont = 0;
int FlagRTCC=0;
/* ** Seccion de codigo a partir de la direccion 0x0018 ** */
#pragma code interrupcion = 0x0018
void VectorInterrupcion(void)
{
_asm goto Temporizacion _endasm
}
#pragma code // Cerramos seccion.-
/* ** Rutina de Interrupcion ** */
#pragma interrupt Temporizacion
void Temporizacion(void)
{
if(INTCONbits.TMR0IF==1)
{
Cont++;
if(Cont==4)
{
WriteTimer0(52);
}
if(Cont==5)
{
FlagRTCC=1;
Cont=0;
}
INTCONbits.TMR0IF=0;
}
}
/* ** Main ** */
void main(void)
{
ADCON1 = 0X0F;
TRISB = 0X00;
PORTB = 0X00;
OpenTimer0(TIMER_INT_ON & T0_8BIT & T0_SOURCE_INT & T0_PS_1_16); // Config.Timer0.-
INTCON2bits.TMR0IP = 0; // Prioridad baja.-
RCONbits.IPEN = 1; // Habilitamos nivel de Prioridad.-
INTCONbits.GIEL = 1; // Habilitamos todas las Interrupt de baja prioridad.-
INTCONbits.GIE = 1; // Permite todas las interrupt de alta Prioridad.-
INTCONbits.TMR0IE = 1; // Habilitamos Interrupt por overflow .-
WriteTimer0(0); // Inicializamos el Timer0.-
do
{
if(FlagRTCC==1)
{
FlagRTCC=0;
PORTB=~PORTB;
}
} while (1);
}