Autor Tema: Comunicacion rx/tx entre dos pics  (Leído 3728 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado masterpion

  • PIC10
  • *
  • Mensajes: 2
Comunicacion rx/tx entre dos pics
« 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");
}
}
}

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: Comunicacion rx/tx entre dos pics
« Respuesta #1 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
"Nada es imposible, no si puedes imaginarlo"

Desconectado masterpion

  • PIC10
  • *
  • Mensajes: 2
Re: Comunicacion rx/tx entre dos pics
« Respuesta #2 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);
       }

}
}

Desconectado Wywy

  • PIC10
  • *
  • Mensajes: 1
Re: Comunicacion rx/tx entre dos pics
« Respuesta #3 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!!