Autor Tema: Problemas con USART al migrar de PIC16 a PIC18  (Leído 1801 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Nanuk

  • PIC10
  • *
  • Mensajes: 4
Problemas con USART al migrar de PIC16 a PIC18
« en: 25 de Julio de 2012, 07:11:50 »
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):

Código: [Seleccionar]
#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!

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Problemas con USART al migrar de PIC16 a PIC18
« Respuesta #1 en: 25 de Julio de 2012, 08:37:40 »
Prueba comentar los output_toggle() que tienes dentro de la interrupcion, creo que eso te trae problemas al momento de la recepcion.
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.


 

anything