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

📄 my_nrf905.lst

📁 这是我自己写的nRF905射频IC收发于一起的程序。
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   MY_NRF905                                                             11/14/2005 16:14:24 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MY_NRF905
OBJECT MODULE PLACED IN my_nRF905.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE my_nRF905.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //此程序没有加接收反回指令
   2          //
   3          #include <reg52.h>
   4          #include <intrins.h>
   5          #include <my_nRF905.h>
   6          
   7          /************timer0定时中断***********/
   8          void timer0(void) interrupt 1 using 0
   9          {       
  10   1              TH0=timer0h;
  11   1              TL0=timer0l;
  12   1              delay_flag = 1;
  13   1              TF0 = 0;
  14   1      }
  15          
  16          /********每单位时间延时50 us   *******/
  17          void delay(unsigned  char n)
  18          {
  19   1              while(n>0)
  20   1              {
  21   2                      TR0=ON;                                 //启动T0定时
  22   2                      ET0=1;
  23   2                      TH0=timer0h;            //T0定时15MS
  24   2                      TL0=timer0l;
  25   2                      delay_flag=False;
  26   2                      while(!delay_flag);
  27   2                      TR0=OFF;                                        //启动T0定时
  28   2                      ET0=0;
  29   2                      n--;
  30   2              }
  31   1      }                               
  32          /**********延时650子程序************/
  33          void delay650(void)
  34          {
  35   1              unsigned char delay_num;                        //延时650us要运行的次数
  36   1              delay_num = 180;
  37   1              while(delay_num)
  38   1              {
  39   2                      delay_num--;
  40   2                      _nop_();
  41   2              }
  42   1      }
  43          
  44          /**********SPI发送一个字节*********/
  45          void SpiWrite(unsigned char val)
  46          {
  47   1              unsigned char i, j;
  48   1        for (i = 8; i > 0; i --)
  49   1        {
  50   2          j = val & 0x80;
  51   2          if(j == 0x80)
  52   2          {
  53   3              MOSI = 1;
  54   3          }
  55   2              else
C51 COMPILER V7.50   MY_NRF905                                                             11/14/2005 16:14:24 PAGE 2   

  56   2              {
  57   3                      MOSI = 0;
  58   3              }
  59   2          SCK = ON;//上升沿打入数据
  60   2          val <<= 1;
  61   2          _nop_();
  62   2          SCK  = 0;//下降沿读入数据(首次为假动作)
  63   2          _nop_();
  64   2        }
  65   1      }
  66          /**********SPI读取一个字节*********/
  67          unsigned char SpiRead(void)
  68          {
  69   1              unsigned char i,val = 0;
  70   1              for (i = 8; i > 0; i--)
  71   1              {
  72   2                      val <<= 1;
  73   2                      if(MISO)
  74   2                      {
  75   3                              val |= 0x01;
  76   3                      }
  77   2                      
  78   2          SCK = 1;                                            //上升沿打入数据
  79   2          _nop_();
  80   2          SCK = 0;                                            //下降沿读入数据(首次为假动作)
  81   2          _nop_();
  82   2        }
  83   1        return val;
  84   1      }
  85          
  86          /****** Spi 写RF发送的数据*************/
  87          void SpiWrite_some(unsigned char *m1,unsigned char m2)
  88          {
  89   1              unsigned char b;
  90   1              SCK=0;
  91   1              CSN=0;
  92   1              SpiWrite(WTP);
  93   1              SpiWrite(m2);
  94   1              SpiWrite(0xFA);
  95   1              SpiWrite(0XAF);
  96   1              while(m2)
  97   1              {
  98   2                      b=*m1;
  99   2                      SpiWrite(b);
 100   2                      m1++;
 101   2                      m2--;
 102   2              }
 103   1              CSN=1;  
 104   1      }
 105          
 106          /*************配置nRF905函数 **********/
 107          void Config905(void) using 0//配置nRF905
 108          {
 109   1          CSN = OFF;                                                                                   // Spi enable for write a spi command
 110   1          SpiWrite(WC);                                                                        // Write config command
 111   1          for(count_p=0;count_p<10;count_p++)
 112   1          {
 113   2                  SpiWrite(configbuf[count_p]);
 114   2          }
 115   1          CSN = ON;                                                                            // Disable Spi
 116   1      }
 117          /*****RF写发送地址**********/
