send8000(add_com_11.0592m).lst

来自「基于89c2051开发的ptr8000一对多无线通信程序.」· LST 代码 · 共 448 行 · 第 1/2 页

LST
448
字号
C51 COMPILER V7.06   SEND8000_ADD_COM_11_0592M_                                            01/19/2007 16:36:53 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SEND8000_ADD_COM_11_0592M_
OBJECT MODULE PLACED IN send8000(add_com_11.0592M).OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE send8000(add_com_11.0592M).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_11_0592M_                                            01/19/2007 16:36:53 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_11_0592M_                                            01/19/2007 16:36:53 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 v
             -alue for 1200 baud @ 16MHz   */
 142   1          TH1   = 0xfd; //9600bps 0xe8; //1200bps,0xfd;               //9600bps for 11.0592M /* TH1:  reload val
             -ue for 1200 baud @ 16MHz   */
 143   1          TR1   = 1;                  /* TR1:  timer 1 run                          */
 144   1          TI    = 1;                  /* TI:   set TI to send first char of UART    */
 145   1      }
 146          
 147          /*=================================================*/
 148          /*发送数据子程序*/
 149          void mscom_snd(uchar *ptr,uchar length)
 150          {
 151   1              uchar i;
 152   1              for(i=0;i<length;i++)
 153   1              {       SBUF=ptr[i];
 154   2                      while(TI==0);
 155   2                      TI=0;
 156   2              }
 157   1      }
 158          /*
 159          void mscom_byte(uchar sndat)
 160          {
 161                  SBUF=sndat;
 162                  while(TI==0);
 163                  TI=0;
 164          }
 165          */
 166          /**************************************************/
 167          /***********  串口(Rx)中断服务子程序  *************/
 168          void Mscom_rcv(void) interrupt 4 using 1
 169          {
 170   1              if(RI==1)
 171   1              {
 172   2                      RI=0;
 173   2                      //URT_rcv=SBUF;
 174   2                      comrbuf[comrbufp]=SBUF;
 175   2                      if(comrbuf[comrbufp]=='E' && comrbuf[(comrbufp+COMRBUFLEN-1)%COMRBUFLEN]==0 && comrbuf[(comrbufp+COMRBUF
             -LEN-4)%COMRBUFLEN]=='S')
 176   2                  {
C51 COMPILER V7.06   SEND8000_ADD_COM_11_0592M_                                            01/19/2007 16:36:53 PAGE 4   

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

⌨️ 快捷键说明

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