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

📄 nrf24l01.lst

📁 此程序是基于51单片机的NRF24L01的无线通信模块的程序。
💻 LST
字号:
C51 COMPILER V3.20,  SN-50203013  NRF24L01                                                 04/22/08  15:54:43  PAGE 1   


DOS C51 COMPILER V3.20, COMPILATION OF MODULE NRF24L01
OBJECT MODULE PLACED IN NRF24L01.OBJ
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE NRF24L01.C DB OE SMALL ROM(LARGE) 

stmt level    source

   1          #include <reg51.h>
   2          #include <intrins.h>
   3          #include "nRF24L01.h"
   4          #include "display.h"
   5          
   6          sbit CE=P1^7;
   7          sbit CSN=P1^4;
   8          sbit SCK=P1^5;
   9          sbit MOSI=P3^1;
  10          sbit MISO=P3^0;
  11          sbit IRQ=P3^2;
  12          sbit green=P1^6;
  13          
  14          unsigned char bdata sta;
  15          sbit RX_DR = sta^6;
  16          sbit TX_DS = sta^5;
  17          sbit MAX_RT = sta^4;
  18          
  19          unsigned char sn;
  20          char r_buff[2];
  21          float TA=0.0;
  22          bit flag=0;
  23          
  24          unsigned char config_r[1]={0x0F};
  25          unsigned char en_aa[1]={0x01};
  26          unsigned char en_rxaddr[1]={0x01};
  27          unsigned char rf_ch[1]={40};
  28          unsigned char rf_setup[1]={0x0f};
  29          unsigned char rx_pw_p0[1]={2};//there is 1 byte in RX payload in data pipe 0;
  30          
  31          void init_io(void)
  32          {
  33   1       CE=0;
  34   1       CSN=1;
  35   1       SCK=0;
  36   1      }
  37          
  38          void init_int0(void)
  39          {
  40   1        EA=1;
  41   1        EX0=1;
  42   1        IT0=0;
  43   1      }
  44          
  45          unsigned char SPI_R(unsigned char cn,unsigned char n,char *p)
  46          {
  47   1        unsigned char i,j;
  48   1        
  49   1        CSN=0;
  50   1        for(i=0;i<8;i++)
  51   1        {
  52   2          MOSI = (cn & 0x80);         // output 'byte', MSB to MOSI
  53   2          cn = (cn << 1);
  54   2          sn = (sn<<1);          // shift next bit into MSB..
  55   2          SCK = 1;                      // Set SCK high..
C51 COMPILER V3.20,  SN-50203013  NRF24L01                                                 04/22/08  15:54:43  PAGE 2   

  56   2          sn |= MISO;       		  // capture current MISO bit
  57   2          SCK = 0;            		  // ..then set SCK low again
  58   2         }
  59   1         for(j=0;j<n;j++)
  60   1         {
  61   2           for(i=0;i<8;i++)
  62   2           {
  63   3             *p =(*p<<1);
  64   3             SCK=1;
  65   3             *p |= MISO;
  66   3             SCK=0;
  67   3           }
  68   2           p++;
  69   2         }
  70   1        CSN=1;
  71   1        return(sn);
  72   1      }
  73          
  74          unsigned char SPI_W(unsigned char cn,unsigned char n,char *p)
  75          {
  76   1        unsigned char i,j;
  77   1        CSN=0;
  78   1        for(i=0;i<8;i++)
  79   1        {
  80   2          MOSI = (cn & 0x80);         // output 'byte', MSB to MOSI
  81   2          cn = (cn << 1);
  82   2          sn = (sn<<1);          // shift next bit into MSB..
  83   2          SCK = 1;                      // Set SCK high..
  84   2          sn |= MISO;       		  // capture current MISO bit
  85   2          SCK = 0;            		  // ..then set SCK low again
  86   2        }
  87   1          for(j=0;j<n;j++)/*先写低字节的,再写高字节的*/
  88   1          {
  89   2            for(i=0;i<8;i++)
  90   2            {
  91   3              MOSI= *p&0x80;
  92   3              *p<<=1;
  93   3              SCK=1;
  94   3              _nop_();
  95   3              SCK=0;
  96   3              _nop_();
  97   3            }
  98   2            p++;
  99   2          }
 100   1        CSN=1;
 101   1        return(sn);
 102   1      }
 103          
 104          void ISR_int0(void) interrupt 0 using 1
 105          {
 106   1        green=0;
 107   1        CE=0;
 108   1        sta=SPI_R(NOP,0,r_buff);
 109   1        if(RX_DR)
 110   1        {
 111   2         flag=1;
 112   2        }
 113   1        SPI_W(WRITE_REG + STATUS,1,&sta);//clear RX_DS or TX_DS or MAX_RT interrupt flag
 114   1      }
 115          
 116          void RX(void)
 117          {
C51 COMPILER V3.20,  SN-50203013  NRF24L01                                                 04/22/08  15:54:43  PAGE 3   

 118   1        CE=0;
 119   1        SPI_W(WRITE_REG + CONFIG,1,config_r);
 120   1        SPI_W(WRITE_REG + EN_AA,1,en_aa);
 121   1        SPI_W(WRITE_REG + EN_RXADDR,1,en_rxaddr);
 122   1        SPI_W(WRITE_REG + RF_CH,1,rf_ch);
 123   1        SPI_W(WRITE_REG + RF_SETUP,1,rf_setup);
 124   1        SPI_W(WRITE_REG + RX_PW_P0,1,rx_pw_p0);
 125   1        CE=1;
 126   1      }
 127          
 128          void main(void)
 129          {
 130   1          int temp,temp1;
 131   1          
 132   1          init_io();
 133   1          init_int0();
 134   1          RX();
 135   1          while(1)
 136   1          {
 137   2            if(flag)
 138   2            {
 139   3              flag=0;
 140   3              SPI_R(RD_RX_PLOAD,2,r_buff);
 141   3              green=1;
 142   3              CE=1;/*把数据取出来后立即进入接收状态*/
 143   3              temp=(int)r_buff[0]<<4;
 144   3      	temp1=(int)r_buff[1]>>4;
 145   3      	TA=(float)temp+(float)temp1;
 146   3      	TA=TA/16;
 147   3              display(TA,1);//display only when received payload
 148   3            }
 149   2          }  
 150   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    952    ----
   CONSTANT SIZE    =     24    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     14      56
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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