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

📄 nrf905用spi读写数据至ia4421.c

📁 NRF905用SPI读写数据至Ia4421
💻 C
📖 第 1 页 / 共 2 页
字号:
      SSPSTAT=0XC0;      //在输出数据中间采样输入数据SMP=1,在上升沿发送数据(SKP=0,SKE=1) 
      TRISC5=0; 
      TRISC3=0; 
      TRISC4=1; 
	} 
////////////用SPI口读写数据至NRF905////////// 
uchar SpiWriteRead(unsigned char b) 
    { 
      uchar data; 
      TRISC5=0; 
      TRISC3=0; 
      TRISC4=1; 
      //SSPIF=0; 
       
      //GIE=0; 
      SSPBUF=b; 
      while(SSPIF==0);                                                                                //死循环 
        SSPIF=0; 
      data=SSPBUF; 
      //GIE=1; 
      return(data); 
    } 
////////////用SPI口读写数据至NRF905////////// 
uchar SpiSlowWriteRead(unsigned char b) 
    { 
      uchar data; 
      TRISC5=0; 
      TRISC3=0; 
      TRISC4=1; 
      //SSPIF=0; 
       
      //GIE=0; 
      SSPBUF=b; 
      while(SSPIF==0);                                                                                //死循环 
        SSPIF=0; 
      data=SSPBUF; 
      //GIE=1; 
      return(data); 
    } 
void Int_Init(void) 
   { TRISB0=1; 
     INTEDG=0;    //下降沿有效    
     INTF=0; 
     INTE=1; 
     GIE=1; 
   } 
void Set_Timer1Start(uint Limit)  //8us/s 
	{ TMR1L=Limit; 
      TMR1H=Limit>>8; 
      //TMR1L=0x23; 
      //TMR1H=0x80; 
      T1CON=0X30;      //1:8  
      PEIE=1;                                       
      TMR1ON=1; 
      TMR1IF=0; 
      TMR1IE=1;         
	} 
//=============================================================================================== 
 
void Set_Timer1(uint Limit)  //8us/s 
	{ TMR1L=Limit; 
      TMR1H=Limit>>8; 
      //TMR1L=0x23; 
      //TMR1H=0x80; 
      T1CON=0X30;      //1:8  
      PEIE=1;                                       
      TMR1ON=1; 
      TMR1IF=0; 
      TMR1IE=1;         
	} 
//=============================================================================================== 
 
void Turn_Off_Timer1(void) 
	{ TMR1ON=0; 
      TMR1IF=0; 
      TMR1IE=0;  
	} 
//=============================================================================================== 
 
void Enable_IntExt(void) 
   { TRISB0=1; 
     INTEDG=0;    //下降沿有效    
     INTF=0; 
     INTE=1;      
   } 
//=============================================================================================== 
void Disable_IntExt(void) 
   { INTF=0; 
     INTE=0; 
   } 
 
void Timer2_Init(void) 
  	{                                        //1ms 
     T2CON=0X0d;                             // 1:1  1:4  1*4=4; 
     TMR2=0; 
     PR2=249;                                //250*4=1ms 
     PEIE=1;      
     TMR2IF=0; 
     TMR2IE=1; 
  	} 
 
void Ia442x_SlowSpiWriteCommand(unsigned int x)	            //写指令 
   { 
	unsigned char comdata1,comdata2; 
	unsigned int a; 
	a=x; 
    TRISC0=0;                       //Ia442x_nSEL 
	Ia442x_nSEL=0; 
	comdata2=a; 
	comdata1=a>>8; 
	SpiSlowWriteRead(comdata1); 
	SpiSlowWriteRead(comdata2); 
	Ia442x_nSEL=1; 
   } 
void Ia442x_SpiWriteCommand(unsigned int x)	            //写指令 
   { 
	unsigned char comdata1,comdata2; 
	unsigned int a; 
	a=x; 
    TRISC0=0;                       //Ia442x_nSEL 
    GIE=0; 
	Ia442x_nSEL=0; 
	comdata2=a; 
	comdata1=a>>8; 
	SpiWriteRead(comdata1); 
	SpiWriteRead(comdata2);     
	Ia442x_nSEL=1; 
    GIE=1; 
   } 
unsigned int Ia442x_SlowSpiReadWord(void)	        //读状态 
   { 
	unsigned int u; 
    TRISC0=0;                                  //Ia442x_nSEL     
	Ia442x_nSEL=0; 
	u=SpiSlowWriteRead(0X00); 
	u<<=8; 
	u+=SpiSlowWriteRead(0X00); 
	Ia442x_nSEL=1; 
	return(u); 
   } 
unsigned int Ia442x_SpiReadWord(void)	        //读状态 
   { 
	unsigned int u; 
    TRISC0=0;                                  //Ia442x_nSEL 
    GIE=0; 
	Ia442x_nSEL=0; 
	u=SpiWriteRead(0X00); 
	u<<=8; 
	u+=SpiWriteRead(0X00); 
	Ia442x_nSEL=1; 
    GIE=1; 
	return(u); 
   } 
void Ia442x_Init(void)					//IA442x初始化 
{ 
	Ia442x_SpiWriteCommand(0x80d8);		//配置命令,fd-915M,dd-433M  ,15pF COMMAND:0X80XX 
	                                    //         Bit 15 14 13 12 11 10 9 8  7  6  5  4  3  2  1  0   POR 
                                        //              1  0  0  0  0  0 0 0 el ef b1 b0 x3 x2 x1 x0 8008h 
    Ia442x_SpiWriteCommand(0x8209); 
	//Ia442x_SpiWriteCommand(0x8201);		//电源管理    COMMAND:0X82XX     
	                                    //         Bit 15 14 13 12 11 10 9 8  7   6  5  4  3  2  1  0   POR 
                                        //              1  0  0  0  0  0 1 0 er ebb et es ex eb ew dc 8208h 
	Ia442x_SpiWriteCommand(Frequency[Frequency_Conunter]);		//频率设置    COMMAND:0XAXXX 
	                                    //         Bit 15 14 13 12  11  10  9  8  7  6  5  4  3  2  1  0   POR 
                                        //              1  0  1  0 f11 f10 f9 f8 f7 f6 f5 f4 f3 f2 f1 f0 A680h 
	                                    //         f0 = 10 * C1 * (C2 + F/4000) [MHz]    
	                                    //          Band [MHz] C1 C2 
                                        //                  433 1 43 
                                        //                  868 2 43 
                                        //                  915 3 30 
	Ia442x_SpiWriteCommand(0xc647);		//波特率设置0xc623:9600bps  COMMAND:0XC6XX   0xc606:50kbps 
	                            	    //         Bit 15 14 13 12 11 10 9 8  7  6  5  4  3  2  1  0   POR 
                                        //              1  1  0  0  0  1 1 0 cs r6 r5 r4 r3 r2 r1 r0 C623h 
	                                    //波特率计算:BR = 10000 / 29 / (R+1) / (1+cs*7) [kbps]   
	                                    //            R= (10000 / 29 / (1+cs*7) / BR) – 1 
	Ia442x_SpiWriteCommand(0x94c0);		//接收控制  COMMAND:0X9xxx  //0x94c0--BW:67kHz  
	                                    //        Bit 15 14 13 12 11  10  9  8  7  6  5  4  3  2  1  0   POR 
                                        //             1  0  0  1  0 p16 d1 d0 i2 i1 i0 g1 g0 r2 r1 r0 9080h   
										//                                     0  0   0 
	Ia442x_SpiWriteCommand(0xc2ec);		//数据滤波  COMMAND:0Xc2xx 
                                		//        Bit 15 14 13 12 11 10 9 8  7  6 5 4 3  2  1  0   POR 
                                        //             1  1  0  0  0  0 1 0 al ml 1 s 1 f2 f1 f0 C22Ch 
	Ia442x_SpiWriteCommand(0xca81);		//FIFO COMMAND   COMMAND:0Xcaxx 
	                            		//        Bit 15 14 13 12 11 10 9 8  7  6  5  4 3  2  1  0   POR 
                                		//             1  1  0  0  1  0 1 0 f3 f2 f1 f0 0 al ff dr CA80h     
	Ia442x_SpiWriteCommand(0xc49b);		//AFC COMMAND  COMMAND:0Xc4xx 
	                                    //        Bit 15 14 13 12 11 10 9 8  7  6   5   4  3  2  1  0   POR 
                                        //             1  1  0  0  0  1 0 0 a1 a0 rl1 rl0 st fi oe en C4F7h 
	Ia442x_SpiWriteCommand(0x9810);		//TXCTRL  COMMAND:0X98xx   FSK频率偏移定在0x9810--+-30KHz,正极性调制,输出功率最大 
	                                    //        Bit 15 14 13 12 11 10 9  8  7  6  5  4 3  2  1  0   POR 
                                        //             1  0  0  1  1  0 0 mp m3 m2 m1 m0 0 p2 p1 p0 9800h 
	                                    //        fout = f0 + (-1)SIGN * (M + 1) * (15 kHz) 
	//Ia442x_SpiWriteCommand(0xffff);		//WAKEUP  COMMAND:0Xfxxx 
	                                    //        Bit 15 14 13 12 11 10  9  8  7  6  5  4  3  2  1  0   POR 
                                        //             1  1  1 r4 r3 r2 r1 r0 m7 m6 m5 m4 m3 m2 m1 m0 E196h 
	                                    //        Twake-up = M * 2R [ms] 
    //	Ia442x_SpiWriteCommand(0xc80e);		//间歇工作 
    //	Ia442x_SpiWriteCommand(0xc060);		//时钟输出 
    //Ia442x_SpiWriteCommand(0xca83); 
} 








⌨️ 快捷键说明

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