📄 main.lst
字号:
195 1
196 1 send_str(command);
197 1 send_str("\x0D"); //
198 1
199 1 /*
200 1 三秒钟内无回复,认为超时退出.
201 1 */
202 1 m = 500000;
203 1 i = 0;
204 1 while(m--)
205 1 {
206 2
207 2 if(BT_REC==0)
208 2 {
209 3 ACK[i] =PGetChar();
210 3 i+=1;
211 3 if(i>2 && (ACK[i-1]==0X0A && ACK[i-2]==0X0D))
212 3 break;
213 3 }
214 2
215 2 }
216 1
217 1 return(i); //回复收到的数据长度.
218 1
219 1 }
220
221
222 unsigned long delay;
223 void main()
224 {
225 1 byte i,Len;
226 1
227 1 SCON= 0X50; //定议串口
228 1 TMOD=0x22; /*定时器1为工作模式2(8位自动重装),0为模式2(8位自动重装) */
229 1 PCON=0X80; //波特率加倍
230 1
231 1 TR0=0;
232 1 TF0=0;
233 1 TH0 =256-80; //用IO模拟的串口速率为 19200.
234 1 TL0=TH0;
235 1 ET0=1; //允许定时器0中断
236 1 /*
237 1 TH1 = 0XFB; //单片机的串口速度为19200,测试用
238 1 TL1 = 0XFB;
239 1 */
240 1
241 1 TH1 = 0XF6; //单片机的串口速度为9600,用于接收GPS数据.
C51 COMPILER V7.10 MAIN 04/20/2007 12:45:23 PAGE 5
242 1 TL1 = 0XF6;
243 1 TR1 = 1; //启动定时器1
244 1 ES = 1; //允许串口中断
245 1
246 1
247 1 EA=1; //开总中断
248 1 delay = 0;
249 1 REN = 1;
250 1
251 1 // g_GPS =0;
252 1 while(1)
253 1 {
254 2
255 2 delay++;
256 2 if(delay>=600000L)
257 2 {
258 3 Len=0;
259 3 Len =SendAT("ATE0",pData);
260 3 for(i=0;i<Len;i++)
261 3 PSendChar(pData[i]);
262 3 memset(pData,0,200);
263 3 delay=0;
264 3 RxFlag=0;
265 3
266 3
267 3 }
268 2
269 2 if(RxFlag)
270 2 {
271 3 for(i=0;i<RxCount;i++)
272 3 putch(pData[i]);
273 3 // g_GPS +=1;
274 3 // if(g_GPS==6) g_GPS=0;
275 3 RxFlag=0;
276 3 }
277 2
278 2 }
279 1
280 1 }
281
282
283 void putch(byte ch)
284 {
285 1 ES = 0;
286 1 TI=0;
287 1 SBUF =ch;
288 1 while(!TI);
289 1 TI = 0;
290 1 ES = 1;
291 1
292 1 }
293 //接收GPS模块数据.
294 void Com_Int(void) interrupt 4 using 1 // com interrupt routin
295 {
296 1
297 1 RecTimeOut=120; // byte timeout==20ms
298 1 if(RI==1) // recieved interrupt
299 1 {
300 2
301 2 RI=0;
302 2 if(!RxFlag)
303 2 {
C51 COMPILER V7.10 MAIN 04/20/2007 12:45:23 PAGE 6
304 3 if(RecStatus==0)
305 3 {
306 4 if(SBUF=='$')
307 4 {
308 5 RxCount=1;
309 5 pData[0]='$';
310 5 RecStatus=1;
311 5 }
312 4
313 4 }
314 3 else
315 3 {
316 4
317 4 if(RxCount>=120){RxCount=0; RecStatus=0;return;}
318 4 RxCount++;
319 4 pData[RxCount-1]=SBUF;
320 4 if(pData[RxCount-1]==0X0A && pData[RxCount-2]==0X0D)
321 4 {
322 5 /*
323 5 switch(g_GPS)
324 5 {
325 5 case GPGLL:
326 5 if(pData[3]=='G' && pData[4]=='L')
327 5 RxFlag=1;
328 5 break;
329 5
330 5 case GPGSA:
331 5 if(pData[3]=='G' && pData[4]=='S')
332 5 RxFlag=1;
333 5 break;
334 5
335 5 case GPRMC:
336 5 if(pData[3]=='R' && pData[4]=='M')
337 5 RxFlag=1;
338 5 break;
339 5
340 5 case GPZDA:
341 5 if(pData[3]=='Z' && pData[4]=='D')
342 5 RxFlag=1;
343 5 break;
344 5
345 5 case GPVTG:
346 5 if(pData[3]=='V' && pData[4]=='T')
347 5 RxFlag=1;
348 5 break;
349 5
350 5 case GPGGA:
351 5 if(pData[3]=='G' && pData[4]=='G')
352 5 RxFlag=1;
353 5 break;
354 5 default:
355 5 break;
356 5
357 5 }
358 5 */
359 5 //接收到GPS一个完整的数据包
360 5 if(pData[3]=='R' && pData[4]=='M') //徐工说只读这个数据就行了.
361 5 RxFlag=1;
362 5 RecStatus=0;
363 5 }
364 4 }
365 3 }
C51 COMPILER V7.10 MAIN 04/20/2007 12:45:23 PAGE 7
366 2 }
367 1
368 1 }
369
370 /*
371
372 //推荐最小明确数据: 纬度,经度,速度
373 $GPRMC,000000.000,V,0000.0000,S,00000.0000,W,0.00,0.00,220899,,,A*7E
374 UTC 时间
375 纬度,
376 经度
377 速度
378 高度
379 日,月,年
380
381 */
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 758 ----
CONSTANT SIZE = 7 ----
XDATA SIZE = ---- ----
PDATA SIZE = 200 ----
DATA SIZE = 8 15
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -