📄 gps.lis
字号:
.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 + -