/* mija 2008demo for RFM01 - RX 868MHzPIC 16F876Axtal = 4MHz*/#include "RX_RFM01.h"//************************************************************************#define SDI PIN_B0#define SCK PIN_B1#define SDO PIN_B2 // input for PIC#define nIRQ PIN_B3#define nSEL PIN_B4#define LED PIN_B5//************************************************************************unsigned char RF_RXBUF[22];int1 led_trg;//************************************************************************void RF_INIT(void){output_high(nSEL);output_high(SDI);output_low(SCK);input(SDO);}void RF_WRITE_CMD(unsigned int16 cmd){unsigned int8 i;output_low(SCK);output_low(nSEL);for (i=0;i<16;i++){output_low(SCK);if (cmd & 0x8000) output_high(SDI);else output_low(SDI);output_high(SCK);cmd <<= 1;}output_low(SCK);output_high(nSEL);}int8 RF_RDFIFO(void){unsigned int8 i,Result;output_low(SCK);output_low(nSEL);output_low(SDI);for (i=0;i<16;i++) // skip satus bits{output_high(SCK);output_high(SCK);output_low(SCK);output_low(SCK);}Result = 0;for (i=0;i<8;i++){Result <<= 1;if (input(SDO)) Result |= 1;output_high(SCK);output_high(SCK);output_low(SCK);output_low(SCK);}output_high(nSEL);return Result;}void main(){unsigned int8 i,j,ChkSum;setup_adc_ports(NO_ANALOGS);setup_adc(ADC_OFF);setup_spi(SPI_MASTER|SPI_L_TO_H|SPI_CLK_DIV_4);setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);setup_timer_1(T1_DISABLED);setup_timer_2(T2_DISABLED,0,1);setup_comparator(NC_NC_NC_NC);setup_vref(FALSE);output_high(LED);delay_ms(1000);output_low(LED);RF_INIT();RF_WRITE_CMD(0x0000);RF_WRITE_CMD(0x918A); // 868BAND,134kHzRF_WRITE_CMD(0xA640); // 868MhzRF_WRITE_CMD(0xC847); // 4.8kbpsRF_WRITE_CMD(0xC69B); // AFC settingRF_WRITE_CMD(0xC42A); // Clock recovery manualcontrol,Dig. filter, DQD=4RF_WRITE_CMD(0xC240); // output 1.66MhzRF_WRITE_CMD(0xC080);RF_WRITE_CMD(0xCE88); // use FIFO 8bitRF_WRITE_CMD(0xCE8B);RF_WRITE_CMD(0xC081); // open RXled_trg = 0;i = 0;while (1){while (!input(nIRQ)){RF_RXBUF[i++] = RF_RDFIFO();putc(RF_RXBUF[i-1]);if (i == 18){i = 0;RF_WRITE_CMD(0xCE88);RF_WRITE_CMD(0xCE8B);ChkSum = 0;for (j=0;j<16;j++) ChkSum += RF_RXBUF[j];if (ChkSum == RF_RXBUF[16]){led_trg = ~led_trg;output_bit(LED,led_trg);}}}}}