#include
#include///*************************************************************引脚衔接宏界说*************************************************************/#define DATA LATBbits.LATB0//频道1收发数据端#define CLK1 LATBbits.LATB1//频道1时钟#define DR1 LATBbits.LATB2//频道1数据已准备好#define CS LATBbits.LATB3//装备形式片选#define CE LATBbits.LATB4//收发状况操控#define PWR_UP LATBbits.LATB5//芯片唤醒///*************************************************************状况切换宏界说*************************************************************/#define NRF2401_Mode_RT() PWR_UP=1;CE=1;CS=0;//收发#define NRF2401_Mode_Deploy() PWR_UP=1;CE=0;CS=1;//装备#define NRF2401_Mode_Free() PWR_UP=1;CE=0;CS=0;//闲暇#define NRF2401_Mode_Off() PWR_UP=0//关机///*************************************************************测试用数据*************************************************************/const unsigned char Dat[10]={1,2,3,4,5,6,7,8,9,10};///*************************************************************NRF2401装备数据备 注:当芯片未掉电,且需求切换收发方法时仅需求发送一个字节*************************************************************/const unsigned char NRF2401_Deploy_Data[15]={0x50,//DATA2_W通道二数据包长度80bit(10byte),DATA2_W<=256-ADDR_W-CRC(bit)0x50,//DATA2_W通道一数据包长度,DATA1_W<=256-ADDR_W-CRC(bit)0x00,//通道二地址(A24),ADDR20x00,//通道二地址(A23)0x00,//通道二地址(A22)0x00,//通道二地址(A21)0x02,//通道二地址(A20)0x00,//通道一地址(A14),ADDR1=0x00000000ff0x00,//通道一地址(A13)0x00,//通道一地址(A12)0x00,//通道一地址(A11)0xff,//通道一地址(A10)0x83,//b7~b2:接纳地址宽度32位,(和发送端共同,不超越40bit),ADDR_W//b1~b0:16CRC形式(01-8bit;11-16bit;00/10-no);b1,CRC_L;b0,CRC_EN0x6F,//b15:通道二制止(0-通道1;1-通道1和2),RX2_EN//b14:通讯形式为ShockBurat(0-Direct形式,1-ShockBurst形式),CM//b13:通讯速率为1M(0-250Kbps;1-1Mbps),RFDR_SB//b12~b10:晶振挑选16M(000-4M;001-8M;010-12M;011-16M),XO_F//b9~b8:发射功率0db(00,01,10,11>-20db,-10db,-5db,0db),RF_PWR0x05 //b7~b1:频道挑选4,RF_CH#//b0:装备成收形式(0-发送;1-接纳),RXEN};///*************************************************************IO初始化函数函数称号:Init_IOforNRF2401();输入参数:无输出参数:无备 注:无*************************************************************/void Init_IOforNRF2401(void){TRISBbits.TRISB0=0;//设置DATA引脚为输出TRISBbits.TRISB1=0;//设置CLK引脚为输出TRISBbits.TRISB2=1;//设置DR1引脚为输入TRISBbits.TRISB3=0;//设置CS引脚为输出TRISBbits.TRISB4=0;//设置CE引脚为输出TRISBbits.TRISB5=0;//设置PWR_UP引脚为输出}///*************************************************************数据串行发送函数函数称号:NRF2401_DataSerialSend();输入参数:待发送数据块首地址,待发送数据个数输出参数:无备 注:调用前要对NRF2401的作业形式做相应的设定*************************************************************/void NRF2401_DataSerialSend(unsigned char *p,unsigned char n){unsigned char i,j;//unsigned char d;//TRISBbits.TRISB0=0;//设置DATA引脚为输出TRISBbits.TRISB1=0;//设置CLK引脚为输出//CLK1=0;for(i=0;i500nS}else{DATA=0;}//Nop();// Nop();CLK1=1;//最短时钟宽度500nSd<<=1;//Nop();// Nop();CLK1=0;}}DATA=0;//CLK1=0;}///*************************************************************数据串行读取函数函数称号:NRF2401_DataSerialRead();输入参数:接纳数觉存储区首地址,接纳数觉个数输出参数:接纳是否与设置符合备 注:调用前要对NRF2401的作业形式做相应的设定*************************************************************/unsigned char NRF2401_DataSerialRead(unsigned char *p,unsigned char n){unsigned char i,j;unsigned char d;TRISBbits.TRISB0=1;//设置DATA引脚为输入TRISBbits.TRISB1=0;//设置CLK引脚为输出CLK1=0;for(i=0;i
声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/255313.html