Hola amigos, llevo ya varios dias dandole vueltas a lo mismo y no consigo dar con el porqué, he reducido el codigo de mi programa al sencillísimo codigo que aparece mas abajo y ni aun así consigo que cuando salta a la rutina por recepción en el puerto serie vuelva de nuevo la funcion principal main (cosa que si consigo sin problemas con la interrupción externa o con interrupción en el puerto B). El programa es muy sencillo, mantiene encendidos dos leds que se apagaran al recibir cualquier cosa en el puerto serie, y de hecho lo hacen, pero ya no vuelven a encenderse, ya no vuelve el programa a la función principal..
#include <16f877A.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NOBROWNOUT
#use delay(clock=4000000) //Freq. 4MHz
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#int_rda
void rda_isr()
{
output_low(PIN_B1);
output_low(PIN_B2);
}
#int_rb
Interrupcio_hard()
{
output_low(PIN_B1);
output_low(PIN_B2);
}
void main(void)
{
enable_interrupts(int_rda);
enable_interrupts(global);
set_tris_b(0b1110001);
do{
output_high(PIN_B1);
output_high(PIN_B2);
}while(TRUE);
}
No se si sera por algun fuse o porque, la verdad es que no lo entiendo, porque con el buscador he visto que hay muchos códigos similares y funcionan bien. Lo podriais compilar alguien y decirme si a vosotros tampoco os funciona bien.
PS: Realmente si el codigo funciona bien no se llega a apreciar como los leds conectados a B1 y B2 se apagan, sino mas bien parece que siempre esten encendidos, el ojo humano no llega a apreciarlo.
Gracias y un saludo!