📄 gps.lst
字号:
349 {
350 1 SfrByte1 = da;
351 1 if(!(SB00 ^ SB07)); else { SB00 = ~SB00;SB07 = ~SB07;}
352 1 if(!(SB01 ^ SB06)); else { SB01 = ~SB01;SB06 = ~SB06;}
353 1 if(!(SB02 ^ SB05)); else { SB02 = ~SB02;SB05 = ~SB05;}
354 1 if(!(SB03 ^ SB04)); else { SB03 = ~SB03;SB04 = ~SB04;}
355 1
356 1 return(SfrByte1);
357 1 }
358
359 void write0816(void)
360 {
361 1 INT8U i, j, ch;
362 1 INT32U addr;
363 1 INT8U code *data p1;
364 1
C51 COMPILER V7.50 GPS 06/22/2006 09:45:45 PAGE 7
365 1 p1 = 0x6000;
366 1 addr = 0x39000;
367 1 for(i=0; i<16; i++)
368 1 {
369 2 for(j=0; j<128; j++)
370 2 {
371 3 ch = *p1++;
372 3 Data_WrBuff[j]= ConvertXAChar(ch);
373 3 }
374 2 SPI_Program(addr, 128, Data_WrBuff);
375 2 addr += 128;
376 2 delay_10ms();
377 2 }
378 1 }
379
380 /*******************************************************************************
381 chUART_Process
382 说 明: 处理接收的数据,如果收到正确的数据返回0,如果重复收到上次的数据,返回1
383 否则返回2
384 ********************************************************************************/
385 unsigned char chUART_Process(void)
386 {
387 1 unsigned char i;
388 1 unsigned char *pchTemp;
389 1 recUART rUART_Temp;
390 1 unsigned char chRece_Count;
391 1
392 1 chRece_Count = (unsigned char)nBlock_Count;
393 1 EA=0;
394 1 rUART_Temp = rUARTRece;
395 1 EA=1;
396 1
397 1 pchTemp = (unsigned char *)rUART_Temp.chBuff;
398 1 if(pchTemp[0]+pchTemp[1] == 0xFF)
399 1 {
400 2 if(chRece_Count == pchTemp[0]) //接收到正确的块
401 2 {
402 3 pchTemp += 2;
403 3 for(i=0; i<128; i++)
404 3 {
405 4 Data_WrBuff[i]= *pchTemp++;
406 4 }
407 3 return 0;
408 3 }
409 2 else if(chRece_Count == pchTemp[0]+1)
410 2 return 1;
411 2 else
412 2 return 2;
413 2 }
414 1 else
415 1 return 2;
416 1 }
417 /*******************************************************************************
418 vUART_TimeOut_Nak
419 说 明: 准备完毕,请求开始传输,如果上面没有准备好,每隔5S请求一次
420 ********************************************************************************/
421 void vUART_TimeOut_Nak(void)
422 {
423 1 vSoftTimer_Run(UART_NAK, UART_ACK_TIME, vUART_TimeOut_Nak);
424 1 vGPS_SendChar(NAK);
425 1 }
426 /*******************************************************************************
C51 COMPILER V7.50 GPS 06/22/2006 09:45:45 PAGE 8
427 vUART_TimeOut_Ack
428 说 明: 收到正确的数据后,启动本定时器,在设定的时间内没有收到下帧数据,
429 再次发起请求
430 ********************************************************************************/
431 void vUART_TimeOut_Ack(void)
432 {
433 1 vSoftTimer_Run(UART_ACK, UART_ACK_TIME, vUART_TimeOut_Ack);
434 1 vGPS_SendChar(ACK);
435 1 }
436 /*******************************************************************************
437 vUART_Execute
438 说 明: 如果收到正确的数据,写入NX25P40,如果接收数据完毕,写入0808,0816,开机界面
439 ********************************************************************************/
440 void vUART_Execute(void)
441 {
442 1 INT8U i, chTemp;
443 1 INT32U addr, j;
444 1
445 1 if(chRece_Over == 0x01) //接收完毕所有数据
446 1 {
447 2 vGPS_SendChar(ACK);
448 2 delay_1sec();
449 2 vGPS_SendChar(ACK);
450 2
451 2 GraphStr0816(1,0, "WRITE0808",1,10);
452 2 write0808(); //写入8×8点阵
453 2
454 2 GraphStr0816(1,0, "WRITE0816",1,10); //写入8×16点阵
455 2 write0816();
456 2
457 2 writebmp(); //写入开机界面
458 2
459 2 chRece_Over = 2; //写完NX25P40后,执行程序检查是否正确
460 2 }
461 1 if(chBlock_Over == 0x01)
462 1 {
463 2 EA = 0;
464 2 chBlock_Over = 0;
465 2 EA = 1;
466 2 ////////////////////////////////////////
467 2 if(nBlock_Count == 1) //如果这是收到的第一帧数据,执行以下操作
468 2 {
469 3 GraphStr0816(1,0, "ERASE..",1,7);
470 3 SPI_EraseBulk(); //擦除EPROM
471 3 vSoftTimer_Stop(UART_NAK); //如果收到数据了,说明传输开始了,此时
472 3 //不需要在次申请传输开始。
473 3 }
474 2 ///////////////////////////////////////
475 2 vSoftTimer_Run(UART_ACK, UART_ACK_TIME, vUART_TimeOut_Ack); //等待下一帧数据
476 2
477 2 chTemp = chUART_Process();
478 2 if(chTemp == 0x00)
479 2 {
480 3 GraphStr0816(1,0, "WRITE..",1,7);
481 3
482 3 //显示接收到的数据帧
483 3 j = nBlock_Count;
484 3 i = j/1000 + 0x30;
485 3 GraphChar0816(3,1,i,1);
486 3 i = j%1000/100 + 0x30;
487 3 GraphChar0816(3,2,i,1);
488 3 i = j%100/10 + 0x30;
C51 COMPILER V7.50 GPS 06/22/2006 09:45:45 PAGE 9
489 3 GraphChar0816(3,3,i,1);
490 3 i = j%10 + 0x30;
491 3 GraphChar0816(3,4,i,1);
492 3
493 3 //写入数据
494 3 addr = (INT32U)(nBlock_Count-1) * 128L;
495 3 SPI_Program(addr, 128, Data_WrBuff);
496 3 vGPS_SendChar(ACK);
497 3 nBlock_Count++;
498 3 }
499 2 else if(chTemp == 0x01)
500 2 {
501 3 vGPS_SendChar(ACK);
502 3 }
503 2 else if(chTemp == 0x02)
504 2 {
505 3 vGPS_SendChar(NAK);
506 3 }
507 2 }
508 1 }
509
510
511
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1232 ----
CONSTANT SIZE = 3460 ----
XDATA SIZE = 128 226
PDATA SIZE = ---- ----
DATA SIZE = 1 6
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 + -