Através de simulação no Proteus, estou empacado em um problema.
Tenho que fazer com que 2 microcontroladores se comuniquem através de serial (232) ...
Transmissor - faço a leitura de 4 valores e envio pela serial onde através da simulação é possível ver os sinais pelo Virtual Terminal ... ou seja aparentemente a parte 1 está funcionando:
Receptor - configuro a int_rda para receber os 4 dados e recebo os dois primeiros, pronto converto para int e direciono adequadamente para sua finalidade e funciona através de simulação e verificação com Oscilloscope .. porém os 2 últimos não chegam ... nem consigo mostrar eles em um LCD !!! Os dois primeiros sinais são de 16 bits e os dois ultimos são de 1 bit, jah tentei enviar outros valores de 16 bits e nda .. somente recebo os 2 primeiros ... o que será que está acontecendo?
- Código: Selecionar todos
#include <18F252.h>
#use delay(clock=20000000)
#fuses HS,NOWDT,PUT,NOBROWNOUT
#use rs232 ( baud=9600, rcv=PIN_C7, xmit=PIN_C6 )
#include <regs_18Fxx2.h>
#include <mod_lcd.c>
#include <rs232.c>
#include <input.c>
#include <stdlib.h>
// Declaração de variáveis
int cont;
long int valor3, valor3a=0, valor4, valor4a=0;
long int valor1a=0, valor2a=0;
long int valor1=511, valor2=511;
// Interrupção Serial
#int_rda
void Isr_Serial()
{
cont++;
if (cont==1) {
get_string (valor1,16); // Recebe dado da usart
lcd_pos_xy (1,1);
printf (lcd_escreve,"%s", valor1);
valor1a = atol (valor1);
}
if (cont==2) {
get_string (valor2,16); // Recebe dado da usart
lcd_pos_xy (9,1);
printf (lcd_escreve,"%s", valor2);
valor2a = atol (valor2);
}
if (cont==3) {
get_string (valor3,16); // Recebe dado da usart
lcd_pos_xy (1,2);
printf (lcd_escreve,"%s", valor3);
}
if (cont==4) {
get_string (valor4,16); // Recebe dado da usart
lcd_pos_xy (9,2);
printf (lcd_escreve,"%s", valor4);
}
if (cont>=4) { cont = 0;}
}
Agradeço qualquer ajuda referente ao assunto ...
abrax!