RF communications - addressable
data receiver

Introduction
This project demonstrates the 'AM RF Receiver'
sub-circuit and is intended to be used with
project RFTX.QPR. Receiving
data over the RF link effects a simple remote
control.
The target device is a PIC16F84.
Operation
The receiver is polled until new data arrives indicated
by RFRX_NOTIFY. The data is inspected and the appropriate
action is taken. In this case a relay is either energised
or de-energised. The device could, of course, be something
other than a relay, such as a digital to analogue
converter or a display device.
The ID of the receiver can be in the
range 0-255 and is set by using the inputs of ID_HI_
and ID_LO_ ('4-bit port' sub-circuit').
Application code
Below is the application code for this project. To
use it, select and copy (ctr-insert) the code below,
paste it into a text editor and save as a 'C' file
in your working directory. You may also need to change
the build output path using 'Project | Options'.
///////////////////////////////////////////////////////////////////////
//// ARFRX.C ////
//// ////
//// Demonstrates the 'AM RF Receiver' (RFRX) sub-circuit ////
//// based on the RF Solutions AM-HRRN receiver module. ////
//// The receiver can have any ID in the range 0-255. ////
//// See also project RFTX.QPR. ////
//// ////
//// This program is an example of how your application code is ////
//// is organised. Note the #include "rfrx.c", this include ////
//// file was generated by QuickBuilder and contains all ////
//// driver code. ////
//// ////
//// Compile using CCS 'C' visit www.quickbuilder.co.uk/qb/ccs ////
///////////////////////////////////////////////////////////////////////
#include <16f84.H>
#fuses XT,NOPROTECT,NOWDT
#case
#define PORTA 5
#define PORTB 6
#define TRISA 0x85
#define TRISB 0x86
#include "rfrx.c"
main() {
signed long l;
// initialise
//------------
INIT_SUB_CIRCUITS();
RFRX_LOCAL = ID_LO_READ(); // set local ID lo nibble
RFRX_LOCAL |= ID_HI_READ() << 4; // set local ID hi hibble
RFRX_ON(); // receiver on
// main loop
//----------
while(1) {
if ( RFRX_INCOMING() )
RFRX_DO(); // poll receiver
if (RFRX_NOTIFY) {
if ( RFRX_DATA[0] == 1 )
RL_SET(1); // energise relay
else
RL_SET(0); // de-energise relay
RFRX_NOTIFY = 0;
}
}
}