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

📄 send8000(add_com).lst

📁 基于89c2051开发的ptr8000一对多无线通信程序.
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   SEND8000_ADD_COM_                                                     01/19/2007 16:22:27 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SEND8000_ADD_COM_
OBJECT MODULE PLACED IN send8000(add_com).OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE send8000(add_com).c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #define __SRC
   2                  #include "Config.h"
   3          #undef  __SRC
   4          
   5          #define HALFSECTICKS 500 //12
   6          #define SECTICKS     1000 //24
   7          #define COMRBUFLEN   16
   8          #define COMSBUFLEN   16
   9          uchar TLV=0x00; //0xb0;      //Now is 1000 times per seconds; //for 18432000,
  10          uchar THV=0xfa; //0xff;      //                        
  11          uchar temptl0,tempth0;
  12          sbit RLED   = P1^2;
  13          sbit GLED   = P1^3;
  14          sbit IRED   = P3^7;
  15          bit triggle=0,triggle1=0,trigglecom=0;
  16          uint count=0;
  17          
  18          #define PWR_ON          0
  19          #define PWR_OFF         1
  20          #define MOTO_FORW       1       /* 01 */
  21          #define MOTO_BACK       2       /* 10 */
  22          #define MOTO_STOP       3       /* 11 */
  23          
  24          /************************************************************/
  25          #define E2ADRSYS                0x00    /* 本系统于EEPROM中地址 */
  26          uchar idata ADDRESS;    /**/
  27          uchar idata URT_buf;            /* 串口接收数据缓冲器   */
  28          uchar idata URT_cnt;            /* 数据接收计数器       */
  29          uchar idata URT_rcv,URT_cmd,URT_len;
  30          /************************************************************/
  31          uchar idata wrrdadr;            /* EEPROM操作(读/写)首地址 */
  32          uchar idata Databuf[16];        /* 16字节数据存储缓冲区 */
  33          uchar idata comrbuf[COMRBUFLEN],comrbufp=0;     /* 16字节数据存储缓冲区 */
  34          uchar idata comsbuf[COMSBUFLEN],comsbufp=0;     /* 16字节数据存储缓冲区 */
  35          #define BUFADR          Databuf[0]      /* 系统地址 */
  36          #define BUFPTST         Databuf[1]      /* 操作端口/状态 */
  37          #define BUFHOUR         Databuf[2]      /* 时间:时 */
  38          #define BUFMINT         Databuf[3]      /* 时间:分 */
  39          extern ulong RX_ADDRESS;
  40          #define RX_ADDRESS_0         RX_ADDRESS >> 24          //接收有效地址第1字节 Byte5       11100111
  41          #define RX_ADDRESS_1         (RX_ADDRESS >> 16) & 0xff //接收有效地址第2字节 Byte6       11100111 
  42          #define RX_ADDRESS_2         (RX_ADDRESS >> 8) & 0xff  //接收有效地址第3字节 Byte7       11100111
  43          #define RX_ADDRESS_3         RX_ADDRESS & 0xff         //接收有效地址第4字节 Byte8       11100111
  44          
  45          /*
  46          uchar idata TX_ADDRESS[4]={0x50,0x51,0x52,0x53};        /* RF接收方地址  */
  47          
  48          uchar idata TX_ADDRESS[4]={0xA0,0xA1,0xA2,0xA3};        /* RF接收方地址  */
  49          /************************************************************/
  50          uchar idata tim_cnt;    /* 定时计数器   */
  51          uchar idata tim_scd;    /* 秒计数器     */
  52          uchar idata tim_mnt;
  53          uchar idata tim_hur;
  54          bit bdata Flag_scd;     /* 1秒标志位    */
  55          
