Hola amigos de este gran foro. ME gustaría recibir ayuda dado que soy novato en el tema de programación de PICs por medio de PIC C de CCS y simulando en proteus 7.2. Estoy tratando de hacer un simple programa que lea los pulsos de entrada por medio del pin RB0. Hice que cuente 5 pulsos en la entrada RB0 y por cada 5 pulsos de entrada genera 1 de salida. El problema es que el programa funciona perfecto para frecuencias bajo los 100 khz pero cuando aumento a 1mhz por ejemplo, no funciona o mejor dicho cuenta muchos más pulsos.
Pregunta del millón, ¿cual es el error que estoy comentiendo?

El código es el siguiente (

adjunto envío un archivo RAR con el codigo de PICC y el diseño en proteus por si a alguien le interesa o si alguien me puede guiar un poco para ver cual es el error que cometo)
/*
INTERRUPCION DEL PINRB0
UNA VEZ QUE SE INTERRUMPE EN EL PIN RB0 SE DETIENE EL PROGRAMA PRINCIPAL
Y SE SALTA A LA RUTINA EXT_ISR()
*/
#include <16f877A.h>
#include <math.h>
#fuses HS, NOWDT, PUT, NOWRT
#use delay(clock=10000000)
#BYTE trisb=0x86
#BYTE portb=0x06
#BYTE trisc=0x87 //PUERTO C
#BYTE portc=0x07
int var=0;
#INT_EXT //******FUNCION DE INTERRUPCION EN RB0******
ext_isr(){
var++;
if (var==5) {
disable_interrupts(GLOBAL); //deshabilito interrupción externa
output_bit(PIN_B1,1);
delay_us(1);
output_bit(PIN_B1,0);
enable_interrupts(INT_EXT);
var=0;
}
}
void main(){
int cont;
bit_set(trisb,0); //RB0 como entrada
bit_clear(trisb,1); //RB1 como salida
bit_clear(portb,1); //apaga led en RB1
port_b_pullups(TRUE); //activo pull up en portb
enable_interrupts(INT_EXT); //habilito interrupción en RB0
ext_int_edge(L_TO_H); //detección en flanco de subida
enable_interrupts(GLOBAL); //habilitación global de interrupción
while(true){ //LOOP INFINITO QUE ESPERA INTERRUPCIÓN
}
}
De antemano muchas gracias a todos los que mantienen este foro pues es una verdadera biblia para los que deseamos aprender cada vez mas de este interesante tema que son los PICs.
Saludos y un abrazo desde Chile a todos.