📄 gps.lis
字号:
00D0 ; }
00D0 ; //-------------------------------------------------------------
00D0 ; //纬度
00D0 ; //-------------------------------------------------------------
00D0 ; void latitude(unsigned char *data)
00D0 ; {
00D0 .dbline 72
00D0 ; debug_str_without_n("latitude : ");
00D0 00E0 ldi R16,<L21
00D2 10E0 ldi R17,>L21
00D4 0E940000 xcall _debug_str_without_n
00D8 .dbline 74
00D8 ;
00D8 ; debug_uchars_without_n(&data[11],1);
00D8 21E0 ldi R18,1
00DA 30E0 ldi R19,0
00DC 8A01 movw R16,R20
00DE 055F subi R16,245 ; offset = 11
00E0 1F4F sbci R17,255
00E2 0E940000 xcall _debug_uchars_without_n
00E6 .dbline 75
00E6 ; debug_str_without_n(" ");
00E6 00E0 ldi R16,<L22
00E8 10E0 ldi R17,>L22
00EA 0E940000 xcall _debug_str_without_n
00EE .dbline 76
00EE ; debug_uchars_without_n(&data[0],10);
00EE 2AE0 ldi R18,10
00F0 30E0 ldi R19,0
00F2 8A01 movw R16,R20
00F4 0E940000 xcall _debug_uchars_without_n
00F8 .dbline 77
00F8 ; debug_str("");
00F8 00E0 ldi R16,<L19
00FA 10E0 ldi R17,>L19
00FC 0E940000 xcall _debug_str
0100 .dbline -2
0100 L20:
0100 .dbline 0 ; func end
0100 5991 ld R21,y+
0102 4991 ld R20,y+
0104 0895 ret
0106 .dbsym r data 20 pc
0106 .dbend
0106 .dbfunc e radian _radian fV
0106 ; data -> R20,R21
.even
0106 _radian::
0106 4A93 st -y,R20
0108 5A93 st -y,R21
010A A801 movw R20,R16
010C .dbline -1
010C .dbline 83
010C ; }
010C ; //-------------------------------------------------------------
010C ; //径度
010C ; //-------------------------------------------------------------
010C ; void radian(unsigned char *data)
010C ; {
010C .dbline 84
010C ; debug_str_without_n("radian : ");
010C 00E0 ldi R16,<L24
010E 10E0 ldi R17,>L24
0110 0E940000 xcall _debug_str_without_n
0114 .dbline 86
0114 ;
0114 ; debug_uchars_without_n(&data[12],1);
0114 21E0 ldi R18,1
0116 30E0 ldi R19,0
0118 8A01 movw R16,R20
011A 045F subi R16,244 ; offset = 12
011C 1F4F sbci R17,255
011E 0E940000 xcall _debug_uchars_without_n
0122 .dbline 87
0122 ; debug_str_without_n(" ");
0122 00E0 ldi R16,<L22
0124 10E0 ldi R17,>L22
0126 0E940000 xcall _debug_str_without_n
012A .dbline 88
012A ; debug_uchars_without_n(&data[0],11);
012A 2BE0 ldi R18,11
012C 30E0 ldi R19,0
012E 8A01 movw R16,R20
0130 0E940000 xcall _debug_uchars_without_n
0134 .dbline 89
0134 ; debug_str("");
0134 00E0 ldi R16,<L19
0136 10E0 ldi R17,>L19
0138 0E940000 xcall _debug_str
013C .dbline -2
013C L23:
013C .dbline 0 ; func end
013C 5991 ld R21,y+
013E 4991 ld R20,y+
0140 0895 ret
0142 .dbsym r data 20 pc
0142 .dbend
0142 .dbfunc e speed _speed fV
0142 ; i -> R10
0142 ; data -> R12,R13
.even
0142 _speed::
0142 0E940000 xcall push_xgset003C
0146 6801 movw R12,R16
0148 .dbline -1
0148 .dbline 95
0148 ; }
0148 ; //-------------------------------------------------------------
0148 ; //地面速度
0148 ; //-------------------------------------------------------------
0148 ; void speed(unsigned char *data)
0148 ; {
0148 .dbline 96
0148 ; unsigned char i=0;
0148 AA24 clr R10
014A .dbline 98
014A ;
014A ; debug_str_without_n("speed : ");
014A 00E0 ldi R16,<L26
014C 10E0 ldi R17,>L26
014E 0E940000 xcall _debug_str_without_n
0152 L27:
0152 .dbline 100
0152 ; speed_top:
0152 ; if(data[i]!='.'){
0152 EA2D mov R30,R10
0154 FF27 clr R31
0156 EC0D add R30,R12
0158 FD1D adc R31,R13
015A 8081 ldd R24,z+0
015C 8E32 cpi R24,46
015E 51F0 breq L28
0160 X6:
0160 .dbline 100
0160 .dbline 101
0160 ; debug_uchars_without_n(&data[i],1);
0160 21E0 ldi R18,1
0162 30E0 ldi R19,0
0164 0A2D mov R16,R10
0166 1127 clr R17
0168 0C0D add R16,R12
016A 1D1D adc R17,R13
016C 0E940000 xcall _debug_uchars_without_n
0170 .dbline 102
0170 ; i++;
0170 A394 inc R10
0172 .dbline 103
0172 ; goto speed_top;
0172 EFCF xjmp L27
0174 L28:
0174 .dbline 105
0174 ; }
0174 ; debug_str("");
0174 00E0 ldi R16,<L19
0176 10E0 ldi R17,>L19
0178 0E940000 xcall _debug_str
017C .dbline -2
017C L25:
017C .dbline 0 ; func end
017C 0C940000 xjmp pop_xgset003C
0180 .dbsym r i 10 c
0180 .dbsym r data 12 pc
0180 .dbend
0180 .dbfunc e gps_function _gps_function fc
0180 ; availability_flag_1 -> R20
0180 ; availability_flag_2 -> R12
0180 ; mes_addr -> R22,R23
0180 ; DataLen -> R14,R15
0180 ; data -> R10,R11
.even
0180 _gps_function::
0180 0E940000 xcall push_xgsetF0FC
0184 7901 movw R14,R18
0186 5801 movw R10,R16
0188 2297 sbiw R28,2
018A .dbline -1
018A .dbline 109
018A ; }
018A ; //-------------------------------------------------------------
018A ; unsigned char gps_function(unsigned char *data,unsigned int DataLen)
018A ; {
018A .dbline 110
018A ; unsigned int mes_addr=0;
018A 6627 clr R22
018C 7727 clr R23
018E .dbline 111
018E ; unsigned char availability_flag_1=0;
018E 4427 clr R20
0190 .dbline 112
0190 ; unsigned char availability_flag_2=0;
0190 CC24 clr R12
0192 .dbline 114
0192 ;
0192 ; if(data[0]=='$'){
0192 F501 movw R30,R10
0194 8081 ldd R24,z+0
0196 8432 cpi R24,36
0198 01F4 brne L31
019A X7:
019A .dbline 114
019A .dbline 116
019A ; //debug_uchars(data,DataLen);
019A ; }
019A L31:
019A .dbline 118
019A ;
019A ; if(data[0]=='$'){//判断接收到的GPS数据头一个数据是否为'$'
019A F501 movw R30,R10
019C 8081 ldd R24,z+0
019E 8432 cpi R24,36
01A0 09F0 breq X13
01A2 4DC0 xjmp L33
01A4 X13:
01A4 X8:
01A4 .dbline 118
01A4 .dbline 119
01A4 ; mes_addr = find_string("$GPRMC",data,DataLen);//找出字符串"$GPRMC"所在GPS数据中的位置
01A4 F982 std y+1,R15
01A6 E882 std y+0,R14
01A8 9F01 movw R18,R30
01AA 00E0 ldi R16,<L35
01AC 10E0 ldi R17,>L35
01AE 28DF xcall _find_string
01B0 602F mov R22,R16
01B2 7727 clr R23
01B4 .dbline 120
01B4 ; if(mes_addr != 0){//有找到
01B4 6030 cpi R22,0
01B6 6707 cpc R22,R23
01B8 09F4 brne X14
01BA 41C0 xjmp L36
01BC X14:
01BC X9:
01BC .dbline 120
01BC .dbline 121
01BC ; mes_addr = mes_addr -1; //注意:减1才是真正的字符串位置
01BC 6150 subi R22,1
01BE 7040 sbci R23,0
01C0 .dbline 122
01C0 ; availability_flag_1 = data[mes_addr + 8];//无效数据标志'V'(这个位置不存在'A')
01C0 FB01 movw R30,R22
01C2 3896 adiw R30,8
01C4 EA0D add R30,R10
01C6 FB1D adc R31,R11
01C8 4081 ldd R20,z+0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -