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

📄 demotx.c

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


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

#define TEST_DATA_LENGTH    128			//包长度
#define INT8U unsigned char

#define MY_ADDRESS          3			//我的地址
#define DEST_ADDRESS        3		//目标地址0
void DelayUs(unsigned int dd);
void SendUART0(INT8U ch);

SPP_SETTINGS xdata sppSettings;

unsigned int TIME0 = 0;				//定时器

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

//    int n;
	unsigned int ii;
	    SPP_RX_INFO xdata RXI;
    SPP_TX_INFO xdata TXI;
    byte xdata pRXData[TEST_DATA_LENGTH];
    byte xdata pTXData[TEST_DATA_LENGTH] = {"成都无线龙通讯科技有限责任公司\nCC1010仿真测试软件\n"};


#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);


	EA = 1;
	ET0 = 1;
	TH0 = 0x10;
	TL0 = 0x00;
	TR0 = 1;
	TIME0 = 0;
	
	while(TIME0 < 200){			//闪动10秒

		halWait(500, CC1010EB_CLKFREQ);			//延时	
		RLED = LED_OFF;
		halWait(500, CC1010EB_CLKFREQ);			//延时	
		RLED = LED_ON;
	}

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

    // 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;

    // Test loop:
  
  
            // 准备传送
	TIME0 = 0;

	while(TIME0 < 2400){				//发送30秒

		TXI.destination = DEST_ADDRESS;
        TXI.flags &= ~SPP_ACK_REQ;			//不要求回送
        TXI.pDataBuffer = pTXData;
        TXI.dataLen = TEST_DATA_LENGTH;

        if (sppSend(&TXI) == SPP_TX_STARTED) {
          
	        while (SPP_STATUS() != SPP_IDLE_MODE);		//等待

	        if (TXI.status == SPP_TX_ACK_INVALID) {

	              //RLED = LED_ON;
    	    }
	    	else if (TXI.status == SPP_TX_ACK_TIMEOUT) {

			  	 // YLED = LED_ON;
	        } else if (TXI.status == SPP_TX_FINISHED) {

                  YLED = LED_ON;
            }
       } 
		
        halWait(20, CC1010EB_CLKFREQ);			//延时
       // GLED = LED_OFF;							//关闭指示灯
       // RLED = LED_OFF;
        YLED = LED_OFF;
	//	BLED = LED_OFF;
	 }
	YLED = LED_ON;
	  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;

	}   
} 
//串口发送程序
void SendUART0(INT8U ch){
	ES = 0;
	SBUF0 = ch;
	while(!TI);
	TI = 0;
	ES = 1;
}

void init_timer0(void)  interrupt 1
{
	TIME0 += 1;
	TH0 = 0x10;
	TL0 = 0x00;
}

⌨️ 快捷键说明

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