C51 COMPILER V7.06   SEND8000_ADD_COM_                                                     01/19/2007 16:22:27 PAGE 2   

  56          /* 波特率发生器的初值fosc=7.3728MHz/(2*DIVM)=1.8432MHz */
  57          /* 设置串口波特率 = Fosc / ((BRGR1,BRGR0)+16) */
  58          #define BRGR1_DATA      0x00    /* 9600BPS = 00B0H */
  59          #define BRGR0_DATA      0xB0    /* 2400BPS = 1DF0H */
  60          
  61          /*==========================================================*/
  62          void Spi_init(void);
  63          void Config905(void);                   /* 配置nRF905 */
  64          void ChangeMode(uchar num);             /* RF模式配置 */
  65          void RF905_Write(uchar RFcmd,uchar *RFdata);    /* 配置nRF905写地址/数据 */
  66          void RF905_Read(uchar RFcmd,uchar *RFdata);     /* 配置nRF905读地址/数据 */
  67          void Delayus(uchar xus);
  68          
  69          void Delayms(uint xms)
  70          {       
  71   1              //uint i = xus;
  72   1          uint startc,endc;
  73   1          startc=count;
  74   1          endc=count;
  75   1              while((endc+SECTICKS-startc)%SECTICKS < xms) endc=count;
  76   1      }       
  77          
  78          /*==========================================================*/
  79          /*  功能:查询方式对地址范围为0x00~0xFF之间的EEPROM字节编程(写) */
  80          /*  入口:      ptr,写入数据首地址
  81          /*                      e2adr,写入EEPROM首地址
  82          /*                      length,写入数据长度     
  83          /*      出口:  无。
  84          /************************************************************/
  85          /*
  86          void eeprom_write(uchar e2adr,uchar *ptr,uchar length)
  87          {
  88                  uchar i,j;
  89                  i=j=0;
  90                  for(i=0;i<length;i++)
  91                  {       
  92                          j=0;
  93                          DEECON = 0;
  94                          DEEDAT = ptr[i];
  95                          DEEADR = e2adr;
  96                          while(j==0)j=DEECON&0x80;
  97                          e2adr++;
  98                  }
  99          }
 100          */
 101          /*==========================================================*/
 102          /*  功能:查询方式对地址范围为0x00~0xFF之间的EEPROM字节编程(读) */
 103          /*  入口:      ptr,写入数据首地址
 104          /*                      e2adr,写入EEPROM首地址
 105          /*                      length,写入数据长度     
 106          /*      出口:  无。
 107          /************************************************************/
 108          /*
 109          void eeprom_read(uchar e2adr,uchar *ptr,uchar length)
 110          {
 111                  uchar i,j;
 112                  i=j=0;
 113                  for(i=0;i<length;i++)
 114                  {       
 115                          j=0;
 116                          DEECON = 0;
 117                          DEEADR = e2adr;
C51 COMPILER V7.06   SEND8000_ADD_COM_                                                     01/19/2007 16:22:27 PAGE 3   

 118                          while(j==0)j=DEECON&0x80;
 119                          ptr[i] = DEEDAT;
 120                          e2adr++;
 121                  }
 122          }
 123          */
 124          void uart_init(void)
 125          {
 126   1              //SCON=0x50;    /* 串行口为方式1   SM2=0,REN=1 */
 127   1      /*      PCON|=0x40;     /* SMOD0=1,使用FE标志位(与SSTAT.3是同一标志) */
 128   1              //PCON=0x00;
 129   1              //SSTAT=0x20;   /* 禁止双缓冲使能,中断独立,每发送一字节产生一次中断 */
 130   1      /* 设置串口波特率:Fosc / ((BRGR1,BRGR0)+16) */
 131   1              //BRGCON=0x00;  /* 关波特率发生器 */
 132   1              //BRGR1=BRGR1_DATA;
 133   1              //BRGR0=BRGR0_DATA;
 134   1              //BRGCON=0x03;  /* 打开串口波特率发生器,使用串口波特率发生器 */
 135   1              ES=1;   /* 允许接收中断 */
 136   1              //EST=0;        /* 禁止发送中断 */
 137   1              //RI=0;
 138   1              //TI=0;
 139   1              SCON  = 0x50;                   /* SCON: mode 1, 8-bit UART, enable rcvr      */
 140   1          TMOD |= 0x21;               /* TMOD: timer 1, mode 2, 8-bit reload        */
 141   1          TH1   = 0xfb; //9600bps 0xe8; //1200bps,0xfd;               //9600bps for 11.0592M /* TH1:  reload val
             -ue for 1200 baud @ 16MHz   */
 142   1          TR1   = 1;                  /* TR1:  timer 1 run                          */
 143   1          TI    = 1;                  /* TI:   set TI to send first char of UART    */
 144   1      }
 145          
 146          /*=================================================*/
 147          /*发送数据子程序*/
 148          void mscom_snd(uchar *ptr,uchar length)
 149          {
 150   1              uchar i;
 151   1              for(i=0;i<length;i++)
 152   1              {       SBUF=ptr[i];
 153   2                      while(TI==0);
 154   2                      TI=0;
 155   2              }
 156   1      }
 157          /*
 158          void mscom_byte(uchar sndat)
 159          {
 160                  SBUF=sndat;
 161                  while(TI==0);
 162                  TI=0;
 163          }
 164          */
 165          /**************************************************/
 166          /***********  串口(Rx)中断服务子程序  *************/
 167          void Mscom_rcv(void) interrupt 4 using 1
 168          {
 169   1              if(RI==1)
 170   1              {
 171   2                      RI=0;
 172   2                      //URT_rcv=SBUF;
 173   2                      comrbuf[comrbufp]=SBUF;
 174   2                      if(comrbuf[comrbufp]=='E' && comrbuf[(comrbufp+COMRBUFLEN-1)%COMRBUFLEN]==0 && comrbuf[(comrbufp+COMRBUF
             -LEN-4)%COMRBUFLEN]=='S')
 175   2                  {
 176   3                       //comsbuf[12]=comrbuf[(comrbufp+COMRBUFLEN-3)%COMRBUFLEN];
 177   3                       //comsbuf[13]=comrbuf[(comrbufp+COMRBUFLEN-2)%COMRBUFLEN];
C51 COMPILER V7.06   SEND8000_ADD_COM_                                                     01/19/2007 16:22:27 PAGE 4   

 178   3               if(comrbuf[(comrbufp+COMRBUFLEN-3)%COMRBUFLEN]==RX_ADDRESS_0) trigglecom=1;
 179   3                      }
 180   2                      if(++comrbufp==COMRBUFLEN) comrbufp=0;
 181   2                      //mscom_byte(URT_rcv);                          
 182   2              }/* 串口接收程序结束 */
 183   1      }/* 串口中断程序结束 */
 184          
 185          
 186          /****************************************************************/
 187          //////////Timer0 interrupt//////
 188          
 189          void t0int() interrupt 1
 190          {
 191   1       temptl0=TL0;
 192   1       tempth0=TH0;
 193   1       TH0=THV+tempth0;
 194   1       TL0=TLV+temptl0+10;
 195   1       GLED=~IRED; //Led help.
 196   1       count++;
 197   1       if(count==HALFSECTICKS)
 198   1       {
 199   2        triggle=1;
 200   2        comsbuf[13]=P3;
 201   2        RLED=1;
 202   2       }
 203   1       if(count==SECTICKS)
 204   1       {
 205   2        count=0;
 206   2        triggle=1;

⌨️ 快捷键说明

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