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.