CC1110EM 433MHz 无线模块一个简单收发程序

/发送部分:

 
//模块:CC1110EM 433MHz
//功能:无线发送模块程序,采用中断方式
//作者:nuaazdh
//时间:2010-12-20
#include "CC1110.h"

//-----------------数据定义-------------//
unsigned char Send_Data[16]={'0','1','2','3','4','5','6','7',
        '8','9','A','B','C','D','E','F'};
static unsigned char receive_index;
static unsigned char Packet_Count =10;
//-----------------函数声明-------------//
void Transmit(void);
void Delay_ms(unsigned long count);
void Clock_Init(void);
void Radio_Init(void);
void Send(void);
//===============主函数=================//
void main()
{  Clock_Init();
 Radio_Init();
 P0SEL = 0x00;
   P0DIR = 0xFF;
   P0 = 0x00;
   P1SEL = 0x00;
   P1DIR = 0xFF;
   P1 = 0xCC;
 EA=1;
  RFTXRXIE=1;
 RFIF = 0;
 SIDLE();
 STX();
 Delay_ms(100);
 RFD=0x0A;
 while(1)
 Delay_ms(100);
}


//=========中断服务=========//
void RFTXRX_SER(void) interrupt 0
{  unsigned char count;
 P1=~P1;
 
 for(count=0;count<16;count++)
 {  RFD=Send_Data[count%16];
  RFTXRXIF=0;
  while(RFTXRXIF == 0);
 }
}
  
