send8000(add_com_11.0592m_car).lst

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

LST
454
字号
C51 COMPILER V7.06   SEND8000_ADD_COM_11_0592M_CAR_                                        02/01/2007 15:32:19 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE SEND8000_ADD_COM_11_0592M_CAR_
OBJECT MODULE PLACED IN send8000(add_com_11.0592M_car).OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE send8000(add_com_11.0592M_car).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,count_car;
  12          sbit RLED   = P1^2;
  13          sbit REQ    = P3^7;
  14          sbit DIR    = P3^1;
  15          sbit PULSE  = P3^0;
  16          bit triggle=0,triggle1=0,trigglecom=0,lastdir=1,lastpulse=1;
  17          uint count=0;
  18          
  19          #define PWR_ON          0
  20          #define PWR_OFF         1
  21          #define MOTO_FORW       1       /* 01 */
  22          #define MOTO_BACK       2       /* 10 */
  23          #define MOTO_STOP       3       /* 11 */
  24          
  25          /************************************************************/
  26          #define E2ADRSYS                0x00    /* 本系统于EEPROM中地址 */
  27          uchar idata ADDRESS;    /**/
  28          uchar idata URT_buf;            /* 串口接收数据缓冲器   */
  29          uchar idata URT_cnt;            /* 数据接收计数器       */
  30          uchar idata URT_rcv,URT_cmd,URT_len;
  31          /************************************************************/
  32          uchar idata wrrdadr;            /* EEPROM操作(读/写)首地址 */
  33          uchar idata Databuf[16];        /* 16字节数据存储缓冲区 */
  34          uchar idata comrbuf[COMRBUFLEN],comrbufp=0;     /* 16字节数据存储缓冲区 */
  35          uchar idata comsbuf[COMSBUFLEN],comsbufp=0;     /* 16字节数据存储缓冲区 */
  36          #define BUFADR          Databuf[0]      /* 系统地址 */
  37          #define BUFPTST         Databuf[1]      /* 操作端口/状态 */
  38          #define BUFHOUR         Databuf[2]      /* 时间:时 */
  39          #define BUFMINT         Databuf[3]      /* 时间:分 */
  40          extern ulong RX_ADDRESS;
  41          #define RX_ADDRESS_0         RX_ADDRESS >> 24          //接收有效地址第1字节 Byte5       11100111
  42          #define RX_ADDRESS_1         (RX_ADDRESS >> 16) & 0xff //接收有效地址第2字节 Byte6       11100111 
  43          #define RX_ADDRESS_2         (RX_ADDRESS >> 8) & 0xff  //接收有效地址第3字节 Byte7       11100111
  44          #define RX_ADDRESS_3         RX_ADDRESS & 0xff         //接收有效地址第4字节 Byte8       11100111
  45          
  46          /*
  47          uchar idata TX_ADDRESS[4]={0x50,0x51,0x52,0x53};        /* RF接收方地址  */
  48          
  49          uchar idata TX_ADDRESS[4]={0xA0,0xA1,0xA2,0xA3};        /* RF接收方地址  */
  50          /************************************************************/
  51          uchar idata tim_cnt;    /* 定时计数器   */
  52          uchar idata tim_scd;    /* 秒计数器     */
  53          uchar idata tim_mnt;
  54          uchar idata tim_hur;
  55          bit bdata Flag_scd;     /* 1秒标志位    */
C51 COMPILER V7.06   SEND8000_ADD_COM_11_0592M_CAR_                                        02/01/2007 15:32:19 PAGE 2   

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

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

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

⌨️ 快捷键说明

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