/* ** Archivo con definicion de registros y bits del microcontrolador elegido ** */
#include <p18f4550.h>
/* ** Archivo con definicion de registros para uso del timer ** */
#include <timers.h>
/* ** Configuracion de los fuses del Microcontrolador ** */
#pragma config PLLDIV = 5 // (20 MHz crystal )
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2 // Clock source from 96MHz PLL/2
#pragma config FOSC = HSPLL_HS
#pragma config FCMEN = OFF
#pragma config IESO = OFF
#pragma config PWRT = OFF
#pragma config BOR = ON
#pragma config BORV = 3
#pragma config VREGEN = ON //USB Voltage Regulator
#pragma config WDT = OFF
#pragma config WDTPS = 32768
#pragma config MCLRE = ON
#pragma config LPT1OSC = OFF
#pragma config PBADEN = OFF
// #pragma config CCP2MX = ON
#pragma config STVREN = ON
#pragma config LVP = OFF
// #pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming
#pragma config XINST = OFF // Extended Instruction Set
#pragma config CP0 = OFF
#pragma config CP1 = OFF
// #pragma config CP2 = OFF
// #pragma config CP3 = OFF
#pragma config CPB = OFF
// #pragma config CPD = OFF
#pragma config WRT0 = OFF
#pragma config WRT1 = OFF
// #pragma config WRT2 = OFF
// #pragma config WRT3 = OFF
#pragma config WRTB = OFF // Boot Block Write Protection
#pragma config WRTC = OFF
// #pragma config WRTD = OFF
#pragma config EBTR0 = OFF
#pragma config EBTR1 = OFF
// #pragma config EBTR2 = OFF
// #pragma config EBTR3 = OFF
#pragma config EBTRB = OFF
//--------------------------------------------------------------
void main (void);
void InterruptHandlerHigh (void);
unsigned char FlagTMR0 = 0;
unsigned char countTMR0 = 0;
unsigned char FlagSERVO1 = 0;
//--------------------------------------------------------------
/* ** Main Routine ** */
void main ()
{
unsigned char valorTIMER0,
ADCON1 = 0x0F;
TRISE = 0x00;
INTCON = 0x20;
INTCON2 = 0x84;
RCONbits.IPEN = 1;
OpenTimer0( TIMER_INT_ON &
T0_8BIT &
T0_SOURCE_INT &
T0_PS_1_256 );
WriteTimer0(82);
INTCONbits.GIEH = 1;
LATE = 0x00;
do
{
if(FlagTMR0 == 1)
{
FlagTMR0 = 0;
LATE = 0x01;
FlagSERVO1 = 1;
}
if(FlagSERVO1 == 1)
{
valorTIMER0 = ReadTimer0();
if(valorTIMER0 > 117)
{
FlagSERVO1 = 0;
LATE = 0x00;
}
}
}while(1);
}
//--------------------------------------------------------------
/* ** High priority interrupt vector ** */
#pragma code InterruptVectorHigh = 0x08
void InterruptVectorHigh(void)
{
_asm goto InterruptHandlerHigh _endasm
}
//--------------------------------------------------------------
/* ** High priority interrupt routine ** */
#pragma code
#pragma interrupt InterruptHandlerHigh
void InterruptHandlerHigh ()
{
if (INTCONbits.TMR0IF)
{
INTCONbits.TMR0IF = 0;
++countTMR0;
if(countTMR0 == 3)
{
WriteTimer0(82);
}
if(countTMR0 == 4)
{
FlagTMR0 = 1;
countTMR0 = 0;
}
}
}
//--------------------------------------------------------------