📄 msp430_gprs.c
字号:
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 + -