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

📄 f.lst

📁 PTR8000发送接收驱动程序。只需在主程序中只需做小小的改动就可以
💻 LST
字号:
C51 COMPILER V6.12  F                                                                      08/12/2008 19:52:33 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE F
OBJECT MODULE PLACED IN .\f.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE .\f.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          int flat=1;
  14           
  15          sbit SCK = P2^5;
  16          sbit MISO= P2^7;
  17          sbit MOSI= P2^6;
  18          sbit DR  = P2^1;     //数据就绪输出
  19          sbit CSN = P2^4;     //SPI使能
  20          sbit PWR = P2^2;     //Power Down 模式
  21          sbit TX_EN= P2^3;    //'1'发射模式 '0'接收模式
  22          sbit TRX_CE=P2^0;    //使能发射/接收模式
  23          
  24          /**********************************/
  25          //延时大约为1S左右  
  26          //以0.1S为单位计时 
  27          //即 定时时间 time=t*0.1 S 
  28          /*********************************/ 
  29          void delay()
  30          {
  31   1      int i,j;
  32   1      //for(k=0;k<t;k++)
  33   1      for(i=0;i<500*5;i++)
  34   1      for(j=0;j<100;j++);
  35   1      }
  36          /********************************/
  37          //任意延时
  38          /*******************************/
  39          void Delay(int x)
  40          {
  41   1           unsigned int i;
  42   1          for(i=0;i<x;i++);
  43   1      }
  44          /*******十进制数转二进制数*************************/
  45          void fun2(int n)	
  46          {
  47   1      unsigned int i,t=n;
  48   1      for(i=0;i<8;i++)
  49   1      {
  50   2      a[i]=t%2;
  51   2      t/=2;
  52   2      }
  53   1      }
  54          /********************************/
  55          //函数名:int fun22(int n)
