Autor Tema: Interrupción por RS232  (Leído 822 veces)

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

Desconectado edgo155

  • PIC10
  • *
  • Mensajes: 4
Interrupción por RS232
« en: 03 de Agosto de 2021, 02:28:20 »
hola a todos, necesito ayuda por favor... estoy haciendo una comunicacion entre dos PIC 18F4550, estoy enviando dos dato tipo string de un pic a otro,y los debo mostrar en un LCD grafico, el problema es el siguiente, cuando los datos se imprimen en el LCD, se imprime el primer dato, se limpia la pantalla, y se imprime el segundo, pero se imprime en la misma posicion que el del primer dato. Como hago para poder imprimir el 2do dato en un posicion diferente, abjunto codigo del RECEPTOR.. NOTA: envié los datos usando puts()

Código: C
  1. #include <18f4550.h>
  2. #device ADC=10   //Conversor Analógico digital a 10 bits.
  3. #fuses hs,nowdt,xt,NOWRT,NOPROTECT,NOPUT,NOLVP
  4. #use delay(crystal=8MHz)//Frecuencia de oscilador 8MHz. Para el 18F4550 Cristal externo escribir "crystal"
  5. #include <libreriaepica.c>
  6. #include <graphics.c>
  7. #include <stdlib.h> //libreria matematica
  8. #include <stdio.h>
  9.  
  10. #use RS232(baud=9600,bits=8,parity=N,xmit=pin_c6,rcv=pin_c7)//Para hacer la comunicacion con el otro PIC
  11.  
  12. int const buff=4;//uso una constante para que el arreglo sea solo de 4 y no aumente mas
  13. char it[buff];//coloco 4 porque es el numero maximo de caracteres de un numero que llega hasta 1024 que es lo que estoy enviando
  14. int j=0;//indice buffer
  15. char dato=0x00;
  16. char text[]="Recibido";
  17. char it1[buff];
  18. void adicionar(char c);// funcion adicionar caracter al buffer
  19.  
  20. #int_RDA
  21. serv_int()
  22. {
  23.         dato=0x00;
  24.         if(kbhit())
  25.         {
  26.           dato=getchar();
  27.           adicionar(dato);
  28.         }        
  29. }
  30.  
  31. void adicionar(char c)
  32.       {                  // Añade a buffer
  33.                it[j++]=c;          // Añade caracter recibido al Buffer
  34.       }
  35.  
  36.  
  37. void main()
  38. {
  39.    
  40.    enable_interrupts(int_rda);           //Habilitamos la interrupción por recepción
  41.    enable_interrupts(GLOBAL);            //Habilitamos las interrupciones globales.
  42.    glcd_init(on);
  43.    
  44.    
  45.    
  46.    while(true)
  47.    {  
  48.      
  49.       j=0;
  50.       glcd_text57(1,1,it,1,ON);
  51.       delay_ms(500);  
  52.       glcd_fillScreen(0);
  53.      
  54.          
  55.    }  
  56. }
« Última modificación: 03 de Agosto de 2021, 02:48:32 por edgo155 »

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1937
    • Sicoy
Re:Interrupción por RS232
« Respuesta #1 en: 05 de Agosto de 2021, 10:15:19 »
Creo que se escribe en la misma posición el 2do, 3ro,  y cualquier otro mensaje porque con glcd_text57(1,1,it,1,ON); siempre escribes en la misma posición, es decir (1,1, me imagino que es la posición x = 1 et Y = 1.

Si tu deseas cambiar a otro lugar debes enviar en tu trama de comunicación a parte del mensaje, las coordenadas donde deseas que se muestre el mensaje. Es decir debes crear un protocolo para cuando la trama llega al MCU, este interprete que es mensaje y que es coordenadas.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32