/*-----------------------------------------------------------------------------------------*/
/* ** INTERRUPCION DEL TIMER0 USADA PARA CONTROLAR UN SERVO FUTABA S3003 **
-----------------------------------------------------------------------------------------*/
/* ** Archivo con definicion de registros y bits del microcontrolador elegido ** */
#include <p18f4550.h>
/* ** Libreria para incluir demoras en nuestro codigo
Delay10TCYx(i) --> 10.Tcy.i
Delay100TCYx(i) --> 100.Tcy.i
Delay1KTCYx(i) --> 1000.Tcy.i
Delay10KTCYx(i) --> 10000.Tcy.i
Donde Tcy es 4/Fosc, e i es un escalar que puede tomar valores entre 0 y 255 ** */
#include <delays.h>
/* ** Libreria destinada al uso del 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=OFF,BOR=OFF,BORV=0,WDT=OFF,MCLRE=OFF
#pragma config LPT1OSC=OFF,PBADEN=OFF,LVP=OFF,DEBUG=OFF
#pragma config CCP2MX=OFF,STVREN=OFF,XINST=OFF
#pragma config CP0=OFF,CP1=OFF,CP2=OFF,CP3=OFF,CPB=OFF
#pragma config CPD=OFF,WRT0=OFF,WRT1=OFF,WRT2=OFF,WRT3=OFF
#pragma config WRTC=OFF,WRTB=OFF,WRTD=OFF
#pragma config EBTR0=OFF,EBTR1=OFF,EBTR2=OFF,EBTR3=OFF,EBTRB=OFF
/* ** Definiciones de Preprocesador ** */
//#define PIN_SERVO1 LATBbits.LATB0
/* ** Definicion de Variables Globales ** */
int contadorRTCC = 0;
int flagRTCC = 0;
/* ** Declaracion de Funciones a usar ** */
void Temporizacion (void)
/* ** Vector de Interrupcion ** */
#pragma code PrioridadBaja = 0x18 // Se apunta al Vector de Baja Prioridad
void VectorPrioridadBaja(void)
{
_asm
goto Temporizacion // Indicamos al compilador donde esta la interrupcion
_endasm
}
#pragma code
/* ** Rutina de Interrupcion ** */
#pragma interrupt Temporizacion
void Temporizacion (void)
{
++contadorRTCC;
if(contadorRTCC==4)
{
WriteTimer0(30); // Ajuste fino del RTCC
}
if(contadorRTCC==5)
{
flagRTCC=1;
contadorRTCC=0x00;
}
}
/* ** M A I N ** */
void main(void)
{
ADCON1=0x0F; // Todos entradas/salidas digitales
TRISA=0XFF; // Todos como entradas
TRISB=0xF0; // Nible bajo como salida
PORTB=0x00; // Salidas apagadas
T0CON=0xC3; // Configuramos Timer0
WriteTimer0(0); // Inicializamos registros del Timer0
INTCON=0xA0; // Configuramos la Interrupcion del Timer0
RCONbits.IPEN=0; // Desabilitamos Prioridades
while(1);
}
/* ** F U N C I O N E S ** */