?? receive.lst
字號(hào):
187 2 }
188 1 }
189 //系統(tǒng)初始化
190 void sys_init()
191 {
192 1 // unsigned char i;
193 1 SCON = 0x50; /* SCON: mode 1, 8-bit UART, enable rcvr */
194 1 TMOD = 0x200; /* TMOD: timer 1, mode 2, 8-bit reload */
195 1 TH1=TL1=0xfa; /* TH1: reload value for 4800 baud @ 11.059MHz */
196 1 TR1 = 1; /* TR1: timer 1 run */
197 1 Init_Lcd12864(); //初始化LCD
198 1 ResetCursor(0,1);
199 1 printf("GPS Monitor V1.2");
200 1 ClearAS();
201 1 IE=0x90; //開(kāi)總中斷、串口中斷
202 1 }
203
204 //串口接收中斷
205 void uart(void) interrupt 4
206 {
207 1 unsigned char tmp;
208 1 if(RI){
209 2 tmp=SBUF;
210 2 switch(tmp)
211 2 {
212 3 case '$':
213 3 cmd_number=0; //命令類型清空
214 3 mode=1; //接收命令模式
215 3 byte_count=0; //接收位數(shù)清空
216 3 break;
217 3 case ',':
218 3 seg_count++; //逗號(hào)計(jì)數(shù)加1
219 3 byte_count=0;
220 3 break;
221 3 case '*':
222 3 switch(cmd_number)
223 3 {
224 4 case 1:
225 4 buf_full|=0x01;
226 4 break;
227 4 case 2:
228 4 buf_full|=0x02;
229 4 break;
230 4 case 3:
231 4 buf_full|=0x04;
232 4 break;
233 4 }
234 3 mode=0;
235 3 break;
236 3 default:
237 3 if(mode==1){
238 4 //命令種類判斷
239 4 cmd[byte_count]=tmp; //接收字符放入類型緩存
240 4 if(byte_count>=4){ //如果類型數(shù)據(jù)接收完畢,判斷類型
241 5 if(cmd[0]=='G'){
C51 COMPILER V8.02 RECEIVE 07/15/2008 18:31:32 PAGE 5
242 6 if(cmd[1]=='P'){
243 7 if(cmd[2]=='G'){
244 8 if(cmd[3]=='G'){
245 9 if(cmd[4]=='A'){
246 10 cmd_number=1;
247 10 mode=2;
248 10 seg_count=0;
249 10 byte_count=0;
250 10 }
251 9 }
252 8 else if(cmd[3]=='S'){
253 9 if(cmd[4]=='V'){
254 10 cmd_number=2;
255 10 mode=2;
256 10 seg_count=0;
257 10 byte_count=0;
258 10 }
259 9 }
260 8 }
261 7 else if(cmd[2]=='R'){
262 8 if(cmd[3]=='M'){
263 9 if(cmd[4]=='C'){
264 10 cmd_number=3;
265 10 mode=2;
266 10 seg_count=0;
267 10 byte_count=0;
268 10 }
269 9 }
270 8 }
271 7 }
272 6 }
273 5 }
274 4 }
275 3 else if(mode==2){
276 4 //接收數(shù)據(jù)處理
277 4 switch (cmd_number){
278 5 case 1: //類型1數(shù)據(jù)接收。GPGGA
279 5 // $GPGGA,161229.487,3723.2475,N,12158.3416,W,1,07,1.0,9.0,M, , , ,0000*18
280 5 switch(seg_count){
281 6 case 2: //緯
-度處理
282 6 if(byte_count<9){
283 7 WD[byte_count]=tmp;
284 7 }
285 6 break;
286 6 case 3: //緯
-度方向處理
287 6 if(byte_count<1){
288 7 WD_a=tmp;
289 7 }
290 6 break;
291 6 case 4: //經(jīng)
-度處理
292 6 if(byte_count<10){
293 7 JD[byte_count]=tmp;
294 7 }
295 6 break;
296 6 case 5: //經(jīng)
-度方向處理
297 6 if(byte_count<1){
298 7 JD_a=tmp;
299 7 }
C51 COMPILER V8.02 RECEIVE 07/15/2008 18:31:32 PAGE 6
300 6 break;
301 6 case 6: //定
-位判斷
302 6 if(byte_count<1){
303 7 lock=tmp;
304 7 }
305 6 break;
306 6 case 7: //定
-位使用的衛(wèi)星數(shù)
307 6 if(byte_count<2){
308 7 use_sat[byte_count]=tmp;
309 7 }
310 6 break;
311 6 case 9: //高
-度處理
312 6 if(byte_count<6){
313 7 high[byte_count]=tmp;
314 7 }
315 6 break;
316 6 }
317 5 break;
318 5 case 2: //類型2數(shù)據(jù)接收。GPGSV
319 5 //$GPGSV,2,1,07,07,79,048,42,02,51,062,43,26,36,256,42,27,27,138,42*71
320 5 switch(seg_count){
321 6 case 3: //天
-空中的衛(wèi)星總數(shù)
322 6 if(byte_count<2){
323 7 total_sat[byte_count]=tmp;
324 7 }
325 6 break;
326 6 }
327 5 break;
328 5 case 3: //類型3數(shù)據(jù)接收。GPRMC
329 5 //$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598, ,*10
330 5 switch(seg_count){
331 6 case 1:
332 6 if(byte_count<6){ //時(shí)間處理
333 7 time[byte_count]=tmp;
334 7 }
335 6 break;
336 6 case 7: //速
-度處理
337 6 if(byte_count<5){
338 7 speed[byte_count]=tmp;
339 7 }
340 6 break;
341 6 case 8: //方
-位角處理
342 6 if(byte_count<5){
343 7 angle[byte_count]=tmp;
344 7 }
345 6 break;
346 6 }
347 5 break;
348 5 }
349 4 }
350 3 byte_count++; //接收數(shù)位加1
351 3 break;
352 3 }
353 2 }
354 1 RI=0;
355 1 }
C51 COMPILER V8.02 RECEIVE 07/15/2008 18:31:32 PAGE 7
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1228 ----
CONSTANT SIZE = 50 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 64 8
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -