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

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

📁 NRF905用SPI读写数据至Ia4421
💻 C
📖 第 1 页 / 共 2 页
字号:
////////////初始化SPI////////////////    
void init_spi(void)   
    { PIR1=0;   
      SSPCON=0X21;       //同步串行口使能SSPEN=1(SPI方式和I2C方式),时钟低电平为空闲状态CKP=0,FOSC/16    
      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);    
}   

////////////初始化SPI//////////////// 
void init_spi(void) 
	{ PIR1=0; 
      SSPCON=0X21;       //同步串行口使能SSPEN=1(SPI方式和I2C方式),时钟低电平为空闲状态CKP=0,FOSC/16 

⌨️ 快捷键说明

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