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

📄 nfr401.lst

📁 nrf401
💻 LST
字号:
C51 COMPILER V6.12  NFR401                                                                 07/18/2006 11:25:03 PAGE 1   


C51 COMPILER V6.12, COMPILATION OF MODULE NFR401
OBJECT MODULE PLACED IN .\nfr401.OBJ
COMPILER INVOKED BY: d:\toolfiles\Keil\C51\BIN\C51.EXE .\nfr401.c DEBUG OBJECTEXTEND

stmt level    source

   1          //nrf401实验c51程序 
   2          
   3          /*----------------------------------------------------------------------
   4          nrf401实验程序
   5          雁塔菜农HotPower@126.com
   6          -----------------------------------------------------------------------*/
   7          #include <AT89X52.h>
   8          #include <stdio.h>
   9          #include <absacc.h>
  10          #include <intrins.h>
  11          #include <nrf401.h>
*** ERROR 318 IN LINE 11 OF .\nfr401.c: can't open file 'nrf401.h'
  12          #include <hotins.h>
*** ERROR 318 IN LINE 12 OF .\nfr401.c: can't open file 'hotins.h'
  13          
  14          #define T0_8mS -8000
  15          #define T1_8mS -8000
  16          #define T2_1_25mS -576 //-1250*0.9216=1.25MS
  17          
  18          
  19          /*----------------------------------------------------------------------
  20                  系统函数
  21          -----------------------------------------------------------------------*/
  22          void MainInit(void);//系统初始化
  23          void ClrWdt(void);//喂狗
  24          void nRFInit(void);
  25          void SystemInit(void);//系统初始化
  26          void SystemSetup(void);//系统设置
  27          void SystemIoInit(void);//系统接口初始化
  28          void UserSetup(void);//用户运行环境设置
  29          void TimeInit(void);
  30          unsigned char crc8r(unsigned char crcbyte);
  31          unsigned int crc16r(unsigned int crcword, unsigned int crc);
  32          unsigned int GetTXBuffWord(unsigned char ledpos);
  33          void SetTXBuffWord(unsigned char ledpos, unsigned int val);
  34          unsigned int GetRXBuffWord(unsigned char ledpos);
  35          void SetRXBuffWord(unsigned char ledpos, unsigned int val);
  36          
  37          
  38          SystemData SystemBuffers;//申请系统数据结构
