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

📄 main.lst

📁 单片机通过控制SIM300C 短信模块读GPS 数据
💻 LST
📖 第 1 页 / 共 4 页
字号:
 608   4                      putch(':');
 609   4                      putch(' ');
 610   4      
 611   4      
 612   4                      for(i=0;i<Len;i++)
 613   4                      putch(Info->SMS_text[i]);                       //英文短信内容. 
C51 COMPILER V7.10   MAIN                                                                  05/03/2007 10:20:04 PAGE 11  

 614   4              
 615   4                      putch(0x0d);
 616   4                      putch(0x0a);
 617   4      
 618   4      //比较短信密码是否正确
 619   4                      for(i=0;i<15;i++)
 620   4                      {
 621   5                              j =byte_verify(0x2E00 +i);
 622   5                              if(j==0) break;                                 //比较完成
 623   5                              putch(j);                                               //旧密码打印
 624   5                              if(Info->SMS_text[i]!=j)                //密码错
 625   5                              {
 626   6      /*
 627   6                                      putch('P');
 628   6                                      putch('e');
 629   6                                      putch('r');
 630   6                                      putch('r');
 631   6                                      putch(0x0d);
 632   6                                      putch(0x0a);                    
 633   6      */                              
 634   6                                      goto    reportPass;
 635   6                              }
 636   5      
 637   5                      }
 638   4      //密码正确
 639   4              putch('P');
 640   4              putch('a');
 641   4              putch('s');
 642   4              putch('s');
 643   4              putch(0X30 +i);
 644   4              putch(0x0d);
 645   4              putch(0x0a);            
 646   4      //---判断命令
 647   4              Pt =cmp(&Info->SMS_text[0],"Owner");
 648   4              if(Pt==0xff)    goto SetPsw;            
 649   4      //是设定接收短信的手机.
 650   4              {
 651   5                      for(i=Pt+5;i<100;i++)
 652   5                      {
 653   6                      j =Info->SMS_text[i];
 654   6                      if(j==0) break;
 655   6                      putch(j);                               //把Owner后面的数据打印出来
 656   6                      }
 657   5      
 658   5      //把当前手机号更换为管理手机.
 659   5      
 660   5      
 661   5                      sector_erase(0x2E00);                                   //把旧数据擦除
 662   5      //1,先更新密码  
 663   5                      for(i=0;i<Pt;i++)
 664   5                      {
 665   6                       j =Info->SMS_text[i];  
 666   6                       byte_program((0x2E00+i),j);            
 667   6                      }
 668   5              byte_program((0x2E00+i),0);                             //密码结束符
 669   5      
 670   5      
 671   5      //2 更新手机号
 672   5      //              putch('M');
 673   5                      for(i=0;i<20;i++)
 674   5                      {
 675   6                       j =Info->TelNum[i];
C51 COMPILER V7.10   MAIN                                                                  05/03/2007 10:20:04 PAGE 12  

 676   6      //                      putch(j);
 677   6                       byte_program((0x2E00+15+i),j);                         
 678   6                       if(j==0) break;
 679   6                      }       
 680   5      
 681   5      //3 更新称呼            
 682   5                      for(i=0;i<20;i++)
 683   5                      {
 684   6                      j =Info->SMS_text[Pt+5+i];
 685   6                      byte_program((0x2E00+40 +i),j);                         //手机后面的无效字符.
 686   6                      if(j==0) break; 
 687   6                      }
 688   5      //4 读出前60个数据,产生BCC.
 689   5                      Len = 0;
 690   5                      for(i=0;i<60;i++)
 691   5                      {
 692   6                              Len +=byte_verify(0x2E00 +i);
 693   6                      }               
 694   5                      byte_program((0x2E00+60),Len);                  //写上BCC
 695   5                      byte_program((0x2E00+61),0X55); 
 696   5                      byte_program((0x2E00+62),0X66); 
 697   5      
 698   5      //先回复一条短信:
 699   5                      sendSMS(Info->TelNum,"Hello! Owner.");
 700   5                      
 701   5      //把短信删除    
 702   5      
 703   5      
 704   5                      goto InfoEnd;
 705   5              }
 706   4      
 707   4      ///===============以上为更改管理手机号
 708   4      SetPsw:
 709   4                      Pt =cmp(&Info->SMS_text[0],"Password"); 
 710   4                      if(Pt==0xff)            goto  GetSms;   
 711   4                      {                                                       
 712   5      //把旧密码及手机号读出,再更改密码
 713   5                              for(i=0;i<60;i++)
 714   5                                      pData[150+i] =byte_verify(0x2E00+i);
 715   5                              for(i=0;i<15;i++)
 716   5                                      {
 717   6                                      j=Info->SMS_text[Pt+8+i]; 
 718   6                                      pData[150+i]=j;                         
 719   6                                      if(j==0) break;
 720   6                                      }                       
 721   5      
 722   5      //把旧信息删除
 723   5                              sector_erase(0x2E00);
 724   5      //编程新密码到EEPROM
 725   5                              for(i=0;i<60;i++)
 726   5                              {
 727   6                              byte_program((0x2E00+i),pData[150+i]);  
 728   6                              }       
 729   5                              
 730   5                              Len = 0;
 731   5                              for(i=0;i<60;i++)
 732   5                              {
 733   6                                      Len +=byte_verify(0x2E00 +i);
 734   6                              }               
 735   5                              byte_program((0x2E00+60),Len);                  //写上BCC
 736   5                              byte_program((0x2E00+61),0X55); 
 737   5                              byte_program((0x2E00+62),0X66);                                 
C51 COMPILER V7.10   MAIN                                                                  05/03/2007 10:20:04 PAGE 13  

 738   5      
 739   5                              sendSMS(Info->TelNum,"Pls keep you new password safely.");      //短信报告,密码更改成功
 740   5                      goto InfoEnd;
 741   5                      }
 742   4      
 743   4      GetSms:
 744   4                      Pt =cmp(&Info->SMS_text[0],"Get Message");              
 745   4                      if(Pt==0xff)            goto  reportPass;
 746   4                      {
 747   5      //把EEPROM中的GPS数据发送给手机,如果无数据,发送无.
 748   5                              if((byte_verify(0x2800+121)==0x55) && (byte_verify(0x2800+122)==0x66))          //GPS数据有效.  
 749   5                              {
 750   6                                              Len =byte_verify(0x2800+120);   //GPS数据
 751   6                                              for(i=0;i<Len-2;i++)
 752   6                                              {
 753   7                                                      pData[150+i] =byte_verify(0x2800+i);
 754   7                                              }
 755   6                                              pData[150+i] =0;
 756   6                                              sendSMS(&Info->TelNum[0],&pData[150]);
 757   6      
 758   6                              }
 759   5                              else            //无GPS数据
 760   5                              {
 761   6                                      sendSMS(&Info->TelNum[0],"Not GPS Data !");
 762   6                              }
 763   5                              goto InfoEnd;
 764   5                      }
 765   4      
 766   4      reportPass:
 767   4                      Pt =cmp(&Info->SMS_text[0],"wei cheng jie");            //如果信息为wei cheng jie
 768   4                                                                                                                              //把密码送出
 769   4                      if(Pt==0xff) goto       InfoEnd;
 770   4                      {
 771   5                              memcpy(&pData[150],"Password is ",12);
 772   5                              for(i=0;i<20;i++)                       
 773   5                              {
 774   6                              pData[162+i] =byte_verify(0x2E00+i);
 775   6                              if(pData[162+i]==0) break;
 776   6                              }               
 777   5                              sendSMS(&Info->TelNum[0],&pData[150]);                                                  
 778   5                      }
 779   4      
 780   4      
 781   4      //信息处理结束
 782   4      InfoEnd:
 783   4              deleSMS(Info->Index);
 784   4              putch('d');
 785   4              putch('e');
 786   4              putch('l');
 787   4              putch(0x0d);
 788   4              putch(0x0a);
 789   4      
 790   4              }
 791   3      NoMobil:
 792   3              putch('E');
 793   3              putch('n');
 794   3              putch('d');
 795   3              putch(0x0d);
 796   3              putch(0x0a);
 797   3      
 798   3                              delay=0;
 799   3                              memset(pData,0,256);
C51 COMPILER V7.10   MAIN                                                                  05/03/2007 10:20:04 PAGE 14  

 800   3                              RxCount=0;              
 801   3                              Delay100mS(1);   
 802   3                              RxFlag=0;
 803   3                              REN = 1;
 804   3                      
 805   3                      }
 806   2      
 807   2                 if(RxFlag)
 808   2                 {    
 809   3      //GPS数据保存在0X2400开始.                                                                                      
 810   3              putch('G');
 811   3              putch('P');
 812   3              putch('S');
 813   3              putch(0x0d);
 814   3              putch(0x0a);
 815   3      
 816   3                              for(i=0;i<RxCount;i++)
 817   3                              {                               
 818   4                                      if(byte_verify(0x2800+i)!=pData[i])             //当前读到的GPS数据与上次数据不一至.
 819   4                                              {
 820   5                                              sector_erase(0x2800);                                   //把旧数据擦除
 821   5                                              for(j=0;j<RxCount;j++)
 822   5                                                      {
 823   6                                                      byte_program(0x2800+j,pData[j]);        //把新的GPS数据写到IAP上.       
 824   6                                                      }
 825   5      
 826   5                                              byte_program(0x2800+120,RxCount);       //GPS数据长度.
 827   5                                              byte_program(0x2800+121,0x55);          //GPS数据有效.
 828   5                                              byte_program(0x2800+122,0x66);          //GPS数据有效.                                  
 829   5                                              pData[RxCount-2] = 0;
 830   5      
 831   5                                          for(i=0;i<20;i++)
 832   5                                              {
 833   6                                                      pData[150+i] =byte_verify(0x2E00+15+i);
 834   6                                                      if(     pData[150+i]==0) break;
 835   6                                              }
 836   5                                 if(sendSMS(&pData[150],pData)==0)            //GPS数据变化,发送短信
 837   5                                              {
 838   6                                                      delay = 100000;
 839   6                                                      while(delay--);
 840   6                              SendAT("ATD13800138000;",ACK_OK,pData+150);     
 841   6                                                      delay = 1000L;
 842   6                                                      while(delay--);
 843   6                                                      SendAT("ATH;",ACK_OK,pData+150);        
 844   6                                                      delay = 100000L;
 845   6                                                      while(delay--);
 846   6      
 847   6                                              }
 848   5      
 849   5                                              break;                          
 850   5                                              }
 851   4                                                      
 852   4                              }                                        
 853   3                       
 854   3                              RxFlag=0;
 855   3                 }
 856   2      
 857   2              }
 858   1      
 859   1      }
 860          
 861          #ifdef DEBUG_SMS
C51 COMPILER V7.10   MAIN                                                                  05/03/2007 10:20:04 PAGE 15  

 862          void putch(byte ch)
 863          {
 864   1        byte i;
 865   1        i = ch;
 866   1      
 867   1        ES = 0;
 868   1        TI=0;
 869   1        SBUF =ch;
 870   1        while(!TI);
 871   1        TI = 0;
 872   1        ES = 1;         
 873   1      }
 874          #endif
 875          
 876          //接收GPS模块数据.
 877          void Com_Int(void) interrupt 4  using 1                         // com interrupt routin
 878          {
 879   1      
 880   1              RecTimeOut=120;                                                         // byte timeout==20ms
 881   1              if(RI==1)                                                                       // recieved interrupt
 882   1              {
 883   2                 
 884   2                      RI=0;   
 885   2                      if(!RxFlag)
 886   2                      {
 887   3                              if(RecStatus==0)
 888   3                              {                           
 889   4                       if(SBUF=='$')
 890   4                                       {
 891   5                                              RxCount=1;
 892   5                                              pData[0]='$';
 893   5                                              RecStatus=1;
 894   5                                        }         
 895   4      
 896   4                              }
 897   3                              else
 898   3                              {
 899   4      
 900   4                                                      if(RxCount>=120){RxCount=0;     RecStatus=0;return;}
 901   4                                                      RxCount++;
 902   4                                                      pData[RxCount-1]=SBUF;                                                     
 903   4                                      if(pData[RxCount-1]==0X0A && pData[RxCount-2]==0X0D)
 904   4                                      {                                                                                                       
 905   5                                                                                      //接收到GPS一个完整的数据包
 906   5                                                              if(pData[3]=='R' && pData[4]=='M')              //徐工说只读这个数据就行了.
 907   5                                                              RxFlag=1;
 908   5                                                              RecStatus=0;
 909   5                                                      
 910   5                                                      }                                
 911   4                              }
 912   3                      }               
 913   2              }
 914   1      

⌨️ 快捷键说明

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