📄 main.lst
字号:
608 4 putch(':');
609 4 putch(' ');
610 4
611 4
612 4 for(i=0;i<Len;i++)
613 4 putch(Info->SMS_text[i]); //英文短信内容.
C51 COMPILER V7.10 MAIN 05/03/2007 10:20:04 PAGE 11
614 4
615 4 putch(0x0d);
616 4 putch(0x0a);
617 4
618 4 //比较短信密码是否正确
619 4 for(i=0;i<15;i++)
620 4 {
621 5 j =byte_verify(0x2E00 +i);
622 5 if(j==0) break; //比较完成
623 5 putch(j); //旧密码打印
624 5 if(Info->SMS_text[i]!=j) //密码错
625 5 {
626 6 /*
627 6 putch('P');
628 6 putch('e');
629 6 putch('r');
630 6 putch('r');
631 6 putch(0x0d);
632 6 putch(0x0a);
633 6 */
634 6 goto reportPass;
635 6 }
636 5
637 5 }
638 4 //密码正确
639 4 putch('P');
640 4 putch('a');
641 4 putch('s');
642 4 putch('s');
643 4 putch(0X30 +i);
644 4 putch(0x0d);
645 4 putch(0x0a);
646 4 //---判断命令
647 4 Pt =cmp(&Info->SMS_text[0],"Owner");
648 4 if(Pt==0xff) goto SetPsw;
649 4 //是设定接收短信的手机.
650 4 {
651 5 for(i=Pt+5;i<100;i++)
652 5 {
653 6 j =Info->SMS_text[i];
654 6 if(j==0) break;
655 6 putch(j); //把Owner后面的数据打印出来
656 6 }
657 5
658 5 //把当前手机号更换为管理手机.
659 5
660 5
661 5 sector_erase(0x2E00); //把旧数据擦除
662 5 //1,先更新密码
663 5 for(i=0;i<Pt;i++)
664 5 {
665 6 j =Info->SMS_text[i];
666 6 byte_program((0x2E00+i),j);
667 6 }
668 5 byte_program((0x2E00+i),0); //密码结束符
669 5
670 5
671 5 //2 更新手机号
672 5 // putch('M');
673 5 for(i=0;i<20;i++)
674 5 {
675 6 j =Info->TelNum[i];
C51 COMPILER V7.10 MAIN 05/03/2007 10:20:04 PAGE 12
676 6 // putch(j);
677 6 byte_program((0x2E00+15+i),j);
678 6 if(j==0) break;
679 6 }
680 5
681 5 //3 更新称呼
682 5 for(i=0;i<20;i++)
683 5 {
684 6 j =Info->SMS_text[Pt+5+i];
685 6 byte_program((0x2E00+40 +i),j); //手机后面的无效字符.
686 6 if(j==0) break;
687 6 }
688 5 //4 读出前60个数据,产生BCC.
689 5 Len = 0;
690 5 for(i=0;i<60;i++)
691 5 {
692 6 Len +=byte_verify(0x2E00 +i);
693 6 }
694 5 byte_program((0x2E00+60),Len); //写上BCC
695 5 byte_program((0x2E00+61),0X55);
696 5 byte_program((0x2E00+62),0X66);
697 5
698 5 //先回复一条短信:
699 5 sendSMS(Info->TelNum,"Hello! Owner.");
700 5
701 5 //把短信删除
702 5
703 5
704 5 goto InfoEnd;
705 5 }
706 4
707 4 ///===============以上为更改管理手机号
708 4 SetPsw:
709 4 Pt =cmp(&Info->SMS_text[0],"Password");
710 4 if(Pt==0xff) goto GetSms;
711 4 {
712 5 //把旧密码及手机号读出,再更改密码
713 5 for(i=0;i<60;i++)
714 5 pData[150+i] =byte_verify(0x2E00+i);
715 5 for(i=0;i<15;i++)
716 5 {
717 6 j=Info->SMS_text[Pt+8+i];
718 6 pData[150+i]=j;
719 6 if(j==0) break;
720 6 }
721 5
722 5 //把旧信息删除
723 5 sector_erase(0x2E00);
724 5 //编程新密码到EEPROM
725 5 for(i=0;i<60;i++)
726 5 {
727 6 byte_program((0x2E00+i),pData[150+i]);
728 6 }
729 5
730 5 Len = 0;
731 5 for(i=0;i<60;i++)
732 5 {
733 6 Len +=byte_verify(0x2E00 +i);
734 6 }
735 5 byte_program((0x2E00+60),Len); //写上BCC
736 5 byte_program((0x2E00+61),0X55);
737 5 byte_program((0x2E00+62),0X66);
C51 COMPILER V7.10 MAIN 05/03/2007 10:20:04 PAGE 13
738 5
739 5 sendSMS(Info->TelNum,"Pls keep you new password safely."); //短信报告,密码更改成功
740 5 goto InfoEnd;
741 5 }
742 4
743 4 GetSms:
744 4 Pt =cmp(&Info->SMS_text[0],"Get Message");
745 4 if(Pt==0xff) goto reportPass;
746 4 {
747 5 //把EEPROM中的GPS数据发送给手机,如果无数据,发送无.
748 5 if((byte_verify(0x2800+121)==0x55) && (byte_verify(0x2800+122)==0x66)) //GPS数据有效.
749 5 {
750 6 Len =byte_verify(0x2800+120); //GPS数据
751 6 for(i=0;i<Len-2;i++)
752 6 {
753 7 pData[150+i] =byte_verify(0x2800+i);
754 7 }
755 6 pData[150+i] =0;
756 6 sendSMS(&Info->TelNum[0],&pData[150]);
757 6
758 6 }
759 5 else //无GPS数据
760 5 {
761 6 sendSMS(&Info->TelNum[0],"Not GPS Data !");
762 6 }
763 5 goto InfoEnd;
764 5 }
765 4
766 4 reportPass:
767 4 Pt =cmp(&Info->SMS_text[0],"wei cheng jie"); //如果信息为wei cheng jie
768 4 //把密码送出
769 4 if(Pt==0xff) goto InfoEnd;
770 4 {
771 5 memcpy(&pData[150],"Password is ",12);
772 5 for(i=0;i<20;i++)
773 5 {
774 6 pData[162+i] =byte_verify(0x2E00+i);
775 6 if(pData[162+i]==0) break;
776 6 }
777 5 sendSMS(&Info->TelNum[0],&pData[150]);
778 5 }
779 4
780 4
781 4 //信息处理结束
782 4 InfoEnd:
783 4 deleSMS(Info->Index);
784 4 putch('d');
785 4 putch('e');
786 4 putch('l');
787 4 putch(0x0d);
788 4 putch(0x0a);
789 4
790 4 }
791 3 NoMobil:
792 3 putch('E');
793 3 putch('n');
794 3 putch('d');
795 3 putch(0x0d);
796 3 putch(0x0a);
797 3
798 3 delay=0;
799 3 memset(pData,0,256);
C51 COMPILER V7.10 MAIN 05/03/2007 10:20:04 PAGE 14
800 3 RxCount=0;
801 3 Delay100mS(1);
802 3 RxFlag=0;
803 3 REN = 1;
804 3
805 3 }
806 2
807 2 if(RxFlag)
808 2 {
809 3 //GPS数据保存在0X2400开始.
810 3 putch('G');
811 3 putch('P');
812 3 putch('S');
813 3 putch(0x0d);
814 3 putch(0x0a);
815 3
816 3 for(i=0;i<RxCount;i++)
817 3 {
818 4 if(byte_verify(0x2800+i)!=pData[i]) //当前读到的GPS数据与上次数据不一至.
819 4 {
820 5 sector_erase(0x2800); //把旧数据擦除
821 5 for(j=0;j<RxCount;j++)
822 5 {
823 6 byte_program(0x2800+j,pData[j]); //把新的GPS数据写到IAP上.
824 6 }
825 5
826 5 byte_program(0x2800+120,RxCount); //GPS数据长度.
827 5 byte_program(0x2800+121,0x55); //GPS数据有效.
828 5 byte_program(0x2800+122,0x66); //GPS数据有效.
829 5 pData[RxCount-2] = 0;
830 5
831 5 for(i=0;i<20;i++)
832 5 {
833 6 pData[150+i] =byte_verify(0x2E00+15+i);
834 6 if( pData[150+i]==0) break;
835 6 }
836 5 if(sendSMS(&pData[150],pData)==0) //GPS数据变化,发送短信
837 5 {
838 6 delay = 100000;
839 6 while(delay--);
840 6 SendAT("ATD13800138000;",ACK_OK,pData+150);
841 6 delay = 1000L;
842 6 while(delay--);
843 6 SendAT("ATH;",ACK_OK,pData+150);
844 6 delay = 100000L;
845 6 while(delay--);
846 6
847 6 }
848 5
849 5 break;
850 5 }
851 4
852 4 }
853 3
854 3 RxFlag=0;
855 3 }
856 2
857 2 }
858 1
859 1 }
860
861 #ifdef DEBUG_SMS
C51 COMPILER V7.10 MAIN 05/03/2007 10:20:04 PAGE 15
862 void putch(byte ch)
863 {
864 1 byte i;
865 1 i = ch;
866 1
867 1 ES = 0;
868 1 TI=0;
869 1 SBUF =ch;
870 1 while(!TI);
871 1 TI = 0;
872 1 ES = 1;
873 1 }
874 #endif
875
876 //接收GPS模块数据.
877 void Com_Int(void) interrupt 4 using 1 // com interrupt routin
878 {
879 1
880 1 RecTimeOut=120; // byte timeout==20ms
881 1 if(RI==1) // recieved interrupt
882 1 {
883 2
884 2 RI=0;
885 2 if(!RxFlag)
886 2 {
887 3 if(RecStatus==0)
888 3 {
889 4 if(SBUF=='$')
890 4 {
891 5 RxCount=1;
892 5 pData[0]='$';
893 5 RecStatus=1;
894 5 }
895 4
896 4 }
897 3 else
898 3 {
899 4
900 4 if(RxCount>=120){RxCount=0; RecStatus=0;return;}
901 4 RxCount++;
902 4 pData[RxCount-1]=SBUF;
903 4 if(pData[RxCount-1]==0X0A && pData[RxCount-2]==0X0D)
904 4 {
905 5 //接收到GPS一个完整的数据包
906 5 if(pData[3]=='R' && pData[4]=='M') //徐工说只读这个数据就行了.
907 5 RxFlag=1;
908 5 RecStatus=0;
909 5
910 5 }
911 4 }
912 3 }
913 2 }
914 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -