Hola saludos debo realizar una comunicación entre dos PICs, cual es la mas óptima? use Usart, este es mi codigo para el transmisor:
#include<16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD,NOWRT
#use delay (clock=4000000)
#use rs232 (baud=240,xmit=PIN_C6,rcv=PIN_C7,parity=N,bits=8)
#use fast_io(b)
#byte port_b=0x06
void main()
{
int dato=0; // Reserva de espacio de memoria
set_tris_b(0xff); // Se usarán RB4 a 7 para el ingreso de los datos
port_b=0; // Se inicializa puerto B
while(true) // Ciclo infinito
{
//while(dato!=0) // Si se ha presionado ningún pulsador
// {
// dato variará segun pulsador presionado, pulsadores en RB4 a RB7
dato=port_b; // Se copia el valor del puerto B a la variable dato
switch(dato)
{
case 0x10: putc('A'); // por cada pulsador se envia un codigo diferente
break;
case 0x20: putc('B');
break;
case 0x40: putc('C');
break;
case 0x80: putc('D');
break;
default:
break;
}
// }
}
}
hay partes del código que estan en comentario ya que haciendo la simulación en Proteus si estan presentes esas líneas no envia nada, descartando eso envia pero creo muchas veces porque hace habilitar en el receptor muchas veces la accion y no para, y existe error, solucionandolo con el reset por hardware.
este mi codigo en el receptor:
#include<16f877a.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT,NOCPD,NOWRT
#use delay (clock=4000000)
#use rs232 (baud=240,xmit=PIN_C6,rcv=PIN_C7,parity=N,bits=8)
#use fast_io(b)
#byte port_b=0x06
void main()
{
int dato=0,i;
set_tris_b(0x0f);
port_b=0;
while(true)
{
if(kbhit()) // si hay algo pendiente de descargar en la USART...
{
dato=getc(); // lo descargo sobre la variable -dato-
switch(dato) // según dato recibido se hace lo que corresponda
{
case 'A': //for (i=0;i<=3;i++)
{
output_high(PIN_B4);//port_b=0x10;
delay_ms(500);
output_low(PIN_B4);//port_b=0;
delay_ms(500);
}
break;
case 'B': //for(i=0;i<=3;i++)
{
output_high(PIN_B5);//port_b=0x20;
delay_ms(500);
output_low(PIN_B5);//port_b=0;
delay_ms(500);
}
break;
case 'C': //for(i=0;i<=3;i++)
{
output_high(PIN_B6);//port_b=0x40;
delay_ms(500);
output_low(PIN_B6);//port_b=0;
delay_ms(500);
}
break;
case 'D': //for(i=0;i<=3;i++)
{
output_high(PIN_B7);//port_b=0x80;
delay_ms(500);
output_low(PIN_B7);//port_b=0;
delay_ms(500);
}
break;
default: port_b=0;
break;
}
dato=0; // restablesco dato
}
}
}
en este caso quisiera que un led segun el codigo recibido parpadee cuatro veces, eso lo hice con el ciclo for, y como mencione creo ocurre error o recibe muchas veces la señal del transmisor y parpadea exactamente doce veces a la primera presion del pulsador, y si presiono otro pulsador vuelve a parpadear el mismo led mas veces, creo nunca deja de parpadear, lo que no deberia pasar, deberia parpadear otro led, y no deberia parpadear 12 veces sino tan solo 4, y quitando el for, parpadea 4 veces, pero solo deberia parpadear una, bueno todo un problemota, como puedop solucionarlo, ayuda porfavor!!!!, despues pienso impleentarlo con un tx y rx en rf (a 4800 b/s en receptor), por eso use la velocidad de 240 bauds, esta bien, o que velocidad podria usar despues??; ayuda porfavor, necesito terminar con exito este trabajo lo mas rápido que pueda!!
estare muy agredecido a los que me respondieran y siempre mi ayuda en lo que pueda, muchas gracias
chao.