*** ERROR C129 IN LINE 38 OF .\NFR401.C: missing ';' before 'SystemBuffers'
  39          
  40          SioData SioBuffers;
  41          
  42          /*-----------------------------------------
  43                   主程序初始化
  44          -------------------------------------------*/
  45          void MainInit(void)//系统初始化
  46          {
  47            SystemIoInit();//系统接口初始化
  48            ClrWdt();//清除看门狗计数器
  49            if (SystemBuffers.RamTest != 0x55aa) {//内存测试
  50          SystemInit();//系统上电初始化
  51            }
  52            SystemSetup();//系统运行环境设置
C51 COMPILER V6.12  NFR401                                                                 07/18/2006 11:25:03 PAGE 2   

  53            UserSetup();//用户运行环境设置
  54          }
  55          
  56          void SystemInit(void)//系统初始化
  57          {
  58            SystemBuffers.RamTest = 0x55aa;//内存初始化
  59          }
  60          
  61          void SystemSetup(void)//系统设置
  62          {
  63            AUXR = 0x01;//关闭EMI
  64            nRFInit();
  65            TimeInit();
  66            IP = 0x10;//中断优先级EX1>ET2>ET0>EX0>ES
  67            IE = 0xb4;//开中断EA,ET2,ET1,EX1,ET0
  68          }
  69          
  70          void UserSetup(void)//用户运行环境设置
  71          {
  72          }
  73          
  74          void SystemIoInit(void)
  75          {
  76            IE = 0x00;//关闭中断
  77            P0 = 0xff;//P0口初始化
  78            P1 = 0xff;//P1口初始化
  79            P2 = 0xff;//P2口初始化
  80            P3 = 0xff;//P3口初始化
  81          }
  82          
  83          void TimeInit()
  84          {
  85            TMOD = 0x21;//定时器0,1为方式1(十六位定时器)
  86            TCON = 0x55;//启动定时器TR1EQUTR0EQU1,IT1EQUIT0EQU1
  87          /*----------------------------------
  88                定时器0定时参数设置
  89          ----------------------------------*/
  90            TL0 = 0;
  91            TH0 = 0;
  92            TR0 = 1;//启动定时器0
  93          /*----------------------------------
  94                定时器0定时参数设置
  95          ----------------------------------*/
  96            TL1 = SIO_BPS;
  97            TH1 = SIO_BPS;
  98            PCON = 0x00;
  99            TR1 = 1;//启动定时器1
 100          /*----------------------------------
 101                定时器2定时参数设置
 102          ----------------------------------*/
 103            TIMEER2 = T2_1_25mS;
 104            RCAP    = T2_1_25mS;
 105            TR2     = 1;//启动定时器2
 106          }
 107          
 108          void nRFInit(void)
 109          {
 110            nRFCS    = 0;//433.92MHz//1//434.33MHz
 111            nRFTXEN  = 0;//接收
 112            nRFPWR   = 1;//上电
 113            SioBuffers.TXMAXCount = 0;
 114            SioBuffers.TXCount = 0;
C51 COMPILER V6.12  NFR401                                                                 07/18/2006 11:25:03 PAGE 3   

 115          //  SioBuffers.RXCount = 0;
 116            SCON     = 0x50;          /* SCON: mode 2, 9-bit UART, enable rcvr      */
 117            SioBuffers.RXCount = 16;
 118          }
 119          
 120          
 121          /*------------------------------------
 122                   外部INT0中断服务程序
 123          ------------------------------------*/
 124          void int0proc() interrupt IE0_VECTOR// using 1
 125          {
 126          }
 127          
 128          /*------------------------------------
 129                   定时器T0中断服务程序
 130          ------------------------------------*/
 131          void t0proc() interrupt TF0_VECTOR// using 1
 132          {
 133          }
 134          
 135          /*------------------------------------
 136                   外部INT1中断服务程序
 137          ------------------------------------*/
 138          void int1proc() interrupt IE1_VECTOR using 1
 139          {
 140          }
 141          
 142          /*------------------------------------
 143                   定时器T1中断服务程序
 144          ------------------------------------*/
 145          void t1proc() interrupt TF1_VECTOR// using 1
 146          {
 147          }
 148          
 149          /*------------------------------------
 150                   串口SIO中断服务程序
 151          ------------------------------------*/
 152          void sioproc() interrupt SIO_VECTOR// using 1
 153          {
 154          unsigned char i;
 155          unsigned int crc;
 156            if (RI) {//接收中断
 157              RI = 0;
 158          if (!nRFTXEN && SioBuffers.RXCount) {//每次接收20个数据
 159                i = SBUF;
 160                SioBuffers.RXCount --;
 161                SioBuffers.RXBuffers[19 - SioBuffers.RXCount] = i;
 162             switch(SioBuffers.RXCount) {
 163               case 19:
 164                   if (i != 0x55) SioBuffers.RXCount = 20;
 165                     break;
 166            case 18:
 167                   if (i != 0xaa) SioBuffers.RXCount = 20;
 168                     break;
 169            case 0:
 170                   crc = 0;
 171                for (i = 1; i <= 8; i ++) {
 172                           crc = crc16r(GetRXBuffWord(i + i), crc);
 173                }
 174                         if (crc != GetRXBuffWord(18))
 175                           SioBuffers.RXCount = 20;
 176                 else {
C51 COMPILER V6.12  NFR401                                                                 07/18/2006 11:25:03 PAGE 4   

 177                           nRFTXEN = 1;//发送
 178                        for (i = 0; i < 20; i ++) {
 179                       SioBuffers.TXBuffers[i] = SioBuffers.RXBuffers[i];
 180                     }
 181               SioBuffers.TXMAXCount = TX_MAXCount;
 182                           SioBuffers.TXCount = TX_Count + 32;
 183               TI = 1;//接收结束立即转为发送
 184                }
 185                   break;
 186             }
 187          } 
 188            }
 189            if (TI) {//发送中断
 190              TI = 0;
 191              if (nRFTXEN && SioBuffers.TXCount) {
 192                SioBuffers.TXCount --;
 193                if (SioBuffers.TXCount > 19) {
 194               SBUF = 0x00;
 195          //        SBUF = 0xff;
 196                }
 197                else {
 198                  SBUF = SioBuffers.TXBuffers[19 - SioBuffers.TXCount];
 199                }
 200               if (SioBuffers.TXCount == 0) {
 201               if (SioBuffers.TXMAXCount) {
 202              SioBuffers.TXMAXCount --;
 203              SioBuffers.TXCount = TX_Count;
 204            }
 205                  else {
 206                    nRFTXEN = 0;//发送结束立即转为接收
 207                    SioBuffers.RXCount = 20;
 208            }
 209             }
 210          }
 211            }
 212          }
 213          
 214          /*------------------------------------
 215                   定时器T2中断服务程序(1.25mS)
 216          ------------------------------------*/
 217          void t2proc() interrupt TF2_VECTOR// using 2
 218          {
 219          //unsigned char i;
 220          //unsigned int crc;
 221            TF2 = 0;
 222            if (PCON & GF0) {//中断是从主循环内跳入的才能喂狗
 223              ClrWdt();//清除看门狗计数器
 224              PCON &= ~GF0;//清除标志 
 225            }
 226            SystemBuffers.T2Count ++; 
 227          
 228          
 229          
 230          //  if (SystemBuffers.T2Count >= 80) {//100mS到
 231            if (SystemBuffers.T2Count >= 400) {//500mS到
 232              SystemBuffers.T2Count = 0;
 233          //if (((SystemBuffers.T2Count & 3) == 0) && (SioBuffers.TXCount == 0)) {//10mS
 234          //if (SioBuffers.TXCount == 0) {//10mS
 235          /*
 236          if (!ES && (SioBuffers.TXCount == 0)) {//10mS
 237            SioBuffers.TXCount = 18;
 238            crc =GetTXBuffWord(2);
C51 COMPILER V6.12  NFR401                                                                 07/18/2006 11:25:03 PAGE 5   

 239            crc = crc16r(crc);
 240            SetTXBuffWord(4, crc);
 241            nRFTXEN = 1;//发送
 242            TI = 1;
 243            ES = 1;
 244          }
 245          */ 
 246          //    SioBuffers.TXCount = 8;
 247          //    nRFTXEN = 1;//发送
 248          // SBUF = SioBuffers.TXBuffers[0];
 249          //    ES = 1;
 250            }
 251          }
 252          
 253          void ClrWdt(void)//喂狗
 254          {
 255            WDTRST = 0x1e;//89s52内狗
 256            WDTRST = 0xe1;//89s52内狗
 257          }
 258          
 259          unsigned char crc8r(unsigned char crcbyte)
 260          { 
 261          unsigned char i,crc; 
 262            crc = 0;
 263            for(i = 0; i < 8; i++) { 
 264              if(((crc ^ crcbyte) & 0x01) == 0) crc >>= 1; 
 265              else{ 
 266                crc ^= 0x18;//0x18;//CRC=X8+X5+X4+1
 267                crc >>= 1; 
 268                crc |= 0x80; 
 269              } 
 270              crcbyte >>= 1; 
 271            }
 272            return crc; 
 273          }
 274          
 275          unsigned int crc16r(unsigned int crcword, unsigned int crc) 
 276          { 
 277          unsigned char i; 
 278            for(i = 0; i < 16; i++){ 
 279              if(((crc ^ crcword ) & 0x0001) == 0) crc >>= 1; 
 280              else{ 
 281                crc ^= 0x810;//0x0810;//CRC=X16+X12+X5+1 
 282                crc >>= 1; 
 283                crc |= 0x8000; 
 284              } 
 285              crcword >>= 1; 
 286            } 
 287            return crc; 
 288          } 
 289          
 290          unsigned int GetTXBuffWord(unsigned char ledpos)
 291          {
 292          unsigned char val1, val2;
 293          unsigned int val;
 294            val1 = SioBuffers.TXBuffers[ledpos];
 295            val2 = SioBuffers.TXBuffers[ledpos + 1];
 296            val = (val1 << 8) + val2;
 297            return val; 
 298          }
 299          
 300          void SetTXBuffWord(unsigned char ledpos, unsigned int val)
C51 COMPILER V6.12  NFR401                                                                 07/18/2006 11:25:03 PAGE 6   

 301          {
 302            SioBuffers.TXBuffers[ledpos]     = (val >> 8); 
 303            SioBuffers.TXBuffers[ledpos + 1] = val & 0xff;
 304          }
 305          
 306          unsigned int GetRXBuffWord(unsigned char ledpos)
 307          {
 308          unsigned char val1, val2;
 309          unsigned int val;
 310            val1 = SioBuffers.RXBuffers[ledpos];
 311            val2 = SioBuffers.RXBuffers[ledpos + 1];
 312            val = (val1 << 8) + val2;
 313            return val; 
 314          }
 315          
 316          void SetRXBuffWord(unsigned char ledpos, unsigned int val)
 317          {
 318            SioBuffers.RXBuffers[ledpos]     = (val >> 8); 
 319            SioBuffers.RXBuffers[ledpos + 1] = val & 0xff;
 320          } 
 321           

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

⌨️ 快捷键说明

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