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

📄 nrf2401a.c

📁 PIC MCU操作nRF2401A通道1的C代码,可以在PICC1618 C18C30上移植使用.
💻 C
字号:
/************************************************ Copyright (c) 2006,成都酷安科技有限公司* All rights reserved.** 文件名称:nRF2401A.c* 文件标识:无* 摘    要:nRF2401A驱动程序,本文件适用于PIC系*		    列MCU使用HITACH编译器使用** 当前版本:1.0* 作    者:税超* 完成日期:2006年8月20日** 取代版本:无* 原 作 者:无* 完成日期:无***********************************************/	#include "nRF2401A.h"/******************************************2401A单字节数据传输写入函数WriteByte2401A()  作用:向2401A写入单字节数据  入口:待写入的一字节数据  出口:无*******************************************/	void WriteByte2401A(unsigned char data)	{	 unsigned char cnt;	 RF_DAT_T=0;	//数据端口方向设置	 for(cnt=8;cnt>0;cnt--)		{		 if((data&0x80)>0)			{RF_DAT=1;}		 else			{RF_DAT=0;}		 asm("nop");		 RF_CLK1=1;		 asm("nop");		 RF_CLK1=0;		 data<<=1;		}	}/******************************************2401A单字节数据读取函数ReadByte2401A()  作用:从2401A中读取单字节数据  入口:无  出口:读取的单字节数据*******************************************/	unsigned char ReadByte2401A(void)	{	 unsigned char cnt,data;	 RF_DAT_T=1;	//数据端口方向设置	 data=0;	 for(cnt=8;cnt>0;cnt--)		{		 data<<=1;		 if(RF_DAT)			{data|=0x01;}		 else			{data&=0xfe;}		 asm("nop");		 RF_CLK1=1;		 asm("nop");		 RF_CLK1=0;		}	 return(data);	}/******************************************2401A运行模式设置函数RunMode()  作用:设置芯片为睡眠模式  入口:无  出口:无*******************************************/	void RunMode(void)	{	 RF_PM=1;	 RF_CS=0;	 RF_CE=1;	}/******************************************2401A配置模式设置函数ConfigMode()  作用:设置芯片为睡眠模式  入口:无  出口:无*******************************************/	void ConfigMode(void)	{	 RF_PM=1;	 RF_CE=0;	 RF_CS=1;	 	}/******************************************2401A睡眠模式设置函数SleepMode()  作用:设置芯片为睡眠模式  入口:无  出口:无*******************************************/	void SleepMode(void)	{	 RF_PM=1;	 RF_CE=0;	 RF_CS=0;	 	}/******************************************2401A关机模式设置函数PowOffMode()  作用:设置芯片为关机模式  入口:无  出口:无*******************************************/	void PowOffMode(void)	{	 RF_PM=0;	 RF_CE=0;	 RF_CS=0;	 	}/******************************************2401A发送模式设置函数TX_Mode()  作用:设置芯片为发送模式  入口:无  出口:无*******************************************/	void TX_Mode(void)	{	//进入配置模式	 ConfigMode();	//配置参数	 WriteByte2401A(FRE_TX_CODE);	//进入收发模式	 RunMode();	 	}/******************************************2401A接收模式设置函数RX_Mode()  作用:设置芯片为发送模式  入口:无  出口:无*******************************************/	void RX_Mode(void)	{	//进入配置模式	 ConfigMode();	//配置参数	 WriteByte2401A(FRE_RX_CODE);	//进入收发模式	 RunMode();	 	 	}/******************************************2401A初始化函数Init2401A()  作用:初始化2401A  入口:无  出口:无*******************************************/	void Init2401A(void)	{	 unsigned int cnt;	//设置端口	 RF_CLK1=0;	 RF_DAT=0;	 RF_PM_T=0;	 RF_CE_T=0;	 RF_CS_T=0;	 RF_CLK1_T=0;	 RF_DR1_T=1;
	 RF_DAT_T=0;	 SleepMode();	 for(cnt=500;cnt>0;cnt--);	//延时等待上电	 ConfigMode();	//进入配置模式	 WriteByte2401A(DATA2_W_CODE);	 WriteByte2401A(DATA1_W_CODE);	 WriteByte2401A(C2_ADD_CODE0);	 WriteByte2401A(C2_ADD_CODE1);	 WriteByte2401A(C2_ADD_CODE2);	 WriteByte2401A(C2_ADD_CODE3);	 WriteByte2401A(C2_ADD_CODE4);	 WriteByte2401A(C1_ADD_CODE0);	 WriteByte2401A(C1_ADD_CODE1);	 WriteByte2401A(C1_ADD_CODE2);	 WriteByte2401A(C1_ADD_CODE3);	 WriteByte2401A(C1_ADD_CODE4);	 WriteByte2401A(ADD_W_CRC_CODE);	 WriteByte2401A(RF_SET_CODE);	 WriteByte2401A(FRE_RX_CODE);
	 SleepMode();	}/******************************************2401A 数据写入函数WriteData()  作用:向2401A写入发射数据  入口:无  出口:无*******************************************/	void WriteData(void)	{	 unsigned char cnt;	 TX_Mode();
	 RF_CE=1;	//发送地址	 switch(ADDRSIZE)
		{
		 case 5: WriteByte2401A(TX_ADDR_CODE0);
		 case 4: WriteByte2401A(TX_ADDR_CODE1);
		 case 3: WriteByte2401A(TX_ADDR_CODE2);
		 case 2: WriteByte2401A(TX_ADDR_CODE3);
		 case 1: WriteByte2401A(TX_ADDR_CODE4);
		 default: ;
		}	 //发送数据	 for(cnt=0;cnt<RFDATASIZE;cnt++)		{WriteByte2401A(RF_TX_Buff[cnt]);}	 //启动发送
	 RF_CE=0;	 SleepMode();	}/******************************************2401A 数据读入读取函数ReadData()  作用:从2401A中读出接收数据  入口:无  出口:1.接收的数据存放于接收缓冲区		2.返回非0接收正常,0接收错误*******************************************/	unsigned char ReadData(void)	{	 unsigned char cnt;	 if(RF_DR1)		{		 for(cnt=0;cnt<RFDATASIZE;cnt++)			{RF_RX_Buff[cnt]=ReadByte2401A();}		 return(1);		}	 else		return(0);	}

⌨️ 快捷键说明

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