Hola! Estoy realizando un proyecto que lee una cadena de bytes. En principio empecé con la PIC16F628A pero por necesidad de más memoria y de un segundo puerto USART, cambié a la PIC18F26K22. En la PIC16F628A todo funciona bien, recibe y transmite lo esperado. Pero al migrar a la PIC18F26K22, transmite bien, pero no recibe bien. A continuación adjunto la configuración de la PIC y la rutina de tratamiento de interrupción por rx (INT_RDA):
#include <18F26K22.h>
#include <crc.c>
#fuses NOWDT,INTRC_IO, NOPUT, NOPROTECT, NOBROWNOUT, NOMCLR, NOLVP, NOCPD//INTRC_IO
#use delay(clock=4000000, RESTART_WDT)
#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)
//---Rutinas de tratamiento de interrupción
#int_RDA
void RDA_isr(void)
{
disable_interrupts(global);
if(kbhit()){
buffer_rx[indice]=getc();
output_toggle(LED_TEST);
if (buffer_rx[0]==1){
indice++;
if ((indice==2)||(bueno)){
if(buffer_rx[1]<=11){
bueno=true;
if (indice==(buffer_rx[1]+5)){
indice=0;
bueno=false;
buffer_listo=true;
output_toggle(LED);
}
}
else{
buffer_rx[0]=buffer_rx[1];
indice=1;
}
}
}
else{
buffer_rx[0]=buffer_rx[1];
indice=1;
}
enable_interrupts(global);
clear_interrupt(INT_RDA);
}
No entiendo porque en una PIC me funciona de lujo y en otra no. Que estoy haciendo mal? Alguien me puede ayudar? Gracias de antemano!