📄 car.lst
字号:
108 0158 MOVW R10,R16
(0201) // PORTB=0X00;
(0202) // delay(T-aa);
(0203)
(0204) }
(0205)
(0206) void BACK(unsigned int bb) // 直线后退
(0207) {
(0208)
(0209) PORTB=0X09|0X30;
109 E389 LDI R24,0x39
10A BB88 OUT 0x18,R24
(0210) delay(bb);
10B 0185 MOVW R16,R10
10C DF80 RCALL _delay
(0211) PORTB=0X00;
10D 2422 CLR R2
10E BA28 OUT 0x18,R2
(0212) delay(T-bb);
10F 9100 0060 LDS R16,T
111 9110 0061 LDS R17,T+1
113 190A SUB R16,R10
114 091B SBC R17,R11
115 DF77 RCALL _delay
116 90B9 LD R11,Y+
117 90A9 LD R10,Y+
118 9508 RET
_GTOL:
cc --> R10
119 92AA ST R10,-Y
11A 92BA ST R11,-Y
11B 0158 MOVW R10,R16
(0213) }
(0214)
(0215) void GTOL(unsigned int cc) //前左转
(0216) {
(0217) PORTB=0X02|0X30;
11C E382 LDI R24,0x32
11D BB88 OUT 0x18,R24
(0218) delay(cc);
11E 0185 MOVW R16,R10
11F DF6D RCALL _delay
(0219) PORTB=0X00;
120 2422 CLR R2
121 BA28 OUT 0x18,R2
(0220) delay(T-cc);
122 9100 0060 LDS R16,T
124 9110 0061 LDS R17,T+1
126 190A SUB R16,R10
127 091B SBC R17,R11
128 DF64 RCALL _delay
129 90B9 LD R11,Y+
12A 90A9 LD R10,Y+
12B 9508 RET
_GTOR:
dd --> R10
12C 92AA ST R10,-Y
12D 92BA ST R11,-Y
12E 0158 MOVW R10,R16
(0221) }
(0222)
(0223) void GTOR(unsigned int dd) //前右转
(0224) {
(0225)
(0226) PORTB=0X04|0X30;
12F E384 LDI R24,0x34
130 BB88 OUT 0x18,R24
(0227) delay(dd);
131 0185 MOVW R16,R10
132 DF5A RCALL _delay
(0228) PORTB=0X00;
133 2422 CLR R2
134 BA28 OUT 0x18,R2
(0229) delay(T-dd);
135 9100 0060 LDS R16,T
137 9110 0061 LDS R17,T+1
139 190A SUB R16,R10
13A 091B SBC R17,R11
13B DF51 RCALL _delay
13C 90B9 LD R11,Y+
13D 90A9 LD R10,Y+
13E 9508 RET
_BTOR:
cc --> R10
13F 92AA ST R10,-Y
140 92BA ST R11,-Y
141 0158 MOVW R10,R16
(0230) }
(0231) void BTOR(unsigned int cc) //后左转
(0232) {
(0233)
(0234) PORTB=0X010|0X30;
142 E380 LDI R24,0x30
143 BB88 OUT 0x18,R24
(0235) delay(cc);
144 0185 MOVW R16,R10
145 DF47 RCALL _delay
(0236) PORTB=0X00;
146 2422 CLR R2
147 BA28 OUT 0x18,R2
(0237) delay(T-cc);
148 9100 0060 LDS R16,T
14A 9110 0061 LDS R17,T+1
14C 190A SUB R16,R10
14D 091B SBC R17,R11
14E DF3E RCALL _delay
14F 90B9 LD R11,Y+
150 90A9 LD R10,Y+
151 9508 RET
_BTOL:
dd --> R10
152 92AA ST R10,-Y
153 92BA ST R11,-Y
154 0158 MOVW R10,R16
(0238) }
(0239)
(0240) void BTOL(unsigned int dd) //后右转
(0241) {
(0242)
(0243)
(0244) PORTB=0X08|0X30;
155 E388 LDI R24,0x38
156 BB88 OUT 0x18,R24
(0245) delay(dd);
157 0185 MOVW R16,R10
158 DF34 RCALL _delay
(0246) PORTB=0X00;
159 2422 CLR R2
15A BA28 OUT 0x18,R2
(0247) delay(T-dd);
15B 9100 0060 LDS R16,T
15D 9110 0061 LDS R17,T+1
15F 190A SUB R16,R10
160 091B SBC R17,R11
161 DF2B RCALL _delay
162 90B9 LD R11,Y+
163 90A9 LD R10,Y+
164 9508 RET
_Linecheck_GO:
ss --> R10
165 940E 022F CALL push_xgset300C
(0248)
(0249) }
(0250) //============================================================================================
(0251) //函数: void line_check_GO(void)
(0252) //语法:void line_check_GO(void)
(0253) //描述: 前进黑白寻迹检测
(0254) //参数:无
(0255) //返回:无
(0256) //============================================================================================
(0257) void Linecheck_GO(void)
(0258) {
(0259)
(0260) unsigned char ss;
(0261) PORTA = 0XFF;
167 EF8F LDI R24,0xFF
168 BB8B OUT 0x1B,R24
(0262) DDRA = 0x00;//PA 为输入口
169 2422 CLR R2
16A BA2A OUT 0x1A,R2
(0263) delay(1);
16B E001 LDI R16,1
16C E010 LDI R17,0
16D DF1F RCALL _delay
(0264) // _NOP();
(0265) ss=PINA;
16E B2A9 IN R10,0x19
(0266) switch(ss)
16F 2D4A MOV R20,R10
170 2755 CLR R21
171 3E4F CPI R20,0xEF
172 E0E0 LDI R30,0
173 075E CPC R21,R30
174 F0B1 BEQ 0x018B
175 3E4F CPI R20,0xEF
176 E0E0 LDI R30,0
177 075E CPC R21,R30
178 F40C BGE 0x017A
179 C043 RJMP 0x01BD
17A 3F47 CPI R20,0xF7
17B E0E0 LDI R30,0
17C 075E CPC R21,R30
17D F0B9 BEQ 0x0195
17E 3F4B CPI R20,0xFB
17F E0E0 LDI R30,0
180 075E CPC R21,R30
181 F0E9 BEQ 0x019F
182 3F4D CPI R20,0xFD
183 E0E0 LDI R30,0
184 075E CPC R21,R30
185 F119 BEQ 0x01A9
186 3F4E CPI R20,0xFE
187 E0E0 LDI R30,0
188 075E CPC R21,R30
189 F149 BEQ 0x01B3
18A C032 RJMP 0x01BD
(0267) {
(0268) case 0xEF: GTOL(600);i=0; break;
18B E508 LDI R16,0x58
18C E012 LDI R17,2
18D DF8B RCALL _GTOL
18E 2422 CLR R2
18F 2433 CLR R3
190 9230 0063 STS i+1,R3
192 9220 0062 STS i,R2
194 C031 RJMP 0x01C6
(0269) case 0xF7: GTOL(600); i=0;break;
195 E508 LDI R16,0x58
196 E012 LDI R17,2
197 DF81 RCALL _GTOL
198 2422 CLR R2
199 2433 CLR R3
19A 9230 0063 STS i+1,R3
19C 9220 0062 STS i,R2
19E C027 RJMP 0x01C6
(0270) case 0xFB: GO(700); i=0; break;
19F EB0C LDI R16,0xBC
1A0 E012 LDI R17,2
1A1 DF5A RCALL _GO
1A2 2422 CLR R2
1A3 2433 CLR R3
1A4 9230 0063 STS i+1,R3
1A6 9220 0062 STS i,R2
1A8 C01D RJMP 0x01C6
(0271) case 0XFD: GTOR(600);i=0; break;
1A9 E508 LDI R16,0x58
1AA E012 LDI R17,2
1AB DF80 RCALL _GTOR
1AC 2422 CLR R2
1AD 2433 CLR R3
1AE 9230 0063 STS i+1,R3
1B0 9220 0062 STS i,R2
1B2 C013 RJMP 0x01C6
(0272) case 0xFE: GTOR(600); i=0;break;
1B3 E508 LDI R16,0x58
1B4 E012 LDI R17,2
1B5 DF76 RCALL _GTOR
1B6 2422 CLR R2
1B7 2433 CLR R3
1B8 9230 0063 STS i+1,R3
1BA 9220 0062 STS i,R2
1BC C009 RJMP 0x01C6
(0273) default : i++;
1BD 9180 0062 LDS R24,i
1BF 9190 0063 LDS R25,i+1
1C1 9601 ADIW R24,1
1C2 9390 0063 STS i+1,R25
1C4 9380 0062 STS i,R24
(0274) }
(0275) //if( i>=300)
(0276) if(0)
1C6 C000 RJMP 0x01C7
(0277) {
(0278) STOP();
(0279) i=300;
(0280) }
(0281) else GO(1000); // if (i!=0)
1C7 EE08 LDI R16,0xE8
1C8 E013 LDI R17,3
1C9 DF32 RCALL _GO
1CA 940C 0234 JMP pop_xgset300C
_Linecheck_BACK:
ss --> R10
1CC 940E 022F CALL push_xgset300C
(0282) }
(0283) //============================================================================================
(0284) //函数: void line_check_BACK(void)
(0285) //语法:void line_check_BACK(void)
(0286) //描述: 前进黑白寻迹检测
(0287) //参数:无
(0288) //返回:无
(0289) //============================================================================================
(0290) void Linecheck_BACK(void)
(0291) {
(0292) unsigned char ss;
(0293) PORTA = 0XFF;
1CE EF8F LDI R24,0xFF
1CF BB8B OUT 0x1B,R24
(0294) DDRA = 0x00;//PA 为输入口
1D0 2422 CLR R2
1D1 BA2A OUT 0x1A,R2
(0295) delay(1);
1D2 E001 LDI R16,1
1D3 E010 LDI R17,0
1D4 DEB8 RCALL _delay
(0296) // _NOP();
(0297) ss=PINA;
1D5 B2A9 IN R10,0x19
(0298) switch(ss)
1D6 2D4A MOV R20,R10
1D7 2755 CLR R21
1D8 3E41 CPI R20,0xE1
1D9 E0E0 LDI R30,0
1DA 075E CPC R21,R30
1DB F129 BEQ 0x0201
1DC 3E42 CPI R20,0xE2
1DD E0E0 LDI R30,0
1DE 075E CPC R21,R30
1DF F0E9 BEQ 0x01FD
1E0 3E44 CPI R20,0xE4
1E1 E0E0 LDI R30,0
1E2 075E CPC R21,R30
1E3 F0A9 BEQ 0x01F9
1E4 3E48 CPI R20,0xE8
1E5 E0E0 LDI R30,0
1E6 075E CPC R21,R30
1E7 F069 BEQ 0x01F5
1E8 3E41 CPI R20,0xE1
1E9 E0E0 LDI R30,0
1EA 075E CPC R21,R30
1EB F0CC BLT 0x0205
1EC 3F40 CPI R20,0xF0
1ED E0E0 LDI R30,0
1EE 075E CPC R21,R30
1EF F009 BEQ 0x01F1
1F0 C014 RJMP 0x0205
(0299) {
(0300) case 0xf0: BTOR(600); break;
1F1 E508 LDI R16,0x58
1F2 E012 LDI R17,2
1F3 DF4B RCALL _BTOR
1F4 C013 RJMP 0x0208
(0301) case 0xe8: BTOR(600); break;
1F5 E508 LDI R16,0x58
1F6 E012 LDI R17,2
1F7 DF47 RCALL _BTOR
1F8 C00F RJMP 0x0208
(0302) case 0xe4: BACK(700); break;
1F9 EB0C LDI R16,0xBC
1FA E012 LDI R17,2
1FB DF0A RCALL _BACK
1FC C00B RJMP 0x0208
(0303) case 0Xe2: BTOL(600); break;
1FD E508 LDI R16,0x58
1FE E012 LDI R17,2
1FF DF52 RCALL _BTOL
200 C007 RJMP 0x0208
(0304) case 0xe1: BTOL(600); break;
201 E508 LDI R16,0x58
202 E012 LDI R17,2
203 DF4E RCALL _BTOL
204 C003 RJMP 0x0208
(0305) default : BACK(700);
205 EB0C LDI R16,0xBC
206 E012 LDI R17,2
207 DEFE RCALL _BACK
(0306) }
208 940C 0234 JMP pop_xgset300C
(0307) }
(0308) void blance(void)
(0309) {
(0310) if(temp<0x9f)
_blance:
20A 9180 0068 LDS R24,temp
20C 9190 0069 LDS R25,temp+1
20E 398F CPI R24,0x9F
20F E0E0 LDI R30,0
210 079E CPC R25,R30
211 F418 BCC 0x0215
(0311) GO(1000);
212 EE08 LDI R16,0xE8
213 E013 LDI R17,3
214 DEE7 RCALL _GO
(0312) //Linecheck_GO();
(0313) PORTC = temp;
215 9020 0068 LDS R2,temp
217 9030 0069 LDS R3,temp+1
219 BA25 OUT 0x15,R2
(0314) if(temp>0xa0)
21A EA80 LDI R24,0xA0
21B E090 LDI R25,0
21C 1582 CP R24,R2
21D 0593 CPC R25,R3
21E F418 BCC 0x0222
(0315) BACK(700);
21F EB0C LDI R16,0xBC
220 E012 LDI R17,2
221 DEE4 RCALL _BACK
(0316) PORTC = temp;
222 9020 0068 LDS R2,temp
224 9030 0069 LDS R3,temp+1
226 BA25 OUT 0x15,R2
227 9508 RET
FILE: F:\car\main.c
(0001) #include <iom32v.h>
(0002) #include "linecheck.h"
(0003) //#include "blance.h"
(0004) //============================================================================================
(0005) //函数: void main()
(0006) //语法:void main()
(0007) //描述:主函数
(0008) //参数 无
(0009) //返回:无
(0010) //============================================================================================
(0011) void main()
(0012) {
(0013) port_init();
_main:
228 DE28 RCALL _port_init
(0014) INT1_init();
229 DE34 RCALL _INT1_init
(0015) init_devices();
22A DE5E RCALL _init_devices
22B C001 RJMP 0x022D
(0016) while(1)
(0017) {
(0018) blance();
FILE: <library>
22C DFDD RCALL _blance
22D CFFE RJMP 0x022C
22E 9508 RET
push_xgset300C:
22F 935A ST R21,-Y
230 934A ST R20,-Y
231 92BA ST R11,-Y
232 92AA ST R10,-Y
233 9508 RET
pop_xgset300C:
234 90A9 LD R10,Y+
235 90B9 LD R11,Y+
236 9149 LD R20,Y+
237 9159 LD R21,Y+
238 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -