Bien, vamos por partes, como bien te dicen mas arriba, es casi impsoble ver parpadear un led a esa frecuencia, a pesar de eso, he modificado tu codigo, dejando ese parpadeo, para que veas como debería saltar la interrupcion cada 2ms.
Bien como ya comente antes, me equivoque en el calculo de la temporización, con tu cristal a 20Mhz y ese prescaler no puedes temporizar directamente los 2ms. Como alternativa, te puse unas cuantas, cambiar el timer, el prescaler o hacer bucles, pues bien, he hecho esta última. He hecho una temporización de 200us y la repito 10 veces para obtener los 2ms.
Codigo:
#include <16F874A.h>
#use delay(clock=20000000)
#fuses HS, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD
#define interrupciones_por_200us 10
int contador=10;
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#INT_RTCC
void clock_isr(void)
{
if(--contador == 0)
{
output_high(PIN_B0);
delay_us(500);
output_low(PIN_B0);
contador=interrupciones_por_200us;
}
set_rtcc(131);
}
void main()
{
set_tris_a(0xFF);
set_tris_b(0b11111110);
set_tris_c(0xFF);
setup_counters( RTCC_INTERNAL, RTCC_DIV_8);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
set_rtcc(131);
while(TRUE);
}
Eso sería mas o menos lo que quieres no?, ahora bien si o que quieres es simplemente ver como parpadea un led con la interrupcion del timer 0, he hecho este otro ejemplo.
Aquí, utilizo tu mismo cristal (20Mhz) y prescaler, pero hago parpadear al led cada medio segundo, para que se pueda ver.
Codigo:
#include <16F874A.h>
#use delay(clock=20000000)
#fuses HS, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD
#byte port_b=6
#define interrupciones_por_medio_segundo 5000
int16 contador=5000;
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#INT_RTCC
void clock_isr(void)
{
if(--contador == 0)
{
port_b=~port_b;
contador=interrupciones_por_medio_segundo;
}
set_rtcc(193);
}
void main()
{
set_tris_a(0xFF);
set_tris_b(0x00);
set_tris_c(0xFF);
setup_counters( RTCC_INTERNAL, RTCC_DIV_8);
enable_interrupts(INT_RTCC);
enable_interrupts(GLOBAL);
set_rtcc(193);
while(TRUE);
}
Fijate que aquí he contado 5000 veces 100useg para obtener los 0,5 segundos. También has de fijarte que hago complemento a todo el puerto B no solo al pin B0, pero como ejemplo te sirve igual, conencta el led solo a ese pin.
En cuanto a como hago las temporizaciones, pues hago lo que pone en las notas de microchip para hacer una temporización, no cambia nada el que uses c o ensamblador, el micro trabaja de la misma forma, lo unico que hace al temporizar es "consumir" instrucciones sin hacer "nada" (NOP´s). Para conseguir info sobre las temporizaciones busca en las notas de microchip o por el for que seguro que encontraras mucha información.
Saludos.