//毫秒延时函数
void Delay_ms(unsigned long count)
{
  unsigned long i;
 unsigned long j;
 for(i=0;i<count;i++)
  for(j=0;j<100;j++)
  { ;
  }
}
//时钟初始化
void Clock_Init(void)
{ CLKCON = 0x01;
 while(!(SLEEP&0x40));
 SLEEP |= 0x04;
}
/******************************************************************/
/*                   RF寄存器初始化                                */
/******************************************************************/
void Radio_Init(void)
{
/****************************
 Deviation = 126.953125 
 Base frequency = 432.999817 
 Carrier frequency = 436.998840 
 Channel number = 20 
 Carrier frequency = 436.998840 
 Modulated = true 
 Modulation format = GFSK 
 Manchester enable = true 
 Sync word qualifier mode = 30/32 sync word bits detected 
 Preamble count = 4 
 Channel spacing = 199.951172 
 Carrier frequency = 436.998840 
 Data rate = 249.939 
 RX filter BW = 650.000000 
  = Normal mode 
 Length config = Variable packet length mode. Packet length configured by the first byte after sync word 
 CRC enable = true 
 Packet length = 255 
 Device address = 0 
 Address config = No address check 
  = false 
 PA ramping = false 
 TX power = 10 
/* RF settings SoC */
PA_TABLE0 =     0xC0;       // PA Power Setting 0 
FREQ2     =     0x10;       // Frequency Control Word, High Byte 
FREQ1     =     0xA7;       // Frequency Control Word, Middle Byte 
FREQ0     =     0x62;       // Frequency Control Word, Low Byte 
FSCTRL1   =     0x08;       // Frequency Synthesizer Control 
FSCTRL0   =     0x00;       // Frequency Synthesizer Control 
MDMCFG4   =     0xF6;       // Modem configuration 
MDMCFG3   =     0x83;       // Modem Configuration 
MDMCFG2   =     0x0B;       // Modem Configuration 
MDMCFG1   =     0x22;       // Modem Configuration 
MDMCFG0   =     0xF8;       // Modem Configuration 
CHANNR    =     0x00;       // Channel Number 
DEVIATN   =     0x15;       // Modem Deviation Setting 
FREND0    =     0x10;       // Front End TX Configuration 
FREND1    =     0x56;       // Front End RX Configuration 
MCSM1    |=  0x02;
MCSM0     =     0x10;       // Main Radio Control State Machine Configuration 
FOCCFG    =     0x16;       // Frequency Offset Compensation Configuration 
BSCFG     =     0x6C;       // Bit Synchronization Configuration 
AGCCTRL2  =     0x03;       // AGC Control 
AGCCTRL1  =     0x40;       // AGC Control 
AGCCTRL0  =     0x91;       // AGC Control 
FSCAL3    =     0xA9;       // Frequency Synthesizer Calibration 
FSCAL2    =     0x0A;       // Frequency Synthesizer Calibration 
FSCAL1    =     0x00;       // Frequency Synthesizer Calibration 
FSCAL0    =     0x11;       // Frequency Synthesizer Calibration 
TEST2     =     0x81;       // Various Test Settings 
TEST1     =     0x35;       // Various Test Settings 

SYNC1   =     0xD3;
SYNC0   =  0x91;
TEST0     =     0x0B;       // Various Test Settings 
PKTCTRL1  =     0x04;       // Packet Automation Control 
PKTCTRL0  =     0x05;       // Packet Automation Control 
ADDR      =     0x00;       // Device Address

 

 

//接收部分://

 

//模块:CC1110EM 433MHz
//功能:无线接收程序,并在LCD上显示,使用了看门狗
//因为当时调的时候接收模块老是死机
//LCD连接:LCD_RS->P1_2;LCD_RW->P1_1;LCD_E->P1_0;LCD_D0~D7->P0_0~P0_7
//作者:nuaazdh
//时间:2010-12-20
#include "CC1110.h"
//
sbit RS = P1^2;  
sbit RW = P1^1;  
sbit E  = P1^0; 

// LCD数据
unsigned char LCD_Line1[16]={'M','e','s','s','e','g','e',':',
           ' ',' ',' ',' ',' ',' ',' ',' '};
unsigned char LCD_Line2[16]={'*','*','*','*','*','*','*','*',
        '*','*','*','*','*','*','*','*'};
unsigned char Receive_Data[48]={0};
static unsigned char receive_index = 0;
//static unsigned char send_index = 0;
//------------------函数声明-------------------//
void LCD_Show(void);
void Write_Command(unsigned char c);
void Write_Data(unsigned char c);
void LCD_Init(void);
void Delay_ms(unsigned long count);
void Clock_Init(void);
void Radio_Init(void);
void Send();
void Select_From_Buff(void);

//=========主函数=======//
void main()
{ 
 Clock_Init();
 Delay_ms(1);
 Radio_Init();

 P0SEL = 0x00;
 P0DIR = 0xFF;
 P0 = 0xFF;
 P1SEL = 0x00;
 P1DIR = 0xFF;
 P1 = 0xFF;
 LCD_Init();
 LCD_Show();
 SIDLE();
 SRX();
 Delay_ms(1);
 RFTXRXIF=0;
 EA=1;
 RFTXRXIE=1;

 WDCTL = 0x00;
 WDCTL |= 0x08;
 while(1);
}
//=========中断服务=========//
void RFTXRX_SER(void) interrupt 0
{  unsigned char count;
 unsigned char i;
 P1=~P1;
 WDCTL = 0xA8;    //喂狗
 WDCTL = 0x58;
 for(count=0;count<17;count++)
 {  LCD_Line2[count%16]=RFD;
  RFTXRXIF=0;
  while(RFTXRXIF == 0);
 }
 LCD_Show();
 RFTXRXIF=0;
 WDCTL = 0xA8;    //喂狗
 WDCTL = 0x58;

}
/****************************************************/
/*               时钟初始化                        */
/***************************************************/
void Clock_Init(void)
{ CLKCON = 0x01;
 while(!(SLEEP&0x40));
 SLEEP |= 0x04;
}

/****************************************************/
/*               毫秒延时                        */
/***************************************************/
void Delay_ms(unsigned long count)
{
 unsigned long i;
 unsigned long j;
 for(i=0;i<count;i++)
  for(j=0;j<100;j++)
  { ;
  }
}

/****************************************************/
/*               在LCD上显示                        */
/***************************************************/
void LCD_Show(void)
{   unsigned char count;
 Write_Command(0x80);
 for(count=0;count<16;count++)
  {
   Write_Data(LCD_Line1[count]);
  Delay_ms(1);
  }
  Write_Command(0xC0);
 for(count=0;count<16;count++)
  {
   Write_Data(LCD_Line2[count]);
  Delay_ms(1);    
  }
}

/******************************************************************/
/*                   LCD初始化函数                                */
/******************************************************************/
void LCD_Init(void)
{
 Write_Command(0x38);  //display mode,8位数据接口,两行显示
 Write_Command(0x06);  //显示光标移动位置
 Write_Command(0x0C);  //显示开及光标设置
 Write_Command(0x01);  //显示清屏
}

/******************************************************************/
/*                   写入命令函数                                 */
/******************************************************************/
void Write_Command(unsigned char c)
{
 E=0; 
 Delay_ms(1);  //操作前短暂延时,保证信号稳定
 RS=0;
 RW=0;
 E=1;
 P0=c;
 E=0;
}

/******************************************************************/
/*                   写入数据函数                                 */
/******************************************************************/
void Write_Data(unsigned char c)
{
 E=0;
 Delay_ms(1);   //操作前短暂延时,保证信号稳定
 RS=1;
  RW=0;
 E=1;
 P0=c;
 E=0;
 RS=0;
}
/******************************************************************/
/*                   RF寄存器初始化                                */
/******************************************************************/

void Radio_Init(void)
{
/**************************
 Deviation = 126.953125 
 Base frequency = 432.999817 
 Carrier frequency = 436.998840 
 Channel number = 20 
 Carrier frequency = 436.998840 
 Modulated = true 
 Modulation format = GFSK 
 Manchester enable = true 
 Sync word qualifier mode = 30/32 sync word bits detected 
 Preamble count = 4 
 Channel spacing = 199.951172 
 Carrier frequency = 436.998840 
 Data rate = 249.939 
 RX filter BW = 650.000000 
  = Normal mode 
 Length config = Variable packet length mode. Packet length configured by the first byte after sync word 
 CRC enable = true 
 Packet length = 255 
 Device address = 0 
 Address config = No address check 
  = false 
 PA ramping = false 
 TX power = 10 
/* RF settings SoC */

PA_TABLE0 =     0xC0;       // PA Power Setting 0 
FREQ2     =     0x10;       // Frequency Control Word, High Byte 
FREQ1     =     0xA7;       // Frequency Control Word, Middle Byte 
FREQ0     =     0x62;       // Frequency Control Word, Low Byte 
FSCTRL1   =     0x08;       // Frequency Synthesizer Control 
FSCTRL0   =     0x00;       // Frequency Synthesizer Control 
MDMCFG4   =     0xF6;       // Modem configuration 
MDMCFG3   =     0x83;       // Modem Configuration 
MDMCFG2   =     0x0B;       // Modem Configuration 
MDMCFG1   =     0x22;       // Modem Configuration 
MDMCFG0   =     0xF8;       // Modem Configuration 
CHANNR    =     0x00;       // Channel Number 
DEVIATN   =     0x15;       // Modem Deviation Setting 
FREND0    =     0x10;       // Front End TX Configuration 
FREND1    =     0x56;       // Front End RX Configuration 
MCSM1    |=  0x0C;
MCSM0     =     0x10;       // Main Radio Control State Machine Configuration 
FOCCFG    =     0x16;       // Frequency Offset Compensation Configuration 
BSCFG     =     0x6C;       // Bit Synchronization Configuration 
AGCCTRL2  =     0x03;       // AGC Control 
AGCCTRL1  =     0x40;       // AGC Control 
AGCCTRL0  =     0x91;       // AGC Control 
FSCAL3    =     0xA9;       // Frequency Synthesizer Calibration 
FSCAL2    =     0x0A;       // Frequency Synthesizer Calibration 
FSCAL1    =     0x00;       // Frequency Synthesizer Calibration 
FSCAL0    =     0x11;       // Frequency Synthesizer Calibration 
TEST2     =     0x81;       // Various Test Settings 
TEST1     =     0x35;       // Various Test Settings 

SYNC1   =     0xD3;
SYNC0   =  0x91;
TEST0     =     0x0B;       // Various Test Settings 
PKTCTRL1  =     0x04;       // Packet Automation Control 
PKTCTRL0  =     0x05;       // Packet Automation Control 
ADDR      =     0x00;       // Device Address 
}

 

附录:CC1110.h文件

这部分不是自己写的,是拼凑出来的。

/**************************************************************************************************
 *                                        - CC1010.h -
 *
 * Header file for the Chipcon CC1010 System on Chip.
 *
 **************************************************************************************************
 */

#ifndef IOCC1010_H
#define IOCC1010_H

/* ------------------------------------------------------------------------------------------------
 *                                      Compiler Abstraction
 * ------------------------------------------------------------------------------------------------
 */
#define SFR(name,addr)   sfr   name  =  addr;
#define SFRBIT(name, addr, bit7, bit6, bit5, bit4, bit3, bit2, bit1, bit0)  sfr name = addr;
#define SBIT(name,addr)  sbit  name  =  addr;
#define VECT(num,addr)   num
#ifdef __C51__
#define XREG(addr)  ((unsigned char volatile xdata *) 0)[addr]
#elif defined __AX51__ || defined __A51__
#define XREG(addr)  addr
#endif


/* ------------------------------------------------------------------------------------------------
 *                                        Interrupt Vectors
 * ------------------------------------------------------------------------------------------------
 */
#define  RFTXRX_VECTOR  VECT(  0, 0x03 )   /*  RF TX FIFO Underflow and RX FIFO Overflow   */
#define  ADC_VECTOR     VECT(  1, 0x0B )   /*  ADC End of Conversion                       */
#define  URX0_VECTOR    VECT(  2, 0x13 )   /*  USART0 RX Complete                          */
#define  URX1_VECTOR    VECT(  3, 0x1B )   /*  USART1 RX Complete                          */
#define  ENC_VECTOR     VECT(  4, 0x23 )   /*  AES Encryption/Decryption Complete          */
#define  ST_VECTOR      VECT(  5, 0x2B )   /*  Sleep Timer Compare                         */
#define  P2INT_VECTOR   VECT(  6, 0x33 )   /*  Port 2 Inputs                               */
#define  UTX0_VECTOR    VECT(  7, 0x3B )   /*  USART0 TX Complete                          */
#define  DMA_VECTOR     VECT(  8, 0x43 )   /*  DMA Transfer Complete                       */
#define  T1_VECTOR      VECT(  9, 0x4B )   /*  Timer 1 (16-bit) Capture/Compare/Overflow   */
#define  T2_VECTOR      VECT( 10, 0x53 )   /*  Timer 2 (MAC Timer)                         */
#define  T3_VECTOR      VECT( 11, 0x5B )   /*  Timer 3 (8-bit) Capture/Compare/Overflow    */
#define  T4_VECTOR      VECT( 12, 0x63 )   /*  Timer 4 (8-bit) Capture/Compare/Overflow    */
#define  P0INT_VECTOR   VECT( 13, 0x6B )   /*  Port 0 Inputs                               */
#define  UTX1_VECTOR    VECT( 14, 0x73 )   /*  USART1 TX Complete                          */
#define  P1INT_VECTOR   VECT( 15, 0x7B )   /*  Port 1 Inputs                               */
#define  RF_VECTOR      VECT( 16, 0x83 )   /*  RF General Interrupts                       */
#define  WDT_VECTOR     VECT( 17, 0x8B )   /*  Watchdog Overflow in Timer Mode             */


/* ------------------------------------------------------------------------------------------------
 *                                            SFRs
 * ------------------------------------------------------------------------------------------------
 */

/* Port 0                                                                           */
SFRBIT( P0      ,  0x80, P0_7, P0_6, P0_5, P0_4, P0_3, P0_2, P0_1, P0_0 )
SFR(  SP        ,  0x81  )   /*  Stack Pointer                                      */
SFR(  DPL0      ,  0x82  )   /*  Data Pointer 0 Low Byte                            */
SFR(  DPH0      ,  0x83  )   /*  Data Pointer 0 High Byte                           */
SFR(  DPL1      ,  0x84  )   /*  Data Pointer 1 Low Byte                            */
SFR(  DPH1      ,  0x85  )   /*  Data Pointer 1 High Byte                           */
SFR(  U0CSR     ,  0x86  )   /*  USART 0 Control and Status                         */
SFR(  PCON      ,  0x87  )   /*  Power Mode Control                                 */

/* Interrupt Flags                                                                  */
SFRBIT( TCON    ,  0x88, URX1IF, _TCON6, ADCIF, _TCON5, URX0IF, IT1, RFTXRXIF, IT0 )
SFR(  P0IFG     ,  0x89  )   /*  Port 0 Interrupt Status Flag                       */
SFR(  P1IFG     ,  0x8A  )   /*  Port 1 Interrupt Status Flag                       */
SFR(  P2IFG     ,  0x8B  )   /*  Port 2 Interrupt Status Flag                       */
SFR(  PICTL     ,  0x8C  )   /*  Port Interrupt Control                             */
SFR(  P1IEN     ,  0x8D  )   /*  Port 1 Interrupt Mask                              */
SFR(  _SFR8E    ,  0x8E  )   /*  not used                                           */
SFR(  P0INP     ,  0x8F  )   /*  Port 0 Input Mode                                  */

/* Port 1                                                                           */
SFRBIT( P1      ,  0x90, P1_7, P1_6, P1_5, P1_4, P1_3, P1_2, P1_1, P1_0 )
SFR(  RFIM      ,  0x91  )   /*  RF Interrupt Mask                                  */
SFR(  DPS       ,  0x92  )   /*  Data Pointer Select                                */
SFR(  MPAGE     ,  0x93  )   /*  Memory Page Select                                 */
SFR(  _SFR94    ,  0x94  )   /*  not used                                           */
SFR(  _SFR95    ,  0x95  )   /*  not used                                           */
SFR(  _SFR96    ,  0x96  )   /*  not used                                           */
SFR(  _SFR97    ,  0x97  )   /*  not used                                           */

/*  Interrupt Flags 2                                                               */
SFRBIT(  S0CON  ,  0x98, _SOCON7, _SOCON6, _SOCON5, _SOCON4, _SOCON3, _SOCON2, ENCIF_1, ENCIF_0  )
SFR(  _SFR99    ,  0x99  )   /*  not used                                           */
SFR(  IEN2      ,  0x9A  )   /*  Interrupt Enable 2                                 */
SFR(  S1CON     ,  0x9B  )   /*  Interrupt Flags 3                                  */
SFR(  T2CT      ,  0x9C  )   /*  Timer 2 Overflow Count 0                           */
SFR(  T2PR      ,  0x9D  )   /*  Timer 2 Overflow Count 1                           */
SFR(  T2CTL     ,  0x9E  )   /*  Timer 2 Overflow Count 2                           */
SFR(  _SFR9F    ,  0x9F  )   /*  not used                                           */

/* Port 2                                                                           */
SFRBIT( P2      ,  0xA0, _P2_7, _P2_6, _P2_5, P2_4, P2_3, P2_2, P2_1, P2_0 )
SFR(  WORIRQ    ,  0xA1  )   /*  Sleep Timer Interrupts                             */
SFR(  WORCTL    ,  0xA2  )   /*  Sleep Timer Control                                */
SFR(  WOREVT0   ,  0xA3  )   /*  Sleep Timer Event 0                                */
SFR(  WOREVT1   ,  0xA4  )   /*  Sleep Timer Event 1                                */
SFR(  WORTIME0  ,  0xA5  )   /*  Sleep Timer Value 0                                */
SFR(  WORTIME1  ,  0xA6  )   /*  Sleep Timer Value 1                                */
SFR(  _SFRA7    ,  0xA7  )   /*  not used                                           */

/* Interrupt Enable 0                                                               */
SFRBIT( IEN0    ,  0xA8, EA, _IEN06, STIE, ENCIE, URX1IE, URX0IE, ADCIE, RFTXRXIE  )
SFR(  IP0       ,  0xA9  )   /*  Interrupt Priority 0                               */
SFR(  _SFRAA    ,  0xAA  )   /*  not used                                           */
SFR(  FWT       ,  0xAB  )   /*  Flash Write Timing                                 */
SFR(  FADDRL    ,  0xAC  )   /*  Flash Address Low Byte                             */
SFR(  FADDRH    ,  0xAD  )   /*  Flash Address High Byte                            */
SFR(  FCTL      ,  0xAE  )   /*  Flash Control                                      */
SFR(  FWDATA    ,  0xAF  )   /*  Flash Write Data                                   */

SFR(  _SFRB0    ,  0xB0  )   /*  not used                                           */
SFR(  ENCDI     ,  0xB1  )   /*  Encryption Input Data                              */
SFR(  ENCDO     ,  0xB2  )   /*  Encryption Output Data                             */
SFR(  ENCCS     ,  0xB3  )   /*  Encryption Control and Status                      */
SFR(  ADCCON1   ,  0xB4  )   /*  ADC Control 1                                      */
SFR(  ADCCON2   ,  0xB5  )   /*  ADC Control 2                                      */
SFR(  ADCCON3   ,  0xB6  )   /*  ADC Control 3                                      */
SFR(  _SFRB7    ,  0xB7  )   /*  not used                                           */

/*  Interrupt Enable 1                                                              */
SFRBIT( IEN1    ,  0xB8, _IEN17, _IEN16, P0IE, T4IE, T3IE, T2IE,  T1IE, DMAIE  )
SFR(  IP1       ,  0xB9  )   /*  Interrupt Priority 1                               */
SFR(  ADCL      ,  0xBA  )   /*  ADC Data Low                                       */
SFR(  ADCH      ,  0xBB  )   /*  ADC Data High                                      */
SFR(  RNDL      ,  0xBC  )   /*  Random Register Low Byte                           */
SFR(  RNDH      ,  0xBD  )   /*  Random Register High Byte                          */
SFR(  SLEEP     ,  0xBE  )   /*  Sleep Mode Control                                 */
SFR(  _SFRBF    ,  0xBF  )   /*  not used                                           */

/*  Interrupt Flags 4                                                               */
SFRBIT( IRCON   ,  0xC0 ,STIF, _IRCON6, P0IF, T4IF, T3IF, T2IF, T1IF, DMAIF )
SFR(  U0DBUF    ,  0xC1  )   /*  USART 0 Receive/Transmit Data Buffer               */
SFR(  U0BAUD    ,  0xC2  )   /*  USART 0 Baud Rate Control                          */
SFR(  _SFRC3    ,  0xC3  )   /*  not in use                                         */
SFR(  U0UCR     ,  0xC4  )   /*  USART 0 UART Control                               */
SFR(  U0GCR     ,  0xC5  )   /*  USART 0 Generic Control                            */
SFR(  CLKCON    ,  0xC6  )   /*  Clock Control                                      */
SFR(  MEMCTR    ,  0xC7  )   /*  Memory Arbiter Control                             */

SFR(  _SFRC8    ,  0xC8  )   /*  not in use                                         */
SFR(  WDCTL     ,  0xC9  )   /*  Watchdog Timer Control                             */
SFR(  T3CNT     ,  0xCA  )   /*  Timer 3 Counter                                    */
SFR(  T3CTL     ,  0xCB  )   /*  Timer 3 Control                                    */
SFR(  T3CCTL0   ,  0xCC  )   /*  Timer 3 Channel 0 Capture/Compare Control          */
SFR(  T3CC0     ,  0xCD  )   /*  Timer 3 Channel 0 Capture/Compare Value            */
SFR(  T3CCTL1   ,  0xCE  )   /*  Timer 3 Channel 1 Capture/Compare Control          */
SFR(  T3CC1     ,  0xCF  )   /*  Timer 3 Channel 1 Capture/Compare Value            */

 /*  Program Status Word                                */
SFRBIT( PSW     ,  0xD0, CY, AC, F0, RS1, RS0, OV, F1, P)
SFR(  DMAIRQ    ,  0xD1  )   /*  DMA Interrupt Flag                                 */
SFR(  DMA1CFGL  ,  0xD2  )   /*  DMA Channel 1-4 Configuration Address Low Byte     */
SFR(  DMA1CFGH  ,  0xD3  )   /*  DMA Channel 1-4 Configuration Address High Byte    */
SFR(  DMA0CFGL  ,  0xD4  )   /*  DMA Channel 0 Configuration Address Low Byte       */
SFR(  DMA0CFGH  ,  0xD5  )   /*  DMA Channel 0 Configuration Address High Byte      */
SFR(  DMAARM    ,  0xD6  )   /*  DMA Channel Arm                                    */
SFR(  DMAREQ    ,  0xD7  )   /*  DMA Channel Start Request and Status               */

/*  Timers 1/3/4 Interrupt Mask/Flag                   */
SFRBIT( TIMIF   ,  0xD8 , _TIMIF7, OVFIM, T4CH1IF, T4CH0IF, T4OVFIF, T3CH1IF, T3CH0IF, T3OVFIF )
SFR(  RFD       ,  0xD9  )   /*  RF Data                                            */
SFR(  T1CC0L    ,  0xDA  )   /*  Timer 1 Channel 0 Capture/Compare Value Low Byte   */
SFR(  T1CC0H    ,  0xDB  )   /*  Timer 1 Channel 0 Capture/Compare Value High Byte  */
SFR(  T1CC1L    ,  0xDC  )   /*  Timer 1 Channel 1 Capture/Compare Value Low Byte   */
SFR(  T1CC1H    ,  0xDD  )   /*  Timer 1 Channel 1 Capture/Compare Value High Byte  */
SFR(  T1CC2L    ,  0xDE  )   /*  Timer 1 Channel 2 Capture/Compare Value Low Byte   */
SFR(  T1CC2H    ,  0xDF  )   /*  Timer 1 Channel 2 Capture/Compare Value High Byte  */

SFR(  ACC       ,  0xE0  )   /*  Accumulator                                        */
SFR(  RFST      ,  0xE1  )   /*  RF CSMA-CA / Strobe Processor                      */
SFR(  T1CNTL    ,  0xE2  )   /*  Timer 1 Counter Low                                */
SFR(  T1CNTH    ,  0xE3  )   /*  Timer 1 Counter High                               */
SFR(  T1CTL     ,  0xE4  )   /*  Timer 1 Control and Status                         */
SFR(  T1CCTL0   ,  0xE5  )   /*  Timer 1 Channel 0 Capture/Compare Control          */
SFR(  T1CCTL1   ,  0xE6  )   /*  Timer 1 Channel 1 Capture/Compare Control          */
SFR(  T1CCTL2   ,  0xE7  )   /*  Timer 1 Channel 2 Capture/Compare Control          */

/*  Interrupt Flags 5                                                               */
SFRBIT(  IRCON2    ,  0xE8,_IRCON27, _IRCON26, _IRCON25, WDTIF, P1IF, UTX1IF, UTX0IF, P2IF )
SFR(  RFIF      ,  0xE9  )   /*  RF Interrupt Flags                                 */
SFR(  T4CNT     ,  0xEA  )   /*  Timer 4 Counter                                    */
SFR(  T4CTL     ,  0xEB  )   /*  Timer 4 Control                                    */
SFR(  T4CCTL0   ,  0xEC  )   /*  Timer 4 Channel 0 Capture/Compare Control          */
SFR(  T4CC0     ,  0xED  )   /*  Timer 4 Channel 0 Capture/Compare Value            */
SFR(  T4CCTL1   ,  0xEE  )   /*  Timer 4 Channel 1 Capture/Compare Control          */
SFR(  T4CC1     ,  0xEF  )   /*  Timer 4 Channel 1 Capture/Compare Value            */

SFR(  B         ,  0xF0  )   /*  B Register                                         */
SFR(  PERCFG    ,  0xF1  )   /*  Peripheral Control                                 */
SFR(  ADCCFG    ,  0xF2  )   /*  ADC Input Configuration                            */
SFR(  P0SEL     ,  0xF3  )   /*  Port 0 Function Select                             */
SFR(  P1SEL     ,  0xF4  )   /*  Port 1 Function Select                             */
SFR(  P2SEL     ,  0xF5  )   /*  Port 2 Function Select                             */
SFR(  P1INP     ,  0xF6  )   /*  Port 1 Input Mode                                  */
SFR(  P2INP     ,  0xF7  )   /*  Port 2 Input Mode                                  */

SFR(  U1CSR     ,  0xF8  )   /*  USART 1 Control and Status                         */
SFR(  U1DBUF    ,  0xF9  )   /*  USART 1 Receive/Transmit Data Buffer               */
SFR(  U1BAUD    ,  0xFA  )   /*  USART 1 Baud Rate Control                          */
SFR(  U1UCR     ,  0xFB  )   /*  USART 1 UART Control                               */
SFR(  U1GCR     ,  0xFC  )   /*  USART 1 Generic Control                            */
SFR(  P0DIR     ,  0xFD  )   /*  Port 0 Direction                                   */
SFR(  P1DIR     ,  0xFE  )   /*  Port 1 Direction                                   */
SFR(  P2DIR     ,  0xFF  )   /*  Port 2 Direction                                   */


/* ------------------------------------------------------------------------------------------------
 *                                         SFR Bit Access
 * ------------------------------------------------------------------------------------------------
 */

/* P0 */
SBIT(  P0_7      ,  0x87   )  /*  GPIO - Port 0, Input 7                      */
SBIT(  P0_6      ,  0x86   )  /*  GPIO - Port 0, Input 6                      */
SBIT(  P0_5      ,  0x85   )  /*  GPIO - Port 0, Input 5                      */
SBIT(  P0_4      ,  0x84   )  /*  GPIO - Port 0, Input 4                      */
SBIT(  P0_3      ,  0x83   )  /*  GPIO - Port 0, Input 3                      */
SBIT(  P0_2      ,  0x82   )  /*  GPIO - Port 0, Input 2                      */
SBIT(  P0_1      ,  0x81   )  /*  GPIO - Port 0, Input 1                      */
SBIT(  P0_0      ,  0x80   )  /*  GPIO - Port 0, Input 0                      */

/* TCON */
SBIT(  URX1IF    ,  0x8F  )  /*  USART1 RX Interrupt Flag                    */
SBIT(  _TCON6    ,  0x8E  )  /*  not used                                    */
SBIT(  ADCIF     ,  0x8D  )  /*  ADC Interrupt Flag                          */
SBIT(  _TCON5    ,  0x8C  )  /*  not used                                    */
SBIT(  URX0IF    ,  0x8B  )  /*  USART0 RX Interrupt Flag                    */
SBIT(  IT1       ,  0x8A  )  /*  reserved (must always be set to 1)          */
SBIT(  RFTXRXIF  ,  0x89  )  /*  RF TX/RX FIFO Interrupt Flag                */
SBIT(  IT0       ,  0x88  )  /*  reserved (must always be set to 1)          */

/* P1 */
SBIT(  P1_7      ,  0x97  )  /*  GPIO - Port 1, Input 7                      */
SBIT(  P1_6      ,  0x96  )  /*  GPIO - Port 1, Input 6                      */
SBIT(  P1_5      ,  0x95  )  /*  GPIO - Port 1, Input 5                      */
SBIT(  P1_4      ,  0x94  )  /*  GPIO - Port 1, Input 4                      */
SBIT(  P1_3      ,  0x93  )  /*  GPIO - Port 1, Input 3                      */
SBIT(  P1_2      ,  0x92  )  /*  GPIO - Port 1, Input 2                      */
SBIT(  P1_1      ,  0x91  )  /*  GPIO - Port 1, Input 1                      */
SBIT(  P1_0      ,  0x90  )  /*  GPIO - Port 1, Input 0                      */

/* S0CON */
SBIT(  ENCIF_1   ,  0x99  )  /*  AES Interrupt Flag 1                        */
SBIT(  ENCIF_0   ,  0x98  )  /*  AES Interrupt Flag 0                        */

/* P2 */
SBIT(  _P2_7     ,  0xA7  )  /*  not used                                    */
SBIT(  _P2_6     ,  0xA6  )  /*  not used                                    */
SBIT(  _P2_5     ,  0xA5  )  /*  not used                                    */
SBIT(  P2_4      ,  0xA4  )  /*  GPIO - Port 2, Input 4                      */
SBIT(  P2_3      ,  0xA3  )  /*  GPIO - Port 2, Input 3                      */
SBIT(  P2_2      ,  0xA2  )  /*  GPIO - Port 2, Input 2                      */
SBIT(  P2_1      ,  0xA1  )  /*  GPIO - Port 2, Input 1                      */
SBIT(  P2_0      ,  0xA0  )  /*  GPIO - Port 2, Input 0                      */

/* IEN0 */
SBIT(  EA        ,  0xAF  )  /*  Global Interrupt Enable                     */
SBIT(  _IEN06    ,  0xAE  )  /*  not used                                    */
SBIT(  STIE      ,  0xAD  )  /*  Sleep Timer Interrupt Enable                */
SBIT(  ENCIE     ,  0xAC  )  /*  AES Encryption/Decryption Interrupt Enable  */
SBIT(  URX1IE    ,  0xAB  )  /*  USART1 RX Interrupt Enable                  */
SBIT(  URX0IE    ,  0xAA  )  /*  USART0 RX Interrupt Enable                  */
SBIT(  ADCIE     ,  0xA9  )  /*  ADC Interrupt Enable                        */
SBIT(  RFTXRXIE  ,  0xA8  )  /*  RFRXTXIE ?RF TX/RX done interrupt enable   */

/* IEN1 */
SBIT(  _IEN17    ,  0xBF  )  /*  not used                                    */
SBIT(  _IEN16    ,  0xBE  )  /*  not used                                    */
SBIT(  P0IE      ,  0xBD  )  /*  Port 0 Interrupt Enable                     */
SBIT(  T4IE      ,  0xBC  )  /*  Timer 4 Interrupt Enable                    */
SBIT(  T3IE      ,  0xBB  )  /*  Timer 3 Interrupt Enable                    */
SBIT(  T2IE      ,  0xBA  )  /*  Timer 2 Interrupt Enable                    */
SBIT(  T1IE      ,  0xB9  )  /*  Timer 1 Interrupt Enable                    */
SBIT(  DMAIE     ,  0xB8  )  /*  DMA Transfer Interrupt Enable               */

/* IRCON */
SBIT(  STIF      ,  0xC7  )  /*  Sleep Timer Interrupt Flag                  */
SBIT(  _IRCON6   ,  0xC6  )  /*  not used                                    */
SBIT(  P0IF      ,  0xC5  )  /*  Port 0 Interrupt Flag                       */
SBIT(  T4IF      ,  0xC4  )  /*  Timer 4 Interrupt Flag                      */
SBIT(  T3IF      ,  0xC3  )  /*  Timer 3 Interrupt Flag                      */
SBIT(  T2IF      ,  0xC2  )  /*  Timer 2 Interrupt Flag                      */
SBIT(  T1IF      ,  0xC1  )  /*  Timer 1 Interrupt Flag                      */
SBIT(  DMAIF     ,  0xC0  )  /*  DMA Complete Interrupt Flag                 */

/* PSW */
SBIT(  CY        ,  0xD7  )  /*  Carry Flag                                  */
SBIT(  AC        ,  0xD6  )  /*  Auxiliary Carry Flag                        */
SBIT(  F0        ,  0xD5  )  /*  User-Defined                                */
SBIT(  RS1       ,  0xD4  )  /*  Register Bank Select 1                      */
SBIT(  RS0       ,  0xD3  )  /*  Register Bank Select 0                      */
SBIT(  OV        ,  0xD2  )  /*  Overflow Flag                               */
SBIT(  F1        ,  0xD1  )  /*  User-Defined                                */
SBIT(  P         ,  0xD0  )  /*  Parity Flag                                 */

/* TIMIF */
SBIT(  _TIMIF7   ,  0xDF  )  /*  not used                                    */
SBIT(  OVFIM     ,  0xDE  )  /*  Timer 1 Overflow Interrupt Mask             */
SBIT(  T4CH1IF   ,  0xDD  )  /*  Timer 4 Channel 1 Interrupt Flag            */
SBIT(  T4CH0IF   ,  0xDC  )  /*  Timer 4 Channel 0 Interrupt Flag            */
SBIT(  T4OVFIF   ,  0xDB  )  /*  Timer 4 Overflow Interrupt Flag             */
SBIT(  T3CH1IF   ,  0xDA  )  /*  Timer 3 Channel 1 Interrupt Flag            */
SBIT(  T3CH0IF   ,  0xD9  )  /*  Timer 3 Channel 0 Interrupt Flag            */
SBIT(  T3OVFIF   ,  0xD8  )  /*  Timer 3 Overflow Interrupt Flag             */

/* IRCON2 */
SBIT(  _IRCON27  ,  0xEF  )  /*  not used                                    */
SBIT(  _IRCON26  ,  0xEE  )  /*  not used                                    */
SBIT(  _IRCON25  ,  0xED  )  /*  not used                                    */
SBIT(  WDTIF     ,  0xEC  )  /*  Watchdog Timer Interrupt Flag               */
SBIT(  P1IF      ,  0xEB  )  /*  Port 1 Interrupt Flag                       */
SBIT(  UTX1IF    ,  0xEA  )  /*  USART1 TX Interrupt Flag                    */
SBIT(  UTX0IF    ,  0xE9  )  /*  USART0 TX Interrupt Flag                    */
SBIT(  P2IF      ,  0xE8  )  /*  Port 2 Interrupt Flag                       */


/* ------------------------------------------------------------------------------------------------
 *                                       Xdata Radio Registers
 * ------------------------------------------------------------------------------------------------
 */
#define  SYNC1       XREG( 0xDF00 )  /*  Sync word, high byte                                */
#define  SYNC0       XREG( 0xDF01 )  /*  Sync word, low byte                                 */
#define  PKTLEN      XREG( 0xDF02 )  /*  Packet length                                       */
#define  PKTCTRL1    XREG( 0xDF03 )  /*  Packet automation control                           */
#define  PKTCTRL0    XREG( 0xDF04 )  /*  Packet automation control                           */
#define  ADDR        XREG( 0xDF05 )  /*  Device address                                      */
#define  CHANNR      XREG( 0xDF06 )  /*  Channel number                                      */
#define  FSCTRL1     XREG( 0xDF07 )  /*  Frequency synthesizer control                       */
#define  FSCTRL0     XREG( 0xDF08 )  /*  Frequency synthesizer control                       */
#define  FREQ2       XREG( 0xDF09 )  /*  Frequency control word, high byte                   */
#define  FREQ1       XREG( 0xDF0A )  /*  Frequency control word, middle byte                 */
#define  FREQ0       XREG( 0xDF0B )  /*  Frequency control word, low byte                    */
#define  MDMCFG4     XREG( 0xDF0C )  /*  Modem configuration                                 */
#define  MDMCFG3     XREG( 0xDF0D )  /*  Modem configuration                                 */
#define  MDMCFG2     XREG( 0xDF0E )  /*  Modem configuration                                 */
#define  MDMCFG1     XREG( 0xDF0F )  /*  Modem configuration                                 */
#define  MDMCFG0     XREG( 0xDF10 )  /*  Modem configuration                                 */
#define  DEVIATN     XREG( 0xDF11 )  /*  Modem deviation setting                             */
#define  MCSM2       XREG( 0xDF12 )  /*  Main Radio Control State Machine configuration      */
#define  MCSM1       XREG( 0xDF13 )  /*  Main Radio Control State Machine configuration      */
#define  MCSM0       XREG( 0xDF14 )  /*  Main Radio Control State Machine configuration      */
#define  FOCCFG      XREG( 0xDF15 )  /*  Frequency Offset Compensation configuration         */
#define  BSCFG       XREG( 0xDF16 )  /*  Bit Synchronization configuration                   */
#define  AGCCTRL2    XREG( 0xDF17 )  /*  AGC control                                         */
#define  AGCCTRL1    XREG( 0xDF18 )  /*  AGC control                                         */
#define  AGCCTRL0    XREG( 0xDF19 )  /*  AGC control                                         */
#define  FREND1      XREG( 0xDF1A )  /*  Front end RX configuration                          */
#define  FREND0      XREG( 0xDF1B )  /*  Front end TX configuration                          */
#define  FSCAL3      XREG( 0xDF1C )  /*  Frequency synthesizer calibration                   */
#define  FSCAL2      XREG( 0xDF1D )  /*  Frequency synthesizer calibration                   */
#define  FSCAL1      XREG( 0xDF1E )  /*  Frequency synthesizer calibration                   */
#define  FSCAL0      XREG( 0xDF1F )  /*  Frequency synthesizer calibration                   */
#define  _XREGDF20   XREG( 0xDF20 )  /*  reserved                                            */
#define  _XREGDF21   XREG( 0xDF21 )  /*  reserved                                            */
#define  _XREGDF22   XREG( 0xDF22 )  /*  reserved                                            */
#define  _XREGDF23   XREG( 0xDF23 )  /*  reserved                                            */
#define  _XREGDF24   XREG( 0xDF24 )  /*  reserved                                            */
#define  _XREGDF25   XREG( 0xDF25 )  /*  reserved                                            */
#define  _XREGDF26   XREG( 0xDF26 )  /*  reserved                                            */
#define  PA_TABLE7   XREG( 0xDF27 )  /*  PA output power setting                             */
#define  PA_TABLE6   XREG( 0xDF28 )  /*  PA output power setting                             */
#define  PA_TABLE5   XREG( 0xDF29 )  /*  PA output power setting                             */
#define  PA_TABLE4   XREG( 0xDF2A )  /*  PA output power setting                             */
#define  PA_TABLE3   XREG( 0xDF2B )  /*  PA output power setting                             */
#define  PA_TABLE2   XREG( 0xDF2C )  /*  PA output power setting                             */
#define  PA_TABLE1   XREG( 0xDF2D )  /*  PA output power setting                             */
#define  PA_TABLE0   XREG( 0xDF2E )  /*  PA output power setting                             */
#define  IOCFG2      XREG( 0xDF2F )  /*  GDO2 output pin configuration                       */
#define  IOCFG1      XREG( 0xDF30 )  /*  GDO1 output pin configuration                       */
#define  IOCFG0      XREG( 0xDF31 )  /*  GDO0 output pin configuration                       */
#define  _XREGDF32   XREG( 0xDF32 )  /*  reserved                                            */
#define  _XREGDF33   XREG( 0xDF33 )  /*  reserved                                            */
#define  _XREGDF34   XREG( 0xDF34 )  /*  reserved                                            */
#define  _XREGDF35   XREG( 0xDF35 )  /*  reserved                                            */
#define  PARTNUM     XREG( 0xDF36 )  /*  Chip Identifier                                     */
#define  VERSION     XREG( 0xDF37 )  /*  Configuration                                       */
#define  FREQEST     XREG( 0xDF38 )  /*  Frequency Offset Estimate                           */
#define  LQI         XREG( 0xDF39 )  /*  Link Quality Indicator                              */
#define  RSSI        XREG( 0xDF3A )  /*  Received Signal Strength Indication                 */
#define  MARCSTATE   XREG( 0xDF3B )  /*  Main Radio Control State                            */
#define  PKTSTATUS   XREG( 0xDF3C )  /*  Packet status                                       */
#define  VCO_VC_DAC  XREG( 0xDF3D )  /*  PLL calibration current                             */

 

/* ------------------------------------------------------------------------------------------------
 *                                      Xdata Mapped SFRs
 * ------------------------------------------------------------------------------------------------
 */

/*
 *   Most SFRs are also accessible through XDATA address space.  The register definitions for
 *   this type of access are listed below.  The register names are identical to the SFR names
 *   but with the prefix X_ to denote an XDATA register.
 *
 *   Some SFRs are not accessible through XDATA space.  For clarity, entries are included for these
 *   registers.  They have a prefix of _NA to denote "not available."
 *
 *   For register descriptions, refer to the actual SFR declartions elsewhere in this file.
 */
#define  _NA_P0      XREG( 0xDF80 )
#define  _NA_SP      XREG( 0xDF81 )
#define  _NA_DPL0    XREG( 0xDF82 )
#define  _NA_DPH0    XREG( 0xDF83 )
#define  _NA_DPL1    XREG( 0xDF84 )
#define  _NA_DPH1    XREG( 0xDF85 )
#define  X_U0CSR     XREG( 0xDF86 )
#define  _NA_PCON    XREG( 0xDF87 )

#define  _NA_TCON    XREG( 0xDF88 )
#define  X_P0IFG     XREG( 0xDF89 )
#define  X_P1IFG     XREG( 0xDF8A )
#define  X_P2IFG     XREG( 0xDF8B )
#define  X_PICTL     XREG( 0xDF8C )
#define  X_P1IEN     XREG( 0xDF8D )
#define  _X_SFR8E    XREG( 0xDF8E )
#define  X_P0INP     XREG( 0xDF8F )

#define  _NA_P1      XREG( 0xDF90 )
#define  X_RFIM      XREG( 0xDF91 )
#define  _NA_DPS     XREG( 0xDF92 )
#define  X_MPAGE     XREG( 0xDF93 )
#define  _X_SFR94    XREG( 0xDF94 )
#define  _X_SFR95    XREG( 0xDF95 )
#define  _X_SFR96    XREG( 0xDF96 )
#define  _X_SFR97    XREG( 0xDF97 )

#define  _NA_S0CON   XREG( 0xDF98 )
#define  _X_SFR99    XREG( 0xDF99 )
#define  _NA_IEN2    XREG( 0xDF9A )
#define  _NA_S1CON   XREG( 0xDF9B )
#define  X_T2CT      XREG( 0xDF9C )
#define  X_T2PR      XREG( 0xDF9D )
#define  X_T2CTL     XREG( 0xDF9E )
#define  _X_SFR9F    XREG( 0xDF9F )

#define  _NA_P2      XREG( 0xDFA0 )
#define  X_WORIRQ    XREG( 0xDFA1 )
#define  X_WORCTL    XREG( 0xDFA2 )
#define  X_WOREVT0   XREG( 0xDFA3 )
#define  X_WOREVT1   XREG( 0xDFA4 )
#define  X_WORTIME0  XREG( 0xDFA5 )
#define  X_WORTIME1  XREG( 0xDFA6 )
#define  _X_SFRA7     XREG( 0xDFA7 )

#define  _NA_IEN0    XREG( 0xDFA8 )
#define  _NA_IP0     XREG( 0xDFA9 )
#define  _X_SFRAA    XREG( 0xDFAA )
#define  X_FWT       XREG( 0xDFAB )
#define  X_FADDRL    XREG( 0xDFAC )
#define  X_FADDRH    XREG( 0xDFAD )
#define  X_FCTL      XREG( 0xDFAE )
#define  X_FWDATA    XREG( 0xDFAF )

#define  _X_SFRB0    XREG( 0xDFB0 )
#define  X_ENCDI     XREG( 0xDFB1 )
#define  X_ENCDO     XREG( 0xDFB2 )
#define  X_ENCCS     XREG( 0xDFB3 )
#define  X_ADCCON1   XREG( 0xDFB4 )
#define  X_ADCCON2   XREG( 0xDFB5 )
#define  X_ADCCON3   XREG( 0xDFB6 )
#define  _X_SFRB7    XREG( 0xDFB7 )

#define  _NA_IEN1    XREG( 0xDFB8 )
#define  _NA_IP1     XREG( 0xDFB9 )
#define  X_ADCL      XREG( 0xDFBA )
#define  X_ADCH      XREG( 0xDFBB )
#define  X_RNDL      XREG( 0xDFBC )
#define  X_RNDH      XREG( 0xDFBD )
#define  X_SLEEP     XREG( 0xDFBE )
#define  _X_SFRBF    XREG( 0xDFBF )

#define  _NA_IRCON   XREG( 0xDFC0 )
#define  X_U0DBUF    XREG( 0xDFC1 )
#define  X_U0BAUD    XREG( 0xDFC2 )
#define  _X_SFRC3    XREG( 0xDFC3 )
#define  X_U0UCR     XREG( 0xDFC4 )
#define  X_U0GCR     XREG( 0xDFC5 )
#define  X_CLKCON    XREG( 0xDFC6 )
#define  X_MEMCTR    XREG( 0xDFC7 )

#define  _X_SFRC8N   XREG( 0xDFC8 )
#define  X_WDCTL     XREG( 0xDFC9 )
#define  X_T3CNT     XREG( 0xDFCA )
#define  X_T3CTL     XREG( 0xDFCB )
#define  X_T3CCTL0   XREG( 0xDFCC )
#define  X_T3CC0     XREG( 0xDFCD )
#define  X_T3CCTL1   XREG( 0xDFCE )
#define  X_T3CC1     XREG( 0xDFCF )

#define  _NA_PSW     XREG( 0xDFD0 )
#define  X_DMAIRQ    XREG( 0xDFD1 )
#define  X_DMA1CFGL  XREG( 0xDFD2 )
#define  X_DMA1CFGH  XREG( 0xDFD3 )
#define  X_DMA0CFGL  XREG( 0xDFD4 )
#define  X_DMA0CFGH  XREG( 0xDFD5 )
#define  X_DMAARM    XREG( 0xDFD6 )
#define  X_DMAREQ    XREG( 0xDFD7 )

#define  X_TIMIF     XREG( 0xDFD8 )
#define  X_RFD       XREG( 0xDFD9 )
#define  X_T1CC0L    XREG( 0xDFDA )
#define  X_T1CC0H    XREG( 0xDFDB )
#define  X_T1CC1L    XREG( 0xDFDC )
#define  X_T1CC1H    XREG( 0xDFDD )
#define  X_T1CC2L    XREG( 0xDFDE )
#define  X_T1CC2H    XREG( 0xDFDF )

#define  _NA_ACC     XREG( 0xDFE0 )
#define  X_RFST      XREG( 0xDFE1 )
#define  X_T1CNTL    XREG( 0xDFE2 )
#define  X_T1CNTH    XREG( 0xDFE3 )
#define  X_T1CTL     XREG( 0xDFE4 )
#define  X_T1CCTL0   XREG( 0xDFE5 )
#define  X_T1CCTL1   XREG( 0xDFE6 )
#define  X_T1CCTL2   XREG( 0xDFE7 )

#define  _NA_IRCON2  XREG( 0xDFE8 )
#define  X_RFIF      XREG( 0xDFE9 )
#define  X_T4CNT     XREG( 0xDFEA )
#define  X_T4CTL     XREG( 0xDFEB )
#define  X_T4CCTL0   XREG( 0xDFEC )
#define  X_T4CC0     XREG( 0xDFED )
#define  X_T4CCTL1   XREG( 0xDFEE )
#define  X_T4CC1     XREG( 0xDFEF )

#define  _NA_B       XREG( 0xDFF0 )
#define  X_PERCFG    XREG( 0xDFF1 )
#define  X_ADCCFG    XREG( 0xDFF2 )
#define  X_P0SEL     XREG( 0xDFF3 )
#define  X_P1SEL     XREG( 0xDFF4 )
#define  X_P2SEL     XREG( 0xDFF5 )
#define  X_P1INP     XREG( 0xDFF6 )
#define  X_P2INP     XREG( 0xDFF7 )

#define  X_U1CSR     XREG( 0xDFF8 )
#define  X_U1DBUF    XREG( 0xDFF9 )
#define  X_U1BAUD    XREG( 0xDFFA )
#define  X_U1UCR     XREG( 0xDFFB )
#define  X_U1GCR     XREG( 0xDFFC )
#define  X_P0DIR     XREG( 0xDFFD )
#define  X_P1DIR     XREG( 0xDFFE )
#define  X_P2DIR     XREG( 0xDFFF )

/*********************************************************************************************************/
//--------------------自己加的 Command Strobe
// Command Strobes
//------------------------------------------------------------------------------------------------------
#define SFSTXON()     do{RFST = 0x00;}while(0)
#define SCAL()        do{RFST = 0x01;}while(0)
#define SRX()         do{RFST = 0x02;}while(0)
#define STX()         do{RFST = 0x03;}while(0)
#define SIDLE()       do{RFST = 0x04;}while(0)
#define SAFC()        do{RFST = 0x05;}while(0)
#define SNOP()        do{RFST = 0xFF;}while(0)

//--------------------RIRF各位
// RF interrupt flags
#define IRQ_TXUNF           0x80
#define IRQ_RXOVF           0x40
#define IRQ_TIMEOUT         0x20
#define IRQ_DONE            0x10
#define IRQ_CS              0x08
#define IRQ_PQT             0x04
#define IRQ_CCA             0x02
#define IRQ_SFD             0x01

// Macro for setting the main clock oscillator source,
//turns off the clock source not used
//changing to XOSC will take approx 150 us
#define SET_MAIN_CLOCK_SOURCE(source) /
   do {                               /
      if(source) {                    /
        CLKCON |= 0x40;               /
        while(!HIGH_FREQUENCY_RC_OSC_STABLE); /
        SLEEP |= 0x04;                /
      }                               /
      else {                          /
        SLEEP &= ~0x04;               /
        while(!XOSC_STABLE);          /
        asm("NOP");                   /
        CLKCON &= ~0x47;              /
        SLEEP |= 0x04;                /
      }                               /
   }while (0)

#define  TEST2       XREG( 0xDF23 )  /*  Various test settings                               */
#define  TEST1       XREG( 0xDF24 )  /*  Various test settings                               */
#define  TEST0       XREG( 0xDF25 )  /*  Various test settings  

/**************************************************************************************************
 */
#endif


 

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
本人非专业人士,只是一个小小程序员,arduino纯属爱好,所发文章仅限于本人智商,如有问题,请大家指正。 近期对智能家居比较敢兴趣,其中存在几个无线传输的模块,起初选用的2.4G的nRL24L01模块,那个东西真是折腾死人,弄了一个星期都没找到问题点。最后在收拾元件箱子的时候,发现一套以前买的433Mhz模块,就想干脆用这个吧。在各种方式的search,找到了一个lib - RCSwitch,看了例子还比较好用,可以传输24bit的值。立刻装上测试。 315\433射频模块介绍: 当发射电压为3V时,空旷地传输距离约20~50米,发射功率较小,当电压5V时约100~200米,当电压9V时约300~500米,当发射电压为12V时,为最佳工作电压,具有较好的发射效果,发射电流约60毫安,空旷地传输距离700~800米,发射功率约500毫瓦。外接天线:10cm(发射模块天线:10cm,接收模块天线:30cm)多芯或单芯普通导线。 在实际测试中,随便接了跟电线,传输能达到5米,无丢包现象。这个射频模块的穿墙效果,应该会比2.4G的好很多。我家里以前一套315Mhz的报警器,全屋传输无压力。 接线很简单,只有三个脚,两个是电源,一个是数据。 发射端 VCC GND DATA- arduino 10脚(可以变更,在代码中调整) 接收端 VCC GND DATA- arduino 2脚(使用终端2则使用3脚,在代码中调整) 程序使用RCSwitch附带示例修改,传感器值使用随机数替代。 传输思路是将24bit的值分开,前12位为传感器ID,后12位为传感器值,12bit,可以到4096,应该够用了。 其他的控制编码器的例子还没有试,下次测试好了再来。 说明: 还忘了一个重要的东西,在lib中有个代码需要修改,不然会接受到4个重复的值。由于本人对中断不是很熟悉,不知道4个重复值造成的原因,只是测试出改了一个值,请各位大师给予解答。 [pre lang="arduino" line="1"]void RCSwitch::handleInterrupt() { if (repeatCount == 6) { // 需要将 2改为 6repeatCount == 2 if (receiveProtocol1(changeCount) == false){ if (receiveProtocol2(changeCount) == false){ if (receiveProtocol3(changeCount) == false){ //failed } } } repeatCount = 0; } }[/pre] RF射频模块发射端程序部分截图: RF射频模块接收端程序部分截图:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值