TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: masterpion en 24 de Abril de 2013, 17:52:26

Título: Comunicacion rx/tx entre dos pics
Publicado por: masterpion en 24 de Abril de 2013, 17:52:26
Estoy probando dos códigos distintos para comunicarse 2 pic 16f877a mediante Rx/Tx, pero no me funciona correctamente, podeis ayudarme?
Cuando lo inicializo, el que recibe el mensaje comienza a funcionar dando el mensaje BAD correctamente, pero cuando pulso el boton del micro que envia el mensaje por el pin_a1, el codigo se bloquea, estoy simulando todo atraves de proteus, pero es que el código es muy simple....He comprobado las variables con los .cof y cuando pulso el boton pin_a1 la variable d cambia correctamente, pero el codigo que se queda bloqueado, no continua y el proteus no da ningun error, ni de saturacion de CPU, ni de nada....

Código del micro que envia el mensaje:
Código: [Seleccionar]
#include <16f877a.h>
#fuses hs,nowdt,noput
#use delay(clock=20000000)
#use rs232 (baud=9600, xmit=pin_c6, rcv=pin_c7)
void main(){
  set_tris_a(0b00011110);
while(true){
if (input(pin_a1)== 1) {
printf("dato");
delay_ms(300);
}
}
}

Código del que recibe el mensaje:
Código: [Seleccionar]
#include <16f877a.h>
#include <string.h>
#fuses hs,nowdt,noput
#use delay(clock=20000000)
#use rs232 (baud=9600, xmit=pin_c6, rcv=pin_c7)
char a[5] ="dato";
char  d[5];

#int_rda
void coge_datos(){
d="0000";
if(kbhit()){
  gets(d);
  d[4]='\0';
 }
}
void main(){
enable_interrupts(global);
enable_interrupts(int_rda);
while(true){
if(strcmp(d,a)==0){ printf("GOOD\n\r");
}else{ printf("BAD\n\r");
}
}
}
Título: Re: Comunicacion rx/tx entre dos pics
Publicado por: rivale en 24 de Abril de 2013, 20:47:40
El problema es en el como envias los datos, desde el receptor usas el comando gets(), este comnado se queda recibiendo datos hasta que reciba el comando de fin de linea.
intenta cambiar tu emisor, envia los datos usando la funcion pus() o usar el printf pero poner al final de tu cadena \n\r
Título: Re: Comunicacion rx/tx entre dos pics
Publicado por: masterpion en 25 de Abril de 2013, 02:52:42
Muchisimas gracias era eso. Dejo el codigo solucionado, solo el del que envia el dato, el otro se queda igual.
Código: [Seleccionar]
#include <16f877a.h>
#fuses hs,nowdt,noput
#use delay(clock=20000000)
#use rs232 (baud=9600, xmit=pin_c6, rcv=pin_c7)
void main(){
  set_tris_a(0b00011110);
while(true){
if (input(pin_a1)== 1) {
printf("dato\n\r");
delay_ms(300);
       }

}
}
Título: Re: Comunicacion rx/tx entre dos pics
Publicado por: Wywy en 21 de Diciembre de 2013, 23:13:19
Hola, soy nuevo por acá y en esto de programación. Copie tu código tx-rx, lo modifiqué para un 16f628a y lo configuré para utilizarlo con el oscilador interno. Lo simulo en Proteus y va todo bien pero cuando hago el conexionado en la protoboard no funciona. ¿Alguien me podrá dar una mano? Muchas Gracias, saludos!!