⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gps.lis

📁 u-blox的GPS模块LEA-5x,三本例子为ATMEGA1280对他的操作的程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module gps.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\item\GPS-1280\gps.c
 0000                   .dbfunc e find_string _find_string fc
 0000           ;         StrLen -> R12,R13
 0000           ;              i -> R20,R21
 0000           ;              j -> R22,R23
 0000           ;        DataLen -> y+10
 0000           ;           data -> R14,R15
 0000           ;         string -> R10,R11
                        .even
 0000           _find_string::
 0000 0E940000          xcall push_xgsetF0FC
 0004 7901              movw R14,R18
 0006 5801              movw R10,R16
 0008                   .dbline -1
 0008                   .dbline 32
 0008           ; #include <string.h>
 0008           ; #include "debug.h"
 0008           ; #include "define.h"
 0008           ; 
 0008           ; //GPRMC,<1>,<2>,<3>,<4>,<5>,<6>,<7>,<8>,<9>,<10>,<11>*hh   
 0008           ; //<1> 当前位置的格林尼治时间,格式为hhmmss   
 0008           ; //<2> 状态, A 为有效位置, V为非有效接收警告,即当前天线视野上方的卫星个数少于3颗
 0008           ; //<3> 纬度, 格式为ddmm.mmmm   
 0008           ; //<4> 标明南北半球, N 为北半球、S为南半球   
 0008           ; //<5> 径度,格式为dddmm.mmmm   
 0008           ; //<6> 标明东西半球,E为东半球、W为西半球   
 0008           ; //<7> 地面上的速度,范围为0.0到999.9   
 0008           ; //<8> 方位角,范围为000.0到 359.9 度   
 0008           ; //<9> 日期, 格式为ddmmyy   
 0008           ; //<10> 地磁变化,从000.0到 180.0 度   
 0008           ; //<11> 地磁变化方向,为E 或 W
 0008           ; /*
 0008           ; $GPRMC,072304.00,A,2231.85460,N,11404.40661,E,0.128,,261008,,,A*7C
 0008           ; $GPVTG,,T,,M,0.128,N,0.238,K,A*21
 0008           ; $GPGGA,072304.00,2231.85460,N,11404.40661,E,1,04,10.41,-25.4,M,-2.2,M,,*65
 0008           ; $GPGSA,A,3,07,20,11,50,,,,,,,,,17.78,10.41,14.42*3C
 0008           ; $GPGSV,3,1,10,04,30,234,,07,17,180,32,08,40,215,,11,34,038,29*7C
 0008           ; $GPGSV,3,2,10,20,44,097,51,27,23,193,21,28,63,341,,32,28,070,*78
 0008           ; $GPGSV,3,3,10,42,51,128,39,50,46,122,45*7C
 0008           ; $GPGLL,2231.85460,N,11404.40661,E,072304.00,A,A*63
 0008           ; */
 0008           ; 
 0008           ; //-------------------------------------------------------------
 0008           ; //从长度为DataLen数据指针*data中找出字符串*string
 0008           ; //-------------------------------------------------------------
 0008           ; unsigned char find_string(unsigned char *string,unsigned char *data,unsigned int DataLen)
 0008           ; {
 0008                   .dbline 33
 0008           ;       unsigned int StrLen = strlen(string);
 0008 8501              movw R16,R10
 000A 0E940000          xcall _strlen
 000E 6801              movw R12,R16
 0010                   .dbline 37
 0010           ;       unsigned int i;
 0010           ;       unsigned int j;
 0010           ;       
 0010           ;       for(i=0;i<DataLen;i++)
 0010 4427              clr R20
 0012 5527              clr R21
 0014 28C0              xjmp L5
 0016           L2:
 0016                   .dbline 38
 0016           ;       {
 0016                   .dbline 39
 0016           ;               if(string[0]==data[i])
 0016 FA01              movw R30,R20
 0018 EE0D              add R30,R14
 001A FF1D              adc R31,R15
 001C 2080              ldd R2,z+0
 001E F501              movw R30,R10
 0020 3080              ldd R3,z+0
 0022 3214              cp R3,R2
 0024 F1F4              brne L6
 0026           X0:
 0026                   .dbline 40
 0026           ;               {
 0026                   .dbline 41
 0026           ;                       for(j=1;j<StrLen;j++)
 0026 61E0              ldi R22,1
 0028 70E0              ldi R23,0
 002A 11C0              xjmp L11
 002C           L8:
 002C                   .dbline 42
 002C           ;                       {
 002C                   .dbline 43
 002C           ;                               if(string[j]==data[i+j]){
 002C FA01              movw R30,R20
 002E E60F              add R30,R22
 0030 F71F              adc R31,R23
 0032 EE0D              add R30,R14
 0034 FF1D              adc R31,R15
 0036 2080              ldd R2,z+0
 0038 FB01              movw R30,R22
 003A EA0D              add R30,R10
 003C FB1D              adc R31,R11
 003E 3080              ldd R3,z+0
 0040 3214              cp R3,R2
 0042 09F4              brne L12
 0044           X1:
 0044                   .dbline 43
 0044                   .dbline 45
 0044           ;                                       
 0044           ;                               }else{
 0044 02C0              xjmp L13
 0046           L12:
 0046                   .dbline 45
 0046                   .dbline 46
 0046           ;                                       return 0;
 0046 0027              clr R16
 0048 15C0              xjmp L1
 004A           L13:
 004A                   .dbline 48
 004A           ;                               }
 004A           ;                       }
 004A           L9:
 004A                   .dbline 41
 004A 6F5F              subi R22,255  ; offset = 1
 004C 7F4F              sbci R23,255
 004E           L11:
 004E                   .dbline 41
 004E 6C15              cp R22,R12
 0050 7D05              cpc R23,R13
 0052 60F3              brlo L8
 0054           X2:
 0054                   .dbline 49
 0054           ;                       if(j==StrLen) return i+1;//就算是在0位置找到的也返回0,处理时减1
 0054 6C15              cp R22,R12
 0056 7D05              cpc R23,R13
 0058 21F4              brne L14
 005A           X3:
 005A                   .dbline 49
 005A 042F              mov R16,R20
 005C 0F5F              subi R16,255  ; offset = 1
 005E 1F4F              sbci R17,255
 0060 09C0              xjmp L1
 0062           L14:
 0062                   .dbline 50
 0062           ;               }
 0062           L6:
 0062                   .dbline 51
 0062           ;       }
 0062           L3:
 0062                   .dbline 37
 0062 4F5F              subi R20,255  ; offset = 1
 0064 5F4F              sbci R21,255
 0066           L5:
 0066                   .dbline 37
 0066 0A84              ldd R0,y+10
 0068 1B84              ldd R1,y+11
 006A 4015              cp R20,R0
 006C 5105              cpc R21,R1
 006E 08F4              brsh X5
 0070 D2CF              xjmp L2
 0072           X5:
 0072           X4:
 0072                   .dbline 52
 0072           ;       return 0;
 0072 0027              clr R16
 0074                   .dbline -2
 0074           L1:
 0074                   .dbline 0 ; func end
 0074 0C940000          xjmp pop_xgsetF0FC
 0078                   .dbsym r StrLen 12 i
 0078                   .dbsym r i 20 i
 0078                   .dbsym r j 22 i
 0078                   .dbsym l DataLen 10 i
 0078                   .dbsym r data 14 pc
 0078                   .dbsym r string 10 pc
 0078                   .dbend
 0078                   .dbfunc e Greenwich_time _Greenwich_time fV
 0078           ;           data -> R20,R21
                        .even
 0078           _Greenwich_time::
 0078 4A93              st -y,R20
 007A 5A93              st -y,R21
 007C A801              movw R20,R16
 007E                   .dbline -1
 007E                   .dbline 58
 007E           ; }
 007E           ; //-------------------------------------------------------------
 007E           ; //格林尼治时间
 007E           ; //-------------------------------------------------------------
 007E           ; void Greenwich_time(unsigned char *data)
 007E           ; {     
 007E                   .dbline 59
 007E           ;       debug_str_without_n("Greenwich time     :       ");
 007E 00E0              ldi R16,<L17
 0080 10E0              ldi R17,>L17
 0082 0E940000          xcall _debug_str_without_n
 0086                   .dbline 60
 0086           ;       debug_uchars_without_n(&data[0],2);
 0086 22E0              ldi R18,2
 0088 30E0              ldi R19,0
 008A 8A01              movw R16,R20
 008C 0E940000          xcall _debug_uchars_without_n
 0090                   .dbline 61
 0090           ;       debug_str_without_n(":");
 0090 00E0              ldi R16,<L18
 0092 10E0              ldi R17,>L18
 0094 0E940000          xcall _debug_str_without_n
 0098                   .dbline 62
 0098           ;       debug_uchars_without_n(&data[2],2);
 0098 22E0              ldi R18,2
 009A 30E0              ldi R19,0
 009C 8A01              movw R16,R20
 009E 0E5F              subi R16,254  ; offset = 2
 00A0 1F4F              sbci R17,255
 00A2 0E940000          xcall _debug_uchars_without_n
 00A6                   .dbline 63
 00A6           ;       debug_str_without_n(":");
 00A6 00E0              ldi R16,<L18
 00A8 10E0              ldi R17,>L18
 00AA 0E940000          xcall _debug_str_without_n
 00AE                   .dbline 64
 00AE           ;       debug_uchars_without_n(&data[4],2);
 00AE 22E0              ldi R18,2
 00B0 30E0              ldi R19,0
 00B2 8A01              movw R16,R20
 00B4 0C5F              subi R16,252  ; offset = 4
 00B6 1F4F              sbci R17,255
 00B8 0E940000          xcall _debug_uchars_without_n
 00BC                   .dbline 65
 00BC           ;       debug_str("");
 00BC 00E0              ldi R16,<L19
 00BE 10E0              ldi R17,>L19
 00C0 0E940000          xcall _debug_str
 00C4                   .dbline -2
 00C4           L16:
 00C4                   .dbline 0 ; func end
 00C4 5991              ld R21,y+
 00C6 4991              ld R20,y+
 00C8 0895              ret
 00CA                   .dbsym r data 20 pc
 00CA                   .dbend
 00CA                   .dbfunc e latitude _latitude fV
 00CA           ;           data -> R20,R21
                        .even
 00CA           _latitude::
 00CA 4A93              st -y,R20
 00CC 5A93              st -y,R21
 00CE A801              movw R20,R16
 00D0                   .dbline -1
 00D0                   .dbline 71

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -