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

📄 lcd.lis

📁 基于m16的寻迹小车(包含小车题目
💻 LIS
📖 第 1 页 / 共 4 页
字号:
                        .module lcd.c
                        .area text(rom, con, rel)
 0000                   .dbfile d:\我的文档\桌面\小车\car1\lcd.c
 0000                   .dbfunc e long_to_string _long_to_string fV
 0000           ;             p1 -> R10,R11
 0000           ;             k2 -> R14
 0000           ;      datachar2 -> y+14
 0000           ;              n -> y+25
 0000           ;             k1 -> R12
 0000           ;      datachar1 -> y+4
 0000           ;              i -> y+24
 0000           ;     datainttmp -> y+0
 0000           ;              p -> y+40
 0000           ;        dataint -> y+36
                        .even
 0000           _long_to_string::
 0000 0E940000          xcall push_arg4
 0004 0E940000          xcall push_xgsetF0FC
 0008 6A97              sbiw R28,26
 000A                   .dbline -1
 000A                   .dbline 12
 000A           ; #define _LCD_C_
 000A           ; #include "LCD.h"
 000A           ; #include <iom16v.h>
 000A           ; 
 000A           ; /*****************************************
 000A           ; ** 将一个整型数据转化为字符串
 000A           ; ** 入口参数 要转换的整型数: dataint, 数组p[10]
 000A           ; ** 改变思路:整数 -->字符串-->加字符串结束标志
 000A           ; ** 可以转换小于0的整数
 000A           ; *****************************************/
 000A           ; void long_to_string( long int dataint, char *p  )
 000A           ; {
 000A                   .dbline 17
 000A           ;     long int datainttmp;
 000A           ;     char *p1;             //指向转换成为数组时用到
 000A           ;     char datachar1[10];
 000A           ;     char datachar2[10];
 000A           ;     uchar n = 0;         //取整型数据的位数
 000A 0024              clr R0
 000C 098E              std y+25,R0
 000E                   .dbline 18
 000E           ;     uchar i = 0;
 000E 088E              std y+24,R0
 0010                   .dbline 19
 0010           ;     uchar k1 = 0;         //取字符个数
 0010 CC24              clr R12
 0012                   .dbline 20
 0012           ;     uchar k2 = 0;         //取字符个数
 0012 EE24              clr R14
 0014                   .dbline 22
 0014           ; 
 0014           ;     if( dataint >= 0 )
 0014 40E0              ldi R20,0
 0016 50E0              ldi R21,0
 0018 60E0              ldi R22,0
 001A 70E0              ldi R23,0
 001C 2CA0              ldd R2,y+36
 001E 3DA0              ldd R3,y+37
 0020 4EA0              ldd R4,y+38
 0022 5FA0              ldd R5,y+39
 0024 2416              cp R2,R20
 0026 3506              cpc R3,R21
 0028 4606              cpc R4,R22
 002A 5706              cpc R5,R23
 002C 2CF0              brlt L2
 002E           X0:
 002E                   .dbline 23
 002E           ;     datainttmp = ( long int )dataint;
 002E 2882              std y+0,R2
 0030 3982              std y+1,R3
 0032 4A82              std y+2,R4
 0034 5B82              std y+3,R5
 0036 14C0              xjmp L3
 0038           L2:
 0038                   .dbline 24
 0038           ;     else datainttmp = ( long int )dataint * ( -1 );
 0038 2CA0              ldd R2,y+36
 003A 3DA0              ldd R3,y+37
 003C 4EA0              ldd R4,y+38
 003E 5FA0              ldd R5,y+39
 0040 4FEF              ldi R20,255
 0042 5FEF              ldi R21,255
 0044 6FEF              ldi R22,255
 0046 7FEF              ldi R23,255
 0048 5A92              st -y,R5
 004A 4A92              st -y,R4
 004C 3A92              st -y,R3
 004E 2A92              st -y,R2
 0050 8A01              movw R16,R20
 0052 9B01              movw R18,R22
 0054 0E940000          xcall empy32s
 0058 0883              std y+0,R16
 005A 1983              std y+1,R17
 005C 2A83              std y+2,R18
 005E 3B83              std y+3,R19
 0060           L3:
 0060                   .dbline 26
 0060           ; 
 0060           ;     p1 = datachar2;
 0060 CE01              movw R24,R28
 0062 0E96              adiw R24,14
 0064 5C01              movw R10,R24
 0066 37C0              xjmp L5
 0068           L4:
 0068                   .dbline 30
 0068           ; 
 0068           ; 
 0068           ;     while( datainttmp != 0 )
 0068           ;     {
 0068                   .dbline 31
 0068           ;         datachar1[n++] = ( datainttmp % 10 ) + 0x30;  //转换为字符并取得这个整型数据的位数 n
 0068 298C              ldd R2,y+25
 006A 3324              clr R3
 006C 3101              movw R6,R2
 006E 822D              mov R24,R2
 0070 8F5F              subi R24,255    ; addi 1
 0072 898F              std y+25,R24
 0074 4AE0              ldi R20,10
 0076 50E0              ldi R21,0
 0078 60E0              ldi R22,0
 007A 70E0              ldi R23,0
 007C 0881              ldd R16,y+0
 007E 1981              ldd R17,y+1
 0080 2A81              ldd R18,y+2
 0082 3B81              ldd R19,y+3
 0084 7A93              st -y,R23
 0086 6A93              st -y,R22
 0088 5A93              st -y,R21
 008A 4A93              st -y,R20
 008C 0E940000          xcall mod32s
 0090 1801              movw R2,R16
 0092 2901              movw R4,R18
 0094 40E3              ldi R20,48
 0096 50E0              ldi R21,0
 0098 60E0              ldi R22,0
 009A 70E0              ldi R23,0
 009C 240E              add R2,R20
 009E 351E              adc R3,R21
 00A0 461E              adc R4,R22
 00A2 571E              adc R5,R23
 00A4 CE01              movw R24,R28
 00A6 0496              adiw R24,4
 00A8 E62D              mov R30,R6
 00AA FF27              clr R31
 00AC E80F              add R30,R24
 00AE F91F              adc R31,R25
 00B0 2082              std z+0,R2
 00B2                   .dbline 32
 00B2           ;         datainttmp /= 10;
 00B2 4AE0              ldi R20,10
 00B4 50E0              ldi R21,0
 00B6 60E0              ldi R22,0
 00B8 70E0              ldi R23,0
 00BA 0881              ldd R16,y+0
 00BC 1981              ldd R17,y+1
 00BE 2A81              ldd R18,y+2
 00C0 3B81              ldd R19,y+3
 00C2 7A93              st -y,R23
 00C4 6A93              st -y,R22
 00C6 5A93              st -y,R21
 00C8 4A93              st -y,R20
 00CA 0E940000          xcall div32s
 00CE 0883              std y+0,R16
 00D0 1983              std y+1,R17
 00D2 2A83              std y+2,R18
 00D4 3B83              std y+3,R19
 00D6                   .dbline 33
 00D6           ;     }
 00D6           L5:
 00D6                   .dbline 29
 00D6 2880              ldd R2,y+0
 00D8 3980              ldd R3,y+1
 00DA 4A80              ldd R4,y+2
 00DC 5B80              ldd R5,y+3
 00DE 8894              clc
 00E0 2220              tst R2
 00E2 3204              cpc R3,R2
 00E4 4204              cpc R4,R2
 00E6 5204              cpc R5,R2
 00E8 09F0              breq X7
 00EA BECF              xjmp L4
 00EC           X7:
 00EC           X1:
 00EC                   .dbline 35
 00EC           ; 
 00EC           ;     if( dataint > 0 )          //如果要转换的整型数据>0
 00EC 40E0              ldi R20,0
 00EE 50E0              ldi R21,0
 00F0 60E0              ldi R22,0
 00F2 70E0              ldi R23,0
 00F4 2CA0              ldd R2,y+36
 00F6 3DA0              ldd R3,y+37
 00F8 4EA0              ldd R4,y+38
 00FA 5FA0              ldd R5,y+39
 00FC 4215              cp R20,R2
 00FE 5305              cpc R21,R3
 0100 6405              cpc R22,R4
 0102 7505              cpc R23,R5
 0104 2CF5              brge L7
 0106           X2:
 0106                   .dbline 36
 0106           ;     {
 0106                   .dbline 37
 0106           ;         k1 = n - 1;
 0106 898D              ldd R24,y+25
 0108 8150              subi R24,1
 010A C82E              mov R12,R24
 010C                   .dbline 38
 010C           ;         k2 = n;
 010C E98C              ldd R14,y+25
 010E                   .dbline 40
 010E           ; 
 010E           ;         for( i = 0; i < k2; i++, k1-- )
 010E 0024              clr R0
 0110 088E              std y+24,R0
 0112 12C0              xjmp L12
 0114           L9:
 0114                   .dbline 41
 0114           ;         {
 0114                   .dbline 42
 0114           ;             datachar2[k1] = datachar1[i];               //将数字符串倒过来
 0114 CE01              movw R24,R28
 0116 0496              adiw R24,4
 0118 E88D              ldd R30,y+24
 011A FF27              clr R31
 011C E80F              add R30,R24
 011E F91F              adc R31,R25
 0120 2080              ldd R2,z+0
 0122 CE01              movw R24,R28
 0124 0E96              adiw R24,14
 0126 EC2D              mov R30,R12
 0128 FF27              clr R31
 012A E80F              add R30,R24
 012C F91F              adc R31,R25
 012E 2082              std z+0,R2
 0130                   .dbline 43
 0130           ;         }
 0130           L10:
 0130                   .dbline 40
 0130 088C              ldd R0,y+24
 0132 0394              inc R0
 0134 088E              std y+24,R0
 0136 CA94              dec R12
 0138           L12:
 0138                   .dbline 40
 0138 088C              ldd R0,y+24
 013A 0E14              cp R0,R14
 013C 58F3              brlo L9
 013E           X3:
 013E                   .dbline 44
 013E           ;         datachar2[n] = '\0';      //字符串结束标志
 013E CE01              movw R24,R28
 0140 0E96              adiw R24,14
 0142 E98D              ldd R30,y+25
 0144 FF27              clr R31
 0146 E80F              add R30,R24
 0148 F91F              adc R31,R25
 014A 2224              clr R2
 014C 2082              std z+0,R2
 014E                   .dbline 45
 014E           ;     }
 014E 42C0              xjmp L8
 0150           L7:
 0150                   .dbline 47
 0150           ; 
 0150           ;     else if( dataint < 0 )       //<0
 0150 40E0              ldi R20,0
 0152 50E0              ldi R21,0
 0154 60E0              ldi R22,0
 0156 70E0              ldi R23,0
 0158 2CA0              ldd R2,y+36
 015A 3DA0              ldd R3,y+37
 015C 4EA0              ldd R4,y+38
 015E 5FA0              ldd R5,y+39
 0160 2416              cp R2,R20
 0162 3506              cpc R3,R21
 0164 4606              cpc R4,R22
 0166 5706              cpc R5,R23
 0168 3CF5              brge L13
 016A           X4:
 016A                   .dbline 48
 016A           ;     {
 016A                   .dbline 49
 016A           ;         k1 = n;
 016A C98C              ldd R12,y+25
 016C                   .dbline 50
 016C           ;         k2 = n + 1;
 016C 8C2D              mov R24,R12
 016E 8F5F              subi R24,255    ; addi 1
 0170 E82E              mov R14,R24
 0172                   .dbline 52
 0172           ; 
 0172           ;         for( i = 0; i < k2; i++, k1-- )
 0172 0024              clr R0
 0174 088E              std y+24,R0
 0176 12C0              xjmp L18
 0178           L15:
 0178                   .dbline 53
 0178           ;         {
 0178                   .dbline 54
 0178           ;             datachar2[k1] = datachar1[i];
 0178 CE01              movw R24,R28
 017A 0496              adiw R24,4
 017C E88D              ldd R30,y+24
 017E FF27              clr R31
 0180 E80F              add R30,R24
 0182 F91F              adc R31,R25
 0184 2080              ldd R2,z+0
 0186 CE01              movw R24,R28
 0188 0E96              adiw R24,14
 018A EC2D              mov R30,R12
 018C FF27              clr R31
 018E E80F              add R30,R24
 0190 F91F              adc R31,R25
 0192 2082              std z+0,R2
 0194                   .dbline 55
 0194           ;         }
 0194           L16:
 0194                   .dbline 52
 0194 088C              ldd R0,y+24
 0196 0394              inc R0
 0198 088E              std y+24,R0
 019A CA94              dec R12
 019C           L18:
 019C                   .dbline 52
 019C 088C              ldd R0,y+24
 019E 0E14              cp R0,R14
 01A0 58F3              brlo L15
 01A2           X5:
 01A2                   .dbline 56
 01A2           ;         datachar2[n + 1] = '\0';
 01A2 CE01              movw R24,R28
 01A4 0F96              adiw R24,15
 01A6 E98D              ldd R30,y+25
 01A8 FF27              clr R31
 01AA E80F              add R30,R24
 01AC F91F              adc R31,R25
 01AE 2224              clr R2
 01B0 2082              std z+0,R2
 01B2                   .dbline 57
 01B2           ;         datachar2[0] = '-';      //加上负号
 01B2 8DE2              ldi R24,45
 01B4 8E87              std y+14,R24
 01B6                   .dbline 58
 01B6           ;     }
 01B6 0EC0              xjmp L14
 01B8           L13:
 01B8                   .dbline 60
 01B8           ; 

⌨️ 快捷键说明

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