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

📄 gps.lis

📁 u-blox的GPS模块LEA-5x,三本例子为ATMEGA1280对他的操作的程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 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 + -