📄 gps1602.lst
字号:
502
503 /******************************************************************************************
504 * 函数名称 :Delay5M
505 * 功能描述 :5ms延时
506 * 参数 : 参数名称: 输入/输出? 类型 描述
507 *
508 * 返回值 :
509 * 作者 :
510 * 创建日期 :2006-12-19
511 * 全局变量 :
512 * 全局静态变量:
513 * 局部静态变量:
514 *----------------------------------------修改历史------------------------------------------
515 * 当前版本 : 修改人: 修改日期:
516 * 修改说明 :
517 ******************************************************************************************/
518 void Delay5Ms(void)
519 {
520 1 unsigned int TempCyc = 5552;
521 1 while(TempCyc--);
522 1 }
523 /******************************************************************************************
524 * 函数名称 :Delay400Ms
525 * 功能描述 :400ms延时
526 * 参数 : 参数名称: 输入/输出? 类型 描述
527 *
528 * 返回值 :
529 * 作者 :
530 * 创建日期 :2006-12-19
531 * 全局变量 :
532 * 全局静态变量:
533 * 局部静态变量:
534 *----------------------------------------修改历史------------------------------------------
535 * 当前版本 : 修改人: 修改日期:
536 * 修改说明 :
537 ******************************************************************************************/
538 void Delay400Ms(void)
539 {
540 1 unsigned char TempCycA = 5;
541 1 unsigned int TempCycB;
542 1 while(TempCycA--)
543 1 {
544 2 TempCycB=7269;
545 2 while(TempCycB--);
546 2 };
547 1 }
548
549 /******************************************************************************************
550 * 函数名称 :uart
551 * 功能描述 :串口接收中断
C51 COMPILER V7.09 GPS1602 03/26/2008 13:55:09 PAGE 10
552 * 参数 : 参数名称: 输入/输出? 类型 描述
553 *
554 * 返回值 :
555 * 作者 :
556 * 创建日期 :2006-12-19
557 * 全局变量 :
558 * 全局静态变量:
559 * 局部静态变量:
560 *----------------------------------------修改历史------------------------------------------
561 * 当前版本 : 修改人: 修改日期:
562 * 修改说明 :
563 ******************************************************************************************/
564 void uart(void) interrupt 4
565 {
566 1 unsigned char tmp;
567 1 if(RI)
568 1 {
569 2 tmp=SBUF;
570 2 switch(tmp)
571 2 {
572 3 case '$':
573 3 cmd_number=0; //命令类型清空
574 3 mode=1; //接收命令模式
575 3 byte_count=0; //接收位数清空
576 3 break;
577 3 case ',':
578 3 seg_count++; //逗号计数加1
579 3 byte_count=0;
580 3 break;
581 3 case '*':
582 3 switch(cmd_number)
583 3 {
584 4 case 1:
585 4 buf_full|=0x01;
586 4 break;
587 4 case 2:
588 4 buf_full|=0x02;
589 4 break;
590 4 case 3:
591 4 buf_full|=0x04;
592 4 break;
593 4 }
594 3 mode=0;
595 3 break;
596 3 default:
597 3 if(mode==1)
598 3 {
599 4 //命令种类判断
600 4 cmd[byte_count]=tmp; //接收字符放入类型缓存
601 4 if(byte_count>=4)
602 4 { //如果类型数据接收完毕,判断类型
603 5 if(cmd[0]=='G')
604 5 {
605 6 if(cmd[1]=='P')
606 6 {
607 7 if(cmd[2]=='G')
608 7 {
609 8 if(cmd[3]=='G')
610 8 {
611 9 if(cmd[4]=='A')
612 9 {
613 10 cmd_number=1;
C51 COMPILER V7.09 GPS1602 03/26/2008 13:55:09 PAGE 11
614 10 mode=2;
615 10 seg_count=0;
616 10 byte_count=0;
617 10 }
618 9 }
619 8 else if(cmd[3]=='S')
620 8 {
621 9 if(cmd[4]=='V')
622 9 {
623 10 cmd_number=2;
624 10 mode=2;
625 10 seg_count=0;
626 10 byte_count=0;
627 10 }
628 9 }
629 8 }
630 7 else if(cmd[2]=='R')
631 7 {
632 8 if(cmd[3]=='M')
633 8 {
634 9 if(cmd[4]=='C')
635 9 {
636 10 cmd_number=3;
637 10 mode=2;
638 10 seg_count=0;
639 10 byte_count=0;
640 10 }
641 9 }
642 8 }
643 7 }
644 6 }
645 5 }
646 4 }
647 3 else if(mode==2)
648 3 {
649 4 //接收数据处理
650 4 switch (cmd_number)
651 4 {
652 5 case 1: //类型1数据接收。GPGGA
653 5 switch(seg_count)
654 5 {
655 6 case 2: //纬度处理
656 6 if(byte_count<9)
657 6 {
658 7 WD[byte_count]=tmp;
659 7 }
660 6 break;
661 6 case 3: //纬度方向处理
662 6 if(byte_count<1)
663 6 {
664 7 WD_a=tmp;
665 7 }
666 6 break;
667 6 case 4: //经度处理
668 6 if(byte_count<10)
669 6 {
670 7 JD[byte_count]=tmp;
671 7 }
672 6 break;
673 6 case 5: //经度方向处理
674 6 if(byte_count<1)
675 6 {
C51 COMPILER V7.09 GPS1602 03/26/2008 13:55:09 PAGE 12
676 7 JD_a=tmp;
677 7 }
678 6 break;
679 6 case 6: //定位判断
680 6 if(byte_count<1)
681 6 {
682 7 lock=tmp;
683 7 }
684 6 break;
685 6 case 7: //定位使用的卫星数
686 6 if(byte_count<2)
687 6 {
688 7 use_sat[byte_count]=tmp;
689 7 }
690 6 break;
691 6 case 9: //高度处理
692 6 if(byte_count<6)
693 6 {
694 7 high[byte_count]=tmp;
695 7 }
696 6 break;
697 6 }
698 5 break;
699 5 case 2: //类型2数据接收。GPGSV
700 5 switch(seg_count)
701 5 {
702 6 case 3: //天空中的卫星总数
703 6 if(byte_count<2)
704 6 {
705 7 total_sat[byte_count]=tmp;
706 7 }
707 6 break;
708 6 }
709 5 break;
710 5 case 3: //类型3数据接收。GPRMC
711 5 switch(seg_count)
712 5 {
713 6 case 1:
714 6 if(byte_count<6)
715 6 { //时间处理
716 7 time[byte_count]=tmp;
717 7 }
718 6 break;
719 6 case 7: //速度处理
720 6 if(byte_count<5)
721 6 {
722 7 speed[byte_count]=tmp;
723 7 }
724 6 break;
725 6 case 8: //方位角处理
726 6 if(byte_count<5)
727 6 {
728 7 angle[byte_count]=tmp;
729 7 }
730 6 break;
731 6 }
732 5 break;
733 5 }
734 4 }
735 3 byte_count++; //接收数位加1
736 3 break;
737 3 }
C51 COMPILER V7.09 GPS1602 03/26/2008 13:55:09 PAGE 13
738 2 }
739 1 RI=0;
740 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1657 ----
CONSTANT SIZE = 90 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 62 13
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -