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

📄 receive.lst

📁 GPS开发 NEA1803 51单片机与12864 由串口中断收取数据 显示经度纬度 高度 速度 时间 使用卫星数
💻 LST
📖 第 1 页 / 共 2 页
字号:
 187   2                             }
 188   1                       }
 189          //系统初始化
 190          void sys_init() 
 191          {
 192   1      //     unsigned char i;
 193   1           SCON = 0x50;      /* SCON: mode 1, 8-bit UART, enable rcvr */
 194   1           TMOD = 0x200;      /* TMOD: timer 1, mode 2, 8-bit reload */
 195   1           TH1=TL1=0xfa;       /* TH1: reload value for 4800 baud @ 11.059MHz */
 196   1           TR1 = 1;            /* TR1: timer 1 run */
 197   1           Init_Lcd12864();            //初始化LCD
 198   1               ResetCursor(0,1);
 199   1           printf("GPS Monitor V1.2");
 200   1               ClearAS();
 201   1           IE=0x90;                  //开总中断、串口中断
 202   1      }
 203          
 204          //串口接收中断
 205          void uart(void) interrupt 4
 206          {
 207   1           unsigned char tmp;
 208   1           if(RI){
 209   2                 tmp=SBUF;
 210   2                 switch(tmp)
 211   2                         {
 212   3                       case '$':
 213   3                             cmd_number=0;            //命令类型清空
 214   3                             mode=1;                  //接收命令模式
 215   3                             byte_count=0;            //接收位数清空
 216   3                             break;
 217   3                       case ',':
 218   3                             seg_count++;            //逗号计数加1
 219   3                             byte_count=0;
 220   3                             break;
 221   3                       case '*':
 222   3                             switch(cmd_number)
 223   3                                                 {
 224   4                                   case 1:
 225   4                                         buf_full|=0x01;
 226   4                                         break;
 227   4                                   case 2:
 228   4                                         buf_full|=0x02;
 229   4                                         break;
 230   4                                   case 3:
 231   4                                         buf_full|=0x04;
 232   4                                         break;
 233   4                             }
 234   3                             mode=0;
 235   3                             break;
 236   3                       default:
 237   3                             if(mode==1){
 238   4                                   //命令种类判断
 239   4                                   cmd[byte_count]=tmp;                  //接收字符放入类型缓存
 240   4                                   if(byte_count>=4){                        //如果类型数据接收完毕,判断类型
 241   5                                         if(cmd[0]=='G'){
C51 COMPILER V8.02   RECEIVE                                                               07/15/2008 18:31:32 PAGE 5   

 242   6                                               if(cmd[1]=='P'){
 243   7                                                     if(cmd[2]=='G'){
 244   8                                                           if(cmd[3]=='G'){
 245   9                                                                 if(cmd[4]=='A'){
 246  10                                                                       cmd_number=1;
 247  10                                                                       mode=2;
 248  10                                                                       seg_count=0;
 249  10                                                                       byte_count=0;
 250  10                                                                 }
 251   9                                                           }
 252   8                                                           else if(cmd[3]=='S'){
 253   9                                                                 if(cmd[4]=='V'){
 254  10                                                                       cmd_number=2;
 255  10                                                                       mode=2;
 256  10                                                                       seg_count=0;
 257  10                                                                       byte_count=0;
 258  10                                                                 }
 259   9                                                           }
 260   8                                                     }
 261   7                                                     else if(cmd[2]=='R'){
 262   8                                                           if(cmd[3]=='M'){
 263   9                                                                 if(cmd[4]=='C'){
 264  10                                                                       cmd_number=3;
 265  10                                                                       mode=2;
 266  10                                                                       seg_count=0;
 267  10                                                                       byte_count=0;
 268  10                                                                 }
 269   9                                                           }
 270   8                                                     }
 271   7                                               }
 272   6                                         }
 273   5                                   }
 274   4                             }
 275   3                             else if(mode==2){
 276   4                                   //接收数据处理
 277   4                                   switch (cmd_number){
 278   5                                         case 1:                        //类型1数据接收。GPGGA 
 279   5                                                                       //  $GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M, , , ,0000*18
 280   5                                               switch(seg_count){
 281   6                                                     case 2:                                                //纬
             -度处理
 282   6                                                           if(byte_count<9){
 283   7                                                                 WD[byte_count]=tmp;
 284   7                                                           }
 285   6                                                           break;
 286   6                                                     case 3:                                                //纬
             -度方向处理
 287   6                                                           if(byte_count<1){
 288   7                                                                 WD_a=tmp;
 289   7                                                           }
 290   6                                                           break;
 291   6                                                     case 4:                                                //经
             -度处理
 292   6                                                           if(byte_count<10){
 293   7                                                                 JD[byte_count]=tmp;
 294   7                                                           }
 295   6                                                           break;
 296   6                                                     case 5:                                                //经
             -度方向处理
 297   6                                                           if(byte_count<1){
 298   7                                                                 JD_a=tmp;
 299   7                                                           }
C51 COMPILER V8.02   RECEIVE                                                               07/15/2008 18:31:32 PAGE 6   

 300   6                                                           break;
 301   6                                                     case 6:                                                //定
             -位判断
 302   6                                                           if(byte_count<1){
 303   7                                                                 lock=tmp;
 304   7                                                           }
 305   6                                                           break;
 306   6                                                     case 7:                                                //定
             -位使用的卫星数
 307   6                                                           if(byte_count<2){
 308   7                                                                 use_sat[byte_count]=tmp;
 309   7                                                           }
 310   6                                                           break;
 311   6                                                     case 9:                                                //高
             -度处理
 312   6                                                           if(byte_count<6){
 313   7                                                                 high[byte_count]=tmp;
 314   7                                                           }
 315   6                                                           break;
 316   6                                               }
 317   5                                               break;
 318   5                                         case 2:                        //类型2数据接收。GPGSV
 319   5                                                                         //$GPGSV,2,1,07,07,79,048,42,02,51,062,43,26,36,256,42,27,27,138,42*71
 320   5                                               switch(seg_count){
 321   6                                                     case 3:                                                //天
             -空中的卫星总数
 322   6                                                           if(byte_count<2){
 323   7                                                                 total_sat[byte_count]=tmp;
 324   7                                                           }
 325   6                                                           break;
 326   6                                               }
 327   5                                               break;
 328   5                                         case 3:                        //类型3数据接收。GPRMC
 329   5                                              //$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598, ,*10
 330   5                                               switch(seg_count){
 331   6                                                     case 1:
 332   6                                                           if(byte_count<6){                        //时间处理
 333   7                                                                 time[byte_count]=tmp;      
 334   7                                                           }
 335   6                                                           break;
 336   6                                                     case 7:                                                //速
             -度处理
 337   6                                                           if(byte_count<5){
 338   7                                                                 speed[byte_count]=tmp;
 339   7                                                           }
 340   6                                                           break;
 341   6                                                     case 8:                                                //方
             -位角处理
 342   6                                                           if(byte_count<5){
 343   7                                                                 angle[byte_count]=tmp;
 344   7                                                           }
 345   6                                                           break;
 346   6                                               }
 347   5                                               break;
 348   5                                   }
 349   4                             }
 350   3                             byte_count++;            //接收数位加1
 351   3                             break;
 352   3                 }
 353   2           }
 354   1           RI=0;
 355   1      }
C51 COMPILER V8.02   RECEIVE                                                               07/15/2008 18:31:32 PAGE 7   



MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1228    ----
   CONSTANT SIZE    =     50    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     64       8
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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