Este es el código del emisor
#Include <16F876A.h>
#fuses NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#include "lib_rf2gh4_10.h"
#byte porta=0x05
#byte portb=0x06
#int_ext // Esta rutina está para un futuro si haces comunicaciones bidireccionales.
void int_RB0() // Si te da error esta línea, sustituir por: void int_ext_isr(void).
{ // Se encargaría de la recepción de datos.
int8 ret1;
ret1 = RF_RECEIVE();
if ( (ret1 == 0) || (ret1 == 1) )
{
do
{
ret1 = RF_RECEIVE();
}while ( (ret1 == 0) || (ret1 == 1) );
}
}
void main()
{
int8 ret2;
RF_INT_EN(); // Habilitar interrupción RB0/INT.
RF_CONFIG_SPI(); // Configurar módulo SPI del PIC.
RF_CONFIG(0x40,0x01); // Configurar módulo RF canal y dirección de recepción. Para recibir datos tiene la dirección 0x01.
RF_ON(); // Activar el módulo RF.
delay_ms(5); // Le damos un mínimo de 2.5 milisegundos para que se ponga en marcha.
set_tris_a(0b111111); // Todo el puerto A como entradas.
while(true) // Bucle infinito.
{
RF_DATA[0]=porta; // Cargamos el dato en RF_DATA[0].
RF_DIR=0x08; // Dirección del receptor.
ret2=RF_SEND(); // Enviar datos.
}
}
Código del receptor
#include <16F876A.h>
#FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=4000000)
#include "lib_rf2gh4_10.h"
#byte porta=0x05 // Dirección del puerto A.
#int_ext // Interrupción del módulo RF.
void int_RB0() // Si te da error esta línea, sustituir por: void int_ext_isr(void).
{
int8 ret1;
ret1 = RF_RECEIVE();
if ( (ret1 == 0) || (ret1 == 1) ) // Tanto si hay recepción simple o múltiple, leer datos.
{
do
{
porta=RF_DATA[0]; // El puerto A contendrá el valor que le llegue del emisor, a través de RF_DATA[0].
ret1 = RF_RECEIVE(); // "ret1" nos dirá si hay recepción simple, múltiple o no hay datos para leer.
}while ( (ret1 == 0) || (ret1 == 1) ); // Mientras haya datos para leer, seguir leyendo.
}
}
void main() // Programa principal.
{
set_tris_a(0b000000); // Todo el puerto A como salida.
porta=0; // Inicialmente lo ponemos a cero.
RF_INT_EN(); // Habilitar interrupción RB0/INT.
RF_CONFIG_SPI(); // Configurar módulos SPI del PIC.
RF_CONFIG(0x40,0x08); // Configurar módulo RF (canal y dirección).
RF_ON(); // Activar el módulo RF.
while(true); // Bucle infinito.
}
Ambos estan compilados en ccs
Porfavor si alguien sabe el Motivo de porque podria colgarse esporadicamente