|
|
在對GPS接收到的衛星信息進行處理時,碰到較為麻煩的問題是在對接收到的時間信息進行轉換上。直接從衛星接收到的時間是UTC時間,北京時間應在UTC時間上加上8小時才是準確的北京時,在超出24小時時應作減24小時處理。
剛開始將對時間轉換的算法放在主函數中處理,程序如下:
if(g_Ptr == 2) //接收到正確的數據幀
{
i = g_DisTime[0]-'0' ;//提取時間的小時位高位并轉換碼型
j = g_DisTime[1]-'0';//提取時間的小時位低位并轉換碼型
j = i*10 + j+ 8; //在UTC時間上加上8個小時
if (j >= 24) //判斷得到的時間是否超過24小時,超出變作減24處理
{
j - = 24;
}
g_DisTime[0] = j/10+'0'; //將北京時間高一位作碼型變換并賦予高一位顯示
g_DisTime[1] = j%10 +'0';//將北京時間高二位作碼型變換并賦予高二位顯示
}
在調試中出現一個問題,在做了以上的處理后,時間的小時位數據并不完全正確,高位顯示的與北京時間相同,但低位卻與UTC時間相同。在做了各種嘗試(如在UTC時間上做加9處理、直接給六位時間g_DisTime[5]賦值等)后總結出這樣一個問題,以上的算法處理只對六位數據位的高一位處理有效,低五位的顯示始終都是正確UTC時間。經過分析,初步認定上面的程序并沒有被完全的執行。因GPS接收模塊源源不斷的傳送數據給單片機處理,在運行過程中定位信息大約每秒鐘更新一次,在主函數中對收到的時間進行處理時有可能會出現還沒來得及處理完畢時便接收到下一幀數據,故時間的處理就可能會有只對高一位處理完成而沒完成處理好低五位時又進入了串行口中斷,那么液晶顯示的結果就是經過處理的高一位(北京時間)和未經處理的低五位(UTC時間)。考慮到以上原因,將原放在主函數的時間轉換處理程序放置在到中斷時一收到UTC時間就對其進行轉換處理。經過了調試,終于在液晶上顯示出來正確的北京時間,證明了以上的分析、推斷的正確性。
經過測試,液晶顯示的結果如下圖5-1:
|
-
-
基于單片機的GPS定位系統設計.zip
2019-3-7 22:19 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
2.62 MB, 下載次數: 37, 下載積分: 黑幣 -5
具體流程代碼
|