📄 1602test.lst
字号:
__start:
__text_start:
49 E5CF LDI R28,0x5F
4A E0D4 LDI R29,4
4B BFCD OUT 0x3D,R28
4C BFDE OUT 0x3E,R29
4D 51CE SUBI R28,0x1E
4E 40D0 SBCI R29,0
4F EA0A LDI R16,0xAA
50 8308 STD Y+0,R16
51 2400 CLR R0
52 E8E2 LDI R30,0x82
53 E0F0 LDI R31,0
54 E010 LDI R17,0
55 38E2 CPI R30,0x82
56 07F1 CPC R31,R17
57 F011 BEQ 0x005A
58 9201 ST R0,Z+
59 CFFB RJMP 0x0055
5A 8300 STD Z+0,R16
5B E7E0 LDI R30,0x70
5C E0F0 LDI R31,0
5D E6A0 LDI R26,0x60
5E E0B0 LDI R27,0
5F E010 LDI R17,0
60 E000 LDI R16,0
61 BF0B OUT 0x3B,R16
62 39E2 CPI R30,0x92
63 07F1 CPC R31,R17
64 F021 BEQ 0x0069
65 95C8 LPM
66 9631 ADIW R30,1
67 920D ST R0,X+
68 CFF9 RJMP 0x0062
69 940E 0375 CALL _main
_exit:
6B CFFF RJMP _exit
FILE: E:\avr\1602测试程序\delay.c
(0001) #define _DELAY_C_
(0002) #include "DELAY.H" //用户自己定义的头文件
(0003)
(0004) //1us延时函数
(0005) void delay_1us( void )
(0006) {
(0007) uint i = 1;
_delay_1us:
i --> R16
6C E001 LDI R16,1
6D E010 LDI R17,0
6E C001 RJMP 0x0070
(0008) while( i-- )
(0009) {
(0010) asm("nop");
6F 0000 NOP
70 0118 MOVW R2,R16
71 5001 SUBI R16,1
72 4010 SBCI R17,0
73 2022 TST R2
74 F7D1 BNE 0x006F
75 2033 TST R3
76 F7C1 BNE 0x006F
77 9508 RET
_delay_nus:
i --> R20
n --> R10
78 940E 0517 CALL push_xgset300C
7A 0158 MOVW R10,R16
(0011) }
(0012) }
(0013)
(0014) //nus延时函数
(0015) void delay_nus( uint n )
(0016) {
(0017) uint i = 0;
7B 2744 CLR R20
7C 2755 CLR R21
(0018) for (i = 0; i < n; i++)
7D C003 RJMP 0x0081
(0019) delay_1us();
7E DFED RCALL _delay_1us
7F 5F4F SUBI R20,0xFF
80 4F5F SBCI R21,0xFF
81 154A CP R20,R10
82 055B CPC R21,R11
83 F3D0 BCS 0x007E
84 940C 051C JMP pop_xgset300C
(0020) }
(0021)
(0022) //1ms延时函数
(0023) void delay_1ms( void )
(0024) {
(0025) uint i;
(0026) for (i = 0; i < 1140; i++)
_delay_1ms:
i --> R16
86 2700 CLR R16
87 2711 CLR R17
88 C002 RJMP 0x008B
89 5F0F SUBI R16,0xFF
8A 4F1F SBCI R17,0xFF
8B 3704 CPI R16,0x74
8C E0E4 LDI R30,4
8D 071E CPC R17,R30
8E F3D0 BCS 0x0089
8F 9508 RET
_delay_nms:
i --> R20
n --> R10
90 940E 0517 CALL push_xgset300C
92 0158 MOVW R10,R16
(0027) {;}
(0028) }
(0029)
(0030) //nms延时函数
(0031) void delay_nms( uint n )
(0032) {
(0033) uint i = 0;
93 2744 CLR R20
94 2755 CLR R21
(0034) for (i = 0; i < n; i++)
95 C003 RJMP 0x0099
(0035) delay_1ms();
96 DFEF RCALL _delay_1ms
97 5F4F SUBI R20,0xFF
98 4F5F SBCI R21,0xFF
99 154A CP R20,R10
9A 055B CPC R21,R11
9B F3D0 BCS 0x0096
9C 940C 051C JMP pop_xgset300C
_delay_ns:
i --> R10
n --> R12
9E 92AA ST R10,-Y
9F 92CA ST R12,-Y
A0 2EC0 MOV R12,R16
(0036) }
(0037)
(0038) //延时1S
(0039) void delay_ns( uchar n )
(0040) {
(0041) uchar i;
(0042) for( i = 0; i < n; i++ )
A1 24AA CLR R10
A2 C004 RJMP 0x00A7
(0043) {
(0044) delay_nms( 1000 );
A3 EE08 LDI R16,0xE8
A4 E013 LDI R17,3
A5 DFEA RCALL _delay_nms
A6 94A3 INC R10
A7 14AC CP R10,R12
A8 F3D0 BCS 0x00A3
A9 90C9 LD R12,Y+
AA 90A9 LD R10,Y+
AB 9508 RET
_long_to_string:
p1 --> R10
k2 --> R14
datachar2 --> Y,+14
n --> Y,+25
k1 --> R12
datachar1 --> Y,+4
i --> Y,+24
datainttmp --> Y,+0
p --> Y,+40
dataint --> Y,+36
AC 940E 045E CALL push_arg4
AE 940E 050C CALL push_xgsetF0FC
B0 976A SBIW R28,0x1A
FILE: E:\avr\1602测试程序\lcd.c
(0001) #define _LCD_C_
(0002) #include "LCD.h"
(0003) #include <iom16v.h>
(0004)
(0005) /*****************************************
(0006) ** 将一个整型数据转化为字符串
(0007) ** 入口参数 要转换的整型数: dataint, 数组p[10]
(0008) ** 改变思路:整数 -->字符串-->加字符串结束标志
(0009) ** 可以转换小于0的整数
(0010) *****************************************/
(0011) void long_to_string( long int dataint, char *p )
(0012) {
(0013) long int datainttmp;
(0014) char *p1; //指向转换成为数组时用到
(0015) char datachar1[10];
(0016) char datachar2[10];
(0017) uchar n = 0; //取整型数据的位数
B1 2400 CLR R0
B2 8E09 STD Y+25,R0
(0018) uchar i = 0;
B3 8E08 STD Y+24,R0
(0019) uchar k1 = 0; //取字符个数
B4 24CC CLR R12
(0020) uchar k2 = 0; //取字符个数
B5 24EE CLR R14
(0021)
(0022) if( dataint >= 0 )
B6 E040 LDI R20,0
B7 E050 LDI R21,0
B8 E060 LDI R22,0
B9 E070 LDI R23,0
BA A02C LDD R2,Y+36
BB A03D LDD R3,Y+37
BC A04E LDD R4,Y+38
BD A05F LDD R5,Y+39
BE 1624 CP R2,R20
BF 0635 CPC R3,R21
C0 0646 CPC R4,R22
C1 0657 CPC R5,R23
C2 F02C BLT 0x00C8
(0023) datainttmp = ( long int )dataint;
C3 8228 STD Y+0,R2
C4 8239 STD Y+1,R3
C5 824A STD Y+2,R4
C6 825B STD Y+3,R5
C7 C014 RJMP 0x00DC
(0024) else datainttmp = ( long int )dataint * ( -1 );
C8 A02C LDD R2,Y+36
C9 A03D LDD R3,Y+37
CA A04E LDD R4,Y+38
CB A05F LDD R5,Y+39
CC EF4F LDI R20,0xFF
CD EF5F LDI R21,0xFF
CE EF6F LDI R22,0xFF
CF EF7F LDI R23,0xFF
D0 925A ST R5,-Y
D1 924A ST R4,-Y
D2 923A ST R3,-Y
D3 922A ST R2,-Y
D4 018A MOVW R16,R20
D5 019B MOVW R18,R22
D6 940E 04CD CALL empy32s
D8 8308 STD Y+0,R16
D9 8319 STD Y+1,R17
DA 832A STD Y+2,R18
DB 833B STD Y+3,R19
(0025)
(0026) p1 = datachar2;
DC 01CE MOVW R24,R28
DD 960E ADIW R24,0xE
DE 015C MOVW R10,R24
DF C037 RJMP 0x0117
(0027)
(0028)
(0029) while( datainttmp != 0 )
(0030) {
(0031) datachar1[n++] = ( datainttmp % 10 ) + 0x30; //转换为字符并取得这个整型数据的位数 n
E0 8C29 LDD R2,Y+25
E1 2433 CLR R3
E2 0131 MOVW R6,R2
E3 2D82 MOV R24,R2
E4 5F8F SUBI R24,0xFF
E5 8F89 STD Y+25,R24
E6 E04A LDI R20,0xA
E7 E050 LDI R21,0
E8 E060 LDI R22,0
E9 E070 LDI R23,0
EA 8108 LDD R16,Y+0
EB 8119 LDD R17,Y+1
EC 812A LDD R18,Y+2
ED 813B LDD R19,Y+3
EE 937A ST R23,-Y
EF 936A ST R22,-Y
F0 935A ST R21,-Y
F1 934A ST R20,-Y
F2 940E 046B CALL mod32s
F4 0118 MOVW R2,R16
F5 0129 MOVW R4,R18
F6 E340 LDI R20,0x30
F7 E050 LDI R21,0
F8 E060 LDI R22,0
F9 E070 LDI R23,0
FA 0E24 ADD R2,R20
FB 1E35 ADC R3,R21
FC 1E46 ADC R4,R22
FD 1E57 ADC R5,R23
FE 01CE MOVW R24,R28
FF 9604 ADIW R24,4
100 2DE6 MOV R30,R6
101 27FF CLR R31
102 0FE8 ADD R30,R24
103 1FF9 ADC R31,R25
104 8220 STD Z+0,R2
(0032) datainttmp /= 10;
105 E04A LDI R20,0xA
106 E050 LDI R21,0
107 E060 LDI R22,0
108 E070 LDI R23,0
109 8108 LDD R16,Y+0
10A 8119 LDD R17,Y+1
10B 812A LDD R18,Y+2
10C 813B LDD R19,Y+3
10D 937A ST R23,-Y
10E 936A ST R22,-Y
10F 935A ST R21,-Y
110 934A ST R20,-Y
111 940E 0469 CALL div32s
113 8308 STD Y+0,R16
114 8319 STD Y+1,R17
115 832A STD Y+2,R18
116 833B STD Y+3,R19
117 8028 LDD R2,Y+0
118 8039 LDD R3,Y+1
119 804A LDD R4,Y+2
11A 805B LDD R5,Y+3
11B 9488 BCLR 0
11C 2022 TST R2
11D 0432 CPC R3,R2
11E 0442 CPC R4,R2
11F 0452 CPC R5,R2
120 F009 BEQ 0x0122
121 CFBE RJMP 0x00E0
(0033) }
(0034)
(0035) if( dataint > 0 ) //如果要转换的整型数据>0
122 E040 LDI R20,0
123 E050 LDI R21,0
124 E060 LDI R22,0
125 E070 LDI R23,0
126 A02C LDD R2,Y+36
127 A03D LDD R3,Y+37
128 A04E LDD R4,Y+38
129 A05F LDD R5,Y+39
12A 1542 CP R20,R2
12B 0553 CPC R21,R3
12C 0564 CPC R22,R4
12D 0575 CPC R23,R5
12E F52C BGE 0x0154
(0036) {
(0037) k1 = n - 1;
12F 8D89 LDD R24,Y+25
130 5081 SUBI R24,1
131 2EC8 MOV R12,R24
(0038) k2 = n;
132 8CE9 LDD R14,Y+25
(0039)
(0040) for( i = 0; i < k2; i++, k1-- )
133 2400 CLR R0
134 8E08 STD Y+24,R0
135 C012 RJMP 0x0148
(0041) {
(0042) datachar2[k1] = datachar1[i]; //将数字符串倒过来
136 01CE MOVW R24,R28
137 9604 ADIW R24,4
138 8DE8 LDD R30,Y+24
139 27FF CLR R31
13A 0FE8 ADD R30,R24
13B 1FF9 ADC R31,R25
13C 8020 LDD R2,Z+0
13D 01CE MOVW R24,R28
13E 960E ADIW R24,0xE
13F 2DEC MOV R30,R12
140 27FF CLR R31
141 0FE8 ADD R30,R24
142 1FF9 ADC R31,R25
143 8220 STD Z+0,R2
144 8C08 LDD R0,Y+24
145 9403 INC R0
146 8E08 STD Y+24,R0
147 94CA DEC R12
148 8C08 LDD R0,Y+24
149 140E CP R0,R14
14A F358 BCS 0x0136
(0043) }
(0044) datachar2[n] = '\0'; //字符串结束标志
14B 01CE MOVW R24,R28
14C 960E ADIW R24,0xE
14D 8DE9 LDD R30,Y+25
14E 27FF CLR R31
14F 0FE8 ADD R30,R24
150 1FF9 ADC R31,R25
151 2422 CLR R2
152 8220 STD Z+0,R2
(0045) }
153 C042 RJMP 0x0196
(0046)
(0047) else if( dataint < 0 ) //<0
154 E040 LDI R20,0
155 E050 LDI R21,0
156 E060 LDI R22,0
157 E070 LDI R23,0
158 A02C LDD R2,Y+36
159 A03D LDD R3,Y+37
15A A04E LDD R4,Y+38
15B A05F LDD R5,Y+39
15C 1624 CP R2,R20
15D 0635 CPC R3,R21
15E 0646 CPC R4,R22
15F 0657 CPC R5,R23
160 F53C BGE 0x0188
(0048) {
(0049) k1 = n;
161 8CC9 LDD R12,Y+25
(0050) k2 = n + 1;
162 2D8C MOV R24,R12
163 5F8F SUBI R24,0xFF
164 2EE8 MOV R14,R24
(0051)
(0052) for( i = 0; i < k2; i++, k1-- )
165 2400 CLR R0
166 8E08 STD Y+24,R0
167 C012 RJMP 0x017A
(0053) {
(0054) datachar2[k1] = datachar1[i];
168 01CE MOVW R24,R28
169 9604 ADIW R24,4
16A 8DE8 LDD R30,Y+24
16B 27FF CLR R31
16C 0FE8 ADD R30,R24
16D 1FF9 ADC R31,R25
16E 8020 LDD R2,Z+0
16F 01CE MOVW R24,R28
170 960E ADIW R24,0xE
171 2DEC MOV R30,R12
172 27FF CLR R31
173 0FE8 ADD R30,R24
174 1FF9 ADC R31,R25
175 8220 STD Z+0,R2
176 8C08 LDD R0,Y+24
177 9403 INC R0
178 8E08 STD Y+24,R0
179 94CA DEC R12
17A 8C08 LDD R0,Y+24
17B 140E CP R0,R14
17C F358 BCS 0x0168
(0055) }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -