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

📄 ia4421.c

📁 射频模块IA4421接受发送程序! 已经在产品上得到验证
💻 C
字号:
////////////初始化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);
}

⌨️ 快捷键说明

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