📄 car_prevent.lss
字号:
break;
case OBSTACLE_LEFT:
switch(sensor)
19a: 80 31 cpi r24, 0x10 ; 16
19c: 91 05 cpc r25, r1
19e: b1 f0 breq .+44 ; 0x1cc <car_prevent+0xea>
1a0: 81 31 cpi r24, 0x11 ; 17
1a2: 91 05 cpc r25, r1
1a4: 18 f4 brcc .+6 ; 0x1ac <car_prevent+0xca>
1a6: 89 2b or r24, r25
1a8: e9 f0 breq .+58 ; 0x1e4 <car_prevent+0x102>
1aa: 08 95 ret
1ac: 80 32 cpi r24, 0x20 ; 32
1ae: 91 05 cpc r25, r1
1b0: 09 f0 breq .+2 ; 0x1b4 <car_prevent+0xd2>
1b2: 61 c0 rjmp .+194 ; 0x276 <car_prevent+0x194>
case SENSOR_N: // B ---> A: 左侧障碍消除 小车停止
car_stop();
g_state = OBSTACLE_NONE;
break;
case SENSOR_L: // B ---> B: 左->左侧障碍 小车右转
car_right();
1b4: 0e 94 d0 01 call 0x3a0 ; 0x3a0 <car_right>
1b8: 88 e8 ldi r24, 0x88 ; 136
1ba: 93 e1 ldi r25, 0x13 ; 19
1bc: 28 eb ldi r18, 0xB8 ; 184
1be: 30 e0 ldi r19, 0x00 ; 0
1c0: f9 01 movw r30, r18
1c2: 31 97 sbiw r30, 0x01 ; 1
1c4: f1 f7 brne .-4 ; 0x1c2 <car_prevent+0xe0>
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
1c6: 01 97 sbiw r24, 0x01 ; 1
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
1c8: d9 f7 brne .-10 ; 0x1c0 <car_prevent+0xde>
1ca: 67 c0 rjmp .+206 ; 0x29a <car_prevent+0x1b8>
_delay_ms(500);
g_state = OBSTACLE_LEFT;
break;
case SENSOR_R: // B ---> C: 左->右侧障碍 小车右转
car_right();
1cc: 0e 94 d0 01 call 0x3a0 ; 0x3a0 <car_right>
1d0: 88 e8 ldi r24, 0x88 ; 136
1d2: 93 e1 ldi r25, 0x13 ; 19
1d4: 28 eb ldi r18, 0xB8 ; 184
1d6: 30 e0 ldi r19, 0x00 ; 0
1d8: f9 01 movw r30, r18
1da: 31 97 sbiw r30, 0x01 ; 1
1dc: f1 f7 brne .-4 ; 0x1da <car_prevent+0xf8>
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
1de: 01 97 sbiw r24, 0x01 ; 1
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
1e0: d9 f7 brne .-10 ; 0x1d8 <car_prevent+0xf6>
1e2: 68 c0 rjmp .+208 ; 0x2b4 <car_prevent+0x1d2>
_delay_ms(500);
g_state = OBSTRACLE_RIGHT;
break;
case SENSOR_B: // B ---> D: 左->前方障碍 小车右转
car_right();
1e4: 0e 94 d0 01 call 0x3a0 ; 0x3a0 <car_right>
1e8: 88 e8 ldi r24, 0x88 ; 136
1ea: 93 e1 ldi r25, 0x13 ; 19
1ec: 28 eb ldi r18, 0xB8 ; 184
1ee: 30 e0 ldi r19, 0x00 ; 0
1f0: f9 01 movw r30, r18
1f2: 31 97 sbiw r30, 0x01 ; 1
1f4: f1 f7 brne .-4 ; 0x1f2 <car_prevent+0x110>
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
1f6: 01 97 sbiw r24, 0x01 ; 1
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
1f8: d9 f7 brne .-10 ; 0x1f0 <car_prevent+0x10e>
1fa: 2f c0 rjmp .+94 ; 0x25a <car_prevent+0x178>
g_state = OBSTRACLE_FRONT;
break;
}
break;
case OBSTRACLE_RIGHT:
switch(sensor)
1fc: 80 31 cpi r24, 0x10 ; 16
1fe: 91 05 cpc r25, r1
200: a9 f0 breq .+42 ; 0x22c <car_prevent+0x14a>
202: 81 31 cpi r24, 0x11 ; 17
204: 91 05 cpc r25, r1
206: 18 f4 brcc .+6 ; 0x20e <car_prevent+0x12c>
208: 89 2b or r24, r25
20a: e1 f0 breq .+56 ; 0x244 <car_prevent+0x162>
20c: 08 95 ret
20e: 80 32 cpi r24, 0x20 ; 32
210: 91 05 cpc r25, r1
212: 89 f5 brne .+98 ; 0x276 <car_prevent+0x194>
case SENSOR_N: // C ---> A: 右侧障碍消除 小车停止
car_stop();
g_state = OBSTACLE_NONE;
break;
case SENSOR_L: // C ---> B: 右->左侧障碍 小车左转
car_left();
214: 0e 94 c7 01 call 0x38e ; 0x38e <car_left>
218: 88 e8 ldi r24, 0x88 ; 136
21a: 93 e1 ldi r25, 0x13 ; 19
21c: 28 eb ldi r18, 0xB8 ; 184
21e: 30 e0 ldi r19, 0x00 ; 0
220: f9 01 movw r30, r18
222: 31 97 sbiw r30, 0x01 ; 1
224: f1 f7 brne .-4 ; 0x222 <car_prevent+0x140>
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
226: 01 97 sbiw r24, 0x01 ; 1
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
228: d9 f7 brne .-10 ; 0x220 <car_prevent+0x13e>
22a: 37 c0 rjmp .+110 ; 0x29a <car_prevent+0x1b8>
_delay_ms(500);
g_state = OBSTACLE_LEFT;
break;
case SENSOR_R: // C ---> C: 右->右侧障碍 小车左转
car_left();
22c: 0e 94 c7 01 call 0x38e ; 0x38e <car_left>
230: 88 e8 ldi r24, 0x88 ; 136
232: 93 e1 ldi r25, 0x13 ; 19
234: 28 eb ldi r18, 0xB8 ; 184
236: 30 e0 ldi r19, 0x00 ; 0
238: f9 01 movw r30, r18
23a: 31 97 sbiw r30, 0x01 ; 1
23c: f1 f7 brne .-4 ; 0x23a <car_prevent+0x158>
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
23e: 01 97 sbiw r24, 0x01 ; 1
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
240: d9 f7 brne .-10 ; 0x238 <car_prevent+0x156>
242: 38 c0 rjmp .+112 ; 0x2b4 <car_prevent+0x1d2>
_delay_ms(500);
g_state = OBSTRACLE_RIGHT;
break;
case SENSOR_B: // C ---> D: 右->前方障碍 小车左转
car_left();
244: 0e 94 c7 01 call 0x38e ; 0x38e <car_left>
248: 88 e8 ldi r24, 0x88 ; 136
24a: 93 e1 ldi r25, 0x13 ; 19
24c: 28 eb ldi r18, 0xB8 ; 184
24e: 30 e0 ldi r19, 0x00 ; 0
250: f9 01 movw r30, r18
252: 31 97 sbiw r30, 0x01 ; 1
254: f1 f7 brne .-4 ; 0x252 <car_prevent+0x170>
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
256: 01 97 sbiw r24, 0x01 ; 1
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
258: d9 f7 brne .-10 ; 0x250 <car_prevent+0x16e>
_delay_ms(500);
g_state = OBSTRACLE_FRONT;
25a: 83 e0 ldi r24, 0x03 ; 3
25c: 2c c0 rjmp .+88 ; 0x2b6 <car_prevent+0x1d4>
break;
}
break;
case OBSTRACLE_FRONT:
switch(sensor)
25e: 80 31 cpi r24, 0x10 ; 16
260: 91 05 cpc r25, r1
262: e9 f0 breq .+58 ; 0x29e <car_prevent+0x1bc>
264: 81 31 cpi r24, 0x11 ; 17
266: 91 05 cpc r25, r1
268: 18 f4 brcc .+6 ; 0x270 <car_prevent+0x18e>
26a: 89 2b or r24, r25
26c: 39 f1 breq .+78 ; 0x2bc <car_prevent+0x1da>
26e: 08 95 ret
270: 80 32 cpi r24, 0x20 ; 32
272: 91 05 cpc r25, r1
274: 39 f0 breq .+14 ; 0x284 <car_prevent+0x1a2>
276: c0 97 sbiw r24, 0x30 ; 48
278: 79 f5 brne .+94 ; 0x2d8 <car_prevent+0x1f6>
{
case SENSOR_N: // D ---> A: 前方障碍消除 小车停止
car_stop();
27a: 0e 94 81 01 call 0x302 ; 0x302 <car_stop>
g_state = OBSTACLE_NONE;
27e: 10 92 60 00 sts 0x0060, r1
282: 08 95 ret
break;
case SENSOR_L: // D ---> B: 前->左侧障碍 小车右转
car_right();
284: 0e 94 d0 01 call 0x3a0 ; 0x3a0 <car_right>
288: 88 e8 ldi r24, 0x88 ; 136
28a: 93 e1 ldi r25, 0x13 ; 19
28c: 28 eb ldi r18, 0xB8 ; 184
28e: 30 e0 ldi r19, 0x00 ; 0
290: f9 01 movw r30, r18
292: 31 97 sbiw r30, 0x01 ; 1
294: f1 f7 brne .-4 ; 0x292 <car_prevent+0x1b0>
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
296: 01 97 sbiw r24, 0x01 ; 1
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
298: d9 f7 brne .-10 ; 0x290 <car_prevent+0x1ae>
_delay_ms(500);
g_state = OBSTACLE_LEFT;
29a: 81 e0 ldi r24, 0x01 ; 1
29c: 0c c0 rjmp .+24 ; 0x2b6 <car_prevent+0x1d4>
break;
case SENSOR_R: // D ---> C: 前->右侧障碍 小车右转
car_right();
29e: 0e 94 d0 01 call 0x3a0 ; 0x3a0 <car_right>
2a2: 88 e8 ldi r24, 0x88 ; 136
2a4: 93 e1 ldi r25, 0x13 ; 19
2a6: 28 eb ldi r18, 0xB8 ; 184
2a8: 30 e0 ldi r19, 0x00 ; 0
2aa: f9 01 movw r30, r18
2ac: 31 97 sbiw r30, 0x01 ; 1
2ae: f1 f7 brne .-4 ; 0x2ac <car_prevent+0x1ca>
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
2b0: 01 97 sbiw r24, 0x01 ; 1
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
2b2: d9 f7 brne .-10 ; 0x2aa <car_prevent+0x1c8>
_delay_ms(500);
g_state = OBSTRACLE_RIGHT;
2b4: 82 e0 ldi r24, 0x02 ; 2
2b6: 80 93 60 00 sts 0x0060, r24
2ba: 08 95 ret
break;
case SENSOR_B: // D ---> D: 前->前方障碍 小车后退并右转
car_right();
2bc: 0e 94 d0 01 call 0x3a0 ; 0x3a0 <car_right>
2c0: 88 e8 ldi r24, 0x88 ; 136
2c2: 93 e1 ldi r25, 0x13 ; 19
2c4: 28 eb ldi r18, 0xB8 ; 184
2c6: 30 e0 ldi r19, 0x00 ; 0
2c8: f9 01 movw r30, r18
2ca: 31 97 sbiw r30, 0x01 ; 1
2cc: f1 f7 brne .-4 ; 0x2ca <car_prevent+0x1e8>
{
// wait 1/10 ms
_delay_loop_2(((F_CPU) / 4e3) / 10);
__ticks --;
2ce: 01 97 sbiw r24, 0x01 ; 1
__ticks = 1;
else if (__tmp > 65535)
{
// __ticks = requested delay in 1/10 ms
__ticks = (uint16_t) (__ms * 10.0);
while(__ticks)
2d0: d9 f7 brne .-10 ; 0x2c8 <car_prevent+0x1e6>
_delay_ms(500);
g_state = OBSTRACLE_FRONT;
2d2: 83 e0 ldi r24, 0x03 ; 3
2d4: 80 93 60 00 sts 0x0060, r24
2d8: 08 95 ret
000002da <main>:
//======================================================================
int main(void)
{
uint8_t key;
Key_Init();
2da: 0e 94 d9 01 call 0x3b2 ; 0x3b2 <Key_Init>
car_init();
2de: 0e 94 7d 01 call 0x2fa ; 0x2fa <car_init>
// 入口参数: 无
// 返回 值: 无
//======================================================================
void sensor_init(void)
{
DDRA &= ~0x30; // PA4~PA5 设置为输入
2e2: 8a b3 in r24, 0x1a ; 26
2e4: 8f 7c andi r24, 0xCF ; 207
2e6: 8a bb out 0x1a, r24 ; 26
car_init();
sensor_init();
while(1) // 等待按键启动 KEY4
{
key = Key_Get();
2e8: 0e 94 05 02 call 0x40a ; 0x40a <Key_Get>
if(key == KEY_4)
2ec: 88 30 cpi r24, 0x08 ; 8
2ee: e1 f7 brne .-8 ; 0x2e8 <main+0xe>
break;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -