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

📄 rf24e1.lst

📁 基于无线单片机24e1的组网程序。在无线传感器之类的应用中的成功案例。
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   RF24E1                                                                10/05/2006 10:18:20 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE RF24E1
OBJECT MODULE PLACED IN .\output\RF24E1.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE RF24E1.c OMF2 BROWSE MODDP2 DEBUG OBJECT(.\output\RF24E1.obj)

line level    source

   1          //========================================================
   2          //深圳奥特迅电力设备有限公司
   3          //电池监控系统用无线传输模块
   4          //文件名:RF24E1.C
   5          //描述:无线收发模块处理,无线子系统的初始化配置;spi操作;
   6          //无线收发操作;子系统工作在shockburst接收模式下
   7          //收到无线数据,LED指示
   8          //喂狗操作
   9          //By:Andylee 2006-6-13
  10          //anssett@163.com
  11          //程序编译时,必须设置好XRAM的起始地址和大小,否则有可能程序不可运行!!!
  12          //2006-6-26
  13          //=========================================================
  14          #include <BATTERY.H>
  15          #include <stdlib.h>
  16          extern unsigned char idata inCnt;
  17          extern unsigned char idata outCnt;
  18          extern unsigned char xdata inBuf[135];//120+1+8+4
  19          extern unsigned char xdata outBuf[256];         //发送缓冲区
  20          extern unsigned char idata cTxdDptr;
  21          unsigned char idata Loc;
  22          unsigned char idata Rxtimeout;
  23          
  24          unsigned char idata adcResult_list[4][2];//接收节点四个通道采样值
  25          unsigned char xdata Group1_Table[120];//节点地址列表,放在内部sram里面
  26          unsigned char idata ptnode;                     //最多120个节点,包括2组,每组60点,对应120节电池
  27          unsigned char idata cRxdTime;//串口接收延时
  28          unsigned char xdata Node_V[480];
  29          unsigned char xdata Node_T[480];//配置120个节点的信息缓存
  30          //|    节点1  |    节点1  |......|    节点10   |-----------Node_V
  31          //|ch1 L|ch1 H|ch2 L|ch2 H|......|ch1 L|ch1 H  |
  32          //|    节点1  |    节点1  |......|    节点10   |-----------Node_T
  33          //|ch1 L|ch1 H|ch2 L|ch2 H|......|ch1 L|ch1 H  |
  34          unsigned int idata NodeBufCnt=0;//用于往里存放
  35          unsigned int idata NdBfoutV=0;//&Node_V[0];//用于串出计数
  36          unsigned int idata NdBfoutT=0;//&Node_T[0];
  37          //unsigned char xdata *PtAddr=(unsigned char xdata *)(0x0fe8);//指向本机无线地址和节点地址的存放位置。
  38          unsigned char idata Group1_Num=0;//节点数量
  39          //unsigned int idata LocalADC[2];//本地adc采样值,电压,电流
  40          union
  41                  {
  42                  unsigned char adcByte[4];
  43                  struct
  44                          {
  45                          unsigned int local_V;
  46                          unsigned int local_A;
  47                          }adc_value;
  48                  }idata LOCAL_ADC;
  49          unsigned char idata ReqTimeout;
  50          unsigned char idata CallTime=0;                         //呼叫次数
  51          
  52          //unsigned int xdata ADC_LIST[2][16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
  53          //                                                                      0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
  54          unsigned char idata ADC_Cnt=0;
  55          unsigned int idata ADC_SUM[2]={0,0};
C51 COMPILER V8.02   RF24E1                                                                10/05/2006 10:18:20 PAGE 2   

  56          
  57          //bit t_500ms;
  58          bit NodeResistered=0;
  59          bit rFaddrResistered=0;
  60          extern bit bRxd;
  61          bit enrF=0;//启动巡检
  62          sbit led=P0^6;
  63          sbit dog=P0^5;
  64          sbit Led_Tx=P0^3;                           //LED点灯发送
  65          sbit Led_Rx=P0^4;                               //LED点灯接收
  66          sbit CS_R=P0^0;                                 //eeprom 的偏选脚,
  67          sbit e2rom_cs=P0^0;                             //外部e2rom的偏选
  68          
  69          //===========crc==================
  70          //unsigned int code crc_ta[16]=
  71          //{ /* CRC余式表 */
  72          //         0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7,
  73          //         0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef,
  74          //};
  75          union
  76          {
  77                  unsigned int iWord;
  78                  struct
  79                  {
  80                          unsigned char cHigh;
  81                          unsigned char cLow;
  82                  }iData;
  83          }idata CheckSumTemp;
  84          
  85          unsigned char idata count;
  86          
  87          
  88          
  89          bit RxdCheckSum( void );
  90          void TxdCheckSum( void);
  91          void CheckSum( unsigned char xdata*p );
  92          
  93          /*unsigned char code RxTxConfig[] = {
  94              RF_DATA_LENGTH * 8, RF_DATA_LENGTH * 8,             //信道2和1的数据长(单位为位)
  95                  0x00, 0x00, 0x00, 0x00, 0x00,                           //信道2的地址(如没有5字节长,则较低的位为有效位,下同)
  96                  0xaa, 0xbb, 0x12, 0x34, 0x83,                           //信道1的地址
  97                                                                                                          //地址的位数(B0100_00xx),
  98                                                                                                          //CRC位数(16位Bxxxx_xx1x,8位Bxxxx_xx0x,CRC允许(Bxxxx_xxx0,0禁止,1允许)
  99                  B1000_0001,//--------------------------------------------------------------------------------------------
             -----------------
 100          
 101                                                                  //位7,RX2_EN,为0只有信道1接收,为1允许2个信道同时接收
 102                                                                  //位6,CM,通讯方式,0:direct mode,1:ShockBurst mode,24e1只能为1
 103                                                                  //位5,RF DATA RATE,0:250Kbps,1:1Mbps,250Kbps时可提高接收灵敏度10dbm,1Mbps时要求16M晶体
 104                                                                  //位4,3,2,晶体频率,为该值+1再*4,如为2,则为12M晶体,3 ,16M
 105                                                                  //位1,0:发射功率:00:-20,        01:-10 10:-5 11:0dbm     
 106                  B0100_1111,//--------------------------------------------------------------------------------------------
             -----------------                                      
 107                                                                  //B0110_1111,1信道接收,shockBurst方式 ,1Mbps,16Mhz,0 DBm
 108                                                                  //B1111_111x,表示频率, 实际频率为2400+(B1111_111x >> 1)
 109                                                                  //位0,RX_EN,为0发送,为1接收
 110                  B0000_0100,                             //2402Mhz,接收方式       (最后一位 RX_EN 为1表接收方式)
 111          };                                                      //这里设定为发射模式
 112          */
 113          struct  RFConfig
 114          {
 115              unsigned char n;
C51 COMPILER V8.02   RF24E1                                                                10/05/2006 10:18:20 PAGE 3   

 116              unsigned char buf[15];
 117          };
 118          
 119          typedef struct RFConfig RFConfig;
 120          
 121          #define ADDR_INDEX  8   // Index to address bytes in RFConfig.buf 
 122          #define ADDR_COUNT  4   // Number of address bytes
 123          
 124          RFConfig idata tconf =  //定义在xram是因为buf[15]中的地址段可能要动态修改。
 125          {
 126              15,
 127              RF_DATA_LENGTH*8, RF_DATA_LENGTH*8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 128              0xaa, 0xbb, 0x12, 0x34, 0x81, 0x4f, 0x04
 129          };
 130          
 131          RFConfig idata rconf =  //定义在xram是因为buf[15]中的地址段可能要动态修改。
 132          {
 133              15,
 134              RF_DATA_LENGTH*8, RF_DATA_LENGTH*8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
 135              0xaa, 0xbb, 0x12, 0x34, 0x81, 0x4f, 0x05
 136          };
 137          
 138          //================================================================
 139          //函数功能:100us软件延时程序
 140          //filename:Delay100us()
 141          //input:
 142          //output:none
 143          //================================================================
 144          void Delay100us(unsigned char n)
 145          {
 146   1              unsigned char i;
 147   1              while(n--)
 148   1              for(i=0;i<35;i++)
 149   1                  ;
 150   1      }
 151          //================================================================
 152          //函数功能:毫秒软件延时程序
 153          //filename:Delay100us()
 154          //input:
 155          //output:none
 156          //================================================================
 157          
 158          void Delayms(unsigned char n)
 159          {
 160   1          unsigned char j;
 161   1          while(n--)
 162   1              for(j=0;j<10;j++)
 163   1                      Delay100us(10);
 164   1      
 165   1      }
 166          //================================================================
 167          //函数功能:片内SPI接口操作
 168          //filename:fSpiRdWr()
 169          //input:char 读操作,输入参数0
 170          //output:none
 171          //================================================================
 172          uchar SpiReadWrite(uchar dat){
 173   1              EXIF &= ~0x20;                                          // Clear SPI interrupt
 174   1              SPI_DATA = dat;                                         // Move byte to send to SPI data register
 175   1              while((EXIF & 0x20) == 0x00);                   // Wait until SPI hs finished transmitting
 176   1              return SPI_DATA;
 177   1      }
C51 COMPILER V8.02   RF24E1                                                                10/05/2006 10:18:20 PAGE 4   

 178          //================================================================
 179          //函数功能:将无线子系统设置为接收模式
 180          //on the spec.page26:
 181          //If nFRF2401 subsystem is to be configured for 2 channel RX in ShockBuust
 182          //a total of 120 bits must be shifted in during the first configuration after VDD is 
 183          //applied.Once the wanted protocol,modus and RF channed are set ,only one bit(RXEN) is 
 184          //shifted in to switch between RX and TX.So this function can do that like it.
 185          //On the spec.page28
 186          //After VDD is turned on shockburst configureation is done once and remains set whilst VDD is 
 187          //present.during operation only the first byte for frequecy channel and Rx/Tx switch need
 188          //to be changed!

⌨️ 快捷键说明

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