TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: edgo155 en 03 de Agosto de 2021, 02:28:20

Título: Interrupción por RS232
Publicado por: edgo155 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. }
Título: Re:Interrupción por RS232
Publicado por: DominusDRR 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.