⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 demorx.c

📁 无线龙ZigBee模块CC1010的接收-发送程序。
💻 C
字号:


#include <chipcon/cc1010eb.h>
#include <chipcon/cul.h>
#include <stdlib.h> 
#include <hal.h>


#define INT8U unsigned char
#define INT16U unsigned char




#define TEST_DATA_LENGTH    128

#define MY_ADDRESS          3
#define DEST_ADDRESS        3


void SendUART0(INT8U ch);
byte halTimer1Usage;
SPP_SETTINGS xdata sppSettings;

/*****************************************************************************
	主程序
*****************************************************************************/
void main() {

	INT8U ii;
    INT8U n;
    SPP_RX_INFO xdata RXI;
    SPP_TX_INFO xdata TXI;
    byte xdata pRXData[TEST_DATA_LENGTH];
    byte xdata pTXData[TEST_DATA_LENGTH];


#ifdef FREQ868

// X-tal frequency: 14.745600 MHz
// RF frequency A: 868.277200 MHz	Rx
// RF frequency B: 868.277200 MHz	Tx
// RX Mode: Low side LO
// Frequency separation: 64 kHz
// Data rate: 19.2 kBaud
// Data Format: NRZ
// RF output power: 4 dBm
// IF/RSSI: RSSI Enabled

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = {
    0xA3, 0x2F, 0x15,    // Modem 0, 1 and 2
    0x75, 0xA0, 0x00,    // Freq A
    0x58, 0x32, 0x8D,    // Freq B
    0x01, 0xAB,          // FSEP 1 and 0
    0x40,                // PLL_RX
    0x30,                // PLL_TX
    0x6C,                // CURRENT_RX
    0xF3,                // CURRENT_TX
    0x32,                // FREND
    0xFF,                // PA_POW
    0x00,                // MATCH
    0x00,                // PRESCALER
    };

#endif

#ifdef FREQ915

// X-tal frequency: 14.745600 MHz
// RF frequency A: 915.027455 MHz	Rx
// RF frequency B: 915.027455 MHz	Tx
// RX Mode: Low side LO
// Frequency separation: 64 kHz
// Data rate: 19.2 kBaud
// Data Format: NRZ
// RF output power: 4 dBm
// IF/RSSI: RSSI Enabled

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = {
    0xA3, 0x2F, 0x15,    // Modem 0, 1 and 2
    0xAA, 0x80, 0x00,    // Freq A
    0x5C, 0xF4, 0x02,    // Freq B
    0x01, 0xAB,          // FSEP 1 and 0
    0x58,                // PLL_RX
    0x30,                // PLL_TX
    0x6C,                // CURRENT_RX
    0xF3,                // CURRENT_TX
    0x32,                // FREND
    0xFF,                // PA_POW
    0x00,                // MATCH
    0x00,                // PRESCALER
    };


#endif

#ifdef FREQ433


// X-tal frequency: 14.745600 MHz
// RF frequency A: 433.302000 MHz	Rx
// RF frequency B: 433.302000 MHz	Tx
// RX Mode: Low side LO
// Frequency separation: 64 kHz
// Data rate: 19.2 kBaud
// Data Format: NRZ
// RF output power: 10 dBm
// IF/RSSI: RSSI Enabled

RF_RXTXPAIR_SETTINGS code RF_SETTINGS = {
    0xA3, 0x2F, 0x0E,    // Modem 0, 1 and 2
    0x58, 0x00, 0x00,    // Freq A
    0x41, 0xFC, 0x9C,    // Freq B
    0x02, 0x80,          // FSEP 1 and 0
    0x60,                // PLL_RX
    0x48,                // PLL_TX
    0x44,                // CURRENT_RX
    0x81,                // CURRENT_TX
    0x0A,                // FREND
    0xFF,                // PA_POW
    0xC0,                // MATCH
    0x00,                // PRESCALER
    };

#endif


    // Calibration data
    RF_RXTXPAIR_CALDATA xdata RF_CALDATA;


    // Startup macros for speed and low power consumption
    MEM_NO_WAIT_STATES();
    FLASH_SET_POWER_MODE(FLASH_STANDBY_BETWEEN_READS);
    
    
    // Initialize peripherals
    WDT_ENABLE(FALSE);
    RLED_OE(TRUE);
    YLED_OE(TRUE);
    GLED_OE(TRUE);
    BLED_OE(TRUE);

    // Set optimum settings for speed and low power consumption
    MEM_NO_WAIT_STATES();
    FLASH_SET_POWER_MODE(FLASH_STANDBY_BETWEEN_READS);

	UART0_SETUP(9600, CC1010EB_CLKFREQ, UART_NO_PARITY | UART_RX_TX | UART_ISR);

    // Local settings
    sppSettings.myAddress = MY_ADDRESS;
    sppSettings.rxTimeout = 30;
    sppSettings.txAckTimeout = 2;
    sppSettings.txAttempts = 4;
    sppSettings.txPreambleByteCount = 7;

    // RF setup
    sppSetupRF(&RF_SETTINGS, &RF_CALDATA, CC1010EB_CLKFREQ, TRUE);

    // Prepare TX data
    srand(0x1234);
    for (n = 0; n < TEST_DATA_LENGTH; n++) { 
        pTXData[n] = rand();
    }

    TXI.flags = 0x00;
    
    while (TRUE) {				//进入接收循环


            // 准备接收
       RXI.pDataBuffer = pRXData;
       RXI.maxDataLen = TEST_DATA_LENGTH;			
       if (sppReceive(&RXI) == SPP_RX_STARTED) {
               
           do { /* nothing */ } while (SPP_STATUS() != SPP_IDLE_MODE);
                if (RXI.status == SPP_RX_TIMEOUT) {
                    YLED = LED_ON;
                }
			    else if (RXI.status == SPP_RX_TOO_LONG) {
                    RLED = LED_ON;
                }
			    else if (RXI.status == SPP_RX_FINISHED) {
                    GLED = LED_ON;
					for(ii = 0 ; ii < TEST_DATA_LENGTH ; ii++){
						SendUART0(pRXData[ii]);

					}                    
					if (RXI.flags & SPP_SEQUENCE_BIT) {
							BLED = LED_ON;
				}
            } 
        }        

        // Wait, then turn off LEDs
        halWait(20, CC1010EB_CLKFREQ);
        GLED = LED_OFF;
        RLED = LED_OFF;
        YLED = LED_OFF;
		BLED = LED_OFF;
    }
} // main
//串口发送程序
void SendUART0(INT8U ch){
	ES = 0;
	SBUF0 = ch;
	while(!TI);
	TI = 0;
	ES = 1;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -