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

📄 lcd.lis

📁 基于m16的寻迹小车(包含小车题目
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 01B8           ;     else if( dataint == 0 )        //=0
 01B8 2CA0              ldd R2,y+36
 01BA 3DA0              ldd R3,y+37
 01BC 4EA0              ldd R4,y+38
 01BE 5FA0              ldd R5,y+39
 01C0 8894              clc
 01C2 2220              tst R2
 01C4 3204              cpc R3,R2
 01C6 4204              cpc R4,R2
 01C8 5204              cpc R5,R2
 01CA 21F4              brne L20
 01CC           X6:
 01CC                   .dbline 61
 01CC           ;     {
 01CC                   .dbline 62
 01CC           ;         datachar2[0] = 0x30;
 01CC 80E3              ldi R24,48
 01CE 8E87              std y+14,R24
 01D0                   .dbline 63
 01D0           ;         datachar2[1] = '\0';
 01D0 2224              clr R2
 01D2 2F86              std y+15,R2
 01D4                   .dbline 64
 01D4           ;     }
 01D4           L20:
 01D4           L14:
 01D4           L8:
 01D4                   .dbline 66
 01D4           ; 
 01D4           ;     p1 = datachar2;
 01D4 CE01              movw R24,R28
 01D6 0E96              adiw R24,14
 01D8 5C01              movw R10,R24
 01DA                   .dbline 68
 01DA           ; 
 01DA           ;     strcpy( p, p1 );
 01DA 9C01              movw R18,R24
 01DC 08A5              ldd R16,y+40
 01DE 19A5              ldd R17,y+41
 01E0 0E940000          xcall _strcpy
 01E4                   .dbline -2
 01E4           L1:
 01E4                   .dbline 0 ; func end
 01E4 6A96              adiw R28,26
 01E6 0E940000          xcall pop_xgsetF0FC
 01EA 2496              adiw R28,4
 01EC 0895              ret
 01EE                   .dbsym r p1 10 pc
 01EE                   .dbsym r k2 14 c
 01EE                   .dbsym l datachar2 14 A[10:10]c
 01EE                   .dbsym l n 25 c
 01EE                   .dbsym r k1 12 c
 01EE                   .dbsym l datachar1 4 A[10:10]c
 01EE                   .dbsym l i 24 c
 01EE                   .dbsym l datainttmp 0 L
 01EE                   .dbsym l p 40 pc
 01EE                   .dbsym l dataint 36 L
 01EE                   .dbend
 01EE                   .dbfunc e float_2_string _float_2_string fV
 01EE           ;          flag2 -> R12
 01EE           ;          flag1 -> R14
 01EE           ;              k -> R10
 01EE           ;       dataftmp -> y+12
 01EE           ;       datastr1 -> y+2
 01EE           ;              i -> R20
 01EE           ;              p -> R22
 01EE           ;        datastr -> y+30
 01EE           ;          dataf -> y+26
                        .even
 01EE           _float_2_string::
 01EE 0E940000          xcall push_arg4
 01F2 0E940000          xcall push_xgsetF0FC
 01F6 6097              sbiw R28,16
 01F8 68A1              ldd R22,y+32
 01FA                   .dbline -1
 01FA                   .dbline 79
 01FA           ; }
 01FA           ; 
 01FA           ; /*****************************************
 01FA           ; ** 将一个浮点型数据转化为字符串
 01FA           ; ** 入口参数 要转换的浮点数: dataf, 数组datastr[10], 小数位数 P
 01FA           ; ** 最好小数位数不是
 01FA           ; ** 改变思路:浮点数 --> 整数 -->字符串-->根据各种类型的浮点数不同调整字符位置
 01FA           ; ** 可以转换小于0的浮点数
 01FA           ; *****************************************/
 01FA           ; void float_2_string( float dataf, char *datastr, uchar p )
 01FA           ; {
 01FA                   .dbline 80
 01FA           ;     float dataftmp  = dataf;
 01FA 2A8C              ldd R2,y+26
 01FC 3B8C              ldd R3,y+27
 01FE 4C8C              ldd R4,y+28
 0200 5D8C              ldd R5,y+29
 0202 2C86              std y+12,R2
 0204 3D86              std y+13,R3
 0206 4E86              std y+14,R4
 0208 5F86              std y+15,R5
 020A                   .dbline 82
 020A           ;     char datastr1[10];
 020A           ;     uchar flag1 = 0;
 020A EE24              clr R14
 020C                   .dbline 83
 020C           ;     uchar flag2 = 0;
 020C CC24              clr R12
 020E                   .dbline 85
 020E           ;     uchar k;
 020E           ;     uchar i = 0;
 020E 4427              clr R20
 0210                   .dbline 87
 0210           ; 
 0210           ;     if( (long int)dataf == 0 )       // dataf为 -1 --- 1 之间的数
 0210 0A8D              ldd R16,y+26
 0212 1B8D              ldd R17,y+27
 0214 2C8D              ldd R18,y+28
 0216 3D8D              ldd R19,y+29
 0218 0E940000          xcall fpint
 021C 8894              clc
 021E 0023              tst R16
 0220 1007              cpc R17,R16
 0222 2007              cpc R18,R16
 0224 3007              cpc R19,R16
 0226 09F0              breq X15
 0228 3EC0              xjmp L24
 022A           X15:
 022A           X8:
 022A                   .dbline 88
 022A           ;     {
 022A                   .dbline 89
 022A           ;         dataftmp += 2;          //随便一个整数 只是为了扩大为首位不为0的数
 022A 2C84              ldd R2,y+12
 022C 3D84              ldd R3,y+13
 022E 4E84              ldd R4,y+14
 0230 5F84              ldd R5,y+15
 0232 00E0              ldi R16,<L26
 0234 10E0              ldi R17,>L26
 0236 0E940000          xcall lpm32
 023A 3A93              st -y,R19
 023C 2A93              st -y,R18
 023E 1A93              st -y,R17
 0240 0A93              st -y,R16
 0242 8101              movw R16,R2
 0244 9201              movw R18,R4
 0246 0E940000          xcall fpadd2
 024A 0C87              std y+12,R16
 024C 1D87              std y+13,R17
 024E 2E87              std y+14,R18
 0250 3F87              std y+15,R19
 0252                   .dbline 90
 0252           ;         flag1 = 1;
 0252 EE24              clr R14
 0254 E394              inc R14
 0256                   .dbline 91
 0256           ;         if( dataf < 0 )
 0256 2A8C              ldd R2,y+26
 0258 3B8C              ldd R3,y+27
 025A 4C8C              ldd R4,y+28
 025C 5D8C              ldd R5,y+29
 025E 00E0              ldi R16,<L29
 0260 10E0              ldi R17,>L29
 0262 0E940000          xcall lpm32
 0266 3A93              st -y,R19
 0268 2A93              st -y,R18
 026A 1A93              st -y,R17
 026C 0A93              st -y,R16
 026E 8101              movw R16,R2
 0270 9201              movw R18,R4
 0272 0E940000          xcall fpcmp2
 0276 BCF4              brge L27
 0278           X9:
 0278                   .dbline 92
 0278           ;         {
 0278                   .dbline 93
 0278           ;             flag2 = 1;
 0278 CC24              clr R12
 027A C394              inc R12
 027C                   .dbline 94
 027C           ;             dataftmp -= 4;      //随便一个整数 只是为了扩大为首位不为0的数
 027C 2C84              ldd R2,y+12
 027E 3D84              ldd R3,y+13
 0280 4E84              ldd R4,y+14
 0282 5F84              ldd R5,y+15
 0284 00E0              ldi R16,<L30
 0286 10E0              ldi R17,>L30
 0288 0E940000          xcall lpm32
 028C 3A93              st -y,R19
 028E 2A93              st -y,R18
 0290 1A93              st -y,R17
 0292 0A93              st -y,R16
 0294 8101              movw R16,R2
 0296 9201              movw R18,R4
 0298 0E940000          xcall fpsub2
 029C 0C87              std y+12,R16
 029E 1D87              std y+13,R17
 02A0 2E87              std y+14,R18
 02A2 3F87              std y+15,R19
 02A4                   .dbline 95
 02A4           ;             flag1 = 0;
 02A4 EE24              clr R14
 02A6                   .dbline 96
 02A6           ;         }
 02A6           L27:
 02A6                   .dbline 97
 02A6           ;     }
 02A6           L24:
 02A6                   .dbline 99
 02A6           ; 
 02A6           ;     for( i = 0; i < p + 1; i++ )
 02A6 4427              clr R20
 02A8 0FC0              xjmp L34
 02AA           L31:
 02AA                   .dbline 100
 02AA           ;         dataftmp = dataftmp * 10;
 02AA 00E0              ldi R16,<L35
 02AC 10E0              ldi R17,>L35
 02AE 0E940000          xcall lpm32
 02B2 CE01              movw R24,R28
 02B4 0C96              adiw R24,12
 02B6 9A93              st -y,R25
 02B8 8A93              st -y,R24
 02BA 0E940000          xcall fpmule1
 02BE 0C87              std y+12,R16
 02C0 1D87              std y+13,R17
 02C2 2E87              std y+14,R18
 02C4 3F87              std y+15,R19
 02C6           L32:
 02C6                   .dbline 99
 02C6 4395              inc R20
 02C8           L34:
 02C8                   .dbline 99
 02C8 862F              mov R24,R22
 02CA 8F5F              subi R24,255    ; addi 1
 02CC 4817              cp R20,R24
 02CE 68F3              brlo L31
 02D0           X10:
 02D0                   .dbline 102
 02D0           ; 
 02D0           ;     long_to_string( (long int)dataftmp, datastr1 );
 02D0 CE01              movw R24,R28
 02D2 0296              adiw R24,2
 02D4 9983              std y+1,R25
 02D6 8883              std y+0,R24
 02D8 0C85              ldd R16,y+12
 02DA 1D85              ldd R17,y+13
 02DC 2E85              ldd R18,y+14
 02DE 3F85              ldd R19,y+15
 02E0 0E940000          xcall fpint
 02E4 8DDE              xcall _long_to_string
 02E6                   .dbline 103
 02E6           ;     k = strlen( datastr1 );
 02E6 8E01              movw R16,R28
 02E8 0E5F              subi R16,254  ; offset = 2
 02EA 1F4F              sbci R17,255
 02EC 0E940000          xcall _strlen
 02F0 A02E              mov R10,R16
 02F2                   .dbline 105
 02F2           ; 
 02F2           ;     for( i = 1; i < p + 1; i++ )
 02F2 41E0              ldi R20,1
 02F4 13C0              xjmp L39
 02F6           L36:
 02F6                   .dbline 106
 02F6           ;         *( datastr1 + (k-i) ) =  *( datastr1 + (k-i-1) );
 02F6 242E              mov R2,R20
 02F8 3324              clr R3
 02FA 4A2C              mov R4,R10
 02FC 5524              clr R5
 02FE 4218              sub R4,R2
 0300 5308              sbc R5,R3
 0302 CE01              movw R24,R28
 0304 0196              adiw R24,1
 0306 F201              movw R30,R4
 0308 E80F              add R30,R24
 030A F91F              adc R31,R25
 030C 2080              ldd R2,z+0
 030E CE01              movw R24,R28
 0310 0296              adiw R24,2
 0312 F201              movw R30,R4
 0314 E80F              add R30,R24
 0316 F91F              adc R31,R25
 0318 2082              std z+0,R2
 031A           L37:
 031A                   .dbline 105
 031A 4395              inc R20
 031C           L39:
 031C                   .dbline 105
 031C 862F              mov R24,R22
 031E 8F5F              subi R24,255    ; addi 1
 0320 4817              cp R20,R24
 0322 48F3              brlo L36
 0324           X11:
 0324                   .dbline 108
 0324           ; 
 0324           ;     *( datastr1 + (k-i) ) = '.';
 0324 242E              mov R2,R20
 0326 3324              clr R3
 0328 EA2D              mov R30,R10
 032A FF27              clr R31
 032C E219              sub R30,R2
 032E F309              sbc R31,R3
 0330 CE01              movw R24,R28
 0332 0296              adiw R24,2
 0334 E80F              add R30,R24
 0336 F91F              adc R31,R25
 0338 8EE2              ldi R24,46
 033A 8083              std z+0,R24
 033C                   .dbline 111
 033C           ; 
 033C           ; 
 033C           ;     if( flag1 )        //如果为0.00820之类的数
 033C EE20              tst R14
 033E 19F0              breq L41
 0340           X12:
 0340                   .dbline 112
 0340           ;     {
 0340                   .dbline 113
 0340           ;         *datastr1 = '0';
 0340 80E3              ldi R24,48
 0342 8A83              std y+2,R24
 0344                   .dbline 114
 0344           ;         flag1 = 0;
 0344 EE24              clr R14
 0346                   .dbline 115
 0346           ;     }
 0346           L41:
 0346                   .dbline 117
 0346           ; 
 0346           ;     if( flag2 )       //如果为-0.00820之类的数
 0346 CC20              tst R12
 0348 21F0              breq L43
 034A           X13:
 034A                   .dbline 118
 034A           ;     {
 034A                   .dbline 119
 034A           ;         *datastr1 = '-';
 034A 8DE2              ldi R24,45
 034C 8A83              std y+2,R24
 034E                   .dbline 120
 034E           ;         *( datastr1 + 1 ) = '0';
 034E 80E3              ldi R24,48
 0350 8B83              std y+3,R24
 0352                   .dbline 121
 0352           ;     }
 0352           L43:
 0352                   .dbline 123
 0352           ; 
 0352           ;     if( p == 0 )
 0352 6623              tst R22
 0354 61F4              brne L46
 0356           X14:
 0356                   .dbline 124

⌨️ 快捷键说明

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