系统软件主要由主程序、GPS管理子程序和GSM管理子程序等部分组成。
主程序完成系统的初始化,以及键盘、LED、LCD显示器和汽车中控系统的操作管理等。
GPS管理子程序主要负责从GPS系统接收时间和位置信息。
请求GPS系统返回ASCII时间位置信息的二进制命令为:
@@EqmC
其中,m为0时,输出一次响应信息(查询),m为1~255时,每1~255 s输出一次响应信息(连续);
C为校验和(Eqm按字节“异或”);
为回车(十六进制0d);
为换行(十六进制0a);
命令长度为8字节。
命令的响应信息为:
@@Eq,mm,dd,yy,hh,mm,ss,dd,mm.mmmm,n,ddd,mm.mmmm,w, shhhhh.h,sss.s,hhh.h,m,t,dd.d,nn,rrrr,aa,CCC
日期:mm是月(01~12),dd是日(01~31),yy是年(99~19)。
世界时间(UTC):hh是时(00~23),mm是分(00~59),ss是秒(00~59)。
纬度:dd是度(00~90),mm.mmmm是分(00~59.9999),n是方向(N是北,S是南)。
经度:ddd是度(000~180),mm.mmmm是分(00~59.9999),w是方向(W是西,E是东)。
信息长度是96字节。
对应的管理子程序为:
int eq[8]={"@","@","E","q",1,"C",0x0d,0x0a};
void gps_txd(int data[], int n) {
volatile int m,sum=0;
for(m=0;m
while(~na_uart_0->np_uartstatus & 0x40);
/等待发送准备好
if(m!=n-3) {
sum^=data[m];/计算校验和
na_uart_0->np_uarttxdata=data[m];/发送数据
}else
na_uart_0->np_uarttxdata=sum; /发送校验和
}
}
int gps,gps_buf[46];/定义全局变量
void gps_rxd(int context) {/接收中断服务程序
gps_buf[gps]=na_uart_0->np_uartrxdata; /接收数据
if(gps_buf[gps++]=="q") gps=0; /数据定位
if(gps>46) gps=46;/忽略无用数据
}
GSM管理子程序主要负责GSM系统的数据收发管理。
GSM系统的数据收发以短信形式进行,选择短信格式的AT命令为AT+CMGF,收发短信的AT命令分别为AT+CMGR和AT+CMGS,对应的管理子程序为:
cmgf[20]={"A","T","+","C","M","G","F","=","1",0x0d};/短信格式void gsm_txd(int data[], int n) {
volatile int m;
for(m=0;m
while(~na_uart_1->np_uartstatus & 0x40);
/等待发送准备好na_uart_1->np_uarttxdata=data[m]; /发送数据
}
}
int gsm=2,gsm_buf[18]={"A","T"};
void gsm_rxd(int context) {
/接收中断服务程序
gsm_buf[gsm]=na_uart_1->np_uartrxdata; /接收数据
if(gsm_buf[gsm]=="T") gsm=1;
/数据定位
if(++gsm==18) gsm=2;
}
3 设计调试方法和设计结果
实际试用结果表明:基于SoPC的汽车安全监控系统运行正常,定位准确,数据传输可靠,操作管理方便。如果再配备上GIS(地理信息系统),整个系统将如虎添翼。
评论
查看更多