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

📄 main.lst

📁 此程序实现无线信标定位
💻 LST
字号:
C51 COMPILER V7.06   MAIN                                                                  06/07/2008 15:27:35 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include<REG51.H>
   2          #include<stdio.h>
   3          
   4          sbit P3_3 = 0xB3;
   5          
   6          void delay(unsigned char n);
   7          
   8          /*接收语句:    $GPRMC,062321,V,3537.8333,N,13944.6667,E,000.0,000.0,030222,,*0C    */
   9          unsigned char data sentence[64]="GPRMC,062321,V,1234.5678,N,87654.3210,E,000.0,000.0,030222,,*0C";
  10          unsigned char data latitude[11];//="(244)6.5211N";
  11          unsigned char data longitude[12];//="(1210)0.1536E";    
  12          
  13          unsigned char acs2hex(unsigned char *string)
  14          {
  15   1              unsigned char a1,a2,rec_chs;
  16   1              if(*string < 0x30 || *string > 0x46 || *(string + 1) < 0x30 || *(string + 1) > 0x46)
  17   1              {
  18   2                      rec_chs = 0xff;
  19   2                      goto next;
  20   2              }
  21   1      
  22   1              if(*string < 0x40)
  23   1                      a1 = *string - 0x30;
  24   1              else
  25   1                      a1 = *string - 0x37;
  26   1              string ++;
  27   1              if(*string < 0x40)
  28   1                      a2 = *string - 0x30;
  29   1              else
  30   1                      a2 = *string - 0x37;
  31   1              rec_chs = (a1 << 4) + a2;
  32   1      next:   
  33   1              return rec_chs;
  34   1      }
  35          
  36          bit checksum(unsigned char *string)
  37          {
  38   1              unsigned char rec_chs,chs = 0,rchs[2];
  39   1              bit ans;
  40   1              for(;*string != '*';string ++)
  41   1              {
  42   2                      chs = chs ^ *string;
  43   2              }
  44   1              rchs[0] = *(string + 1);
  45   1              rchs[1] = *(string + 2);
  46   1              rec_chs = acs2hex(rchs);
  47   1              if(chs != rec_chs || rec_chs == 0xff)
  48   1              ans = 0;
  49   1              else
  50   1              ans = 1;
  51   1              return ans;
  52   1      }
  53          
  54          void port_init(void)
  55          {
C51 COMPILER V7.06   MAIN                                                                  06/07/2008 15:27:35 PAGE 2   

  56   1              TMOD=0x20;
  57   1              PCON=0;         //      SMOD=0
  58   1              SCON=0x50;      //  MODE 1              
  59   1              TH1=0xCC;       //600baud 12MHz oscillator frequence,SMOD=0
  60   1              TL1=0xCC;
  61   1              TR1=1;          //Start timer 1
  62   1      }
  63          
  64          
  65          
  66          void main()
  67          {
  68   1      
  69   1              unsigned char dflag,send_code;
  70   1              unsigned int mod;
  71   1              unsigned char i = 0,j = 0,k = 0;
  72   1      start:
  73   1              port_init(); 
  74   1      /*      dflag = 0;
  75   1      //      PWD = 0;
  76   1      /*      while(1)
  77   1              {       
  78   1                      while(!RI)
  79   1                      {}
  80   1                      if(SBUF == 'A')
  81   1                      break;
  82   1                      RI = 0;
  83   1              }       
  84   1              RI = 0; 
  85   1      
  86   1              while(1)
  87   1              {       
  88   1                      while(!RI)
  89   1                      {}
  90   1                      if(SBUF == '$')
  91   1                      break;
  92   1                      RI = 0;
  93   1              }       
  94   1              RI = 0; 
  95   1              
  96   1      //              接收数据  $GPRMC,062321,V,3537.8333,N,13944.6667,E,000.0,000.0,030222,,*0C
  97   1              for(i = 0;i < 63;i ++)
  98   1              {
  99   1                      while(!RI)
 100   1                      {}
 101   1                      sentence[i] = SBUF;
 102   1                      RI = 0;
 103   1              }
 104   1              REN = 0;                //      forbid recieve
 105   1      //      PWD = 1;
 106   1      
 107   1      //      if(~checksum(sentence))
 108   1      //              goto start;                             //      checksum wrong ! restart
 109   1      */
 110   1              for(i = 0;dflag < 7;i ++) 
 111   1              {
 112   2                      if(sentence[i] == ',')
 113   2                              dflag ++;
 114   2                      if(dflag == 3 && sentence[i] != ',')    
 115   2                      {
 116   3                              latitude[k] = sentence[i];
 117   3                              k ++;
C51 COMPILER V7.06   MAIN                                                                  06/07/2008 15:27:35 PAGE 3   

 118   3                      }
 119   2                      if(dflag == 4 && sentence[i] != ',') 
 120   2                      {
 121   3                              latitude[k] = sentence[i];
 122   3                              latitude[k + 1] = '\0';         //以字符串的方式结束
 123   3                      }
 124   2                      if(dflag == 5 && sentence[i] != ',')
 125   2                      {       
 126   3                              longitude[j] = sentence[i];
 127   3                              j ++;
 128   3                      }
 129   2                      if(dflag == 6 && sentence[i] != ',') 
 130   2                      {
 131   3                              longitude[j] = sentence[i];
 132   3                              longitude[j+1] = '\0';          //以字符串的方式结束
 133   3                      }
 134   2              }                                                                       // latitude[11]: (244)6.5211N   longitude[12]:  (1210)0.1536E
 135   1              
 136   1      //      TR1 = 1;                        //握手信号
 137   1              for(i = 0;i < 3;i ++)
 138   1              {
 139   2                      P3_3 = 1;
 140   2                      SBUF = 0x5A;
 141   2                      while(!TI)
 142   2                      {}
 143   2                      TI = 0;
 144   2                      P3_3 = 0;
 145   2                      delay(20);
 146   2              }
 147   1      //      TR1 = 0;
 148   1      
 149   1              for(i = 0;i < 14;i ++)
 150   1              {       
 151   2                      if(i < 7)
 152   2                      send_code = latitude[i + 3];
 153   2                      else
 154   2                      send_code = longitude[i - 3];
 155   2                      switch(send_code)
 156   2                      {       
 157   3                              case '0':       mod = 0xD4;break;       //      0b11010100 last bit odd check
 158   3                              case '1':       mod = 0xA5;break;       //      0b10100101
 159   3                              case '2':       mod = 0x2B;break;       //      0b00101011
 160   3                              case '3':       mod = 0x3C;break;       //      0b00111100
 161   3                              case '4':       mod = 0x4D;break;       //      0b01001101
 162   3                              case '5':       mod = 0xB2;break;       //      0b10110010
 163   3                              case '6':       mod = 0x66;break;       //      0b01100110
 164   3                              case '7':       mod = 0x71;break;       //      0b01110001
 165   3                              case '8':       mod = 0x8E;break;       //      0b10001110
 166   3                              case '9':       mod = 0x99;break;       //      0b10011001
 167   3                              case '.':       mod = 0x17;break;       //      0b00010111
 168   3                              case 'N':       mod = 0xE8;break;       //      0b11101000
 169   3                              case 'E':       mod = 0xC3;break;       //      0b11000011
 170   3                              case 'W':       mod = 0x00;break;       //      0b00000000
 171   3                              case 'S':       mod = 0xFF;break;       //      0b11111111
 172   3                              default:        break;                          //      wrong coded , noted
 173   3                      }
 174   2      //      TR1 = 1;
 175   2                      P3_3 = 1;
 176   2                      SBUF = mod;
 177   2                      while(!TI)
 178   2                      {}
 179   2                      TI = 0;
C51 COMPILER V7.06   MAIN                                                                  06/07/2008 15:27:35 PAGE 4   

 180   2                      P3_3 = 0;
 181   2                      delay(20);
 182   2              }
 183   1      //      TR1 = 0;
 184   1              goto start;
 185   1      }
 186          
 187          void delay(unsigned char n)
 188          // delay 0.5 * n ms
 189          {
 190   1              unsigned char i,j;
 191   1              for(i = 0;i < n;i ++)
 192   1              {
 193   2                      for(j = 0;j < 100;j ++)
 194   2                      {}
 195   2              }
 196   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    577    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     87      10
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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