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

📄 main.c

📁 使用SIM300Z做车载台的产品
💻 C
📖 第 1 页 / 共 2 页
字号:
                                              IFG2 &= ~UTXIFG1;
                                              LPM0;                            // 此处延时必须大于500
                                              Delay_ms(500);
                      
                                              for(i=0;i<200;i++)GSM_RX_BUF[i]=0;
                                              for(i=0;i<200;i++)UART1_TX_BUF[i]=0;
                                              nTX1_Len = Set_inquire(UART1_TX_BUF); 
                                              IE2 |= UTXIE1;
                                              IFG2 &= ~UTXIFG1;
                                              LPM0;
                                              while(OK_flag != 1);
                                              OK_flag = 0;
                                              UpSendGPS_flag=0;   
                                        }
                                  }   
       
          //短信函数
                                 if (MasterInquire_flag==1)  
                                    {
               // 发送GPS解析短信
                                       Delay_ms(3000); 
                                       nTX1_Len = setCmgf_pdu(UART1_TX_BUF); 
                                       IE2 |= UTXIE1;
                                       IFG2 &= ~UTXIFG1;
                                       LPM0;                            // 此处延时必须大于500
                                       Delay_ms(100);                // 此处延时必须大于500
                                       Sms_pdu_send(CarMaster_pone,pdu_number);  //  发短信
                                       while(OK_flag != 1);
                                       OK_flag = 0;                       // 此延时必须加上
                                       nTX1_Len = setCmgf(UART1_TX_BUF);         // 转换为文本格式
                                       IE2 |= UTXIE1;
                                       IFG2 &= ~UTXIFG1;
                                       LPM0;                            // 此处延时必须大于500
                                       Delay_ms(100);                // 此处延时必须大于500
                                       MasterInquire_flag=0;   
                                   }
      
      
                              LPM0;
      
              }
   }

//串口0接受中断----GPS
#pragma vector=UART0RX_VECTOR
__interrupt  void UART0_RX_ISR (void)
  { 
        int i;
        char UTC_temp,Direction_check=5;
        if (RXBUF0=='$')                                               // 判断是否为"$"符号
           {
                 Gps_begin=1;                                          // 如果是"$",解析GPS开始标志位置1,开始接收正确数据
    
           }
        if (Gps_begin==1)
           {
                 GpsReceive_buff[search_index] = RXBUF0;               // 接收来自的数据
                 search_index++;
                 if (search_index==6)
                    {
                          if (GpsReceive_buff[5]=='C')                 // 判断是否为 GPRMC
                             {   
                                   RMC_flag=1;
                                   if (Timing_flag==1)
                                      {
                                         if (Timing_count   < (Timing_minit*60-1))
                                            {
                                                 Timing_count++;
                                            }
                                         else
                                           {
                                                 Timing_count = 0;
                                                 UpSendGPS_flag = 1;
                                                 LPM0_EXIT;
                                           }
                
                                      }
                                  else
                                         Timing_count = 0; 
                             }
                          else
                             {
                                   search_index=0;
                                   Gps_begin=0; 
                                   RMC_flag=0;
                             }
                     }
                if ((search_index==19)&&(RMC_flag==1))
                   {
                         if (GpsReceive_buff[18]=='A')           
                            {
                                  Gps_A();
                            }
                         else 
                                  Gps_V();
                   }
    

                if ((GpsReceive_buff[search_index-1]=='*')&&(RMC_flag==1))       // 判断结束符,解析RMC数据
                   {
                         sign_ifeffect=GpsReceive_buff[18];                      // 是否定位
                         if(sign_ifeffect=='V')
                           {
                                 sign_ifeffect='@';
                                 for (i=0;i<9;i++){user_location.lat[i]='0';}
                                 for (i=0;i<10;i++){user_location.longi[i]='0';} 
                                 for (i=0;i<6;i++){user_speed[i]='0';} 
                                 for (i=0;i<6;i++){user_direction[i]='0';} 
                           }
                         else
                           {
                                 for (i=0;i<9;i++) {user_location.lat[i]=GpsReceive_buff[20+i];}   // 纬度
                                 for (i=0;i<10;i++){user_location.longi[i]=GpsReceive_buff[32+i];}// 经度
                                 for (i=0;i<6;i++) {user_speed[i]='0';}                            // 速度
                                 for (i=0;i<6;i++)                            
                                     {
                                           if (GpsReceive_buff[45+i]!=',')
                                              {
                                                    user_speed[i]=GpsReceive_buff[45+i];
                                              }
                                           else 
                                              { 
                                                    Direction_check=i+1;
                                                    break;
                                              }
          
                                     }
           
                                 for (i=0;i<6;i++){user_direction[i]='0';}                        // 方向    
                                 for (i=0;i<6;i++)                            
                                     {
                                           if (GpsReceive_buff[45+Direction_check+i]!=',')
                                              {
                                                    user_direction[i]=GpsReceive_buff[45+Direction_check+i];
                                              }
                                           else break;
                                     }
                           }
   
                        for (i=0;i<10;i++){UTC_time[i]=GpsReceive_buff[7+i];}           // 时间
                        UTC_temp=UTC_time[0];
                        if (((UTC_time[1]-48)+(UTC_temp-48)*10+8)==24)
                           {
                              UTC_time[0]=48;
                              UTC_time[1]=48;
                           }
                        else 
                           {
                        if (((UTC_time[1]-48)+(UTC_temp-48)*10+8)>24)
                           {
                              UTC_time[0]=48;
                              UTC_time[1]=((UTC_time[1]-48)+(UTC_temp-48)*10+8)-24;
                           }
                           UTC_time[0]=((UTC_time[1]-48)+(UTC_temp-48)*10+8)/10+48;
                           UTC_time[1]=((UTC_time[1]-48)+(UTC_temp-48)*10+8)%10+48;
                          }
                      search_index=0;
                      Gps_begin=0;
                      Gps_end=1; 
                     
                 }
           }
     }

// GSM 接收中断

#pragma vector=UART1RX_VECTOR
__interrupt  void UART1_RX_ISR (void)
{
   int  i;
   char PGSM_head[7];
   
  
  GSM_RX_BUF[gsm_Len_temp++] = RXBUF1;    // 接收来自的数据
  
  if (gsm_Len_temp > 1)                   // 当 gsm_Len_temp > 1时,证明有正确数据进入
  { 
    if ((GSM_RX_BUF[gsm_Len_temp-2]==0x0D) & (GSM_RX_BUF[gsm_Len_temp-1]==0x0A)) // 判断是否为结束时的'OD 0A'和起始时的'0D 0A'
    { 
       //判断模块回现信息=============sim300=====================================
                    
                      
                         if((GSM_RX_BUF[0]=='O') && (GSM_RX_BUF[1]=='K'))
                         {
                                 OK_flag=1;
                         }
                      
                      
                     
      // 判断换行符之前的信息是否为短信信息================手机号码===================================
     if ((GSM_RX_BUF[0]=='+')&(GSM_RX_BUF[1]=='C')&(GSM_RX_BUF[2]=='M')&(GSM_RX_BUF[3]=='T'))  
      {   
        for (i=0;i<11;i++){Dected_phone[i]=GSM_RX_BUF[i+10] ;}   // 提取短信手机号码 
        Dected_phone[11]='\0';
        // 判断短信手机号码
        if (strcmp(ControlCenter_pone,Dected_phone)==0)   // 是控制中心号码
        {
          SMSnumber_flag= '1' ; 
        }
        else if(strcmp(CarMaster_pone,Dected_phone)==0)  // 是车主号码
        {
          SMSnumber_flag= '2' ; 
        }
       
      }
      //======================================短信内容======================================//
      else if(SMSnumber_flag!=0)
      {
        switch(SMSnumber_flag)
        {
        case '1':                                                   
          for (i=0;i<199;i++) {Protocol_head[i]=GSM_RX_BUF[i+1];}
          Protocol_head[199] = '\0';
          for (i=0;i<6;i++) {PGSM_head[i]=GSM_RX_BUF[i+1];}
          PGSM_head[6] = '\0';
          ControlCenter_flag=1;
           // "HXMBAO",处理
          if(strcmp("HXMBAO",PGSM_head)==0)         
          {
              center_function=1;                    
          }
          
          // "HXMCHA" 查询 当前设置命令
          else if(strcmp("HXMCHA",PGSM_head)==0)
          {
              center_function=2;
              
          }
          
          // "HXMXIS",处理 限速上下限
          else if(strcmp("HXMXIS",PGSM_head)==0)   
          {
              center_function=3;
              
          }
          
          // "HXMDWL",处理 电子围栏  
          else if(strcmp("HXMDWL",PGSM_head)==0)    
          {
              center_function=4;
              
           }
          // "HXMDUC",处理 控制命令
          else if(strcmp("HXMDUC",PGSM_head)==0)    
          {
              center_function=5;
              
          }
          // "HXMXIB",处理  上下限速
          else if(strcmp("HXMXIB",PGSM_head)==0)
          {  
              center_function=6;
              
          }
         // "HXMIOC",修改IP 和 端口            
         else if(strcmp("HXMIOC",PGSM_head)==0)
          {  
              center_function=7;
             
          }
          else if(strcmp("HXMIDC",PGSM_head)==0)
          {  
              center_function=8;
              
          }
          break;
          
        case '2':      //查:67E5 设:8BBE 撤:64A4  关 :5173  开:5F00
            
            for(i=0;i<3;i++){CMGSM_sms[i]=GSM_RX_BUF[i];}
            CMGSM_sms[2]='\0';
            CarMaster_flag=1;
            if((CMGSM_sms[0] == 0x67)&&(CMGSM_sms[1] == 0xE5))
            {
                car_function=1;
            }
            else if((CMGSM_sms[0] == 0x8B)&&(CMGSM_sms[1] == 0xBE))
            {
                car_function=2;
            }
            else if((CMGSM_sms[0] == 0x64)&&(CMGSM_sms[1] == 0xA4))
            {
                car_function=3;
            }
            else if((CMGSM_sms[0] == 0x51)&&(CMGSM_sms[1] == 0x73))    // 关闭监控
            {
                car_function=4;
            }
            else if((CMGSM_sms[0] == 0x5F)&&(CMGSM_sms[1] == 0x00))   // 打开监控
            {
                car_function=5;
            }
           break;
        
        default:break;
        }
        SMSnumber_flag=0;          //处理完毕后将标志位清0
      } 
      
      
      gsm_Len_temp=0;
      LPM0_EXIT;
      
    }
  }
      
}

// 串口1发送中断
#pragma vector=UART1TX_VECTOR
__interrupt void UART1_TX_ISR (void) 
  {
       TXBUF1 = UART1_TX_BUF[nSend_TX1];
       nSend_TX1 += 1;
       if(nSend_TX1 >= nTX1_Len)
         {
             nSend_TX1 = 0;
    	     nTX1_Len = 0;
             IE2&= ~UTXIE1;//关闭中断
             LPM0_EXIT;
          }
        
   }

⌨️ 快捷键说明

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