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

📄 jieshou.lst

📁 基于NRF905无线收发模块的无线按键程序
💻 LST
字号:
C51 COMPILER V7.06   JIESHOU                                                               04/11/2008 00:05:55 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE JIESHOU
OBJECT MODULE PLACED IN Jieshou.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Jieshou.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <reg52.h>
   2          #include <ABSACC.h>
   3          #include <intrins.h>
   4          #include <stdio.h>
   5          #define uint unsigned int                     //0 ~ 255
   6          #define uchar unsigned char
   7          //--------------------------------------------------------------------------------------------------------
             -------
   8          #define BYTE_BIT0       0x01
   9          #define BYTE_BIT1       0x02
  10          #define BYTE_BIT2       0x04
  11          #define BYTE_BIT3       0x08
  12          #define BYTE_BIT4       0x10
  13          #define BYTE_BIT5       0x20
  14          #define BYTE_BIT6       0x40
  15          #define BYTE_BIT7       0x80
  16          
  17          bdata unsigned  char DATA_BUF;
  18          #define DATA7   ((DATA_BUF&BYTE_BIT7) != 0)
  19          #define DATA0   ((DATA_BUF&BYTE_BIT0) != 0)
  20          sbit    flag    =DATA_BUF^7;
  21          sbit    flag1   =DATA_BUF^0;
  22          //--------------------------------------------------------------------------------------------------------
             -------
  23          #define TxRxBuf_Len 4
  24          unsigned char TxRxBuffer[TxRxBuf_Len];
  25          //-----------------------------------------------------NRF905端口配置-------------------------------------
             -------
  26          sbit    TXEN=P1^0;
  27          sbit    TRX_CE=P3^2;
  28          sbit    PWR=P1^1;
  29          sbit    MISO=P1^6;
  30          sbit    MOSI=P1^5;
  31          sbit    SCK=P1^7;
  32          sbit    CSN=P1^3;
  33          sbit    AM=P1^4;
  34          sbit    DR=P3^3;
  35          sbit    CD=P1^2;
  36          //----------------------------------------------------数码管位选IO----------------------------------------
             ------
  37          sbit    led1=P2^1;
  38          sbit    led0=P2^0;
  39          sbit    led2=P2^2;
  40          sbit    led3=P2^3;
  41          //--------------------------------------------------------------------------------------------------------
             -------
  42          uchar seg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};         //0~~9段码
  43          //--------------------------------------------------------------------------------------------------------
             --------
  44          #define WC              0x00
  45          #define RC              0x10
  46          #define WTP             0x20
  47          #define RTP             0x21
  48          #define WTA             0x22
  49          #define RTA             0x23
C51 COMPILER V7.06   JIESHOU                                                               04/11/2008 00:05:55 PAGE 2   

  50          #define RRP             0x24
  51          //--------------------------------------------NRF905寄存器配置--------------------------------------------
             -------
  52          unsigned char idata RFConf[11]=
  53          {
  54                  0x00,                             //配置命令//
  55                  0x4c,
  56                  0x0c,
  57                  0x44,0x04,0x04,
  58                  0xcc,0xcc,0xcc,0xcc,
  59                  0x58,                            //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
  60          };
  61          //----------------------------------------------延时------------------------------------------------------
             ----------
  62          void Delay(uchar n)
  63          {
  64   1              uint k;
  65   1              while(n--)
  66   1              for(k=0;k<8;k++);
  67   1      }
  68          //--------------------------------------------------------------------------------------------------------
             ----------
  69          void delay1(uint i)
  70          {
  71   1              for(;i>0;i--);   
  72   1      }
  73          //---------------------------------------------------SPI读函数--------------------------------------------
             ----------
  74          unsigned char SpiRead(void)
  75          {
  76   1              unsigned char j;
  77   1              for (j=0;j<8;j++)
  78   1              {
  79   2              DATA_BUF=DATA_BUF<<1;
  80   2                      SCK=1;
  81   2                      if (MISO)       //读取最高位,保存至最末尾,通过左移位完成整个字节
  82   2                      {
  83   3                              DATA_BUF|=BYTE_BIT0;
  84   3                      }
  85   2                      else
  86   2                      {
  87   3                              DATA_BUF&=~BYTE_BIT0;
  88   3                      }
  89   2                      SCK=0;
  90   2               }
  91   1               return DATA_BUF;
  92   1      }
  93          //---------------------------------------------------SPI写函数--------------------------------------------
             ---------
  94          void SpiWrite(unsigned char send)
  95          {
  96   1              unsigned char i;
  97   1              DATA_BUF=send;
  98   1              for (i=0;i<8;i++)
  99   1              {
 100   2                      if (DATA7)      //总是发送最高位
 101   2                      {
 102   3                              MOSI=1;
 103   3                      }
 104   2                      else
 105   2                      {
 106   3                              MOSI=0;
C51 COMPILER V7.06   JIESHOU                                                               04/11/2008 00:05:55 PAGE 3   

 107   3                      }
 108   2                      SCK=1;
 109   2                      DATA_BUF=DATA_BUF<<1;
 110   2                      SCK=0;
 111   2              }
 112   1      }
 113          //-----------------------------------------------初始化nRF905---------------------------------------------
             ---------
 114          void nRF905Init(void)
 115          {
 116   1          CSN=1;                                              // Spi  disable
 117   1              SCK=0;                                          // Spi clock line init low
 118   1              DR=0;                                           // Init DR for input
 119   1              AM=0;                                           // Init AM for input
 120   1              CD=0;                                           // Init CD for input
 121   1              PWR=1;                                  // nRF905 power on
 122   1              TRX_CE=0;                                       // Set nRF905 in standby mode
 123   1              TXEN=0;                                 // set radio in Rx mode
 124   1      }
 125          //-----------------------------------------------NRF905初始化寄存器---------------------------------------
             ---------------
 126          void Config905(void)
 127          {
 128   1              uchar i;
 129   1              CSN=0;                                          // Spi enable for write a spi command
 130   1              //SpiWrite(WC);                         // Write config command写放配置命令
 131   1              for (i=0;i<11;i++)      // Write configration words  写放配置字
 132   1              {
 133   2                 SpiWrite(RFConf[i]);
 134   2              }
 135   1              CSN=1;                                  // Disable Spi
 136   1      }
 137          //-----------------------------------------------设置发送状态---------------------------------------------
             -------
 138          void SetRxMode(void)
 139          {
 140   1              TXEN=0;
 141   1              TRX_CE=1;
 142   1              Delay(1);                                       // delay for mode change(>=650us)
 143   1      }
 144          //-------------------------------------------------判断数据接收状态---------------------------------------
             ---------------
 145          unsigned char CheckDR(void)             //检查是否有新数据传入 Data Ready
 146          {
 147   1              if (DR=1&&TRX_CE==1 && TXEN==0)
 148   1              {
 149   2             // Delay(50)  ;
 150   2                      return 1;
 151   2              }
 152   1              else
 153   1              {
 154   2                      return 0;
 155   2              }
 156   1      }
 157          //----------------------------------------------------读NRF905接收数据------------------------------------
             -------------------------
 158          void RxPacket(void)                                             
 159          {
 160   1              uchar i;
 161   1          Delay(1);
 162   1      //      TRX_CE=0;                                       // Set nRF905 in standby mode
 163   1          Delay(100);
C51 COMPILER V7.06   JIESHOU                                                               04/11/2008 00:05:55 PAGE 4   

 164   1          TRX_CE=0;
 165   1              CSN=0;                                          // Spi enable for write a spi command
 166   1          Delay(1);
 167   1              SpiWrite(RRP);
 168   1              for (i = 0 ;i < 4 ;i++)
 169   1              { 
 170   2                      TxRxBuffer[i]=SpiRead();                // Read data and save to buffer       
 171   2              }
 172   1              CSN=1;
 173   1                Delay(10);
 174   1              TRX_CE=1;                                                       
 175   1      }
 176          //--------------------------------------------------------数据接收----------------------------------------
             ---------
 177          void  RX(void)
 178          {
 179   1                SetRxMode();                  // Set nRF905 in Rx mode
 180   1                while (CheckDR()==0);
 181   1                        Delay(10);
 182   1                        RxPacket();
 183   1                        Delay(10);
 184   1      }
 185          //--------------------------------------------------------------------------------------------------------
             ----------
 186          void main(void)
 187          {
 188   1              nRF905Init();
 189   1              Config905();
 190   1                      P0=0x00;
 191   1              while(1)
 192   1              {
 193   2                      RX();
 194   2                      Delay(10);
 195   2                      CSN=0;   
 196   2                      if(TxRxBuffer[0])
 197   2                      {       
 198   3                      if(TxRxBuffer[0]==0x29)
 199   3                      {  
 200   4                              P0=seg[1];
 201   4                              led0=1;led1=1;led2=1;led3=0;
 202   4                              delay1(50);
 203   4                      }
 204   3              
 205   3                      if(TxRxBuffer[0]==0x30)
 206   3                      {
 207   4                              P0=seg[2];
 208   4                              led0=1;led1=1;led2=0;led3=1;
 209   4                              delay1(50);
 210   4                      }
 211   3                      }
 212   2              }
 213   1      }
 214          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    309    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     15    ----
   IDATA SIZE       =     11    ----
C51 COMPILER V7.06   JIESHOU                                                               04/11/2008 00:05:55 PAGE 5   

   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 + -