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

📄 main.lst

📁 51单片机用IO模拟串口通信,只占用一个定时器
💻 LST
📖 第 1 页 / 共 2 页
字号:
 195   1                  
 196   1              send_str(command);
 197   1              send_str("\x0D");   //
 198   1      
 199   1      /*
 200   1      三秒钟内无回复,认为超时退出.
 201   1      */
 202   1              m = 500000;
 203   1              i = 0;
 204   1              while(m--)
 205   1              {
 206   2              
 207   2                if(BT_REC==0)
 208   2                {
 209   3                      ACK[i] =PGetChar();     
 210   3                      i+=1;
 211   3                      if(i>2 && (ACK[i-1]==0X0A && ACK[i-2]==0X0D))
 212   3                      break;                  
 213   3                }      
 214   2              
 215   2              }
 216   1      
 217   1       return(i);       //回复收到的数据长度.
 218   1      
 219   1      }
 220          
 221          
 222          unsigned long delay;
 223          void main()
 224          {
 225   1              byte i,Len;
 226   1      
 227   1              SCON= 0X50;                             //定议串口
 228   1              TMOD=0x22;                              /*定时器1为工作模式2(8位自动重装),0为模式2(8位自动重装) */
 229   1              PCON=0X80;                              //波特率加倍
 230   1              
 231   1              TR0=0; 
 232   1              TF0=0;
 233   1              TH0 =256-80;                    //用IO模拟的串口速率为 19200.
 234   1              TL0=TH0;
 235   1              ET0=1;                                  //允许定时器0中断
 236   1      /*
 237   1              TH1 = 0XFB;                             //单片机的串口速度为19200,测试用
 238   1              TL1 = 0XFB;
 239   1      */
 240   1      
 241   1              TH1 = 0XF6;                             //单片机的串口速度为9600,用于接收GPS数据.
C51 COMPILER V7.10   MAIN                                                                  04/20/2007 12:45:23 PAGE 5   

 242   1              TL1 = 0XF6;                                       
 243   1              TR1 = 1;                                //启动定时器1
 244   1              ES = 1;                                 //允许串口中断
 245   1      
 246   1      
 247   1              EA=1;                                   //开总中断
 248   1              delay = 0;
 249   1              REN = 1;
 250   1      
 251   1      //      g_GPS =0;
 252   1              while(1)
 253   1              {   
 254   2      
 255   2                      delay++;
 256   2                      if(delay>=600000L)
 257   2                      {
 258   3                          Len=0;
 259   3                              Len =SendAT("ATE0",pData);
 260   3                              for(i=0;i<Len;i++)
 261   3                              PSendChar(pData[i]);            
 262   3                              memset(pData,0,200);
 263   3                              delay=0;
 264   3                              RxFlag=0;
 265   3                              
 266   3                      
 267   3                      }
 268   2      
 269   2                 if(RxFlag)
 270   2                 {                                                              
 271   3                              for(i=0;i<RxCount;i++)
 272   3                              putch(pData[i]);          
 273   3      //                      g_GPS +=1;
 274   3      //                      if(g_GPS==6)  g_GPS=0;          
 275   3                              RxFlag=0;
 276   3                 }
 277   2      
 278   2              }
 279   1      
 280   1      }
 281          
 282          
 283          void putch(byte ch)
 284          {
 285   1        ES = 0;
 286   1        TI=0;
 287   1        SBUF =ch;
 288   1        while(!TI);
 289   1        TI = 0;
 290   1        ES = 1;       
 291   1      
 292   1      }
 293          //接收GPS模块数据.
 294          void Com_Int(void) interrupt 4  using 1                         // com interrupt routin
 295          {
 296   1      
 297   1              RecTimeOut=120;                                                         // byte timeout==20ms
 298   1              if(RI==1)                                                                       // recieved interrupt
 299   1              {
 300   2                 
 301   2                      RI=0;   
 302   2                      if(!RxFlag)
 303   2                      {
C51 COMPILER V7.10   MAIN                                                                  04/20/2007 12:45:23 PAGE 6   

 304   3                              if(RecStatus==0)
 305   3                              {                           
 306   4                       if(SBUF=='$')
 307   4                                       {
 308   5                                              RxCount=1;
 309   5                                              pData[0]='$';
 310   5                                              RecStatus=1;
 311   5                                        }         
 312   4      
 313   4                              }
 314   3                              else
 315   3                              {
 316   4      
 317   4                                                      if(RxCount>=120){RxCount=0;     RecStatus=0;return;}
 318   4                                                      RxCount++;
 319   4                                                      pData[RxCount-1]=SBUF;                                                     
 320   4                                      if(pData[RxCount-1]==0X0A && pData[RxCount-2]==0X0D)
 321   4                                      {                                                       
 322   5                                                       /*
 323   5                                                              switch(g_GPS)
 324   5                                                              {
 325   5                                                                      case GPGLL:
 326   5                                                                              if(pData[3]=='G' && pData[4]=='L')
 327   5                                                                              RxFlag=1;
 328   5                                                                              break;
 329   5      
 330   5                                                                      case GPGSA:
 331   5                                                                              if(pData[3]=='G' && pData[4]=='S')
 332   5                                                                              RxFlag=1;
 333   5                                                                              break;
 334   5      
 335   5                                                                      case GPRMC:
 336   5                                                                              if(pData[3]=='R' && pData[4]=='M')
 337   5                                                                              RxFlag=1;
 338   5                                                                              break;
 339   5      
 340   5                                                                      case GPZDA:
 341   5                                                                              if(pData[3]=='Z' && pData[4]=='D')
 342   5                                                                              RxFlag=1;
 343   5                                                                              break;
 344   5      
 345   5                                                                      case GPVTG:
 346   5                                                                              if(pData[3]=='V' && pData[4]=='T')
 347   5                                                                              RxFlag=1;
 348   5                                                                              break;
 349   5      
 350   5                                                                      case GPGGA:
 351   5                                                                              if(pData[3]=='G' && pData[4]=='G')
 352   5                                                                              RxFlag=1;
 353   5                                                                              break;
 354   5                                                                      default:
 355   5                                                                              break;
 356   5                                                                                                                      
 357   5                                                              }
 358   5                                                              */
 359   5                                                                                      //接收到GPS一个完整的数据包
 360   5                                                              if(pData[3]=='R' && pData[4]=='M')              //徐工说只读这个数据就行了.
 361   5                                                              RxFlag=1;
 362   5                                                              RecStatus=0;
 363   5                                                      }                                
 364   4                              }
 365   3                      }               
C51 COMPILER V7.10   MAIN                                                                  04/20/2007 12:45:23 PAGE 7   

 366   2              }
 367   1      
 368   1      }
 369          
 370          /*
 371          
 372          //推荐最小明确数据: 纬度,经度,速度
 373          $GPRMC,000000.000,V,0000.0000,S,00000.0000,W,0.00,0.00,220899,,,A*7E
 374          UTC 时间
 375          纬度,
 376          经度
 377          速度
 378          高度
 379          日,月,年
 380          
 381          */


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    758    ----
   CONSTANT SIZE    =      7    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =    200    ----
   DATA SIZE        =      8      15
   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 + -