Hola juno303,
soy nobato en esto tambien, pero a ver si al menos consigo responderte parte de tus preguntas...
Bueno, en el manual de CCS en español te explica como se ha de definir una funcion para interrupciones, las funciones asociadas y sus directivas, buscalo en:
http://www.conket.com/downloads/CCS_C_sp.pdf En el programa CCS, en la carpeta Examples vienen varios ejemplos, (si lo instalas en Archivos de programa, la ruta es: C:Archivos de programaPICCExamples), consulta la ayuda del programa.
En cualquier caso, para definir una funcion que atienda a una interrupcion has de anteponer la palabra #int_xxx a tu funcion, donde xxx es la directiva asociada al tipo de interrupcion,
#int_rtcc para el timer0
#int_timer1 para el timer1
#int_timer2 para el timer2
#int_ad para el convertidor A/D
etc... consulta en el manual.
Un ejemplo de utilizacion del timer0 casero:
/*
Intermitente de 1 segundo, utilizando para ello el TIMER0.
Cada vez que pasa un segundo activa o desactiva todos los
bits del puerto b.
*/
#include <16F84A.H> /* tipo de PIC */
#use delay( clock = 4000000 ) /* reloj de 4 MHz */
#fuses XT,NOWDT,NOPROTECT,NOPUT // Configuracion
#byte puerto_b =06 // Definicion variable PORTB
char contador;
#int_rtcc // Rutina que atiende interrupcion
void interrupt(void)
{
contador++; // Incrementa la variable que cuenta las
set_rtcc(0x06); // interrupciones y recarga el timer
}
void main( void )
{
set_tris_b(0x00); /* puerto B como salida */
puerto_b=0; // Pone a cero el puerto b
setup_counters (RTCC_INTERNAL, RTCC_DIV_16); // Programacion timer0
set_timer0(0x06); // Carga el valor del timer0
enable_interrupts(INT_RTCC); // Habilita interrupcion timer0.
enable_interrupts(GLOBAL); // Habilita todas las interrupciones.
while(1)
{
if(contador==250)
{
contador=00;
puerto_b=~puerto_b; // Cada vez que pasa un segundo, activa o desactiva, segun caso, todos los bits del puerto B
}
}
}
Espero haberte ayudado en algo.
Ahhh, en la revista RESISTOR ha empezado una coleccion de articulos sobre los PICs 18F