C51 COMPILER V6.12  F                                                                      08/12/2008 19:52:33 PAGE 2   

  56          //功能:计算2的n 次方  
  57          /********************************/
  58          int fun22(int n)
  59          {
  60   1      unsigned int i;
  61   1      int f=1;
  62   1      for(i=0;i<n;i++)
  63   1      f*=2;
  64   1      return f;
  65   1      }
  66          /**********将高位和低位进行交换*********************/
  67          int fun21(void)
  68          {
  69   1      unsigned int  i,t;
  70   1      int s=0;
  71   1      for(i=0;i<4;i++)
  72   1      {
  73   2      t=b[i];               //高低位进行交换      
  74   2      b[i]=b[7-i];
  75   2      b[7-i]=t;       //   在PTR800发送时先发高位,再发低位
  76   2      }
  77   1      for(i=0;i<8;i++)
  78   1      s+=(b[i]*fun22(i));   //将二进制数转为十进制数
  79   1      return s;
  80   1      }
  81          
  82          /*************************************/
  83          void SpiWrite(int c)       //SPI写         将单片机中数据写到ptr8000中
  84          {
  85   1          unsigned int i=8;
  86   1      	fun2(c);               //将c转换为二进制数
  87   1      	for(i=0;i<8;i++)
  88   1      	{
  89   2      		Delay(10);
  90   2              SCK=0;
  91   2              MOSI=a[7-i];        //从高位到低位写
  92   2              Delay(10);
  93   2              SCK=1;             ///sck给一个上升沿发送一位数据
  94   2              Delay(10);          //延时83us
  95   2              SCK=0;
  96   2      	}
  97   1        SCK=0;
  98   1      }
  99          /**************************************/
 100          int SpiRead(void)      //SPI读           从外部ptr8000中读入单片机
 101          {
 102   1           unsigned int i=8;
 103   1           int ddata=0;
 104   1      	for(i=0;i<8;i++)
 105   1      	{
 106   2      
 107   2      SCK=1 ;
 108   2      if(MISO) b[i]=1;
 109   2      else b[i]=0;
 110   2              
 111   2       SCK=0;
 112   2      Delay(20);
 113   2      	}
 114   1         SCK=0;
 115   1          Delay(20);
 116   1      	ddata=fun21();       //data十进制数 
 117   1          return ddata;
C51 COMPILER V6.12  F                                                                      08/12/2008 19:52:33 PAGE 3   

 118   1      }
 119          /*******接收子程序********************************/
 120          int PtrRead()      //PTR8000读     
 121          {
 122   1      int key;
 123   1       Config905();     
 124   1      
 125   1       PWR=1; 
 126   1       TX_EN=0;
 127   1       TRX_CE=1;                    //接收      
 128   1       
 129   1      while(!DR) ;                 //等待接收
 130   1      //Delay(2000);
 131   1       while(DR)                    //接收数据准备就绪
 132   1       //if(DR)
 133   1          {
 134   2           PWR=1;                      //进入待机模式 
 135   2           TRX_CE=0;
 136   2           TX_EN=0;
 137   2           CSN=0;                      //片选
 138   2           SpiWrite(0x24);             //写读rx(接收)有效数据(配置)
 139   2      	{
 140   3           key=SpiRead();
 141   3      	Delay(20);
 142   3      	}
 143   2           CSN=1;
 144   2      	Delay(20);
 145   2      	return key;
 146   2      }
 147   1      //else flat=1;
 148   1      }
 149          /**********************************/
 150          void Config905(void)          //配置nRF905 
 151          {   CSN=1;
 152   1          SCK=0;
 153   1          PWR=1;
 154   1          TRX_CE=0;
 155   1          TX_EN=0;
 156   1          Delay(2);
 157   1          CSN=0;
 158   1          SpiWrite( 0x00);             //配置命令//
 159   1          SpiWrite( 0x4C);          //CH_NO,配置频段在430MHZ  4c
 160   1          SpiWrite( 0x0C);          //输出功率为10db,不重发,节电为正常模式  0c
 161   1          SpiWrite( 0x44);          //地址宽度设置,为4字节
 162   1          SpiWrite( 0x01);
 163   1          SpiWrite( 0x01);             //接收发送有效数据长度为1字节
 164   1          SpiWrite( 0x19);          //接收地址 4字节
 165   1          SpiWrite( 0x85);
 166   1          SpiWrite( 0x06);
 167   1          SpiWrite( 0x27);       
 168   1          SpiWrite( 0x58);          //16位CRC校验,CRC充许,16M晶振        
 169   1       CSN=1;
 170   1      }
 171          /***********************************/
 172          void TxPacket(int ddata)  //数据包发送
 173          {	
 174   1      int x=ddata;   
 175   1      PWR=1;                    //待机和SPI编程模式
 176   1      TRX_CE=0;
 177   1          TX_EN=1;     
 178   1          CSN=0;         
 179   1          SpiWrite(0x22);            //写发送地址,后面跟4字节地址//
C51 COMPILER V6.12  F                                                                      08/12/2008 19:52:33 PAGE 4   

 180   1          SpiWrite(0x19);             //0x19
 181   1          SpiWrite(0x85);             //0x85
 182   1          SpiWrite(0x06);               //0x06
 183   1          SpiWrite(0x27);            //0x27
 184   1          CSN=1;
 185   1          Delay(20);                 //延时1/6ms
 186   1          CSN=0;
 187   1          SpiWrite(0x20);            //写发送数据命令,后面跟一字节数据//
 188   1          SpiWrite(x);            //发送到数据
 189   1          CSN=1;
 190   1          Delay(20);
 191   1          TRX_CE=1;                  //使能发射模式//
 192   1          Delay(255);                //等带发送完成//延时2ms
 193   1          TRX_CE=0;    
 194   1      }
 195          /*******主函数******************************/
 196          //先发5个1,再接收1个2,
 197          //
 198          /*********************************************/
 199          void main()
 200          {int key,i=0;
 201   1      P1=0xff; 
 202   1      Config905();                 //P1口初始化
 203   1       while(1)
 204   1      { 
 205   2         if(P0==0x01)
 206   2           { 
 207   3             for(i=0;i<1;i++)                                                    //while(flat)                //
             -一直循环查询
 208   3                { 
 209   4                  TxPacket(1);             //发5个1出去
 210   4                }  
 211   3          	key=PtrRead();
 212   3           if(key==2) 
 213   3              { 
 214   4              // for(i=0;1<3;i++) 
 215   4                // {
 216   4      	          P1=~P1;
 217   4                    Delay(20000); 
 218   4      				  P1=0xff;
 219   4      	         //	key=0;
 220   4                //  }
 221   4               }
 222   3       //  P1=0;
 223   3                  //模式1
 224   3      //while(1)
 225   3         
 226   3      /*	 */
 227   3          }
 228   2      
 229   2      }
 230   1      }
 231          
 232             


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    696    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     40      14
C51 COMPILER V6.12  F                                                                      08/12/2008 19:52:33 PAGE 5   

   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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