La idea del ejercicio es que divida una frecuencia entre 4. Le meto una señal "f" por RC0 para que salga una señal "f/4" por RB0. Yo creo que esta bien pero no funciona, a ver si veis algun fallo...
#include <16F877.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
int a;
#int_timer1 //interrupcion del TMR1
void cuenta()
{
disable_interrupts(GLOBAL); //deshabilito las interrupciones por seguridad
a=!a; //cada vez que i=4 cambio el valor de a
set_TIMER1(0xFFFC); //cargo el TMR1 para que se desborde al contar 4
}
void main() //PROGRAMA PRINCIPAL
{
set_TRIS_C(00000001); //RC0 como entrada de pulsos para TMR1
set_TRIS_B(11111110); //RB0 como salida del divisor
SETUP_TIMER_1(T1_EXTERNAL); //TMR1 cuenta segun pulsos externos
disable_interrupts(GLOBAL);
enable_interrupts(int_timer1);
set_TIMER1(0xFFFC); //cargo TMR con FFFC para que se desborde al contar 4
enable_interrupts(GLOBAL);
do
{
if(a=0) //si a=0...
output_b(0x01); //...salida=1
if(a=1) //si a=º...
output_b(0x00); //...salida=0
enable_interrupts(GLOBAL);
}while(true); //bucle infinito
}