thalespi
-
Posts
4 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Fabricantes
Livros
Cursos
Análises
Fórum
posts postados por thalespi
-
-
Sim, no Proteus.
Acredito ser algum problema com o vetor ou a forma como está acontecendo a comunicação serial.
-
5 horas atrás, ViniciusKruz disse:
@thalespi Isso aí é CCS C ? Creio que sim, vamos ver se consigo te ajudar.
Analisando seu código de recebimento:
if(flag){ lcd_putc("\f"); lcd_gotoxy(1,1); //printf(lcd_putc,"%s",c); for(i=0;i<n;i++){ if(i==20) lcd_putc("\n"); lcd_putc(c[i]); } flag = 0; strcpy(c,""); }
if(flag) >>Se recebeu a string...
lcd_putc("\f");>>limpa o display...
lcd_gotoxy(1,1);>>coloca o cursor do display na primeira linha, e primeira posição...
for(i=0;i<n;i++){ //varre a string recebida...
if(i==20)>>se a string estourar a linha do display,
lcd_putc("\n"); >>passa para a próxima linha
lcd_putc(c); >>escreve no display
flag = 0; >>terminou de escrever a string no display, zera o flag de recepção
strcpy(c,""); >>zera o buffer de recepção
Acho que seu problema todo está no zeramento do buffer de recepção (strcpy(c,""); tenta fazer assim:
int j;
for(j=0;j<=41;j++){
c[j]="0";
}
Se não resolver, tenta essa:
É possível que o display não esteja recebendo o comando pra limpar (\f) antes de recomeçar a escrever, por via das dúvidas tenta assim:
printf(LCD_PUTC, "\f");
e no lugar de lcd_putc("\n"); tenta colocar assim: lcd_gotoxy(1,2); ou então assim: printf(LCD_PUTC, "\n");
Abraço.
Obrigado pela ajuda!
Infelizmente não funcionou :/
- 1
-
Estou tentando fazer um programa onde o usuário entra com uma mensagem que é exibida em um display LCD no primeiro PIC e após apertar a tecla #, a mesma é enviada para o segundo PIC e exibida no display do mesmo.
O problema é que ao ser enviada a mensagem para o segundo PIC. A mesma não é exibida de forma correta, uma vez que ao invés de apagar o display e exibir a nova mensagem, ele mantém a segunda e vai escrevendo por cima, além de começar a escrever na segunda linha do LCD ao invés da primeira.
Código do Receptor #include <16f877a.h> #include <string.h> #use delay(clock=4000000) #use fast_io(b) #use rs232(baud=2400,xmit=pin_c6,rcv=pin_c7,stream=serial) #include <lcd.c> #fuses xt,nowdt,noprotect,put,brownout,nolvp char c[41]; int1 flag; int8 n; int8 i; #int_RDA void RDA_isr(void){ fgets(c,serial); n = strlen(c); flag = 1; } void main(){ enable_interrupts(INT_RDA); enable_interrupts(global); lcd_init(); while(1){ if(flag){ lcd_putc("\f"); lcd_gotoxy(1,1); //printf(lcd_putc,"%s",c); for(i=0;i<n;i++){ if(i==20) lcd_putc("\n"); lcd_putc(c[i]); } flag = 0; strcpy(c,""); } } }
Código do Emissor #include <16f877a.h> #use delay(clock=4000000) #use fast_io(b) #use fast_io(d) #use rs232(baud=2400, xmit=pin_c6, rcv=pin_c7,stream=serial) #include <lcd.c> #define use_portb_kbd TRUE #include <kbd.c> #fuses xt,nowdt,noprotect,put,brownout,nolvp void main(){ char c; char c2[41]; int8 count = 0; int8 count2 = 0; int1 flag = 0; lcd_init(); kbd_init(); port_b_pullups(true); while(1){ c = kbd_getc(); if(c != 0){ if(c == '#'){ fputs(c2,serial); lcd_putc("\f"); count = 0; count2 = 0; lcd_gotoxy(1,1); flag = 0; strcpy(c2,""); }else{ lcd_putc(c); c2[count2] = c; count++; count2++; if(count2 == 40) count2 = 0; if(count == 20){ count = 0; flag = !flag; if(flag == 1) lcd_putc("\n"); else lcd_gotoxy(1,1); } } } } }
Coloquei em anexo o circuito.
Sobre o Clube do Hardware
No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais
Direitos autorais
Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais
Enviando e recebendo strings entre 2 PICs com comunicação serial
em Microcontroladores
Postado
Vou tentar usar o debugger. Obrigado pela dica!