PTR8000发送接收驱动程序。只需在主程序中只需做小小的改动就可以

源代码在线查看: s.lst

软件大小: 33 K
上传用户: buptbaishikele
关键词: 8000 PTR 程序 发送
下载地址: 免注册下载 普通下载 VIP

相关代码

				C51 COMPILER V6.12  S                                                                      08/10/2008 11:52:12 PAGE 1   
				
				
				C51 COMPILER V6.12, COMPILATION OF MODULE S
				OBJECT MODULE PLACED IN .\s.OBJ
				COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE .\s.c DEBUG OBJECTEXTEND
				
				stmt level    source
				
				   1          //接收
				   2          /*************火箭发射点火系统***************************/
				   3          #include "reg52.h"  
				   4          void mode1(void);
				   5          void mode2(void);
				   6          void mode3(void);
				   7          void mode4(void);
				   8          void mode5(void);
				   9          void  Config905(void);     //对PTR8000进行配置
				  10          unsigned int a[8],b[8];  
				  11          unsigned int flag=0;
				  12          int i,t;
				  13           
				  14          sbit SCK = P2^5;
				  15          sbit MISO= P2^7;
				  16          sbit MOSI= P2^6;
				  17          sbit DR  = P2^1;     //数据就绪输出
				  18          sbit CSN = P2^4;     //SPI使能
				  19          sbit PWR = P2^2;     //Power Down 模式
				  20          sbit TX_EN= P2^3;    //'1'发射模式 '0'接收模式
				  21          sbit TRX_CE=P2^0;    //使能发射/接收模式
				  22          
				  23          /**********************************/
				  24          //延时大约为1S左右  
				  25          //以0.1S为单位计时 
				  26          //即 定时时间 time=t*0.1 S 
				  27          /*********************************/ 
				  28          void delay()
				  29          {
				  30   1      int i,j;
				  31   1      //for(k=0;k				  32   1      for(i=0;i				  33   1      for(j=0;j				  34   1      }
				  35          /********************************/
				  36          //任意延时
				  37          /*******************************/
				  38          void Delay(int x)
				  39          {
				  40   1           unsigned int i;
				  41   1          for(i=0;i				  42   1      }
				  43          /*******十进制数转二进制数*************************/
				  44          void fun2(int n)	
				  45          {
				  46   1      unsigned int i,t=n;
				  47   1      for(i=0;i				  48   1      {
				  49   2      a[i]=t%2;
				  50   2      t/=2;
				  51   2      }
				  52   1      }
				  53          /********************************/
				  54          //函数名:int fun22(int n)
				  55          //功能:计算2的n 次方  
				C51 COMPILER V6.12  S                                                                      08/10/2008 11:52:12 PAGE 2   
				
				  56          /********************************/
				  57          int fun22(int n)
				  58          {
				  59   1      unsigned int i;
				  60   1      int f=1;
				  61   1      for(i=0;i				  62   1      f*=2;
				  63   1      return f;
				  64   1      }
				  65          /**********将高位和低位进行交换*********************/
				  66          int fun21(void)
				  67          {
				  68   1      unsigned int  i,t;
				  69   1      int s=0;
				  70   1      for(i=0;i				  71   1      {
				  72   2      t=b[i];               //高低位进行交换      
				  73   2      b[i]=b[7-i];
				  74   2      b[7-i]=t;       //   在PTR800发送时先发高位,再发低位
				  75   2      }
				  76   1      for(i=0;i				  77   1      s+=(b[i]*fun22(i));   //将二进制数转为十进制数
				  78   1      return s;
				  79   1      }
				  80          
				  81          /*************************************/
				  82          void SpiWrite(int c)       //SPI写         将单片机中数据写到ptr8000中
				  83          {
				  84   1          unsigned int i=8;
				  85   1      	fun2(c);               //将c转换为二进制数
				  86   1      	for(i=0;i				  87   1      	{
				  88   2      		Delay(10);
				  89   2              SCK=0;
				  90   2              MOSI=a[7-i];        //从高位到低位写
				  91   2              Delay(10);
				  92   2              SCK=1;             ///sck给一个上升沿发送一位数据
				  93   2              Delay(10);          //延时83us
				  94   2              SCK=0;
				  95   2      	}
				  96   1        SCK=0;
				  97   1      }
				  98          /**************************************/
				  99          int SpiRead(void)      //SPI读           从外部ptr8000中读入单片机
				 100          {
				 101   1           unsigned int i=8;
				 102   1           int ddata=0;
				 103   1      	for(i=0;i				 104   1      	{
				 105   2      
				 106   2      SCK=1 ;
				 107   2      if(MISO) b[i]=1;
				 108   2      else b[i]=0;
				 109   2              
				 110   2       SCK=0;
				 111   2      Delay(20);
				 112   2      	}
				 113   1         SCK=0;
				 114   1          Delay(20);
				 115   1      	ddata=fun21();       //data十进制数 
				 116   1          return ddata;
				 117   1      }
				C51 COMPILER V6.12  S                                                                      08/10/2008 11:52:12 PAGE 3   
				
				 118          /*******接收子程序********************************/
				 119          int PtrRead()      //PTR8000读     
				 120          {
				 121   1      int key;
				 122   1       Config905();     
				 123   1      
				 124   1       PWR=1; 
				 125   1       TX_EN=0;
				 126   1       TRX_CE=1;                    //接收      
				 127   1       
				 128   1      while(!DR) ;                 //等待接收
				 129   1      
				 130   1       while(DR)                    //接收数据准备就绪
				 131   1          {
				 132   2           PWR=1;                      //进入待机模式 
				 133   2           TRX_CE=0;
				 134   2           TX_EN=0;
				 135   2           CSN=0;                      //片选
				 136   2           SpiWrite(0x24);             //写读rx(接收)有效数据(配置)
				 137   2      	{
				 138   3           key=SpiRead();
				 139   3      	Delay(20);
				 140   3      	}
				 141   2           CSN=1;
				 142   2      	Delay(20);
				 143   2      	return key;
				 144   2      }
				 145   1      }
				 146          /**********************************/
				 147          void Config905(void)          //配置nRF905 
				 148          {   CSN=1;
				 149   1          SCK=0;
				 150   1          PWR=1;
				 151   1          TRX_CE=0;
				 152   1          TX_EN=0;
				 153   1          Delay(2);
				 154   1          CSN=0;
				 155   1          SpiWrite( 0x00);             //配置命令//
				 156   1          SpiWrite( 0x4C);          //CH_NO,配置频段在430MHZ  4c
				 157   1          SpiWrite( 0x0C);          //输出功率为10db,不重发,节电为正常模式  0c
				 158   1          SpiWrite( 0x44);          //地址宽度设置,为4字节
				 159   1          SpiWrite( 0x01);
				 160   1          SpiWrite( 0x01);             //接收发送有效数据长度为1字节
				 161   1          SpiWrite( 0x19);          //接收地址 4字节
				 162   1          SpiWrite( 0x85);
				 163   1          SpiWrite( 0x06);
				 164   1          SpiWrite( 0x27);       
				 165   1          SpiWrite( 0x58);          //16位CRC校验,CRC充许,16M晶振        
				 166   1       CSN=1;
				 167   1      }
				 168          /***********************************/
				 169          void TxPacket(int ddata)  //数据包发送
				 170          {	
				 171   1      int x=ddata;   
				 172   1      PWR=1;                    //待机和SPI编程模式
				 173   1      TRX_CE=0;
				 174   1          TX_EN=1;     
				 175   1          CSN=0;         
				 176   1          SpiWrite(0x22);            //写发送地址,后面跟4字节地址//
				 177   1          SpiWrite(0x19);             //0x19
				 178   1          SpiWrite(0x85);             //0x85
				 179   1          SpiWrite(0x06);               //0x06
				C51 COMPILER V6.12  S                                                                      08/10/2008 11:52:12 PAGE 4   
				
				 180   1          SpiWrite(0x27);            //0x27
				 181   1          CSN=1;
				 182   1          Delay(20);                 //延时1/6ms
				 183   1          CSN=0;
				 184   1          SpiWrite(0x20);            //写发送数据命令,后面跟一字节数据//
				 185   1          SpiWrite(x);            //发送到数据
				 186   1          CSN=1;
				 187   1          Delay(20);
				 188   1          TRX_CE=1;                  //使能发射模式//
				 189   1          Delay(255);                //等带发送完成//延时2ms
				 190   1          TRX_CE=0;    
				 191   1      }
				 192          /*******主函数******************************/
				 193          void main()
				 194          {int key,i=0;
				 195   1      P1=0xff;                  //P1口初始化
				 196   1      Config905();
				 197   1      
				 198   1      while(1)
				 199   1      {key=PtrRead(); 
				 200   2      if(key==1)
				 201   2         {P1=0x0f;
				 202   3          Delay(40000);
				 203   3          P1=0xff;
				 204   3       
				 205   3      //while(1)                //一直循环查询
				 206   3      for(i=0;i				 207   3         TxPacket(2);
				 208   3      }
				 209   2        key=0;
				 210   2      // key=PtrRead(); 
				 211   2      }
				 212   1      }
				 213          
				
				
				MODULE INFORMATION:   STATIC OVERLAYABLE
				   CODE SIZE        =    702    ----
				   CONSTANT SIZE    =   ----    ----
				   XDATA SIZE       =   ----    ----
				   PDATA SIZE       =   ----    ----
				   DATA SIZE        =     38      16
				   IDATA SIZE       =   ----    ----
				   BIT SIZE         =   ----    ----
				END OF MODULE INFORMATION.
				
				
				C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)
							

相关资源