📄 motor_control.lss
字号:
motor(0x1a, 0, 0);
}
else
motor(0x1a, 0, 0);
40e: 40 e0 ldi r20, 0x00 ; 0
410: 50 e0 ldi r21, 0x00 ; 0
412: 60 e0 ldi r22, 0x00 ; 0
414: 70 e0 ldi r23, 0x00 ; 0
416: 8a e1 ldi r24, 0x1A ; 26
418: 0e 94 a5 03 call 0x74a ; 0x74a <motor>
motor(0x1a, 0, 0);
41c: 40 e0 ldi r20, 0x00 ; 0
41e: 50 e0 ldi r21, 0x00 ; 0
420: 60 e0 ldi r22, 0x00 ; 0
422: 70 e0 ldi r23, 0x00 ; 0
424: 8a e1 ldi r24, 0x1A ; 26
426: 0e 94 a5 03 call 0x74a ; 0x74a <motor>
ledDispInit();
42a: 0e 94 19 07 call 0xe32 ; 0xe32 <ledDispInit>
42e: ff cf rjmp .-2 ; 0x42e <main+0x1fa>
00000430 <TWI_initialize>:
volatile struct TWI_slave_data *TWI_slave_send = 0;
volatile struct TWI_slave_data *TWI_slave_receive = 0;
void TWI_initialize()
{
TWDR = 0xFF;
430: 8f ef ldi r24, 0xFF ; 255
432: 83 b9 out 0x03, r24 ; 3
TWSR = 0;
434: 11 b8 out 0x01, r1 ; 1
TWCR = (1 << TWEN) | (1 << TWIE) | (0 << TWINT) |
436: 85 e0 ldi r24, 0x05 ; 5
438: 86 bf out 0x36, r24 ; 54
(0 << TWEA) | (0 << TWSTA) | (0 << TWSTO) | (0 << TWWC);
sei ();
43a: 78 94 sei
}
43c: 08 95 ret
0000043e <TWI_master_initialize>:
void TWI_master_initialize (unsigned scl_frequency)
{
TWBR = TWI_clock_frequency / (2 * scl_frequency) - 8;
43e: 9c 01 movw r18, r24
440: 22 0f add r18, r18
442: 33 1f adc r19, r19
444: 40 e0 ldi r20, 0x00 ; 0
446: 50 e0 ldi r21, 0x00 ; 0
448: 60 e0 ldi r22, 0x00 ; 0
44a: 74 e2 ldi r23, 0x24 ; 36
44c: 84 ef ldi r24, 0xF4 ; 244
44e: 90 e0 ldi r25, 0x00 ; 0
450: 0e 94 74 09 call 0x12e8 ; 0x12e8 <__divmodsi4>
454: 28 50 subi r18, 0x08 ; 8
456: 20 b9 out 0x00, r18 ; 0
}
458: 08 95 ret
0000045a <TWI_slave_initialize>:
void
TWI_slave_initialize (unsigned char own_address,
struct TWI_slave_data *send,
struct TWI_slave_data *receive)
{
TWAR = own_address;
45a: 82 b9 out 0x02, r24 ; 2
TWI_slave_send = send;
45c: 70 93 72 00 sts 0x0072, r23
460: 60 93 71 00 sts 0x0071, r22
TWI_slave_receive = receive;
464: 50 93 74 00 sts 0x0074, r21
468: 40 93 73 00 sts 0x0073, r20
TWCR |= (1 << TWEA) | (0 << TWIE);
46c: 86 b7 in r24, 0x36 ; 54
46e: 80 64 ori r24, 0x40 ; 64
470: 86 bf out 0x36, r24 ; 54
}
472: 08 95 ret
00000474 <TWI_master>:
void TWI_master (struct TWI_master_data *data)
{
474: 9c 01 movw r18, r24
if (TWI_task_first == 0)
476: 80 91 6b 00 lds r24, 0x006B
47a: 90 91 6c 00 lds r25, 0x006C
47e: 89 2b or r24, r25
480: 81 f4 brne .+32 ; 0x4a2 <TWI_master+0x2e>
{
TWI_task_first = TWI_task_last = TWI_task_current =
482: 20 93 6f 00 sts 0x006F, r18
486: 30 93 70 00 sts 0x0070, r19
48a: 20 93 6d 00 sts 0x006D, r18
48e: 30 93 6e 00 sts 0x006E, r19
492: 20 93 6b 00 sts 0x006B, r18
496: 30 93 6c 00 sts 0x006C, r19
data;
TWCR |= (1 << TWSTA) | (1 << TWINT);
49a: 86 b7 in r24, 0x36 ; 54
49c: 80 6a ori r24, 0xA0 ; 160
49e: 86 bf out 0x36, r24 ; 54
4a0: 08 95 ret
}
else
{
TWI_task_last->next = data;
4a2: e0 91 6d 00 lds r30, 0x006D
4a6: f0 91 6e 00 lds r31, 0x006E
4aa: 36 83 std Z+6, r19 ; 0x06
4ac: 25 83 std Z+5, r18 ; 0x05
TWI_task_last = data;
4ae: 30 93 6e 00 sts 0x006E, r19
4b2: 20 93 6d 00 sts 0x006D, r18
4b6: 08 95 ret
000004b8 <__vector_17>:
/* TWI Miscellaneous status codes */
#define TWI_NO_STATE 0xF8
#define TWI_BUS_ERROR 0x00
ISR (TWI_vect)
{
4b8: 1f 92 push r1
4ba: 0f 92 push r0
4bc: 0f b6 in r0, 0x3f ; 63
4be: 0f 92 push r0
4c0: 11 24 eor r1, r1
4c2: 2f 93 push r18
4c4: 3f 93 push r19
4c6: 8f 93 push r24
4c8: 9f 93 push r25
4ca: ef 93 push r30
4cc: ff 93 push r31
static unsigned char string_index;
switch (TWSR)
4ce: 81 b1 in r24, 0x01 ; 1
4d0: 80 35 cpi r24, 0x50 ; 80
4d2: 09 f4 brne .+2 ; 0x4d6 <__vector_17+0x1e>
4d4: 61 c0 rjmp .+194 ; 0x598 <__vector_17+0xe0>
4d6: 81 35 cpi r24, 0x51 ; 81
4d8: 20 f5 brcc .+72 ; 0x522 <__vector_17+0x6a>
4da: 88 32 cpi r24, 0x28 ; 40
4dc: 09 f4 brne .+2 ; 0x4e0 <__vector_17+0x28>
4de: 48 c0 rjmp .+144 ; 0x570 <__vector_17+0xb8>
4e0: 89 32 cpi r24, 0x29 ; 41
4e2: 78 f4 brcc .+30 ; 0x502 <__vector_17+0x4a>
4e4: 80 31 cpi r24, 0x10 ; 16
4e6: 09 f4 brne .+2 ; 0x4ea <__vector_17+0x32>
4e8: 41 c0 rjmp .+130 ; 0x56c <__vector_17+0xb4>
4ea: 81 31 cpi r24, 0x11 ; 17
4ec: 20 f4 brcc .+8 ; 0x4f6 <__vector_17+0x3e>
4ee: 88 30 cpi r24, 0x08 ; 8
4f0: 09 f0 breq .+2 ; 0x4f4 <__vector_17+0x3c>
4f2: 1e c1 rjmp .+572 ; 0x730 <__vector_17+0x278>
4f4: 3b c0 rjmp .+118 ; 0x56c <__vector_17+0xb4>
4f6: 88 31 cpi r24, 0x18 ; 24
4f8: d9 f1 breq .+118 ; 0x570 <__vector_17+0xb8>
4fa: 80 32 cpi r24, 0x20 ; 32
4fc: 09 f0 breq .+2 ; 0x500 <__vector_17+0x48>
4fe: 18 c1 rjmp .+560 ; 0x730 <__vector_17+0x278>
500: a1 c0 rjmp .+322 ; 0x644 <__vector_17+0x18c>
502: 88 33 cpi r24, 0x38 ; 56
504: 09 f4 brne .+2 ; 0x508 <__vector_17+0x50>
506: 12 c1 rjmp .+548 ; 0x72c <__vector_17+0x274>
508: 89 33 cpi r24, 0x39 ; 57
50a: 20 f4 brcc .+8 ; 0x514 <__vector_17+0x5c>
50c: 80 33 cpi r24, 0x30 ; 48
50e: 09 f0 breq .+2 ; 0x512 <__vector_17+0x5a>
510: 0f c1 rjmp .+542 ; 0x730 <__vector_17+0x278>
512: 98 c0 rjmp .+304 ; 0x644 <__vector_17+0x18c>
514: 80 34 cpi r24, 0x40 ; 64
516: 09 f4 brne .+2 ; 0x51a <__vector_17+0x62>
518: 4f c0 rjmp .+158 ; 0x5b8 <__vector_17+0x100>
51a: 88 34 cpi r24, 0x48 ; 72
51c: 09 f0 breq .+2 ; 0x520 <__vector_17+0x68>
51e: 08 c1 rjmp .+528 ; 0x730 <__vector_17+0x278>
520: 91 c0 rjmp .+290 ; 0x644 <__vector_17+0x18c>
522: 80 39 cpi r24, 0x90 ; 144
524: 09 f4 brne .+2 ; 0x528 <__vector_17+0x70>
526: c9 c0 rjmp .+402 ; 0x6ba <__vector_17+0x202>
528: 81 39 cpi r24, 0x91 ; 145
52a: 80 f4 brcc .+32 ; 0x54c <__vector_17+0x94>
52c: 80 36 cpi r24, 0x60 ; 96
52e: 09 f4 brne .+2 ; 0x532 <__vector_17+0x7a>
530: b8 c0 rjmp .+368 ; 0x6a2 <__vector_17+0x1ea>
532: 81 36 cpi r24, 0x61 ; 97
534: 20 f4 brcc .+8 ; 0x53e <__vector_17+0x86>
536: 88 35 cpi r24, 0x58 ; 88
538: 09 f0 breq .+2 ; 0x53c <__vector_17+0x84>
53a: fa c0 rjmp .+500 ; 0x730 <__vector_17+0x278>
53c: 4d c0 rjmp .+154 ; 0x5d8 <__vector_17+0x120>
53e: 80 37 cpi r24, 0x70 ; 112
540: 09 f4 brne .+2 ; 0x544 <__vector_17+0x8c>
542: af c0 rjmp .+350 ; 0x6a2 <__vector_17+0x1ea>
544: 80 38 cpi r24, 0x80 ; 128
546: 09 f0 breq .+2 ; 0x54a <__vector_17+0x92>
548: f3 c0 rjmp .+486 ; 0x730 <__vector_17+0x278>
54a: b7 c0 rjmp .+366 ; 0x6ba <__vector_17+0x202>
54c: 88 3a cpi r24, 0xA8 ; 168
54e: 09 f4 brne .+2 ; 0x552 <__vector_17+0x9a>
550: 82 c0 rjmp .+260 ; 0x656 <__vector_17+0x19e>
552: 89 3a cpi r24, 0xA9 ; 169
554: 20 f4 brcc .+8 ; 0x55e <__vector_17+0xa6>
556: 80 3a cpi r24, 0xA0 ; 160
558: 09 f0 breq .+2 ; 0x55c <__vector_17+0xa4>
55a: ea c0 rjmp .+468 ; 0x730 <__vector_17+0x278>
55c: cf c0 rjmp .+414 ; 0x6fc <__vector_17+0x244>
55e: 88 3b cpi r24, 0xB8 ; 184
560: 09 f4 brne .+2 ; 0x564 <__vector_17+0xac>
562: 84 c0 rjmp .+264 ; 0x66c <__vector_17+0x1b4>
564: 80 3c cpi r24, 0xC0 ; 192
566: 09 f0 breq .+2 ; 0x56a <__vector_17+0xb2>
568: e3 c0 rjmp .+454 ; 0x730 <__vector_17+0x278>
56a: 96 c0 rjmp .+300 ; 0x698 <__vector_17+0x1e0>
{
case TWI_START:
case TWI_REP_START:
string_index = 0;
56c: 10 92 75 00 sts 0x0075, r1
case TWI_MTX_ADR_ACK:
case TWI_MTX_DATA_ACK:
if (string_index < TWI_task_current->length)
570: 90 91 75 00 lds r25, 0x0075
574: e0 91 6f 00 lds r30, 0x006F
578: f0 91 70 00 lds r31, 0x0070
57c: 80 81 ld r24, Z
57e: 98 17 cp r25, r24
580: e0 f5 brcc .+120 ; 0x5fa <__vector_17+0x142>
{
TWDR = TWI_task_current->string[string_index++];
582: 01 80 ldd r0, Z+1 ; 0x01
584: f2 81 ldd r31, Z+2 ; 0x02
586: e0 2d mov r30, r0
588: e9 0f add r30, r25
58a: f1 1d adc r31, r1
58c: 80 81 ld r24, Z
58e: 83 b9 out 0x03, r24 ; 3
590: 9f 5f subi r25, 0xFF ; 255
592: 90 93 75 00 sts 0x0075, r25
596: 1e c0 rjmp .+60 ; 0x5d4 <__vector_17+0x11c>
| (0 << TWSTA) | (1 << TWSTO) | (0 << TWWC);
}
}
break;
case TWI_MRX_DATA_ACK:
TWI_task_current->string[string_index++] = TWDR;
598: e0 91 6f 00 lds r30, 0x006F
59c: f0 91 70 00 lds r31, 0x0070
5a0: 01 80 ldd r0, Z+1 ; 0x01
5a2: f2 81 ldd r31, Z+2 ; 0x02
5a4: e0 2d mov r30, r0
5a6: 80 91 75 00 lds r24, 0x0075
5aa: e8 0f add r30, r24
5ac: f1 1d adc r31, r1
5ae: 93 b1 in r25, 0x03 ; 3
5b0: 90 83 st Z, r25
5b2: 8f 5f subi r24, 0xFF ; 255
5b4: 80 93 75 00 sts 0x0075, r24
case TWI_MRX_ADR_ACK:
if (string_index < (TWI_task_current->length - 1))
5b8: e0 91 6f 00 lds r30, 0x006F
5bc: f0 91 70 00 lds r31, 0x0070
5c0: 80 81 ld r24, Z
5c2: 20 91 75 00 lds r18, 0x0075
5c6: 30 e0 ldi r19, 0x00 ; 0
5c8: 90 e0 ldi r25, 0x00 ; 0
5ca: 01 97 sbiw r24, 0x01 ; 1
5cc: 28 17 cp r18, r24
5ce: 39 07 cpc r19, r25
5d0: 0c f4 brge .+2 ; 0x5d4 <__vector_17+0x11c>
5d2: ae c0 rjmp .+348 ; 0x730 <__vector_17+0x278>
(1 << TWEA) | (0 << TWSTA) | (0 << TWSTO) |
(0 << TWWC);
}
else
{
TWCR = (1 << TWEN) |
5d4: 85 e8 ldi r24, 0x85 ; 133
5d6: ad c0 rjmp .+346 ; 0x732 <__vector_17+0x27a>
(0 << TWEA) | (0 << TWSTA) | (0 << TWSTO) |
(0 << TWWC);
}
break;
case TWI_MRX_DATA_NACK:
TWI_task_current->string[string_index] = TWDR;
5d8: e0 91 6f 00 lds r30, 0x006F
5dc: f0 91 70 00 lds r31, 0x0070
5e0: 01 80 ldd r0, Z+1 ; 0x01
5e2: f2 81 ldd r31, Z+2 ; 0x02
5e4: e0 2d mov r30, r0
5e6: 80 91 75 00 lds r24, 0x0075
5ea: e8 0f add r30, r24
5ec: f1 1d adc r31, r1
5ee: 83 b1 in r24, 0x03 ; 3
5f0: 80 83 st Z, r24
*TWI_task_current->flag = 0;
5f2: e0 91 6f 00 lds r30, 0x006F
5f6: f0 91 70 00 lds r31, 0x0070
5fa: 03 80 ldd r0, Z+3 ; 0x03
5fc: f4 81 ldd r31, Z+4 ; 0x04
5fe: e0 2d mov r30, r0
600: 10 82 st Z, r1
if (TWI_task_current != TWI_task_last)
602: e0 91 6f 00 lds r30, 0x006F
606: f0 91 70 00 lds r31, 0x0070
60a: 80 91 6d 00 lds r24, 0x006D
60e: 90 91 6e 00 lds r25, 0x006E
612: e8 17 cp r30, r24
614: f9 07 cpc r31, r25
616: 41 f0 breq .+16 ; 0x628 <__vector_17+0x170>
{
TWI_task_current = TWI_task_current->next;
618: 85 81 ldd r24, Z+5 ; 0x05
61a: 96 81 ldd r25, Z+6 ; 0x06
61c: 90 93 70 00 sts 0x0070, r25
620: 80 93 6f 00 sts 0x006F, r24
TWCR = (1 << TWEN) |
624: 85 ea ldi r24, 0xA5 ; 165
626: 85 c0 rjmp .+266 ; 0x732 <__vector_17+0x27a>
(0 << TWEA) | (1 << TWSTA) | (0 << TWSTO) |
(0 << TWWC);
}
else
{
TWI_task_first = TWI_task_last = TWI_task_current = 0;
628: 10 92 70 00 sts 0x0070, r1
62c: 10 92 6f 00 sts 0x006F, r1
630: 10 92 6e 00 sts 0x006E, r1
634: 10 92 6d 00 sts 0x006D, r1
638: 10 92 6c 00 sts 0x006C, r1
63c: 10 92 6b 00 sts 0x006B, r1
TWCR =
640: 85 ed ldi r24, 0xD5 ; 213
642: 77 c0 rjmp .+238 ; 0x732 <__vector_17+0x27a>
(0 << TWWC);
break;
case TWI_MTX_ADR_NACK:
case TWI_MRX_ADR_NACK:
case TWI_MTX_DATA_NACK:
TWI_task_first = TWI_task_current;
644: 80 91 6f 00 lds r24, 0x006F
648: 90 91 70 00 lds r25, 0x0070
64c: 90 93 6c 00 sts 0x006C, r25
650: 80 93 6b 00 sts 0x006B, r24
654: 6b c0 rjmp .+214 ; 0x72c <__vector_17+0x274>
(1 << TWIE) | (1 << TWINT) |
(1 << TWEA) | (1 << TWSTA) | (0 << TWSTO) |
(0 << TWWC);
break;
case TWI_STX_ADR_ACK:
string_index = 0;
656: 10 92 75 00 sts 0x0075, r1
*TWI_slave_send->flag = 0xFF;
65a: e0 91 71 00 lds r30, 0x0071
65e: f0 91 72 00 lds r31, 0x0072
662: 03 80 ldd r0, Z+3 ; 0x03
664: f4 81 ldd r31, Z+4 ; 0x04
666: e0 2d mov r30, r0
668: 8f ef ldi r24, 0xFF ; 255
66a: 80 83 st Z, r24
case TWI_STX_DATA_ACK:
if (string_index < TWI_slave_send->length)
66c: 90 91 75 00 lds r25, 0x0075
670: e0 91 71 00 lds r30, 0x0071
674: f0 91 72 00 lds r31, 0x0072
678: 80 81 ld r24, Z
67a: 98 17 cp r25, r24
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -