系統軟件主要由主程序、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(地理信息系統),整個系統將如虎添翼。
評論