📄 nrf905_reference_firmware.c
字号:
/************************************************************************************
* NOTICE:
* NAME: CRT905ANC.C
* USE: The nRF905 RF Module Test Board(both transmit and receive function)
* VERSION: V0.1
* MCU: AT89C2051 DIP20 (Atmel)
* CRYSTAL: 4.00MHz
* CHANNEL:
* FREQUENCY: 433MHz
* FUNCTION DESCRIPTION:
1. CRC16
2. Address length: 40Bit (5Byte)
3. Address: AA,BB,CC,DD,EE(H->L)
4. Payload length: 64Bit (8 Bytes,Max 25 Bytes)
5. Out Power: 0dBm
6. DATA RATE: 100KBps
************************************************************************************/
#include <At89x051.h>
#include <intrins.h>
//AT89C2051 pins define
#define START_SW P3_2
#define STOP_SW P3_2
#define LED1 P3_4
#define LED2 P3_3
#define TRX_CE P1_3
#define TXEN P1_2
#define PWR_UP P1_1
#define AM P1_0
#define CD P3_7
#define MISO P1_6
#define DR P3_5
#define SCK P1_7
#define MOSI P1_5
#define CSN P1_4
//The const nRF905 config register define
const unsigned char config_reg_buf[10]={
0x4c,//0b01001100, //CH_NO[7:0]=76,RF freq=422.4+76/10=430MHz
0x0c,//0b00001100, //bit[7:6]:not used/bit5:AUTO_RETRAN='0'
//bit4:RX_RED_PWR='0'/bit[3:2]:PA_PWR='11' +10dBm
//bit1:HFREQ_PLL=0,PLL=433MHz/bit0:CH_N0[8]='0'
0x44,//0b01000100, //bit7:not used/bit[6:4]:TX_AFW='100' 4Bytes
//bit3:not used/bit[2:0]:RX_AFW='100' 4Bytes
0x20,//0b00100000, //bit[7:6]:not use/bit[5:0]:RX_PW='100000' 32Bytes
0x20,//0b00100000, //bit[7:6]:not use/bit[5:0]:TX_PW='100000' 32Bytes
0xa5, //RX_ADDRESS_BYTE0=TX_ADDRESS_BYTE0
0xb5, //RX_ADDRESS_BYTE1=TX_ADDRESS_BYTE1
0xc5, //RX_ADDRESS_BYTE2=TX_ADDRESS_BYTE2
0xd5, //RX_ADDRESS_BYTE3=TX_ADDRESS_BYTE3
0xc3 // //0xc3---4M //0xdb --16m
//0b11011011 //bit7:CRC_MODE='1' CRC16/bit6:CRC_EN='1' CRC Enable
//bit[5:3]:XOF='011' 16MHz/bit[2]UP_CLK_EN='0' Disable
//bit[1:0]:UP_CLK_FRE='11' 500KHz
};
//The const nRF905 TX address register define
const unsigned char tx_address_reg_buf[4]={
0xa5, //TX_ADDRESS_BYTE0=RX_ADDRESS_BYTE0
0xb5, //TX_ADDRESS_BYTE1=RX_ADDRESS_BYTE1
0xc5, //TX_ADDRESS_BYTE2=RX_ADDRESS_BYTE2
0xd5 //TX_ADDRESS_BYTE3=RX_ADDRESS_BYTE3
};
//The address and data of TX and the data of RX buffer define
//unsigned char tx_address_buf[4];
unsigned char tx_data_buf[3]={0x41,0x0a,0x0d};
unsigned char rx_data_buf[32];
unsigned char task_switch;
void system_init();
void write_spi_one_byte(unsigned char data_buf);
unsigned char read_spi_one_byte(void);
void write_config();
void read_config();
void write_tx_payload(unsigned char tx_payload_bytes_num);
//void read_tx_payload(unsigned char tx_payload_bytes_num);
void write_tx_address(unsigned char tx_address_bytes_num);
//void read_tx_address(unsigned char tx_address_bytes_num);
void read_rx_payload(unsigned char rx_payload_bytes_num);
//void fast_channel_config(unsigned char freq_value,unsigned char ch_no_value);
void send_rx_data_to_pc(void);
void send_rf_data(void);
void transmit_mode(void);
void receive_mode(void);
void delay_ms(unsigned int delay_counter);
void main(void);
/****************************************************************************/
void Delay100ms(unsigned char x)
{
unsigned char i,j;
while(x-- != 0)
{//dog=!dog;
for (j = 0;j < 114; j++)for (i = 0;i < 88; i++){_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;
_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;
_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;_nop_() ;
_nop_() ;_nop_() ;_nop_() ;};
}
}
/*********************************************************************************
* function: myinit()
* use: initilize some normal parameter
* input parameter: none
* output parameter: none
*********************************************************************************/
void system_init()
{
unsigned char i;
delay_ms(10);
task_switch=2; //Set the test board default mode as receive mode
LED1=0; //Turn on the led indicate the system is already for receive data
PWR_UP=1;
TRX_CE=0;
TXEN=0;
CSN=1;
SCK=0;
i=0;
for(i=0;i<32;i++) //Clear the data buffer
{
rx_data_buf[i]=0;
}
write_config();
if(START_SW==0) //For the RF frequency test
{ //If the start_button is pressed during the power on
delay_ms(50);
if(START_SW==0)
{
TXEN=1;
delay_ms(1);
write_tx_address(4);
write_tx_payload(32);
TRX_CE=1;
while(1);
}
}
TMOD=0x20; //config UART rate
SCON=0x50; //19.2kbps(max 20kbps)
PCON=0x80;
TH1=0xfd;
TL1=0xfd;
TR1=1;
EA=0;
ES=0;
}
/***********************************myinit() END*************************************/
/***********************************************************************************
* function: write_spi_one_byte()
* use:
* input parameter:
* output parameter:
***********************************************************************************/
void write_spi_one_byte(unsigned char data_buf)
{
unsigned char i;
unsigned char j;
j=0x80;//0b10000000
while(j>0)
{
i=data_buf&j;
if(i==0)
{
MOSI=0;
}
else
{
MOSI=1;
}
SCK=1;
j>>=1;
SCK=0;
}
}
/**********************************************************************************/
/***********************************************************************************
* function: read_spi_one_byte()
* use:
* input parameter:
* output parameter:
***********************************************************************************/
unsigned char read_spi_one_byte(void)
{
unsigned char j;
unsigned char data_buf;
j=0x80;
while(j>0)
{
data_buf<<=1;
if(MISO==0)
{
data_buf&=0xfe;
}
else
{
data_buf|=0x01;
}
SCK=1;
j>>=1;
SCK=0;
}
return data_buf;
}
/**********************************************************************************/
/***********************************************************************************
* function: write_config()
* use:
* input parameter:
* output parameter:
***********************************************************************************/
void write_config()
{
unsigned char i;
CSN=0;
write_spi_one_byte(0x00);
i=0;
for(i=0;i<10;i++)
{
write_spi_one_byte(config_reg_buf[i]);
}
CSN=1;
}
/**********************************************************************************/
/***********************************************************************************
* function: read_config()
* use:
* input parameter:
* output parameter:
***********************************************************************************/
/*
void read_config()
{
unsigned char i;
CSN=0;
write_spi_one_byte(0x20);//0b00010000
i=0;
for(i=0;i<10;i++)
{
xxx[i]=read_spi_one_byte();
}
CSN=1;
}
/**********************************************************************************/
/***********************************************************************************
* function: write_tx_payload()
* use:
* input parameter:
* output parameter:
***********************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -