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

📄 msp430_gprs.c

📁 msp430 gsm gprs c 例子程序
💻 C
📖 第 1 页 / 共 3 页
字号:
            gNO_Sram_Data_Timer=0;   
            gM22_GSM_ECHO_Timer=0;   
        }   
        //主控系统处于正常的运行循环状态    
        else   
        {   
            //表示是重新初始化M22    
            if(   (gGeneral_Flag&RESET_GSM_ON_F_1)   
                &&(gPhone_Status==READY)     )   
            {   
                gM22_GSM_ECHO_Timer=0;   
                gGPS_No_Output_Timer=0;   
                gNO_Sram_Data_Timer=0;   
                Do_Reset_GSM_On();   
            }   
            //表示从新初始化GPS模块    
            //主程序循环    
            else   
            {   
                //如果M22长时间无返回数据    
                if(gM22_GSM_ECHO_Timer>M22_NULECHO_TIME)   
                {   
                    gGeneral_Flag|=OFF_M22_F_1;   
                    gOFF_Power_S=1;   
                    gPhone_Status=READY;   
                    gM22_ReturnER_SIM_Count=0;   
                    gStatus1_Flag&=~PHONE_ONLINE_F_1;   
                    return;   
                }   
                if(gFF0D_Receive_Timer>OVER_TCP_TIME)   
                {   
                    gGeneral_Flag|=OFF_M22_F_1;   
                    gOFF_Power_S=1;   
                    gPhone_Status=READY;   
                    gM22_ReturnER_SIM_Count=0;   
                    gStatus1_Flag&=~PHONE_ONLINE_F_1;   
                    return;   
                }   
                Clear_Exter_WatchDog();   
                Do_G20_Out();   
            }   
        }   
    }   
}   
/********************************************************\  
*   函数名:TimerB_Interrupt (中断子程序)  
    作用域:本地文件调用  
*   功能: 定时器TB的中断,产生时间记数  
*   参数:  
*   返回值:  
*   创建人:  
*  
*   修改历史:(每条详述)  
\********************************************************/   
interrupt [TIMERB0_VECTOR] void TimerB_Interrupt(void)   
{   
    TBCCR0+=8000;               //定时1ms,外部时钟为8M的时钟。    
    gTimer++;                   //1ms增加一次记数    
    gDelay_Com_Timer++;   
    gTimer_GSM_AT++;            //处理AT指令之间的间隔时间    
    Debug_Timer++;              //作为调试显示数据的间隔    
    gGPS_Receive_Over++;        //作为判断GPS多长时间未接收数据字节了    
    gHandle_Receive_Over++;     //此变量作为接收手柄数据百的时间间隔记时,每接收一个手柄数据字节,则此变量置0    
    gDisp_Receive_Over++;   
    gTest_Alarm_Timer++;        //此变量作为如果有被劫开关按下的延时计时    
    gTest_Status_Timer++;   
    gReceive1_Over_Count++;   
    gCheck_Stop_Timer++;   
    gDisp_Timer++;   
    if(gM22_Status==TCP_ONLINE_WORK)    gRing_Test_Timer++;   
    else                                gRing_Test_Timer=0;   
   
    if(gCommon_Flag&ALLOW_R232_F_1)   
    {   
        gAllow_R232_Timer++;   
        if(gAllow_R232_Timer>200)    gCommon_Flag&=~ALLOW_R232_F_1;   
    }   
    else   
    {   
        gAllow_R232_Timer=0;   
    }   
    if(gM22_Status==TCP_ONLINE_WORK)    gM22_TCP_ECHO_Timer++;   
   
    Z_Timer++;   
    if(Z_Timer>1000)                 //1秒钟的时间计时    
    {   
        Z_Timer=0;   
        gTimer_CSQ++;                   //作为间隔查询CSQ的时间记时    
        gTimer_Area_Test++;             //作为检测区域的时间间隔    
        gCircle_Timer++;                //作为记时需要发送gCircle_Buffer缓冲区数据的时间变量    
        gCheck_Par_Timer++;   
        gHandle_Single_Count++;   
        gReceive_Record_Info_Timer++;   
        gLine_Timer++;   
   
        if(    (gGeneral_Flag&DAILING_UP_F_1)   
             ||(gGeneral_Flag&RING_F_1)   
             ||(gGeneral_Flag&MONITOR_ON_F_1) )   
        {   
            gHangUp_Timer++;   
        }   
        else   
        {   
            gHangUp_Timer=0;   
        }   
   
        gDelay_Flash_Timer++;   
        if(gCommon_Flag&ALLOW_OUT_DISP_F_1)     gSend_Disp_Timer++;   
        else   
        {   
            gSend_Disp_Timer=0;gDisp_ReSend_Count=0;   
        }   
   
        if( (gWatch_Type==WATCH_TYPE_TIME)&&(gWatch_Time>0) )    gWatch_Time--;   
   
        gGps_Null_Count++;   
        if(gGps_Null_Count>3)     gPublic_Flag |= GPS_NULL_F_1;   
        gRecord_Null_Count++;   
        if(gRecord_Null_Count>3) gPublic_Flag |= RECORD_NULL_F_1;   
   
        gDo_Speed_Count++;   
   
        if(gSys_Handle==0)  gSend_Handle_Timer=0;   
        else                gSend_Handle_Timer++;   
   
        //=================================================================    
        //每间隔12个小时则需要MCU的看门狗关闭一次,以使得系统程序重头开始执行    
        gRload_Flash_Par_Timer++;   
        if(   (gRload_Flash_Par_Timer>RLAOD_FLASH_TIME )   
            &&(gStatus1_Flag&ACC_ON_F_1) )   
        {   
            gRload_Flash_Par_Timer=0;   
            gOther_Flag|=RESET_PROGRAME_F_1;   
        }   
        //=================================================================    
        gGet_Driver_Info_Count++;   
        if( (gPublic_Flag&SET_DISTANCE_OK_F_1)==0 )     gSet_Distance_Info_Count++;   
        else                                            gSet_Distance_Info_Count=0;   
   
        gRecord_Data_Timer++;   
   
        if(gOther_Flag&RECORD_DATA_F_1) gSend_RecordData_Timer++;   
        else                            gSend_RecordData_Timer=0;   
   
        if(gStatus1_Flag&ACC_ON_F_1)    ACC_OFF_Timer=0;   
        else                            ACC_OFF_Timer++;   
   
        //===========================================================    
        //如果电话业务超过30分钟,则主动挂断电话业务    
        if( (gGeneral_Flag&TCP_PHONE_F_1)==0 )   
        {   
            gLast_Phone_Timer=0;   
        }   
        else   
        {   
            if(gPhone_Status==ACTIVE_MONITOR);   
            else   
            {   
                gLast_Phone_Timer++;   
                if(gLast_Phone_Timer>ALLOW_PHONE_TIME)   
                {   
                    gLast_Phone_Timer=0;   
                    gCommon_Flag|=ALLOW_HANGUP_PHONE_F_1;   
                }   
            }   
        }   
        //===============================================================    
        gGPS_No_Output_Timer++;   
        gNO_Sram_Data_Timer++;   
        //CPU状态指示灯    
        if(P1IN&MCU_STATUS) P1OUT&=~MCU_STATUS;   
        else                P1OUT|=MCU_STATUS;   
   
        //作为判断手柄是否被摘除的时间计时,1秒钟的计时    
        gHandle_OnLine_Timer++;   
        if( gHandle_OnLine_Timer>HANDLE_OUT_TIME )   
        {   
            gHandle_OnLine_Timer=0;   
            gStatus1_Flag &=~ HANDLE_ON_0_F_1;   
            gStatus1_Flag &=~ HANDLE_ON_1_F_1;   
        }   
        //作为判断显示屏是否关机的时间计时,1秒钟的计时    
        gDisp_OnLine_Timer++;   
        if(gDisp_OnLine_Timer>DISP_OUT_TIME)   
        {   
            gDisp_OnLine_Timer=0;   
            gInternal_Flag&=~DISP_ON_F_1;   
            gStatus1_Flag&=~DISPLAY_ON_F_1;   
        }   
        //如果车辆登陆数据发送后,一定时间仍然未成功收到下行的登陆响应时,则需要进行间隔的定时间进行登陆数据的发送,直到接收到下行的登陆响应为止    
        //如果成功收到下行的登陆响应标志,则需要设置标志LAND_SUCCESS_F_1    
        if( ((gGeneral_Flag&LAND_TCP_SUCCESS_F_1)==0)   
            &&(gM22_Status==TCP_ONLINE_WORK)    )   
        {   
            gLand_Interval_Timer++;   
        }   
        else    gLand_Interval_Timer=0;   
   
        //TCP在线,发送握手数据FF0D的时间计时    
        if(gM22_Status==TCP_ONLINE_WORK)    gTCP_FF0D_Send_Timer++;   
        else if(gM22_Status==GSM_WORK)      gTCP_FF0D_Send_Timer=0;   
        //判断未接收到TCP数据包的时间计时    
        if(gM22_Status==TCP_ONLINE_WORK)        gFF0D_Receive_Timer++;   
        else if(gM22_Status==GSM_WORK)   
        {   
            gFF0D_Receive_Timer=0;   
            gM22_GSM_ECHO_Timer++;   
        }   
        else   
        {   
            gM22_GSM_ECHO_Timer++;   
        }   
        //判断是否允许重新登陆TCP的操作的标志    
        if(gGeneral_Flag&LAND_TCP_ERROR_F_1)   
        {   
            gLand_TCP_Count++;   
            if(gLand_TCP_Count>RELAND_TCP_TIME)   
            {   
                gLand_TCP_Count=0;   
                gGeneral_Flag&=~LAND_TCP_ERROR_F_1;   
            }   
        }   
        else    gLand_TCP_Count=0;   
    }   
}   
/********************************************************\  
*   函数名:XT2振动器失效的中断处理程序  
    作用域:本地文件调用  
*   功能:  
*   参数:  
*   返回值:  
*   创建人:  
*  
*   修改历史:(每条详述)  
\********************************************************/   
interrupt[NMI_VECTOR] void XT2_INVAILD (void)   
{   
    IFG1&=~OFIFG;   
    IE1|=OFIE;   
    /*  
    if(IFG1&OFIFG)  
    {  
        //1,选择DCO为MCLK  
        //BCSCTL2 &=~   SELM0;BCSCTL2 &=~ SELM1;  
        //2,用户软件,振荡器失效处理  
        //3,复位中断标志  
        IFG1&=~OFIFG;  
        //4,判断是否振荡器仍然失效  
        if( (IFG1&OFIFG)==0 )  
        {  
            //重新选择失效的XT振荡器  
            BCSCTL2|=SELS+SELM1;  
        }  
    }  
    else if(IFG1&ACCVIE)    IFG1&=~ACCVIE;  
    else if(IFG1&NMIIE)     IFG1&=~NMIIE;  
    //振荡器故障中断允许  
    IE1|=OFIE;  
    */   
}  

⌨️ 快捷键说明

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