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