📄 jidong.lst
字号:
__start:
__text_start:
46 E5CF LDI R28,0x5F
47 E0D4 LDI R29,4
48 BFCD OUT 0x3D,R28
49 BFDE OUT 0x3E,R29
4A 51CE SUBI R28,0x1E
4B 40D0 SBCI R29,0
4C EA0A LDI R16,0xAA
4D 8308 STD Y+0,R16
4E 2400 CLR R0
4F E8EB LDI R30,0x8B
50 E0F0 LDI R31,0
51 E010 LDI R17,0
52 38EC CPI R30,0x8C
53 07F1 CPC R31,R17
54 F011 BEQ 0x0057
55 9201 ST R0,Z+
56 CFFB RJMP 0x0052
57 8300 STD Z+0,R16
58 E6E0 LDI R30,0x60
59 E0F0 LDI R31,0
5A E6A0 LDI R26,0x60
5B E0B0 LDI R27,0
5C E010 LDI R17,0
5D E000 LDI R16,0
5E BF0B OUT 0x3B,R16
5F 38EB CPI R30,0x8B
60 07F1 CPC R31,R17
61 F021 BEQ 0x0066
62 95C8 LPM
63 9631 ADIW R30,1
64 920D ST R0,X+
65 CFF9 RJMP 0x005F
66 940E 0599 CALL _main
_exit:
68 CFFF RJMP _exit
FILE: C:\DOCUME~1\Administrator\桌面\复件自~1\自动充电小车\298\jidong.c
(0001) #include <iom16v.h>
(0002) #include <macros.h>
(0003) //#include "lcd.h"
(0004) #include "delay.h"
(0005)
(0006) #define uchar unsigned char
(0007) #define uint unsigned int
(0008)
(0009) ////////////////////////////////////////////////////////////////////
(0010) //部分函数声明
(0011) void time0_start( void );
(0012) void time0_stop( void );
(0013) ///////////////////////////////////////////////////////////////////
(0014)
(0015) ///////////////////////////////////////L298驱动/////////////////////////////////////
(0016) void L298_port_init( void )
(0017) {
(0018) DDRC |= 0b11111100;
_L298_port_init:
69 B384 IN R24,0x14
6A 6F8C ORI R24,0xFC
6B BB84 OUT 0x14,R24
6C 9508 RET
(0019) }
(0020)
(0021) void go_ahead( void )
(0022) {
(0023) PORTC &=~ 0B11111100;
_go_ahead:
6D B385 IN R24,0x15
6E 7083 ANDI R24,3
6F BB85 OUT 0x15,R24
(0024) PORTC |= 0b11010100;
70 B385 IN R24,0x15
71 6D84 ORI R24,0xD4
72 BB85 OUT 0x15,R24
73 9508 RET
(0025) }
(0026)
(0027) void go_back( void )
(0028) {
(0029) PORTC &=~ 0B11111100;
_go_back:
74 B385 IN R24,0x15
75 7083 ANDI R24,3
76 BB85 OUT 0x15,R24
(0030) PORTC |= 0b11101000;
77 B385 IN R24,0x15
78 6E88 ORI R24,0xE8
79 BB85 OUT 0x15,R24
7A 9508 RET
(0031) }
(0032)
(0033) void turn_l( void )
(0034) {
(0035) PORTC &=~ 0B11111100;
_turn_l:
7B B385 IN R24,0x15
7C 7083 ANDI R24,3
7D BB85 OUT 0x15,R24
(0036) PORTC |= 0b11011000;
7E B385 IN R24,0x15
7F 6D88 ORI R24,0xD8
80 BB85 OUT 0x15,R24
81 9508 RET
(0037) }
(0038)
(0039) void turn_r( void )
(0040) {
(0041) PORTC &=~ 0B11111100;
_turn_r:
82 B385 IN R24,0x15
83 7083 ANDI R24,3
84 BB85 OUT 0x15,R24
(0042) PORTC |= 0b11100100;
85 B385 IN R24,0x15
86 6E84 ORI R24,0xE4
87 BB85 OUT 0x15,R24
88 9508 RET
(0043) }
(0044)
(0045) void car_stop( void )
(0046) {
(0047) PORTC &=~ 0B11111100;
_car_stop:
89 B385 IN R24,0x15
8A 7083 ANDI R24,3
8B BB85 OUT 0x15,R24
8C 9508 RET
_get_5small:
small_tmp --> Y,+4
k --> Y,+0
e --> Y,+48
d --> Y,+44
c --> Y,+40
b --> Y,+36
a --> Y,+32
8D 940E 0885 CALL push_arg4
8F 97A0 SBIW R28,0x20
(0048) }
(0049)
(0050) ///////////////////////////////////////L298驱动部分结束/////////////////////////////////
(0051)
(0052)
(0053) ///////////////////////////////////////小车寻光部分/////////////////////////////////////
(0054) #define Vref 2.56 //定义基准电压值
(0055) //#define Vref 1.00
(0056)
(0057) //通道选择宏定义
(0058) #define AD_mux(n) { ADMUX = ( 0xC0 | n ); } //内部基准 0xC0,
(0059)
(0060) //输入通道端口配置
(0061) #define ADC0_in { DDRA &= 0XFE; PORTA |= 0X01; } //输入,高阻态
(0062) #define ADC1_in { DDRA &= 0XFD; PORTA |= 0X02; }
(0063) #define ADC2_in { DDRA &= 0XFB; PORTA |= 0X04; }
(0064) #define ADC3_in { DDRA &= 0XF7; PORTA |= 0X08; }
(0065) #define ADC4_in { DDRA &= 0XEF; PORTA |= 0X10; }
(0066) //#define ADC5_in { DDRA &= 0XDF; PORTA |= 0X20; }
(0067) //#define ADC6_in { DDRA &= 0XBF; PORTA |= 0X40; }
(0068) //#define ADC7_in { DDRA &= 0X7F; PORTA |= 0X80; }
(0069)
(0070) //全局变量
(0071) uint small_flag = 0; //取最小光敏代号存入该变量
(0072)
(0073) uint adcl = 0; //定义暂存低字节
(0074) uint adch = 0; //高字节
(0075) uint adcvalue = 0; //低+高
(0076) uchar ad_m = 0; //初始化通道为0通道
(0077)
(0078) float ad0_tmp = 0.0; //转换完成后暂存值
(0079) float ad1_tmp = 0.0;
(0080) float ad2_tmp = 0.0;
(0081) float ad3_tmp = 0.0;
(0082) float ad4_tmp = 0.0;
(0083)
(0084) //取三个数中的最小值
(0085) char get_5small( float a, float b, float c, float d, float e ) //ad0_tmp, ad1_tmp, ad2_tmp, ad3_tmp, ad4_tmp
(0086) {
(0087) float small_tmp = 0.0;
90 E50C LDI R16,0x5C
91 E010 LDI R17,0
92 940E 094B CALL lpm32
94 830C STD Y+4,R16
95 831D STD Y+5,R17
96 832E STD Y+6,R18
97 833F STD Y+7,R19
(0088) float k = 0.0;
98 E50C LDI R16,0x5C
99 E010 LDI R17,0
9A 940E 094B CALL lpm32
9C 8308 STD Y+0,R16
9D 8319 STD Y+1,R17
9E 832A STD Y+2,R18
9F 833B STD Y+3,R19
(0089)
(0090) k = ( ( a < b ? a : b ) < c ) ? ( a < b ? a : b ) : c;
A0 A108 LDD R16,Y+32
A1 A119 LDD R17,Y+33
A2 A12A LDD R18,Y+34
A3 A13B LDD R19,Y+35
A4 01CE MOVW R24,R28
A5 9684 ADIW R24,0x24
A6 939A ST R25,-Y
A7 938A ST R24,-Y
A8 940E 0BB3 CALL fpcmp1
AA F44C BGE 0x00B4
AB A028 LDD R2,Y+32
AC A039 LDD R3,Y+33
AD A04A LDD R4,Y+34
AE A05B LDD R5,Y+35
AF 862C STD Y+12,R2
B0 863D STD Y+13,R3
B1 864E STD Y+14,R4
B2 865F STD Y+15,R5
B3 C008 RJMP 0x00BC
B4 A02C LDD R2,Y+36
B5 A03D LDD R3,Y+37
B6 A04E LDD R4,Y+38
B7 A05F LDD R5,Y+39
B8 862C STD Y+12,R2
B9 863D STD Y+13,R3
BA 864E STD Y+14,R4
BB 865F STD Y+15,R5
BC 850C LDD R16,Y+12
BD 851D LDD R17,Y+13
BE 852E LDD R18,Y+14
BF 853F LDD R19,Y+15
C0 01CE MOVW R24,R28
C1 9688 ADIW R24,0x28
C2 939A ST R25,-Y
C3 938A ST R24,-Y
C4 940E 0BB3 CALL fpcmp1
C6 F52C BGE 0x00EC
C7 A108 LDD R16,Y+32
C8 A119 LDD R17,Y+33
C9 A12A LDD R18,Y+34
CA A13B LDD R19,Y+35
CB 01CE MOVW R24,R28
CC 9684 ADIW R24,0x24
CD 939A ST R25,-Y
CE 938A ST R24,-Y
CF 940E 0BB3 CALL fpcmp1
D1 F44C BGE 0x00DB
D2 A028 LDD R2,Y+32
D3 A039 LDD R3,Y+33
D4 A04A LDD R4,Y+34
D5 A05B LDD R5,Y+35
D6 8A28 STD Y+16,R2
D7 8A39 STD Y+17,R3
D8 8A4A STD Y+18,R4
D9 8A5B STD Y+19,R5
DA C008 RJMP 0x00E3
DB A02C LDD R2,Y+36
DC A03D LDD R3,Y+37
DD A04E LDD R4,Y+38
DE A05F LDD R5,Y+39
DF 8A28 STD Y+16,R2
E0 8A39 STD Y+17,R3
E1 8A4A STD Y+18,R4
E2 8A5B STD Y+19,R5
E3 8828 LDD R2,Y+16
E4 8839 LDD R3,Y+17
E5 884A LDD R4,Y+18
E6 885B LDD R5,Y+19
E7 8628 STD Y+8,R2
E8 8639 STD Y+9,R3
E9 864A STD Y+10,R4
EA 865B STD Y+11,R5
EB C008 RJMP 0x00F4
EC A428 LDD R2,Y+40
ED A439 LDD R3,Y+41
EE A44A LDD R4,Y+42
EF A45B LDD R5,Y+43
F0 8628 STD Y+8,R2
F1 8639 STD Y+9,R3
F2 864A STD Y+10,R4
F3 865B STD Y+11,R5
F4 8428 LDD R2,Y+8
F5 8439 LDD R3,Y+9
F6 844A LDD R4,Y+10
F7 845B LDD R5,Y+11
F8 8228 STD Y+0,R2
F9 8239 STD Y+1,R3
FA 824A STD Y+2,R4
FB 825B STD Y+3,R5
(0091) small_tmp = ( ( k < d ? k : d ) < e ) ? ( k < d ? k : d ) : e;
FC 8108 LDD R16,Y+0
FD 8119 LDD R17,Y+1
FE 812A LDD R18,Y+2
FF 813B LDD R19,Y+3
100 01CE MOVW R24,R28
101 968C ADIW R24,0x2C
102 939A ST R25,-Y
103 938A ST R24,-Y
104 940E 0BB3 CALL fpcmp1
106 F44C BGE 0x0110
107 8028 LDD R2,Y+0
108 8039 LDD R3,Y+1
109 804A LDD R4,Y+2
10A 805B LDD R5,Y+3
10B 8E28 STD Y+24,R2
10C 8E39 STD Y+25,R3
10D 8E4A STD Y+26,R4
10E 8E5B STD Y+27,R5
10F C008 RJMP 0x0118
110 A42C LDD R2,Y+44
111 A43D LDD R3,Y+45
112 A44E LDD R4,Y+46
113 A45F LDD R5,Y+47
114 8E28 STD Y+24,R2
115 8E39 STD Y+25,R3
116 8E4A STD Y+26,R4
117 8E5B STD Y+27,R5
118 8D08 LDD R16,Y+24
119 8D19 LDD R17,Y+25
11A 8D2A LDD R18,Y+26
11B 8D3B LDD R19,Y+27
11C 01CE MOVW R24,R28
11D 96C0 ADIW R24,0x30
11E 939A ST R25,-Y
11F 938A ST R24,-Y
120 940E 0BB3 CALL fpcmp1
122 F52C BGE 0x0148
123 8108 LDD R16,Y+0
124 8119 LDD R17,Y+1
125 812A LDD R18,Y+2
126 813B LDD R19,Y+3
127 01CE MOVW R24,R28
128 968C ADIW R24,0x2C
129 939A ST R25,-Y
12A 938A ST R24,-Y
12B 940E 0BB3 CALL fpcmp1
12D F44C BGE 0x0137
12E 8028 LDD R2,Y+0
12F 8039 LDD R3,Y+1
130 804A LDD R4,Y+2
131 805B LDD R5,Y+3
132 8E2C STD Y+28,R2
133 8E3D STD Y+29,R3
134 8E4E STD Y+30,R4
135 8E5F STD Y+31,R5
136 C008 RJMP 0x013F
137 A42C LDD R2,Y+44
138 A43D LDD R3,Y+45
139 A44E LDD R4,Y+46
13A A45F LDD R5,Y+47
13B 8E2C STD Y+28,R2
13C 8E3D STD Y+29,R3
13D 8E4E STD Y+30,R4
13E 8E5F STD Y+31,R5
13F 8C2C LDD R2,Y+28
140 8C3D LDD R3,Y+29
141 8C4E LDD R4,Y+30
142 8C5F LDD R5,Y+31
143 8A2C STD Y+20,R2
144 8A3D STD Y+21,R3
145 8A4E STD Y+22,R4
146 8A5F STD Y+23,R5
147 C008 RJMP 0x0150
148 A828 LDD R2,Y+48
149 A839 LDD R3,Y+49
14A A84A LDD R4,Y+50
14B A85B LDD R5,Y+51
14C 8A2C STD Y+20,R2
14D 8A3D STD Y+21,R3
14E 8A4E STD Y+22,R4
14F 8A5F STD Y+23,R5
150 882C LDD R2,Y+20
151 883D LDD R3,Y+21
152 884E LDD R4,Y+22
153 885F LDD R5,Y+23
154 822C STD Y+4,R2
155 823D STD Y+5,R3
156 824E STD Y+6,R4
157 825F STD Y+7,R5
(0092)
(0093) if( small_tmp == a ) return 0;
158 810C LDD R16,Y+4
159 811D LDD R17,Y+5
15A 812E LDD R18,Y+6
15B 813F LDD R19,Y+7
15C 01CE MOVW R24,R28
15D 9680 ADIW R24,0x20
15E 939A ST R25,-Y
15F 938A ST R24,-Y
160 940E 0BB3 CALL fpcmp1
162 F411 BNE 0x0165
163 2700 CLR R16
164 C035 RJMP 0x019A
(0094) else if( small_tmp == b ) return 1;
165 810C LDD R16,Y+4
166 811D LDD R17,Y+5
167 812E LDD R18,Y+6
168 813F LDD R19,Y+7
169 01CE MOVW R24,R28
16A 9684 ADIW R24,0x24
16B 939A ST R25,-Y
16C 938A ST R24,-Y
16D 940E 0BB3 CALL fpcmp1
16F F411 BNE 0x0172
170 E001 LDI R16,1
171 C028 RJMP 0x019A
(0095) else if( small_tmp == c ) return 2;
172 810C LDD R16,Y+4
173 811D LDD R17,Y+5
174 812E LDD R18,Y+6
175 813F LDD R19,Y+7
176 01CE MOVW R24,R28
177 9688 ADIW R24,0x28
178 939A ST R25,-Y
179 938A ST R24,-Y
17A 940E 0BB3 CALL fpcmp1
17C F411 BNE 0x017F
17D E002 LDI R16,2
17E C01B RJMP 0x019A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -