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

📄 nrf2401_t.c

📁 PTR4000的MSP430F149的发送程序
💻 C
字号:
#include "NRF2401_T.H"


uchar 	TX_InitData[15]=                   //初始化2401用的数组 先发送高位
{
	0xD0,		//TX receiver 2, Datalength   0bit( 0 byte )
	0xD0,		//TX receiver 1, Datalength 208bit(26 bytes)
	0x00, 		//TX receiver 2 address   High byte             
	0xCC, 		//TX receiver 2 address   High byte
	0xcc, 		//TX receiver 2 address   High byte
	0xcc, 		//TX receiver 2 address   High byte
	0xcc, 		//TX receiver 2 address   High byte
	0x00, 		//TX receiver 1 address   High byte
	0xCC, 		//TX receiver 1 address   High byte
	0xcc,		//TX receiver 1 address   High byte
	0xcc,		//TX receiver 1 address   Low byte
	0xcc,		//TX receiver 1 address   Low byte
	//0x82,	        //this is for 32 bit address(100000), 16bit CRC(Bit1=1), CRC disable(Bit0=1 for ES chip
	0x83,		//this is for 32 bit address(100000), 16bit CRC(Bit1=1), CRC enable(Bit0=1) for final chip	
	//0x4f,		//One receiver(Bit7=0), shock Mode(Bit6=1), Datarate(Bit5=0) 250K, crystal(16M), RF Power(0dbm)
	0x6c,	        //One receiver(Bit7=0), shock Mode(Bit6=1), Datarate(Bit5=1) 1M, crystal(16M), RF Power(-20dbm)
	0x00		//Channel Number(0000010), RX/TX mode(1/RX,0/TX)  
};

/*************************************InitnRF2401 START******************************/		
void TX_InitnRF2401(unsigned char channel)
{
	unsigned char tempi;
	unsigned char i,j;
	TX_OperateIO_DIR|=TX_CE+TX_CLK1+TX_DATA1+TX_CS+TX_PWR;
	TX_OperateIO_DIR&=~TX_DR1;
	TX_OperateIES &= ~ TX_DR1;    //上升沿触发
	TX_OperateIE  |=   TX_DR1;    //中断使能
	TX_OperateIO &=~TX_CE;				        //TX_CE=0;
	TX_OperateIO |= TX_CS;					//配置模式,TX_CS=1
	TX_Delay5();
	TX_InitData[14] =channel * Frequencytimes*2;      //左移一位 Ferquencytimesad +
	for (i=0;i<15;i++)
	{
		tempi=TX_InitData[i];
		for (j=0;j<8;j++)
		{
			if (tempi&0x80)	                        //Check if first bit is HIGH
				TX_OperateIO|=TX_DATA1;		//Set Data high  Data=1
			else
				TX_OperateIO&=~TX_DATA1;		//Set Data low   Data=0
			tempi=tempi<<1;	//Left Shift to get next bit
			TX_DoSPIClock();	//Call "DoClock" to generate a clock pulse
		}
	}		
	TX_OperateIO &=~TX_CS   ;				//Disable TX_CS--standby mode	TX_CS=0
	TX_OperateIO &=~TX_DATA1;				//Set Data low DATA=0
	TX_OperateIO |=TX_CE;            //TX_CE=1   	
	TX_delay200();     	
}
/*************************************InitnRF2401 END *******************************/
/*************************************DoSPIClock START******************************/
void TX_DoSPIClock(void)
{
	TX_OperateIO |=TX_CLK1;         //TX_CLK1=1
	_NOP();
	_NOP();	
	TX_OperateIO &=~TX_CLK1;        //TX_CLK1=0
}	

/*************************************DoSPIClock END *******************************/

/*************************************nRF2401_ON START******************************/
void TX_nRF2401_ON(void)
{
	TX_OperateIO |=TX_PWR;        //TX_PWR=1
	TX_delay200();
}
/*************************************nRF2401_ON END *******************************/
/*************************************nRF2401_OFF START*****************************/
void TX_nRF2401_OFF(void)
{
	TX_OperateIO &=~ TX_PWR;			// Set Power_Up low	
}
/*************************************nRF2401_OFF END ******************************/
/*************************************TXEN_HIGH START ******************************/
void TX_RXEN_HIGH(void)
{
	TX_OperateIO &=~ TX_CE   ;		//TX_CE=0;
	TX_OperateIO |=  TX_CS   ;		//配置模式,TX_CS=1
	TX_Delay5();
	TX_OperateIO |=  TX_DATA1;		//Set Data high  Data=1
	TX_DoSPIClock(); 		        //Make one SPIClock cycle
	TX_OperateIO &=~ TX_CS   ;		//Disable TX_CS--standby mode	TX_CS=0
	TX_OperateIO |=  TX_CE   ;            //TX_CE=1
   	TX_OperateIO &=~TX_DATA1;				//Set Data low DATA=0
	TX_Delay10();
}
/*************************************TXEN_HIGH  END *******************************/
/*************************************TXEN_HIGH START ******************************/		
void TX_TXEN_HIGH(void)
{
	TX_OperateIO &=~ TX_CE   ;		//TX_CE=0;	
	TX_OperateIO |=  TX_CS   ;		//配置模式,TX_CS=1
	TX_Delay5();
	TX_OperateIO &=~ TX_DATA1;		//Set Data low   Data=0
	TX_DoSPIClock();		        //Make one SPIClock cycle
	TX_OperateIO &=~ TX_CS   ;		//Disable TX_CS--standby mode	TX_CS=0
	TX_OperateIO |=  TX_CE   ;            //TX_CE=1
   	TX_OperateIO &=~TX_DATA1;				//Set Data low DATA=0
	TX_Delay10();
}

/*************************************TXEN_HIGH  END *******************************/
/*************************************delay5   START ******************************/
void TX_Delay5(void)
{
	uchar y;
	for(y=0;y<35;y++)
	{
		_NOP();
	}	
}
/*************************************delay5    END *******************************/
/*************************************delay10   START ******************************/
void TX_Delay10(void)
{
	uchar  x;	
	uchar y;
	for(y=0;y<150;y++)
	{
		
		for(x=0;x<8;x++)
		{
			_NOP();
			_NOP();
		}
	}	
}
/*************************************delay10    END *******************************/
/*************************************delay100   START *****************************/	
void TX_delay200(void)
{
	uchar  x;	
	uchar y;
	for(y=0;y<120;y++)
	{
		for(x=0;x<200;x++)
		{		
			_NOP();
		}
	}	
}
/*************************************delay100   END *******************************/
/************************************* ShockBurst   START *******************************/
void TX_Trans(unsigned char *pt,unsigned char Length)
{
	unsigned char tempi;
	unsigned char i,j;
	TX_OperateIO &=~ TX_CS   ;		//Disable TX_CS--standby mode	TX_CS=0
	TX_OperateIO |=  TX_CE   ;            //TX_CE=1
	TX_OperateIO &=~TX_CLK1;
	TX_OperateIO_DIR  |= TX_DATA1;                //set Data Direction OUT 
	TX_Delay5();
	for (i=0;i<Length;i++)
	{
		tempi=*pt;
		for (j=0;j<8;j++)
		{
			if (tempi&0x80)	//Check if first bit is HIGH
				TX_OperateIO |=   TX_DATA1;		//Set Data high  Data=1
			else
				TX_OperateIO &=~  TX_DATA1;		//Set Data low  Data=0
			tempi=tempi<<1;	//Left Shift to get next bit
			TX_DoSPIClock();			
		}
		pt++;
	}		
	TX_OperateIO &=~ TX_CE   ;		//TX_CE=0;		
	TX_OperateIO &=~  TX_DATA1;		//Set Data low  Data=0	
	TX_Delay10();
}
/************************************* ShockBurst     END *********************************/
/************************************* ReceiveShock START *********************************/
void TX_ReceiveShock(unsigned char *pt,unsigned char Length)
{
	unsigned char Temp=0;
	unsigned char i,j;
	TX_OperateIO &=~  TX_DATA1;		//Set Data low  Data=0	
	TX_OperateIO_DIR&=~  TX_DATA1;                //set Data Direction IN  
	for (i=0;i<Length;i++)
	{
		for(j=0;j<8;j++)
		{
			Temp=Temp<<1;	                        //shift left to receive next bit
			TX_OperateIO |=  TX_CLK1;			//set clock high clk=1
			_NOP();	
			_NOP();		                        //wait one clk cycle
		     if(TX_OperateIO_IN&TX_DATA1)		        //check if Data=high		
				Temp+=0x01;	                //yes - set bit high
			TX_OperateIO &=~  TX_CLK1;			//set clock low clk=0
			_NOP();		                        //wait one clk cycle
		}
		_NOP();
		*pt=Temp;
		pt++;		
	 }
	 TX_OperateIO_DIR |=  TX_DATA1;                //set Data Direction IN 
	 TX_OperateIO &=~  TX_DATA1;		//Set Data low  Data=0	
}
/************************************* ReceiveShock END *********************************/	


⌨️ 快捷键说明

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