C51 COMPILER V7.50   MY_NRF905                                                             11/14/2005 16:14:24 PAGE 3   

 118          void Spi_tx_addr(void)
 119          {
 120   1              CSN=0;
 121   1              SpiWrite(WTA);
 122   1              SpiWrite(0x29);         //0x28
 123   1              SpiWrite(0x88);         //0x55
 124   1              SpiWrite(0x0c);         //0x5a
 125   1              SpiWrite(0x0c);         //0xa5
 126   1              CSN=1;
 127   1      }
 128          
 129          /************RF发送子程序*****************/
 130          void RF_send (void)
 131          {
 132   1              TX_EN   = ON;
 133   1              TRX_CE  = ON;
 134   1              delay650();
 135   1              delay650();
 136   1              delay650();
 137   1              delay650();
 138   1              delay650();
 139   1              while(!DR);
 140   1              TRX_CE  =0;
 141   1      }
 142                  
 143          /********mRF905的初始化***********/
 144          void InitnRF905(void)
 145          {
 146   1              CSN     = ON;
 147   1              SCK     = OFF;
 148   1              PWR_UP  = ON;
 149   1              TRX_CE  = OFF;
 150   1              TX_EN   = OFF;
 151   1              DR      = OFF;
 152   1              AM      = OFF;
 153   1              for(count_p=0;count_p<10;count_p++)
 154   1              {
 155   2                  configbuf[count_p]=config_tab[count_p];
 156   2              }
 157   1              configbuf[0]=FreqBill[frequency];
 158   1              if(frequency>=8)
 159   1              {
 160   2                  configbuf[1]++;
 161   2              }
 162   1      }
 163          /*****************/
 164          void Sysinit(void)     
 165          {       
 166   1              P1=0xff;
 167   1              P2=0xff;
 168   1              P3=0xff;
 169   1      
 170   1              IP=0x10;                                        //打开INT0及Serial优先级,INT0的优先级大于Serial的优先级。
 171   1              TMOD=0x21;                      //T0.T1工作于方式1 ,T1工作于方式2
 172   1      
 173   1              TH1=250;                        //T1波特率  9600--22M
 174   1              TL1=250;
 175   1              TR1=ON;                                         //启动T1定时
 176   1              PCON=0x00;                                      //波特率选择
 177   1              SCON=0x50;                                      //设置串口工作模式1,并打开允许接收.并收发中断,RI,TI = 0; 
 178   1      
 179   1              EA=1;                                           //打开总中断使能
C51 COMPILER V7.50   MY_NRF905                                                             11/14/2005 16:14:24 PAGE 4   

 180   1              ES = 1;                                         //关闭串口中断使能
 181   1              EX0=0;                                          //关闭INT0计数器的使能
 182   1              EX1=0;                                          //关闭INT1计数器的使能
 183   1      
 184   1              TI = 0;                                         //无发送中断标志
 185   1              RI = 0;                                         //无接收中断标志
 186   1              IT0=1;                                          //设置INT0的电平触发方式,负边沿触发
 187   1              IT1=0;                                          //设置INT0的电平触发方式,电平触发
 188   1      }
 189          /*********INT0中断子程序*************
 190            表示RF中的数据接收完毕***********/    
 191          void intr0_int(void) interrupt 0 using 1
 192          {       
 193   1                      if(!write_flag)
 194   1                      {
 195   2                              write_flag=True;
 196   2                              TRX_CE=OFF;
 197   2                              TX_EN =OFF;
 198   2      
 199   2                              delay650();
 200   2      
 201   2                              if(!RFrec_flag)
 202   2                              {
 203   3                                      CSN=0;
 204   3                                      SpiWrite(RRP);
 205   3                                      RFrec0_num = SpiRead();
 206   3                                      for(count_p=0;count_p<RFrec0_num + 2;count_p++)
 207   3                                      {
 208   4                                              rxpack0_buf[count_p]=SpiRead();
 209   4                                      }
 210   3                                      CSN=1;
 211   3                                      RFrec0_flag = 1;
 212   3                              }
 213   2                              else
 214   2                              {
 215   3                                      CSN=0;
 216   3                                      SpiWrite(RRP);
 217   3                                      RFrec1_num = SpiRead();
 218   3                                      for(count_p=0;count_p<RFrec1_num + 2;count_p++)
 219   3                                      {
 220   4                                              rxpack1_buf[count_p]=SpiRead();
 221   4                                      }
 222   3                                      CSN=1;
 223   3                                      RFrec1_flag = 1;
 224   3                              }
 225   2                      }
 226   1      }
 227          /*********INT1中断子程序*************
 228              RF中的数据地址正确**********/
 229          void intr1_int(void) interrupt 2 using 3
 230          {               
 231   1                      AMflag=False;
 232   1                      if(!write_flag)
 233   1                      {
 234   2                              AMflag=True;
 235   2                      }
 236   1      }
 237          
 238          /**********串口接收中断*************/
 239          void serial_int() interrupt 4 using 3
 240          {
 241   1              if(RI)
C51 COMPILER V7.50   MY_NRF905                                                             11/14/2005 16:14:24 PAGE 5   

 242   1              {   
 243   2              RI=0;
 244   2                      rec_ok = 0;
 245   2                      if(!rec_flag1)
 246   2                      {
 247   3                              recv0_data = SBUF;

⌨️ 快捷键说明

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