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

📄 send8000.lst

📁 基于89c2051开发的ptr8000一对多无线通信程序.
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.06   SEND8000                                                              01/10/2007 14:11:23 PAGE 1   


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

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

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

 178   2              }/* 串口接收程序结束 */
 179   1      }/* 串口中断程序结束 */
 180          
 181          
 182          /****************************************************************/
 183          //////////Timer0 interrupt//////
 184          
 185          void t0int() interrupt 1
 186          {
 187   1       temptl0=TL0;
 188   1       tempth0=TH0;
 189   1       TH0=THV+tempth0;
 190   1       TL0=TLV+temptl0+10;
 191   1       count++;
 192   1       if(count==HALFSECTICKS)
 193   1       {
 194   2        triggle=1;
 195   2        RLED=1;
 196   2       }
 197   1       if(count==SECTICKS)
 198   1       {
 199   2        count=0;
 200   2        triggle=1;

⌨️ 快捷键说明

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