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

📄 nrf905_reference_firmware.c

📁 nRF905无线收发模块的应用
💻 C
📖 第 1 页 / 共 2 页
字号:
/************************************************************************************
*					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 + -