Control display y dispositivo serie (uart)

Estimados y siempre queridos amigos de este mundo llamado electrónica.

hoy me dirijo ante ustedes para realizar una pregunta, me encontré jugando con un pic como siempre, y de repente me dije, "hace tiempo que o comunico algo por UART" y me puse a jugar, todo bien hasta ahy, hasta que fui a uno de los display que tengo, para mostrar mensajes y cuando me doy cuenta que al mostrar palabras en el todo se ve desordenado, incapaz de poder posicionar una palabra en un mimo lugar, entonces dije, RECORCHOLIS, como se hace esto. y me puse a investigar pero lamentablemente no he llegado a buen puerto,

uso la instrucción
fprintf("mensaje");

pero en el datasheet dice que se mandan tramos de 8 bit para comunicarse por UART y eso lo se, pero menciona que se deben mandar caractéres específicos para poder posiciones, limpiar pantalla, mover cursor, etc, por ejemplo 0x01 para clean screen, pero ¿Como mando ese dato he probado haciendo.

fputc(0x01,DYSPLAY1;
y nada

quedo muy atento y ademas me gustaría ver si también saben como usar el mismo método pero con un DISPLAY SERIE pero que tiene 4 Display de 7 SEG. ese se ve mas complicado.
adjunto una imagen de como se ve el desastre en el LCD en la simulación.
 

Adjuntos

  • DISPLAY.png
    DISPLAY.png
    30.5 KB · Visitas: 10
Pobrá usando la función printf("mensaje”)

lamentable no funca como veras este es parte de mi codigo

Código:
//*****************CONFIGURACION*******************************//
#include <16F628a.h>
#use delay (clock = 8000000)

#FUSES HS,WDT,NOPUT,NOPROTECT,NOBROWNOUT NOLVP  NOCPD
#use RS232(BAUD=1200,UART1,STREAM=Emisor)
#use RS232(BAUD=2400, XMIT=PIN_B3,FORCE_SW,STREAM=DYSPLAY1)
#use RS232(BAUD=9600, XMIT=PIN_B4,FORCE_SW,STREAM=DYSPLAY2)
//************************************************************//
int i;
int marcador1;
int marcador2;
int blanco1=5;
int blanco2=10;

#INT_RDA

void RDA_isr(void){
printf("0x01");
      i=getc(Emisor);
                  if(i==1){
                  marcador1=marcador1+blanco1;
                  fprintf(DYSPLAY1,"puntosa;%d",marcador1);
                                  }
                  if(i==2){
                  marcador2=marcador2+blanco1;
                  fprintf(DYSPLAY2,"puntosb;%d",marcador2);
                                  }
                  if(i==11){
                  marcador1=marcador1+blanco2;
                  fprintf(DYSPLAY1,"puntosa;%d",marcador1);
                                  }
                  if(i==22){
                  marcador2=marcador2+blanco2;
                  fprintf(DYSPLAY2,"puntosb;%d",marcador2);
                                  }
                  }

void main(){
int a=1;
int b=2;
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);

                         
                for(;;){
                     if(input(pin_A0)==1){
                     fputc(a,Emisor);
                     delay_ms(500);
                                         }
                                         
                     if(input(pin_A1)==1){
                     fputc(b,Emisor);
                     delay_ms(500);
                                         }  
                       }
            }

como veras uso el UART por hardware para comunicar con otro PIC, pero los UART por software hago la llamada a ellos atravez de el STREAM (DYSPLAY1 y DYSPLAY2).
cuando digo

fprintf(DYSPLAY1,"mensaje",value);

mando un mensage al serial dle dysplay. pero cuando trato de decirle clean screen no me toma en cuenta, sigue escribiendo hasta que termina el BYTE.
 
Atrás
Arriba