4644 lines
155 KiB
Plaintext
4644 lines
155 KiB
Plaintext
|
||
RoboMI.elf: file format elf32-avr
|
||
|
||
Sections:
|
||
Idx Name Size VMA LMA File off Algn
|
||
0 .data 0000032a 00800100 0000184a 000018be 2**0
|
||
CONTENTS, ALLOC, LOAD, DATA
|
||
1 .text 0000184a 00000000 00000000 00000074 2**1
|
||
CONTENTS, ALLOC, LOAD, READONLY, CODE
|
||
2 .bss 0000003b 0080042a 00001b74 00001be8 2**0
|
||
ALLOC
|
||
3 .stab 00002f4c 00000000 00000000 00001be8 2**2
|
||
CONTENTS, READONLY, DEBUGGING
|
||
4 .stabstr 0000132e 00000000 00000000 00004b34 2**0
|
||
CONTENTS, READONLY, DEBUGGING
|
||
5 .debug_aranges 00000020 00000000 00000000 00005e62 2**0
|
||
CONTENTS, READONLY, DEBUGGING
|
||
6 .debug_pubnames 00000299 00000000 00000000 00005e82 2**0
|
||
CONTENTS, READONLY, DEBUGGING
|
||
7 .debug_info 000003ff 00000000 00000000 0000611b 2**0
|
||
CONTENTS, READONLY, DEBUGGING
|
||
8 .debug_abbrev 0000013e 00000000 00000000 0000651a 2**0
|
||
CONTENTS, READONLY, DEBUGGING
|
||
9 .debug_line 00000f52 00000000 00000000 00006658 2**0
|
||
CONTENTS, READONLY, DEBUGGING
|
||
10 .debug_frame 000000a0 00000000 00000000 000075ac 2**2
|
||
CONTENTS, READONLY, DEBUGGING
|
||
11 .debug_str 000002dc 00000000 00000000 0000764c 2**0
|
||
CONTENTS, READONLY, DEBUGGING
|
||
12 .debug_loc 000000ab 00000000 00000000 00007928 2**0
|
||
CONTENTS, READONLY, DEBUGGING
|
||
Disassembly of section .text:
|
||
|
||
00000000 <__vectors>:
|
||
0: 0c 94 c9 00 jmp 0x192 ; 0x192 <__ctors_end>
|
||
4: 0c 94 ac 0b jmp 0x1758 ; 0x1758 <__vector_1>
|
||
8: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
c: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
10: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
14: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
18: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
1c: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
20: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
24: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
28: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
2c: 0c 94 23 01 jmp 0x246 ; 0x246 <__vector_11>
|
||
30: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
34: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
38: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
3c: 0c 94 ff 00 jmp 0x1fe ; 0x1fe <__vector_15>
|
||
40: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
44: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
48: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
4c: 0c 94 71 09 jmp 0x12e2 ; 0x12e2 <__vector_19>
|
||
50: 0c 94 89 0a jmp 0x1512 ; 0x1512 <__vector_20>
|
||
54: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
58: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
5c: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
60: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
64: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
68: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
6c: 0c 94 e6 00 jmp 0x1cc ; 0x1cc <__bad_interrupt>
|
||
70: c1 02 muls r28, r17
|
||
72: c7 02 muls r28, r23
|
||
74: ee 02 muls r30, r30
|
||
76: fc 02 muls r31, r28
|
||
78: 08 03 fmul r16, r16
|
||
7a: 10 03 mulsu r17, r16
|
||
7c: 21 03 mulsu r18, r17
|
||
7e: 29 03 fmul r18, r17
|
||
80: 3a 03 fmul r19, r18
|
||
82: 53 03 mulsu r21, r19
|
||
84: 6f 03 fmul r22, r23
|
||
86: 85 03 fmuls r16, r21
|
||
88: bd 03 fmulsu r19, r21
|
||
8a: 2a 04 cpc r2, r10
|
||
8c: 60 04 cpc r6, r0
|
||
8e: 6c 04 cpc r6, r12
|
||
90: 7c 04 cpc r7, r12
|
||
92: 86 04 cpc r8, r6
|
||
94: 98 04 cpc r9, r8
|
||
96: 73 05 cpc r23, r3
|
||
98: 80 05 cpc r24, r0
|
||
9a: b4 05 cpc r27, r4
|
||
|
||
0000009c <menuTable>:
|
||
9c: 20 20 20 20 20 43 4d 74 65 63 20 20 20 20 20 20 CMtec
|
||
ac: 72 6f 62 6f 43 72 61 77 6c 65 72 20 76 31 2e 31 roboCrawler v1.1
|
||
bc: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
|
||
cc: 00 20 20 20 20 20 6d 6f 64 65 20 31 3a 20 20 20 . mode 1:
|
||
dc: 20 20 46 6f 6c 6c 6f 77 20 77 61 6c 6c 20 61 74 Follow wall at
|
||
ec: 20 20 61 20 64 69 73 74 61 6e 63 65 28 31 6d 29 a distance(1m)
|
||
fc: 20 00 20 20 20 20 20 6d 6f 64 65 20 32 3a 20 20 . mode 2:
|
||
10c: 20 20 20 44 72 69 76 65 20 61 6e 64 20 76 6f 69 Drive and voi
|
||
11c: 64 20 20 20 20 61 6e 79 20 77 61 6c 6c 73 20 20 d any walls
|
||
12c: 20 20 00 20 20 20 20 20 6d 6f 64 65 20 33 3a 20 . mode 3:
|
||
13c: 20 20 20 4d 65 61 73 75 72 65 20 64 69 73 74 61 Measure dista
|
||
14c: 6e 63 65 20 20 20 20 66 6f 72 77 61 72 64 20 20 nce forward
|
||
15c: 20 20 20 00 20 20 20 20 6d 6f 64 65 20 52 46 3a . mode RF:
|
||
16c: 20 20 20 20 20 52 46 20 61 63 74 69 76 65 64 20 RF actived
|
||
17c: 61 6e 64 20 77 61 69 74 69 6e 67 20 66 6f 72 20 and waiting for
|
||
18c: 63 6f 6d 2e 00 00 com...
|
||
|
||
00000192 <__ctors_end>:
|
||
192: 11 24 eor r1, r1
|
||
194: 1f be out 0x3f, r1 ; 63
|
||
196: cf ef ldi r28, 0xFF ; 255
|
||
198: d4 e0 ldi r29, 0x04 ; 4
|
||
19a: de bf out 0x3e, r29 ; 62
|
||
19c: cd bf out 0x3d, r28 ; 61
|
||
|
||
0000019e <__do_copy_data>:
|
||
19e: 14 e0 ldi r17, 0x04 ; 4
|
||
1a0: a0 e0 ldi r26, 0x00 ; 0
|
||
1a2: b1 e0 ldi r27, 0x01 ; 1
|
||
1a4: ea e4 ldi r30, 0x4A ; 74
|
||
1a6: f8 e1 ldi r31, 0x18 ; 24
|
||
1a8: 02 c0 rjmp .+4 ; 0x1ae <.do_copy_data_start>
|
||
|
||
000001aa <.do_copy_data_loop>:
|
||
1aa: 05 90 lpm r0, Z+
|
||
1ac: 0d 92 st X+, r0
|
||
|
||
000001ae <.do_copy_data_start>:
|
||
1ae: aa 32 cpi r26, 0x2A ; 42
|
||
1b0: b1 07 cpc r27, r17
|
||
1b2: d9 f7 brne .-10 ; 0x1aa <.do_copy_data_loop>
|
||
|
||
000001b4 <__do_clear_bss>:
|
||
1b4: 14 e0 ldi r17, 0x04 ; 4
|
||
1b6: aa e2 ldi r26, 0x2A ; 42
|
||
1b8: b4 e0 ldi r27, 0x04 ; 4
|
||
1ba: 01 c0 rjmp .+2 ; 0x1be <.do_clear_bss_start>
|
||
|
||
000001bc <.do_clear_bss_loop>:
|
||
1bc: 1d 92 st X+, r1
|
||
|
||
000001be <.do_clear_bss_start>:
|
||
1be: a5 36 cpi r26, 0x65 ; 101
|
||
1c0: b1 07 cpc r27, r17
|
||
1c2: e1 f7 brne .-8 ; 0x1bc <.do_clear_bss_loop>
|
||
1c4: 0e 94 18 07 call 0xe30 ; 0xe30 <main>
|
||
1c8: 0c 94 24 0c jmp 0x1848 ; 0x1848 <_exit>
|
||
|
||
000001cc <__bad_interrupt>:
|
||
1cc: 0c 94 00 00 jmp 0 ; 0x0 <__heap_end>
|
||
|
||
000001d0 <initIO>:
|
||
|
||
Description: Initialise I/O
|
||
Input: -
|
||
Output: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void initIO (void){
|
||
1d0: 82 e0 ldi r24, 0x02 ; 2
|
||
1d2: 8e bd out 0x2e, r24 ; 46
|
||
|
||
TCCR1B = (1<<CS11); // Timer1 prescaler = fc/8
|
||
|
||
TCNT1H = (uint8_t)(PROG_TIMER>>8);
|
||
1d4: 8f eb ldi r24, 0xBF ; 191
|
||
1d6: 8d bd out 0x2d, r24 ; 45
|
||
TCNT1L = (uint8_t)(PROG_TIMER);
|
||
1d8: 8f ef ldi r24, 0xFF ; 255
|
||
1da: 8c bd out 0x2c, r24 ; 44
|
||
|
||
TCNT2 = SERVO_TIMER;
|
||
1dc: 8e ee ldi r24, 0xEE ; 238
|
||
1de: 83 bd out 0x23, r24 ; 35
|
||
|
||
TIMSK |= (1<<TOIE1)|(1<<TOIE2); // Timer1 interrupt enable
|
||
1e0: 89 b7 in r24, 0x39 ; 57
|
||
1e2: 84 68 ori r24, 0x84 ; 132
|
||
1e4: 89 bf out 0x39, r24 ; 57
|
||
DDRC |= (1<<PC0)|(1<<PC1)|(1<<PC2);
|
||
1e6: 84 b3 in r24, 0x14 ; 20
|
||
1e8: 87 60 ori r24, 0x07 ; 7
|
||
1ea: 84 bb out 0x14, r24 ; 20
|
||
|
||
DDRA &= ~((1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7)); // Configuration button pins as input
|
||
1ec: 8a b3 in r24, 0x1a ; 26
|
||
1ee: 8f 70 andi r24, 0x0F ; 15
|
||
1f0: 8a bb out 0x1a, r24 ; 26
|
||
PORTA |= (1<<PA4)|(1<<PA5)|(1<<PA6)|(1<<PA7); // Pull-up on configuration button pins
|
||
1f2: 8b b3 in r24, 0x1b ; 27
|
||
1f4: 80 6f ori r24, 0xF0 ; 240
|
||
1f6: 8b bb out 0x1b, r24 ; 27
|
||
|
||
progPosition = 0;
|
||
1f8: 10 92 2f 04 sts 0x042F, r1
|
||
1fc: 08 95 ret
|
||
|
||
000001fe <__vector_15>:
|
||
Description: Timer1 overflow interrupt. Used as program timer
|
||
Input: -
|
||
Output: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
ISR (TIMER1_OVF_vect)
|
||
{
|
||
1fe: 1f 92 push r1
|
||
200: 0f 92 push r0
|
||
202: 0f b6 in r0, 0x3f ; 63
|
||
204: 0f 92 push r0
|
||
206: 11 24 eor r1, r1
|
||
208: 8f 93 push r24
|
||
// Program for update PPM pulses to all servos
|
||
if (++progCounterPPM >= 2)
|
||
20a: 80 91 2c 04 lds r24, 0x042C
|
||
20e: 8f 5f subi r24, 0xFF ; 255
|
||
210: 80 93 2c 04 sts 0x042C, r24
|
||
214: 82 30 cpi r24, 0x02 ; 2
|
||
216: 50 f0 brcs .+20 ; 0x22c <__vector_15+0x2e>
|
||
{
|
||
// Start for servo PPM pulses
|
||
servoCounter = 0;
|
||
218: 10 92 2a 04 sts 0x042A, r1
|
||
SERVO_PORT |= (1<<SERVO_PING)|(1<<SERVO_MOTOR_LEFT)|(1<<SERVO_MOTOR_RIGHT);
|
||
21c: 85 b3 in r24, 0x15 ; 21
|
||
21e: 87 60 ori r24, 0x07 ; 7
|
||
220: 85 bb out 0x15, r24 ; 21
|
||
TCCR2 |= (1<<CS21); // Timer2 start (prescaler = fc/8)
|
||
222: 87 b5 in r24, 0x27 ; 39
|
||
224: 82 60 ori r24, 0x02 ; 2
|
||
226: 87 bd out 0x27, r24 ; 39
|
||
progCounterPPM = 0;
|
||
228: 10 92 2c 04 sts 0x042C, r1
|
||
}
|
||
|
||
// Trigg program routine
|
||
progDoUpdate = 1;
|
||
22c: 81 e0 ldi r24, 0x01 ; 1
|
||
22e: 80 93 30 04 sts 0x0430, r24
|
||
|
||
// Set timer value
|
||
TCNT1H = (uint8_t)(PROG_TIMER>>8);
|
||
232: 8f eb ldi r24, 0xBF ; 191
|
||
234: 8d bd out 0x2d, r24 ; 45
|
||
TCNT1L = (uint8_t)(PROG_TIMER);
|
||
236: 8f ef ldi r24, 0xFF ; 255
|
||
238: 8c bd out 0x2c, r24 ; 44
|
||
23a: 8f 91 pop r24
|
||
23c: 0f 90 pop r0
|
||
23e: 0f be out 0x3f, r0 ; 63
|
||
240: 0f 90 pop r0
|
||
242: 1f 90 pop r1
|
||
244: 18 95 reti
|
||
|
||
00000246 <__vector_11>:
|
||
Description: Timer1 overflow interrupt. Used as servo (PPM) timer
|
||
Input: -
|
||
Output: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
ISR (TIMER2_OVF_vect)
|
||
{
|
||
246: 1f 92 push r1
|
||
248: 0f 92 push r0
|
||
24a: 0f b6 in r0, 0x3f ; 63
|
||
24c: 0f 92 push r0
|
||
24e: 11 24 eor r1, r1
|
||
250: 2f 93 push r18
|
||
252: 8f 93 push r24
|
||
254: 9f 93 push r25
|
||
uint8_t done = 1;
|
||
|
||
// Check each servo output if pulselength is reached
|
||
if(servoCounter >= servoPing)
|
||
256: 90 91 2a 04 lds r25, 0x042A
|
||
25a: 80 91 03 04 lds r24, 0x0403
|
||
25e: 98 17 cp r25, r24
|
||
260: 18 f0 brcs .+6 ; 0x268 <__vector_11+0x22>
|
||
SERVO_PORT &= ~(1<<SERVO_PING);
|
||
262: a9 98 cbi 0x15, 1 ; 21
|
||
264: 21 e0 ldi r18, 0x01 ; 1
|
||
266: 02 c0 rjmp .+4 ; 0x26c <__vector_11+0x26>
|
||
else
|
||
{
|
||
done = 0;
|
||
asm volatile("NOP"); // Correction for constant interrupt length
|
||
268: 00 00 nop
|
||
26a: 20 e0 ldi r18, 0x00 ; 0
|
||
}
|
||
|
||
if(servoCounter >= servoMotorLeft)
|
||
26c: 80 91 04 04 lds r24, 0x0404
|
||
270: 98 17 cp r25, r24
|
||
272: 10 f0 brcs .+4 ; 0x278 <__vector_11+0x32>
|
||
SERVO_PORT &= ~(1<<SERVO_MOTOR_LEFT);
|
||
274: a8 98 cbi 0x15, 0 ; 21
|
||
276: 02 c0 rjmp .+4 ; 0x27c <__vector_11+0x36>
|
||
else
|
||
{
|
||
done = 0;
|
||
asm volatile("NOP"); // Correction for constant interrupt length
|
||
278: 00 00 nop
|
||
27a: 20 e0 ldi r18, 0x00 ; 0
|
||
}
|
||
|
||
if(servoCounter >= servoMotorRight)
|
||
27c: 80 91 05 04 lds r24, 0x0405
|
||
280: 98 17 cp r25, r24
|
||
282: 20 f0 brcs .+8 ; 0x28c <__vector_11+0x46>
|
||
SERVO_PORT &= ~(1<<SERVO_MOTOR_RIGHT);
|
||
284: aa 98 cbi 0x15, 2 ; 21
|
||
{
|
||
done = 0;
|
||
asm volatile("NOP"); // Correction for constant interrupt length
|
||
}
|
||
|
||
if(done)
|
||
286: 22 23 and r18, r18
|
||
288: 19 f4 brne .+6 ; 0x290 <__vector_11+0x4a>
|
||
28a: 06 c0 rjmp .+12 ; 0x298 <__vector_11+0x52>
|
||
if(servoCounter >= servoMotorRight)
|
||
SERVO_PORT &= ~(1<<SERVO_MOTOR_RIGHT);
|
||
else
|
||
{
|
||
done = 0;
|
||
asm volatile("NOP"); // Correction for constant interrupt length
|
||
28c: 00 00 nop
|
||
28e: 04 c0 rjmp .+8 ; 0x298 <__vector_11+0x52>
|
||
}
|
||
|
||
if(done)
|
||
TCCR2 &= ~(1<<CS21); // Timer1 stop
|
||
290: 87 b5 in r24, 0x27 ; 39
|
||
292: 8d 7f andi r24, 0xFD ; 253
|
||
294: 87 bd out 0x27, r24 ; 39
|
||
296: 05 c0 rjmp .+10 ; 0x2a2 <__vector_11+0x5c>
|
||
else
|
||
{
|
||
servoCounter++;
|
||
298: 9f 5f subi r25, 0xFF ; 255
|
||
29a: 90 93 2a 04 sts 0x042A, r25
|
||
asm volatile("NOP"); // Correction for constant interrupt length
|
||
29e: 00 00 nop
|
||
asm volatile("NOP");
|
||
2a0: 00 00 nop
|
||
}
|
||
TCNT2 = SERVO_TIMER;
|
||
2a2: 8e ee ldi r24, 0xEE ; 238
|
||
2a4: 83 bd out 0x23, r24 ; 35
|
||
2a6: 9f 91 pop r25
|
||
2a8: 8f 91 pop r24
|
||
2aa: 2f 91 pop r18
|
||
2ac: 0f 90 pop r0
|
||
2ae: 0f be out 0x3f, r0 ; 63
|
||
2b0: 0f 90 pop r0
|
||
2b2: 1f 90 pop r1
|
||
2b4: 18 95 reti
|
||
|
||
000002b6 <activateRobot>:
|
||
Description:
|
||
Input: -
|
||
Output: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void activateRobot(uint8_t mode)
|
||
{
|
||
2b6: 1f 93 push r17
|
||
2b8: 18 2f mov r17, r24
|
||
lcdSetLayout(0);
|
||
2ba: 80 e0 ldi r24, 0x00 ; 0
|
||
2bc: 0e 94 a8 07 call 0xf50 ; 0xf50 <lcdSetLayout>
|
||
lcdWriteStringP(menuTable[mode]);
|
||
2c0: 81 e3 ldi r24, 0x31 ; 49
|
||
2c2: 18 9f mul r17, r24
|
||
2c4: c0 01 movw r24, r0
|
||
2c6: 11 24 eor r1, r1
|
||
2c8: 84 56 subi r24, 0x64 ; 100
|
||
2ca: 9f 4f sbci r25, 0xFF ; 255
|
||
2cc: 0e 94 2d 08 call 0x105a ; 0x105a <lcdWriteStringP>
|
||
|
||
progTimer = 200;
|
||
2d0: 88 ec ldi r24, 0xC8 ; 200
|
||
2d2: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
roboActive = mode;
|
||
2d6: 10 93 3b 04 sts 0x043B, r17
|
||
2da: 1f 91 pop r17
|
||
2dc: 08 95 ret
|
||
|
||
000002de <deactivateRobot>:
|
||
Description:
|
||
Input: -
|
||
Output: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void deactivateRobot(void)
|
||
{
|
||
2de: 10 92 3b 04 sts 0x043B, r1
|
||
roboActive = 0;
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_STOP;
|
||
2e2: 87 e7 ldi r24, 0x77 ; 119
|
||
2e4: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_STOP;
|
||
2e8: 80 93 05 04 sts 0x0405, r24
|
||
servoPing = SERVO_POS_CENTER;
|
||
2ec: 8c e8 ldi r24, 0x8C ; 140
|
||
2ee: 80 93 03 04 sts 0x0403, r24
|
||
|
||
rfIdDisable();
|
||
2f2: 0e 94 bb 09 call 0x1376 ; 0x1376 <rfIdDisable>
|
||
2f6: 08 95 ret
|
||
|
||
000002f8 <showDistanceOnLCD>:
|
||
Description:
|
||
Input: -
|
||
Output: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void showDistanceOnLCD(uint16_t distance, uint8_t mode, uint8_t position)
|
||
{
|
||
2f8: 1f 93 push r17
|
||
2fa: cf 93 push r28
|
||
2fc: df 93 push r29
|
||
2fe: ec 01 movw r28, r24
|
||
300: 16 2f mov r17, r22
|
||
if(position == 1)
|
||
302: 41 30 cpi r20, 0x01 ; 1
|
||
304: 11 f4 brne .+4 ; 0x30a <showDistanceOnLCD+0x12>
|
||
lcdSetPos(0x00);
|
||
306: 80 e0 ldi r24, 0x00 ; 0
|
||
308: 07 c0 rjmp .+14 ; 0x318 <showDistanceOnLCD+0x20>
|
||
else if(position == 2)
|
||
30a: 42 30 cpi r20, 0x02 ; 2
|
||
30c: 11 f4 brne .+4 ; 0x312 <showDistanceOnLCD+0x1a>
|
||
lcdSetPos(0x10);
|
||
30e: 80 e1 ldi r24, 0x10 ; 16
|
||
310: 03 c0 rjmp .+6 ; 0x318 <showDistanceOnLCD+0x20>
|
||
else if(position == 3)
|
||
312: 43 30 cpi r20, 0x03 ; 3
|
||
314: 19 f4 brne .+6 ; 0x31c <showDistanceOnLCD+0x24>
|
||
lcdSetPos(0x20);
|
||
316: 80 e2 ldi r24, 0x20 ; 32
|
||
318: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
|
||
if(mode == 0) // Both arrow pointing in
|
||
31c: 11 23 and r17, r17
|
||
31e: b9 f5 brne .+110 ; 0x38e <showDistanceOnLCD+0x96>
|
||
{
|
||
if(distance > 32000)
|
||
320: 8d e7 ldi r24, 0x7D ; 125
|
||
322: c1 30 cpi r28, 0x01 ; 1
|
||
324: d8 07 cpc r29, r24
|
||
326: c8 f5 brcc .+114 ; 0x39a <showDistanceOnLCD+0xa2>
|
||
{
|
||
lcdWriteString(" ");
|
||
}
|
||
else if(distance > 16000)
|
||
328: 8e e3 ldi r24, 0x3E ; 62
|
||
32a: c1 38 cpi r28, 0x81 ; 129
|
||
32c: d8 07 cpc r29, r24
|
||
32e: 18 f0 brcs .+6 ; 0x336 <showDistanceOnLCD+0x3e>
|
||
{
|
||
lcdWriteString("> <");
|
||
330: 81 e1 ldi r24, 0x11 ; 17
|
||
332: 91 e0 ldi r25, 0x01 ; 1
|
||
334: ca c0 rjmp .+404 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 8000)
|
||
336: 8f e1 ldi r24, 0x1F ; 31
|
||
338: c1 34 cpi r28, 0x41 ; 65
|
||
33a: d8 07 cpc r29, r24
|
||
33c: 18 f0 brcs .+6 ; 0x344 <showDistanceOnLCD+0x4c>
|
||
{
|
||
lcdWriteString(">> <<");
|
||
33e: 82 e2 ldi r24, 0x22 ; 34
|
||
340: 91 e0 ldi r25, 0x01 ; 1
|
||
342: c3 c0 rjmp .+390 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 4000)
|
||
344: 8f e0 ldi r24, 0x0F ; 15
|
||
346: c1 3a cpi r28, 0xA1 ; 161
|
||
348: d8 07 cpc r29, r24
|
||
34a: 18 f0 brcs .+6 ; 0x352 <showDistanceOnLCD+0x5a>
|
||
{
|
||
lcdWriteString(">>> <<<");
|
||
34c: 83 e3 ldi r24, 0x33 ; 51
|
||
34e: 91 e0 ldi r25, 0x01 ; 1
|
||
350: bc c0 rjmp .+376 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 2000)
|
||
352: 87 e0 ldi r24, 0x07 ; 7
|
||
354: c1 3d cpi r28, 0xD1 ; 209
|
||
356: d8 07 cpc r29, r24
|
||
358: 18 f0 brcs .+6 ; 0x360 <showDistanceOnLCD+0x68>
|
||
{
|
||
lcdWriteString(">>>> <<<<");
|
||
35a: 84 e4 ldi r24, 0x44 ; 68
|
||
35c: 91 e0 ldi r25, 0x01 ; 1
|
||
35e: b5 c0 rjmp .+362 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 1000)
|
||
360: 83 e0 ldi r24, 0x03 ; 3
|
||
362: c9 3e cpi r28, 0xE9 ; 233
|
||
364: d8 07 cpc r29, r24
|
||
366: 18 f0 brcs .+6 ; 0x36e <showDistanceOnLCD+0x76>
|
||
{
|
||
lcdWriteString(">>>>> <<<<<");
|
||
368: 85 e5 ldi r24, 0x55 ; 85
|
||
36a: 91 e0 ldi r25, 0x01 ; 1
|
||
36c: ae c0 rjmp .+348 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 500)
|
||
36e: 81 e0 ldi r24, 0x01 ; 1
|
||
370: c5 3f cpi r28, 0xF5 ; 245
|
||
372: d8 07 cpc r29, r24
|
||
374: 18 f0 brcs .+6 ; 0x37c <showDistanceOnLCD+0x84>
|
||
{
|
||
lcdWriteString(">>>>>> <<<<<<");
|
||
376: 86 e6 ldi r24, 0x66 ; 102
|
||
378: 91 e0 ldi r25, 0x01 ; 1
|
||
37a: a7 c0 rjmp .+334 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 100)
|
||
37c: c5 36 cpi r28, 0x65 ; 101
|
||
37e: d1 05 cpc r29, r1
|
||
380: 18 f0 brcs .+6 ; 0x388 <showDistanceOnLCD+0x90>
|
||
{
|
||
lcdWriteString(">>>>>>> <<<<<<<");
|
||
382: 87 e7 ldi r24, 0x77 ; 119
|
||
384: 91 e0 ldi r25, 0x01 ; 1
|
||
386: a1 c0 rjmp .+322 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else
|
||
{
|
||
lcdWriteString(">>>>>>>[]<<<<<<<");
|
||
388: 88 e8 ldi r24, 0x88 ; 136
|
||
38a: 91 e0 ldi r25, 0x01 ; 1
|
||
38c: 9e c0 rjmp .+316 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
}
|
||
else if(mode == 1) // Both arrow pointing Out
|
||
38e: 11 30 cpi r17, 0x01 ; 1
|
||
390: d1 f5 brne .+116 ; 0x406 <showDistanceOnLCD+0x10e>
|
||
{
|
||
if(distance > 32000)
|
||
392: 8d e7 ldi r24, 0x7D ; 125
|
||
394: c1 30 cpi r28, 0x01 ; 1
|
||
396: d8 07 cpc r29, r24
|
||
398: 18 f0 brcs .+6 ; 0x3a0 <showDistanceOnLCD+0xa8>
|
||
{
|
||
lcdWriteString(" ");
|
||
39a: 80 e0 ldi r24, 0x00 ; 0
|
||
39c: 91 e0 ldi r25, 0x01 ; 1
|
||
39e: 95 c0 rjmp .+298 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 16000)
|
||
3a0: 8e e3 ldi r24, 0x3E ; 62
|
||
3a2: c1 38 cpi r28, 0x81 ; 129
|
||
3a4: d8 07 cpc r29, r24
|
||
3a6: 18 f0 brcs .+6 ; 0x3ae <showDistanceOnLCD+0xb6>
|
||
{
|
||
lcdWriteString(" < > ");
|
||
3a8: 89 e9 ldi r24, 0x99 ; 153
|
||
3aa: 91 e0 ldi r25, 0x01 ; 1
|
||
3ac: 8e c0 rjmp .+284 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 8000)
|
||
3ae: 8f e1 ldi r24, 0x1F ; 31
|
||
3b0: c1 34 cpi r28, 0x41 ; 65
|
||
3b2: d8 07 cpc r29, r24
|
||
3b4: 18 f0 brcs .+6 ; 0x3bc <showDistanceOnLCD+0xc4>
|
||
{
|
||
lcdWriteString(" << >> ");
|
||
3b6: 8a ea ldi r24, 0xAA ; 170
|
||
3b8: 91 e0 ldi r25, 0x01 ; 1
|
||
3ba: 87 c0 rjmp .+270 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 4000)
|
||
3bc: 8f e0 ldi r24, 0x0F ; 15
|
||
3be: c1 3a cpi r28, 0xA1 ; 161
|
||
3c0: d8 07 cpc r29, r24
|
||
3c2: 18 f0 brcs .+6 ; 0x3ca <showDistanceOnLCD+0xd2>
|
||
{
|
||
lcdWriteString(" <<< >>> ");
|
||
3c4: 8b eb ldi r24, 0xBB ; 187
|
||
3c6: 91 e0 ldi r25, 0x01 ; 1
|
||
3c8: 80 c0 rjmp .+256 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 2000)
|
||
3ca: 87 e0 ldi r24, 0x07 ; 7
|
||
3cc: c1 3d cpi r28, 0xD1 ; 209
|
||
3ce: d8 07 cpc r29, r24
|
||
3d0: 18 f0 brcs .+6 ; 0x3d8 <showDistanceOnLCD+0xe0>
|
||
{
|
||
lcdWriteString(" <<<< >>>> ");
|
||
3d2: 8c ec ldi r24, 0xCC ; 204
|
||
3d4: 91 e0 ldi r25, 0x01 ; 1
|
||
3d6: 79 c0 rjmp .+242 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 1000)
|
||
3d8: 83 e0 ldi r24, 0x03 ; 3
|
||
3da: c9 3e cpi r28, 0xE9 ; 233
|
||
3dc: d8 07 cpc r29, r24
|
||
3de: 18 f0 brcs .+6 ; 0x3e6 <showDistanceOnLCD+0xee>
|
||
{
|
||
lcdWriteString(" <<<<< >>>>> ");
|
||
3e0: 8d ed ldi r24, 0xDD ; 221
|
||
3e2: 91 e0 ldi r25, 0x01 ; 1
|
||
3e4: 72 c0 rjmp .+228 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 500)
|
||
3e6: 81 e0 ldi r24, 0x01 ; 1
|
||
3e8: c5 3f cpi r28, 0xF5 ; 245
|
||
3ea: d8 07 cpc r29, r24
|
||
3ec: 18 f0 brcs .+6 ; 0x3f4 <showDistanceOnLCD+0xfc>
|
||
{
|
||
lcdWriteString(" <<<<<< >>>>>> ");
|
||
3ee: 8e ee ldi r24, 0xEE ; 238
|
||
3f0: 91 e0 ldi r25, 0x01 ; 1
|
||
3f2: 6b c0 rjmp .+214 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 100)
|
||
3f4: c5 36 cpi r28, 0x65 ; 101
|
||
3f6: d1 05 cpc r29, r1
|
||
3f8: 18 f0 brcs .+6 ; 0x400 <showDistanceOnLCD+0x108>
|
||
{
|
||
lcdWriteString("<<<<<<< >>>>>>>");
|
||
3fa: 8f ef ldi r24, 0xFF ; 255
|
||
3fc: 91 e0 ldi r25, 0x01 ; 1
|
||
3fe: 65 c0 rjmp .+202 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else
|
||
{
|
||
lcdWriteString("<<<<<<<[]>>>>>>>");
|
||
400: 80 e1 ldi r24, 0x10 ; 16
|
||
402: 92 e0 ldi r25, 0x02 ; 2
|
||
404: 62 c0 rjmp .+196 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
}
|
||
else if(mode == 2) // Left arrow pointing out.
|
||
406: 12 30 cpi r17, 0x02 ; 2
|
||
408: 71 f5 brne .+92 ; 0x466 <showDistanceOnLCD+0x16e>
|
||
{
|
||
if(distance > 6400)
|
||
40a: 89 e1 ldi r24, 0x19 ; 25
|
||
40c: c1 30 cpi r28, 0x01 ; 1
|
||
40e: d8 07 cpc r29, r24
|
||
410: 18 f0 brcs .+6 ; 0x418 <showDistanceOnLCD+0x120>
|
||
{
|
||
lcdWriteString("<<<<<<< ");
|
||
412: 81 e2 ldi r24, 0x21 ; 33
|
||
414: 92 e0 ldi r25, 0x02 ; 2
|
||
416: 59 c0 rjmp .+178 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 3200)
|
||
418: 8c e0 ldi r24, 0x0C ; 12
|
||
41a: c1 38 cpi r28, 0x81 ; 129
|
||
41c: d8 07 cpc r29, r24
|
||
41e: 18 f0 brcs .+6 ; 0x426 <showDistanceOnLCD+0x12e>
|
||
{
|
||
lcdWriteString(" <<<<<< ");
|
||
420: 82 e3 ldi r24, 0x32 ; 50
|
||
422: 92 e0 ldi r25, 0x02 ; 2
|
||
424: 52 c0 rjmp .+164 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 1600)
|
||
426: 86 e0 ldi r24, 0x06 ; 6
|
||
428: c1 34 cpi r28, 0x41 ; 65
|
||
42a: d8 07 cpc r29, r24
|
||
42c: 18 f0 brcs .+6 ; 0x434 <showDistanceOnLCD+0x13c>
|
||
{
|
||
lcdWriteString(" <<<<< ");
|
||
42e: 83 e4 ldi r24, 0x43 ; 67
|
||
430: 92 e0 ldi r25, 0x02 ; 2
|
||
432: 4b c0 rjmp .+150 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 800)
|
||
434: 83 e0 ldi r24, 0x03 ; 3
|
||
436: c1 32 cpi r28, 0x21 ; 33
|
||
438: d8 07 cpc r29, r24
|
||
43a: 18 f0 brcs .+6 ; 0x442 <showDistanceOnLCD+0x14a>
|
||
{
|
||
lcdWriteString(" <<<< ");
|
||
43c: 84 e5 ldi r24, 0x54 ; 84
|
||
43e: 92 e0 ldi r25, 0x02 ; 2
|
||
440: 44 c0 rjmp .+136 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 400)
|
||
442: 81 e0 ldi r24, 0x01 ; 1
|
||
444: c1 39 cpi r28, 0x91 ; 145
|
||
446: d8 07 cpc r29, r24
|
||
448: 18 f0 brcs .+6 ; 0x450 <showDistanceOnLCD+0x158>
|
||
{
|
||
lcdWriteString(" <<< ");
|
||
44a: 85 e6 ldi r24, 0x65 ; 101
|
||
44c: 92 e0 ldi r25, 0x02 ; 2
|
||
44e: 3d c0 rjmp .+122 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 200)
|
||
450: c9 3c cpi r28, 0xC9 ; 201
|
||
452: d1 05 cpc r29, r1
|
||
454: 18 f0 brcs .+6 ; 0x45c <showDistanceOnLCD+0x164>
|
||
{
|
||
lcdWriteString(" << ");
|
||
456: 86 e7 ldi r24, 0x76 ; 118
|
||
458: 92 e0 ldi r25, 0x02 ; 2
|
||
45a: 37 c0 rjmp .+110 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 30)
|
||
45c: 6f 97 sbiw r28, 0x1f ; 31
|
||
45e: 98 f1 brcs .+102 ; 0x4c6 <showDistanceOnLCD+0x1ce>
|
||
{
|
||
lcdWriteString(" < ");
|
||
460: 87 e8 ldi r24, 0x87 ; 135
|
||
462: 92 e0 ldi r25, 0x02 ; 2
|
||
464: 32 c0 rjmp .+100 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
else
|
||
{
|
||
lcdWriteString(" [] ");
|
||
}
|
||
}
|
||
else if(mode == 3) // Right arrow pointing out.
|
||
466: 13 30 cpi r17, 0x03 ; 3
|
||
468: 91 f5 brne .+100 ; 0x4ce <showDistanceOnLCD+0x1d6>
|
||
{
|
||
if(distance > 6400)
|
||
46a: 89 e1 ldi r24, 0x19 ; 25
|
||
46c: c1 30 cpi r28, 0x01 ; 1
|
||
46e: d8 07 cpc r29, r24
|
||
470: 18 f0 brcs .+6 ; 0x478 <showDistanceOnLCD+0x180>
|
||
{
|
||
lcdWriteString(" >>>>>>>");
|
||
472: 89 ea ldi r24, 0xA9 ; 169
|
||
474: 92 e0 ldi r25, 0x02 ; 2
|
||
476: 29 c0 rjmp .+82 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 3200)
|
||
478: 8c e0 ldi r24, 0x0C ; 12
|
||
47a: c1 38 cpi r28, 0x81 ; 129
|
||
47c: d8 07 cpc r29, r24
|
||
47e: 18 f0 brcs .+6 ; 0x486 <showDistanceOnLCD+0x18e>
|
||
{
|
||
lcdWriteString(" >>>>>> ");
|
||
480: 8a eb ldi r24, 0xBA ; 186
|
||
482: 92 e0 ldi r25, 0x02 ; 2
|
||
484: 22 c0 rjmp .+68 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 1600)
|
||
486: 86 e0 ldi r24, 0x06 ; 6
|
||
488: c1 34 cpi r28, 0x41 ; 65
|
||
48a: d8 07 cpc r29, r24
|
||
48c: 18 f0 brcs .+6 ; 0x494 <showDistanceOnLCD+0x19c>
|
||
{
|
||
lcdWriteString(" >>>>> ");
|
||
48e: 8b ec ldi r24, 0xCB ; 203
|
||
490: 92 e0 ldi r25, 0x02 ; 2
|
||
492: 1b c0 rjmp .+54 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 800)
|
||
494: 83 e0 ldi r24, 0x03 ; 3
|
||
496: c1 32 cpi r28, 0x21 ; 33
|
||
498: d8 07 cpc r29, r24
|
||
49a: 18 f0 brcs .+6 ; 0x4a2 <showDistanceOnLCD+0x1aa>
|
||
{
|
||
lcdWriteString(" >>>> ");
|
||
49c: 8c ed ldi r24, 0xDC ; 220
|
||
49e: 92 e0 ldi r25, 0x02 ; 2
|
||
4a0: 14 c0 rjmp .+40 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 400)
|
||
4a2: 81 e0 ldi r24, 0x01 ; 1
|
||
4a4: c1 39 cpi r28, 0x91 ; 145
|
||
4a6: d8 07 cpc r29, r24
|
||
4a8: 18 f0 brcs .+6 ; 0x4b0 <showDistanceOnLCD+0x1b8>
|
||
{
|
||
lcdWriteString(" >>> ");
|
||
4aa: 8d ee ldi r24, 0xED ; 237
|
||
4ac: 92 e0 ldi r25, 0x02 ; 2
|
||
4ae: 0d c0 rjmp .+26 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 200)
|
||
4b0: c9 3c cpi r28, 0xC9 ; 201
|
||
4b2: d1 05 cpc r29, r1
|
||
4b4: 18 f0 brcs .+6 ; 0x4bc <showDistanceOnLCD+0x1c4>
|
||
{
|
||
lcdWriteString(" >> ");
|
||
4b6: 8e ef ldi r24, 0xFE ; 254
|
||
4b8: 92 e0 ldi r25, 0x02 ; 2
|
||
4ba: 07 c0 rjmp .+14 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else if(distance > 30)
|
||
4bc: 6f 97 sbiw r28, 0x1f ; 31
|
||
4be: 18 f0 brcs .+6 ; 0x4c6 <showDistanceOnLCD+0x1ce>
|
||
{
|
||
lcdWriteString(" > ");
|
||
4c0: 8f e0 ldi r24, 0x0F ; 15
|
||
4c2: 93 e0 ldi r25, 0x03 ; 3
|
||
4c4: 02 c0 rjmp .+4 ; 0x4ca <showDistanceOnLCD+0x1d2>
|
||
}
|
||
else
|
||
{
|
||
lcdWriteString(" [] ");
|
||
4c6: 88 e9 ldi r24, 0x98 ; 152
|
||
4c8: 92 e0 ldi r25, 0x02 ; 2
|
||
4ca: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
4ce: df 91 pop r29
|
||
4d0: cf 91 pop r28
|
||
4d2: 1f 91 pop r17
|
||
4d4: 08 95 ret
|
||
|
||
000004d6 <checkCommunication>:
|
||
|
||
Description: Check for incoming data packets.
|
||
Input: -
|
||
Output: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void checkCommunication(void){
|
||
4d6: 0f 93 push r16
|
||
4d8: 1f 93 push r17
|
||
|
||
|
||
if (rfIdGetTagPresent())
|
||
4da: 0e 94 6d 09 call 0x12da ; 0x12da <rfIdGetTagPresent>
|
||
4de: 88 23 and r24, r24
|
||
4e0: 61 f0 breq .+24 ; 0x4fa <checkCommunication+0x24>
|
||
{
|
||
uint8_t *tempPointer = rfIdGetTag();
|
||
4e2: 0e 94 64 09 call 0x12c8 ; 0x12c8 <rfIdGetTag>
|
||
4e6: 8c 01 movw r16, r24
|
||
|
||
lcdSetPos(0x13);
|
||
4e8: 83 e1 ldi r24, 0x13 ; 19
|
||
4ea: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString(tempPointer);
|
||
4ee: c8 01 movw r24, r16
|
||
4f0: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
roboMSPSetData(tempPointer);
|
||
4f4: c8 01 movw r24, r16
|
||
4f6: 0e 94 13 0a call 0x1426 ; 0x1426 <roboMSPSetData>
|
||
|
||
}
|
||
|
||
switch (roboMSPGetActiveStatus())
|
||
4fa: 0e 94 c3 09 call 0x1386 ; 0x1386 <roboMSPGetActiveStatus>
|
||
4fe: 83 30 cpi r24, 0x03 ; 3
|
||
500: 61 f0 breq .+24 ; 0x51a <__stack+0x1b>
|
||
502: 84 30 cpi r24, 0x04 ; 4
|
||
504: 18 f4 brcc .+6 ; 0x50c <__stack+0xd>
|
||
506: 82 30 cpi r24, 0x02 ; 2
|
||
508: 99 f4 brne .+38 ; 0x530 <__stack+0x31>
|
||
50a: 05 c0 rjmp .+10 ; 0x516 <__stack+0x17>
|
||
50c: 84 30 cpi r24, 0x04 ; 4
|
||
50e: 59 f0 breq .+22 ; 0x526 <__stack+0x27>
|
||
510: 85 30 cpi r24, 0x05 ; 5
|
||
512: 71 f4 brne .+28 ; 0x530 <__stack+0x31>
|
||
514: 0b c0 rjmp .+22 ; 0x52c <__stack+0x2d>
|
||
{
|
||
case ACTIVATE_P1:
|
||
activateRobot(1);
|
||
516: 81 e0 ldi r24, 0x01 ; 1
|
||
518: 01 c0 rjmp .+2 ; 0x51c <__stack+0x1d>
|
||
rfIdEnable();
|
||
break;
|
||
|
||
case ACTIVATE_P2:
|
||
activateRobot(2);
|
||
51a: 82 e0 ldi r24, 0x02 ; 2
|
||
51c: 0e 94 5b 01 call 0x2b6 ; 0x2b6 <activateRobot>
|
||
rfIdEnable();
|
||
520: 0e 94 bf 09 call 0x137e ; 0x137e <rfIdEnable>
|
||
524: 05 c0 rjmp .+10 ; 0x530 <__stack+0x31>
|
||
break;
|
||
|
||
case DEACTIVATE:
|
||
deactivateRobot();
|
||
526: 0e 94 6f 01 call 0x2de ; 0x2de <deactivateRobot>
|
||
52a: 02 c0 rjmp .+4 ; 0x530 <__stack+0x31>
|
||
break;
|
||
|
||
case ACK:
|
||
rfIdClearBuffer();
|
||
52c: 0e 94 69 09 call 0x12d2 ; 0x12d2 <rfIdClearBuffer>
|
||
530: 1f 91 pop r17
|
||
532: 0f 91 pop r16
|
||
534: 08 95 ret
|
||
|
||
00000536 <updateProgram>:
|
||
Description:
|
||
Input: -
|
||
Output: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void updateProgram(void)
|
||
{
|
||
536: 1f 93 push r17
|
||
// Check radio communication
|
||
if(rfEnable)
|
||
538: 80 91 3c 04 lds r24, 0x043C
|
||
53c: 88 23 and r24, r24
|
||
53e: 11 f0 breq .+4 ; 0x544 <updateProgram+0xe>
|
||
checkCommunication();
|
||
540: 0e 94 6b 02 call 0x4d6 ; 0x4d6 <checkCommunication>
|
||
|
||
// Program for robot AI
|
||
if (roboActive == 1)
|
||
544: 80 91 3b 04 lds r24, 0x043B
|
||
548: 81 30 cpi r24, 0x01 ; 1
|
||
54a: 09 f0 breq .+2 ; 0x54e <updateProgram+0x18>
|
||
54c: 1e c3 rjmp .+1596 ; 0xb8a <updateProgram+0x654>
|
||
{
|
||
// Program(2) for random RFID serach
|
||
if (++progCounter >= progTimer)
|
||
54e: 80 91 2d 04 lds r24, 0x042D
|
||
552: 8f 5f subi r24, 0xFF ; 255
|
||
554: 80 93 2d 04 sts 0x042D, r24
|
||
558: 90 91 2e 04 lds r25, 0x042E
|
||
55c: 89 17 cp r24, r25
|
||
55e: 08 f4 brcc .+2 ; 0x562 <updateProgram+0x2c>
|
||
560: 14 c3 rjmp .+1576 ; 0xb8a <updateProgram+0x654>
|
||
{
|
||
switch (progPosition)
|
||
562: 80 91 2f 04 lds r24, 0x042F
|
||
566: e8 2f mov r30, r24
|
||
568: f0 e0 ldi r31, 0x00 ; 0
|
||
56a: e6 31 cpi r30, 0x16 ; 22
|
||
56c: f1 05 cpc r31, r1
|
||
56e: 08 f0 brcs .+2 ; 0x572 <updateProgram+0x3c>
|
||
570: 0a c3 rjmp .+1556 ; 0xb86 <updateProgram+0x650>
|
||
572: e8 5c subi r30, 0xC8 ; 200
|
||
574: ff 4f sbci r31, 0xFF ; 255
|
||
576: ee 0f add r30, r30
|
||
578: ff 1f adc r31, r31
|
||
57a: 05 90 lpm r0, Z+
|
||
57c: f4 91 lpm r31, Z
|
||
57e: e0 2d mov r30, r0
|
||
580: 09 94 ijmp
|
||
{
|
||
case 0:
|
||
// K<>r framm<6D>t
|
||
lcdClearDisplay();
|
||
582: 0e 94 df 07 call 0xfbe ; 0xfbe <lcdClearDisplay>
|
||
lcdSetLayout(1);
|
||
586: 81 e0 ldi r24, 0x01 ; 1
|
||
588: 0e 94 a8 07 call 0xf50 ; 0xf50 <lcdSetLayout>
|
||
58c: a5 c1 rjmp .+842 ; 0x8d8 <updateProgram+0x3a2>
|
||
|
||
break;
|
||
|
||
case 1:
|
||
// K<>r framm<6D>t till dess att avst<73>ndet mot v<>ggen <20>r 1meter
|
||
servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT;
|
||
58e: 8f e7 ldi r24, 0x7F ; 127
|
||
590: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_SOFT;
|
||
594: 80 93 05 04 sts 0x0405, r24
|
||
|
||
pingSendPing();
|
||
598: 0e 94 8c 0b call 0x1718 ; 0x1718 <pingSendPing>
|
||
progTimer = 4;
|
||
59c: 84 e0 ldi r24, 0x04 ; 4
|
||
59e: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
if(pingGetReady())
|
||
5a2: 0e 94 a7 0b call 0x174e ; 0x174e <pingGetReady>
|
||
5a6: 88 23 and r24, r24
|
||
5a8: 09 f4 brne .+2 ; 0x5ac <updateProgram+0x76>
|
||
5aa: ed c2 rjmp .+1498 ; 0xb86 <updateProgram+0x650>
|
||
{
|
||
|
||
tempDistance = pingGetDistance();
|
||
5ac: 0e 94 a0 0b call 0x1740 ; 0x1740 <pingGetDistance>
|
||
5b0: 90 93 32 04 sts 0x0432, r25
|
||
5b4: 80 93 31 04 sts 0x0431, r24
|
||
|
||
if(tempDistance < DISTANCE_ONE_METER)
|
||
5b8: 27 e1 ldi r18, 0x17 ; 23
|
||
5ba: 80 37 cpi r24, 0x70 ; 112
|
||
5bc: 92 07 cpc r25, r18
|
||
5be: 38 f4 brcc .+14 ; 0x5ce <updateProgram+0x98>
|
||
{
|
||
showDistanceOnLCD(0,0,2);
|
||
5c0: 42 e0 ldi r20, 0x02 ; 2
|
||
5c2: 60 e0 ldi r22, 0x00 ; 0
|
||
5c4: 80 e0 ldi r24, 0x00 ; 0
|
||
5c6: 90 e0 ldi r25, 0x00 ; 0
|
||
5c8: 0e 94 7c 01 call 0x2f8 ; 0x2f8 <showDistanceOnLCD>
|
||
5cc: af c1 rjmp .+862 ; 0x92c <updateProgram+0x3f6>
|
||
progTimer = 1;
|
||
progPosition++;
|
||
}
|
||
else
|
||
{
|
||
showDistanceOnLCD(tempDistance-DISTANCE_ONE_METER,0,2);
|
||
5ce: 42 e0 ldi r20, 0x02 ; 2
|
||
5d0: 60 e0 ldi r22, 0x00 ; 0
|
||
5d2: 80 57 subi r24, 0x70 ; 112
|
||
5d4: 97 41 sbci r25, 0x17 ; 23
|
||
5d6: 0e 94 7c 01 call 0x2f8 ; 0x2f8 <showDistanceOnLCD>
|
||
5da: d5 c2 rjmp .+1450 ; 0xb86 <updateProgram+0x650>
|
||
|
||
break;
|
||
|
||
case 2:
|
||
// Bromsa (backa n<>got)
|
||
lcdSetPos(0x00);
|
||
5dc: 80 e0 ldi r24, 0x00 ; 0
|
||
5de: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Drive: STOP ");
|
||
5e2: 81 e3 ldi r24, 0x31 ; 49
|
||
5e4: 93 e0 ldi r25, 0x03 ; 3
|
||
5e6: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
// Stop and breake
|
||
servoMotorLeft = SERVO_POS_MOTOR_STOP;
|
||
servoMotorRight = SERVO_POS_MOTOR_STOP;
|
||
servoMotorLeft = SERVO_POS_MOTOR_RE;
|
||
5ea: 8c e6 ldi r24, 0x6C ; 108
|
||
5ec: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_RE;
|
||
5f0: 80 93 05 04 sts 0x0405, r24
|
||
|
||
progTimer = 40;
|
||
5f4: 88 e2 ldi r24, 0x28 ; 40
|
||
5f6: 7d c1 rjmp .+762 ; 0x8f2 <updateProgram+0x3bc>
|
||
break;
|
||
|
||
case 3:
|
||
// Stanna
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_STOP;
|
||
5f8: 87 e7 ldi r24, 0x77 ; 119
|
||
5fa: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_STOP;
|
||
5fe: 80 93 05 04 sts 0x0405, r24
|
||
|
||
progTimer = 1;
|
||
602: 81 e0 ldi r24, 0x01 ; 1
|
||
604: 80 93 2e 04 sts 0x042E, r24
|
||
regulatorMeasureCounter = 0;
|
||
608: 10 92 42 04 sts 0x0442, r1
|
||
progPosition++;
|
||
60c: 84 e0 ldi r24, 0x04 ; 4
|
||
60e: b9 c2 rjmp .+1394 ; 0xb82 <updateProgram+0x64c>
|
||
|
||
break;
|
||
|
||
case 4:
|
||
// Vrid servo 45grader v<>nster (fr<66>n centrum)
|
||
servoPing = SERVO_POS_LEFT_45;
|
||
610: 8e ea ldi r24, 0xAE ; 174
|
||
612: 80 93 03 04 sts 0x0403, r24
|
||
progTimer = 20;
|
||
616: 84 e1 ldi r24, 0x14 ; 20
|
||
618: 80 93 2e 04 sts 0x042E, r24
|
||
progPosition++;
|
||
61c: 85 e0 ldi r24, 0x05 ; 5
|
||
61e: b1 c2 rjmp .+1378 ; 0xb82 <updateProgram+0x64c>
|
||
|
||
break;
|
||
|
||
case 5:
|
||
// M<>t och spara avst<73>nd
|
||
pingSendPing();
|
||
620: 0e 94 8c 0b call 0x1718 ; 0x1718 <pingSendPing>
|
||
progTimer = 4;
|
||
624: 84 e0 ldi r24, 0x04 ; 4
|
||
626: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
if(pingGetReady())
|
||
62a: 0e 94 a7 0b call 0x174e ; 0x174e <pingGetReady>
|
||
62e: 88 23 and r24, r24
|
||
630: 09 f4 brne .+2 ; 0x634 <updateProgram+0xfe>
|
||
632: a9 c2 rjmp .+1362 ; 0xb86 <updateProgram+0x650>
|
||
{
|
||
tempLeftDistance = pingGetDistance();
|
||
634: 0e 94 a0 0b call 0x1740 ; 0x1740 <pingGetDistance>
|
||
638: 90 93 38 04 sts 0x0438, r25
|
||
63c: 80 93 37 04 sts 0x0437, r24
|
||
640: 75 c1 rjmp .+746 ; 0x92c <updateProgram+0x3f6>
|
||
|
||
break;
|
||
|
||
case 6:
|
||
// Vrid servo 45grader h<>ger (fr<66>n centrum)
|
||
servoPing = SERVO_POS_RIGHT_45;
|
||
642: 87 e6 ldi r24, 0x67 ; 103
|
||
644: 80 93 03 04 sts 0x0403, r24
|
||
progTimer = 40;
|
||
648: 88 e2 ldi r24, 0x28 ; 40
|
||
64a: 80 93 2e 04 sts 0x042E, r24
|
||
progPosition++;
|
||
64e: 87 e0 ldi r24, 0x07 ; 7
|
||
650: 98 c2 rjmp .+1328 ; 0xb82 <updateProgram+0x64c>
|
||
|
||
break;
|
||
|
||
case 7:
|
||
// M<>t och spara avst<73>nd
|
||
pingSendPing();
|
||
652: 0e 94 8c 0b call 0x1718 ; 0x1718 <pingSendPing>
|
||
progTimer = 4;
|
||
656: 84 e0 ldi r24, 0x04 ; 4
|
||
658: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
if(pingGetReady())
|
||
65c: 0e 94 a7 0b call 0x174e ; 0x174e <pingGetReady>
|
||
660: 88 23 and r24, r24
|
||
662: 09 f4 brne .+2 ; 0x666 <updateProgram+0x130>
|
||
664: 90 c2 rjmp .+1312 ; 0xb86 <updateProgram+0x650>
|
||
{
|
||
tempRightDistance = pingGetDistance();
|
||
666: 0e 94 a0 0b call 0x1740 ; 0x1740 <pingGetDistance>
|
||
66a: 90 93 3a 04 sts 0x043A, r25
|
||
66e: 80 93 39 04 sts 0x0439, r24
|
||
672: 5c c1 rjmp .+696 ; 0x92c <updateProgram+0x3f6>
|
||
|
||
break;
|
||
|
||
case 8:
|
||
|
||
servoPing = SERVO_POS_CENTER;
|
||
674: 8c e8 ldi r24, 0x8C ; 140
|
||
676: 80 93 03 04 sts 0x0403, r24
|
||
|
||
if(tempLeftDistance > tempRightDistance)
|
||
67a: 20 91 37 04 lds r18, 0x0437
|
||
67e: 30 91 38 04 lds r19, 0x0438
|
||
682: 80 91 39 04 lds r24, 0x0439
|
||
686: 90 91 3a 04 lds r25, 0x043A
|
||
68a: 82 17 cp r24, r18
|
||
68c: 93 07 cpc r25, r19
|
||
68e: 18 f4 brcc .+6 ; 0x696 <updateProgram+0x160>
|
||
{
|
||
regulatorMode = 0; // M<>ter <20>t h<>ger
|
||
690: 10 92 3f 04 sts 0x043F, r1
|
||
694: 03 c0 rjmp .+6 ; 0x69c <updateProgram+0x166>
|
||
}
|
||
else
|
||
{
|
||
regulatorMode = 1; // M<>ter <20>t v<>nster
|
||
696: 81 e0 ldi r24, 0x01 ; 1
|
||
698: 80 93 3f 04 sts 0x043F, r24
|
||
}
|
||
|
||
progTimer = 50;
|
||
69c: 82 e3 ldi r24, 0x32 ; 50
|
||
69e: 80 93 2e 04 sts 0x042E, r24
|
||
progPosition++;
|
||
6a2: 89 e0 ldi r24, 0x09 ; 9
|
||
6a4: 6e c2 rjmp .+1244 ; 0xb82 <updateProgram+0x64c>
|
||
|
||
break;
|
||
|
||
case 9:
|
||
// M<>t och spara avst<73>nd
|
||
pingSendPing();
|
||
6a6: 0e 94 8c 0b call 0x1718 ; 0x1718 <pingSendPing>
|
||
progTimer = 4;
|
||
6aa: 84 e0 ldi r24, 0x04 ; 4
|
||
6ac: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
if(pingGetReady())
|
||
6b0: 0e 94 a7 0b call 0x174e ; 0x174e <pingGetReady>
|
||
6b4: 88 23 and r24, r24
|
||
6b6: 09 f4 brne .+2 ; 0x6ba <updateProgram+0x184>
|
||
6b8: 66 c2 rjmp .+1228 ; 0xb86 <updateProgram+0x650>
|
||
{
|
||
lcdSetPos(0x00);
|
||
6ba: 80 e0 ldi r24, 0x00 ; 0
|
||
6bc: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Align to wall ");
|
||
6c0: 82 e4 ldi r24, 0x42 ; 66
|
||
6c2: 93 e0 ldi r25, 0x03 ; 3
|
||
6c4: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
tempLastDistanceToWall = pingGetDistance();
|
||
6c8: 0e 94 a0 0b call 0x1740 ; 0x1740 <pingGetDistance>
|
||
6cc: 90 93 36 04 sts 0x0436, r25
|
||
6d0: 80 93 35 04 sts 0x0435, r24
|
||
tempDistanceToWall = tempLastDistanceToWall;
|
||
6d4: 90 93 34 04 sts 0x0434, r25
|
||
6d8: 80 93 33 04 sts 0x0433, r24
|
||
6dc: 27 c1 rjmp .+590 ; 0x92c <updateProgram+0x3f6>
|
||
break;
|
||
|
||
case 10:
|
||
// Reglera in sig vinker<65>t mot v<>ggen
|
||
// Vrider sig ett steg
|
||
if (regulatorMode == 0) // Tittar h<>ger
|
||
6de: 80 91 3f 04 lds r24, 0x043F
|
||
6e2: 88 23 and r24, r24
|
||
6e4: 29 f4 brne .+10 ; 0x6f0 <updateProgram+0x1ba>
|
||
{
|
||
// sv<73>ng h<>ger
|
||
servoMotorLeft = SERVO_POS_MOTOR_FW_FAST;
|
||
6e6: 86 e8 ldi r24, 0x86 ; 134
|
||
6e8: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_RE_FAST;
|
||
6ec: 88 e6 ldi r24, 0x68 ; 104
|
||
6ee: 06 c0 rjmp .+12 ; 0x6fc <updateProgram+0x1c6>
|
||
progTimer = 7;
|
||
}
|
||
else if (regulatorMode == 1) // Tittar v<>nster
|
||
6f0: 81 30 cpi r24, 0x01 ; 1
|
||
6f2: 49 f4 brne .+18 ; 0x706 <updateProgram+0x1d0>
|
||
{
|
||
// sv<73>ng v<>nster
|
||
servoMotorLeft = SERVO_POS_MOTOR_RE_FAST;
|
||
6f4: 88 e6 ldi r24, 0x68 ; 104
|
||
6f6: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_FAST;
|
||
6fa: 86 e8 ldi r24, 0x86 ; 134
|
||
6fc: 80 93 05 04 sts 0x0405, r24
|
||
progTimer = 7;
|
||
700: 87 e0 ldi r24, 0x07 ; 7
|
||
702: 80 93 2e 04 sts 0x042E, r24
|
||
}
|
||
|
||
progPosition++;
|
||
706: 8b e0 ldi r24, 0x0B ; 11
|
||
708: 3c c2 rjmp .+1144 ; 0xb82 <updateProgram+0x64c>
|
||
break;
|
||
|
||
case 11:
|
||
// Reglera in sig vinker<65>t mot v<>ggen
|
||
// Kontrollerar avst<73>nd
|
||
pingSendPing();
|
||
70a: 0e 94 8c 0b call 0x1718 ; 0x1718 <pingSendPing>
|
||
progTimer = 4;
|
||
70e: 84 e0 ldi r24, 0x04 ; 4
|
||
710: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_STOP;
|
||
714: 87 e7 ldi r24, 0x77 ; 119
|
||
716: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_STOP;
|
||
71a: 80 93 05 04 sts 0x0405, r24
|
||
|
||
if(pingGetReady())
|
||
71e: 0e 94 a7 0b call 0x174e ; 0x174e <pingGetReady>
|
||
722: 88 23 and r24, r24
|
||
724: 09 f4 brne .+2 ; 0x728 <updateProgram+0x1f2>
|
||
726: 2f c2 rjmp .+1118 ; 0xb86 <updateProgram+0x650>
|
||
{
|
||
|
||
tempDistance = pingGetDistance();
|
||
728: 0e 94 a0 0b call 0x1740 ; 0x1740 <pingGetDistance>
|
||
72c: 90 93 32 04 sts 0x0432, r25
|
||
730: 80 93 31 04 sts 0x0431, r24
|
||
|
||
if(tempDistance > tempLastDistanceToWall)
|
||
734: 20 91 35 04 lds r18, 0x0435
|
||
738: 30 91 36 04 lds r19, 0x0436
|
||
73c: 28 17 cp r18, r24
|
||
73e: 39 07 cpc r19, r25
|
||
740: 70 f4 brcc .+28 ; 0x75e <updateProgram+0x228>
|
||
{
|
||
lcdSetPos(0x00);
|
||
742: 80 e0 ldi r24, 0x00 ; 0
|
||
744: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString(" ^-- (1m) --^ ");
|
||
748: 83 e5 ldi r24, 0x53 ; 83
|
||
74a: 93 e0 ldi r25, 0x03 ; 3
|
||
74c: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
progTimer = 1;
|
||
750: 81 e0 ldi r24, 0x01 ; 1
|
||
752: 80 93 2e 04 sts 0x042E, r24
|
||
progPosition++;
|
||
756: 80 91 2f 04 lds r24, 0x042F
|
||
75a: 8f 5f subi r24, 0xFF ; 255
|
||
75c: 03 c0 rjmp .+6 ; 0x764 <updateProgram+0x22e>
|
||
}
|
||
else
|
||
progPosition--;
|
||
75e: 80 91 2f 04 lds r24, 0x042F
|
||
762: 81 50 subi r24, 0x01 ; 1
|
||
764: 80 93 2f 04 sts 0x042F, r24
|
||
|
||
tempLastDistanceToWall = tempDistance;
|
||
768: 80 91 31 04 lds r24, 0x0431
|
||
76c: 90 91 32 04 lds r25, 0x0432
|
||
770: 90 93 36 04 sts 0x0436, r25
|
||
774: 80 93 35 04 sts 0x0435, r24
|
||
778: 06 c2 rjmp .+1036 ; 0xb86 <updateProgram+0x650>
|
||
|
||
break;
|
||
|
||
case 12:
|
||
// Reglera in position 1meter fr<66>n v<>ggen
|
||
pingSendPing();
|
||
77a: 0e 94 8c 0b call 0x1718 ; 0x1718 <pingSendPing>
|
||
progTimer = 4;
|
||
77e: 84 e0 ldi r24, 0x04 ; 4
|
||
780: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
if(pingGetReady())
|
||
784: 0e 94 a7 0b call 0x174e ; 0x174e <pingGetReady>
|
||
788: 88 23 and r24, r24
|
||
78a: 09 f4 brne .+2 ; 0x78e <updateProgram+0x258>
|
||
78c: fc c1 rjmp .+1016 ; 0xb86 <updateProgram+0x650>
|
||
{
|
||
|
||
tempDistance = pingGetDistance();
|
||
78e: 0e 94 a0 0b call 0x1740 ; 0x1740 <pingGetDistance>
|
||
792: 9c 01 movw r18, r24
|
||
794: 90 93 32 04 sts 0x0432, r25
|
||
798: 80 93 31 04 sts 0x0431, r24
|
||
|
||
if(tempDistance > DISTANCE_ONE_METER)
|
||
79c: 47 e1 ldi r20, 0x17 ; 23
|
||
79e: 81 37 cpi r24, 0x71 ; 113
|
||
7a0: 94 07 cpc r25, r20
|
||
7a2: 28 f0 brcs .+10 ; 0x7ae <updateProgram+0x278>
|
||
showDistanceOnLCD((tempDistance-DISTANCE_ONE_METER),0,2);
|
||
7a4: 42 e0 ldi r20, 0x02 ; 2
|
||
7a6: 60 e0 ldi r22, 0x00 ; 0
|
||
7a8: 80 57 subi r24, 0x70 ; 112
|
||
7aa: 97 41 sbci r25, 0x17 ; 23
|
||
7ac: 06 c0 rjmp .+12 ; 0x7ba <updateProgram+0x284>
|
||
else
|
||
showDistanceOnLCD((DISTANCE_ONE_METER-tempDistance),1,2);
|
||
7ae: 42 e0 ldi r20, 0x02 ; 2
|
||
7b0: 61 e0 ldi r22, 0x01 ; 1
|
||
7b2: 80 e7 ldi r24, 0x70 ; 112
|
||
7b4: 97 e1 ldi r25, 0x17 ; 23
|
||
7b6: 82 1b sub r24, r18
|
||
7b8: 93 0b sbc r25, r19
|
||
7ba: 0e 94 7c 01 call 0x2f8 ; 0x2f8 <showDistanceOnLCD>
|
||
|
||
if(tempDistance < (DISTANCE_ONE_METER - 200))
|
||
7be: 80 91 31 04 lds r24, 0x0431
|
||
7c2: 90 91 32 04 lds r25, 0x0432
|
||
7c6: 26 e1 ldi r18, 0x16 ; 22
|
||
7c8: 88 3a cpi r24, 0xA8 ; 168
|
||
7ca: 92 07 cpc r25, r18
|
||
7cc: 58 f4 brcc .+22 ; 0x7e4 <updateProgram+0x2ae>
|
||
{
|
||
// K<>r framm<6D>t (<28>ka hastigheten l<>ngsamt)
|
||
if(servoMotorLeft > SERVO_POS_MOTOR_RE_SOFT)
|
||
7ce: 80 91 04 04 lds r24, 0x0404
|
||
7d2: 83 37 cpi r24, 0x73 ; 115
|
||
7d4: b0 f0 brcs .+44 ; 0x802 <updateProgram+0x2cc>
|
||
{
|
||
servoMotorLeft--;
|
||
7d6: 81 50 subi r24, 0x01 ; 1
|
||
7d8: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight--;
|
||
7dc: 80 91 05 04 lds r24, 0x0405
|
||
7e0: 81 50 subi r24, 0x01 ; 1
|
||
7e2: 0d c0 rjmp .+26 ; 0x7fe <updateProgram+0x2c8>
|
||
}
|
||
|
||
regulatorMeasureCounter = 0;
|
||
}
|
||
else if(tempDistance > (DISTANCE_ONE_METER + 200))
|
||
7e4: 89 53 subi r24, 0x39 ; 57
|
||
7e6: 98 41 sbci r25, 0x18 ; 24
|
||
7e8: 78 f0 brcs .+30 ; 0x808 <updateProgram+0x2d2>
|
||
{
|
||
// K<>r bak<61>t (<28>ka hastigheten l<>ngsamt)
|
||
if(servoMotorLeft < SERVO_POS_MOTOR_FW_SOFT)
|
||
7ea: 80 91 04 04 lds r24, 0x0404
|
||
7ee: 8f 37 cpi r24, 0x7F ; 127
|
||
7f0: 40 f4 brcc .+16 ; 0x802 <updateProgram+0x2cc>
|
||
{
|
||
servoMotorLeft++;
|
||
7f2: 8f 5f subi r24, 0xFF ; 255
|
||
7f4: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight++;
|
||
7f8: 80 91 05 04 lds r24, 0x0405
|
||
7fc: 8f 5f subi r24, 0xFF ; 255
|
||
7fe: 80 93 05 04 sts 0x0405, r24
|
||
|
||
}
|
||
|
||
regulatorMeasureCounter = 0;
|
||
802: 10 92 42 04 sts 0x0442, r1
|
||
806: bf c1 rjmp .+894 ; 0xb86 <updateProgram+0x650>
|
||
}
|
||
else
|
||
{
|
||
servoMotorLeft = SERVO_POS_MOTOR_STOP;
|
||
808: 17 e7 ldi r17, 0x77 ; 119
|
||
80a: 10 93 04 04 sts 0x0404, r17
|
||
servoMotorRight = SERVO_POS_MOTOR_STOP;
|
||
80e: 10 93 05 04 sts 0x0405, r17
|
||
|
||
if(++regulatorMeasureCounter == 5)
|
||
812: 80 91 42 04 lds r24, 0x0442
|
||
816: 8f 5f subi r24, 0xFF ; 255
|
||
818: 80 93 42 04 sts 0x0442, r24
|
||
81c: 85 30 cpi r24, 0x05 ; 5
|
||
81e: 09 f0 breq .+2 ; 0x822 <updateProgram+0x2ec>
|
||
820: b2 c1 rjmp .+868 ; 0xb86 <updateProgram+0x650>
|
||
{
|
||
lcdSetPos(0x00);
|
||
822: 80 e0 ldi r24, 0x00 ; 0
|
||
824: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Posistion locked");
|
||
828: 84 e6 ldi r24, 0x64 ; 100
|
||
82a: 93 e0 ldi r25, 0x03 ; 3
|
||
82c: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_STOP;
|
||
830: 10 93 04 04 sts 0x0404, r17
|
||
servoMotorRight = SERVO_POS_MOTOR_STOP;
|
||
834: 10 93 05 04 sts 0x0405, r17
|
||
tempDistanceToWall = tempDistance;
|
||
838: 80 91 31 04 lds r24, 0x0431
|
||
83c: 90 91 32 04 lds r25, 0x0432
|
||
840: 90 93 34 04 sts 0x0434, r25
|
||
844: 80 93 33 04 sts 0x0433, r24
|
||
progTimer = 50;
|
||
848: 82 e3 ldi r24, 0x32 ; 50
|
||
84a: 80 93 2e 04 sts 0x042E, r24
|
||
regulatorMeasureCounter = 0;
|
||
84e: 10 92 42 04 sts 0x0442, r1
|
||
852: 86 c1 rjmp .+780 ; 0xb60 <updateProgram+0x62a>
|
||
|
||
break;
|
||
|
||
case 13:
|
||
// Vrider 90grader
|
||
servoPing = SERVO_POS_CENTER;
|
||
854: 8c e8 ldi r24, 0x8C ; 140
|
||
856: 80 93 03 04 sts 0x0403, r24
|
||
|
||
if(tempLeftDistance > tempRightDistance)
|
||
85a: 20 91 37 04 lds r18, 0x0437
|
||
85e: 30 91 38 04 lds r19, 0x0438
|
||
862: 80 91 39 04 lds r24, 0x0439
|
||
866: 90 91 3a 04 lds r25, 0x043A
|
||
86a: 82 17 cp r24, r18
|
||
86c: 93 07 cpc r25, r19
|
||
86e: 98 f4 brcc .+38 ; 0x896 <updateProgram+0x360>
|
||
{
|
||
lcdSetPos(0x00);
|
||
870: 80 e0 ldi r24, 0x00 ; 0
|
||
872: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Drive: Turn < ");
|
||
876: 85 e7 ldi r24, 0x75 ; 117
|
||
878: 93 e0 ldi r25, 0x03 ; 3
|
||
87a: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_RE_FAST;
|
||
87e: 88 e6 ldi r24, 0x68 ; 104
|
||
880: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_FAST;
|
||
884: 86 e8 ldi r24, 0x86 ; 134
|
||
886: 80 93 05 04 sts 0x0405, r24
|
||
servoPing = SERVO_POS_RIGHT_90;
|
||
88a: 83 e4 ldi r24, 0x43 ; 67
|
||
88c: 80 93 03 04 sts 0x0403, r24
|
||
regulatorMode = 0; // M<>ter <20>t h<>ger
|
||
890: 10 92 3f 04 sts 0x043F, r1
|
||
894: 13 c0 rjmp .+38 ; 0x8bc <updateProgram+0x386>
|
||
progTimer = 50;
|
||
}
|
||
else
|
||
{
|
||
lcdSetPos(0x00);
|
||
896: 80 e0 ldi r24, 0x00 ; 0
|
||
898: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Drive: Turn > ");
|
||
89c: 84 e8 ldi r24, 0x84 ; 132
|
||
89e: 93 e0 ldi r25, 0x03 ; 3
|
||
8a0: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_FW_FAST;
|
||
8a4: 86 e8 ldi r24, 0x86 ; 134
|
||
8a6: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_RE_FAST;
|
||
8aa: 88 e6 ldi r24, 0x68 ; 104
|
||
8ac: 80 93 05 04 sts 0x0405, r24
|
||
servoPing = SERVO_POS_LEFT_90;
|
||
8b0: 80 ed ldi r24, 0xD0 ; 208
|
||
8b2: 80 93 03 04 sts 0x0403, r24
|
||
regulatorMode = 1; // M<>ter <20>t v<>nster
|
||
8b6: 81 e0 ldi r24, 0x01 ; 1
|
||
8b8: 80 93 3f 04 sts 0x043F, r24
|
||
progTimer = 50;
|
||
8bc: 82 e3 ldi r24, 0x32 ; 50
|
||
8be: 19 c0 rjmp .+50 ; 0x8f2 <updateProgram+0x3bc>
|
||
|
||
break;
|
||
|
||
case 14:
|
||
// Stanna
|
||
servoMotorLeft = SERVO_POS_MOTOR_STOP;
|
||
8c0: 87 e7 ldi r24, 0x77 ; 119
|
||
8c2: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_STOP;
|
||
8c6: 80 93 05 04 sts 0x0405, r24
|
||
|
||
progTimer = 10;
|
||
8ca: 8a e0 ldi r24, 0x0A ; 10
|
||
8cc: 80 93 2e 04 sts 0x042E, r24
|
||
regulatorTimer = 2;
|
||
8d0: 82 e0 ldi r24, 0x02 ; 2
|
||
8d2: 80 93 40 04 sts 0x0440, r24
|
||
8d6: 18 c0 rjmp .+48 ; 0x908 <updateProgram+0x3d2>
|
||
|
||
break;
|
||
|
||
case 15:
|
||
// K<>r framm<6D>t
|
||
lcdSetPos(0x00);
|
||
8d8: 80 e0 ldi r24, 0x00 ; 0
|
||
8da: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Drive: FORWARD ");
|
||
8de: 80 e2 ldi r24, 0x20 ; 32
|
||
8e0: 93 e0 ldi r25, 0x03 ; 3
|
||
8e2: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_FW_FAST;
|
||
8e6: 86 e8 ldi r24, 0x86 ; 134
|
||
8e8: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_FAST;
|
||
8ec: 80 93 05 04 sts 0x0405, r24
|
||
|
||
progTimer = 20;
|
||
8f0: 84 e1 ldi r24, 0x14 ; 20
|
||
8f2: 80 93 2e 04 sts 0x042E, r24
|
||
8f6: 34 c1 rjmp .+616 ; 0xb60 <updateProgram+0x62a>
|
||
|
||
break;
|
||
|
||
case 16:
|
||
// K<>r framm<6D>t
|
||
servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT;
|
||
8f8: 8f e7 ldi r24, 0x7F ; 127
|
||
8fa: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_SOFT;
|
||
8fe: 80 93 05 04 sts 0x0405, r24
|
||
|
||
progTimer = 10;
|
||
902: 8a e0 ldi r24, 0x0A ; 10
|
||
904: 80 93 2e 04 sts 0x042E, r24
|
||
progPosition++;
|
||
908: 81 e1 ldi r24, 0x11 ; 17
|
||
90a: 3b c1 rjmp .+630 ; 0xb82 <updateProgram+0x64c>
|
||
|
||
break;
|
||
|
||
case 17:
|
||
// M<>ter avst<73>nd
|
||
pingSendPing();
|
||
90c: 0e 94 8c 0b call 0x1718 ; 0x1718 <pingSendPing>
|
||
progTimer = 3;
|
||
910: 83 e0 ldi r24, 0x03 ; 3
|
||
912: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
if(pingGetReady())
|
||
916: 0e 94 a7 0b call 0x174e ; 0x174e <pingGetReady>
|
||
91a: 88 23 and r24, r24
|
||
91c: 09 f4 brne .+2 ; 0x920 <updateProgram+0x3ea>
|
||
91e: 33 c1 rjmp .+614 ; 0xb86 <updateProgram+0x650>
|
||
{
|
||
|
||
tempDistance = pingGetDistance();
|
||
920: 0e 94 a0 0b call 0x1740 ; 0x1740 <pingGetDistance>
|
||
924: 90 93 32 04 sts 0x0432, r25
|
||
928: 80 93 31 04 sts 0x0431, r24
|
||
progTimer = 1;
|
||
92c: 81 e0 ldi r24, 0x01 ; 1
|
||
92e: e1 cf rjmp .-62 ; 0x8f2 <updateProgram+0x3bc>
|
||
|
||
break;
|
||
|
||
case 18:
|
||
// Reglerar 1meter fr<66>n v<>ggen
|
||
if(++regulatorCounter >= regulatorTimer)
|
||
930: 80 91 41 04 lds r24, 0x0441
|
||
934: 8f 5f subi r24, 0xFF ; 255
|
||
936: 80 93 41 04 sts 0x0441, r24
|
||
93a: 90 91 40 04 lds r25, 0x0440
|
||
93e: 89 17 cp r24, r25
|
||
940: 48 f0 brcs .+18 ; 0x954 <updateProgram+0x41e>
|
||
{
|
||
progPosition++;
|
||
942: 83 e1 ldi r24, 0x13 ; 19
|
||
944: 80 93 2f 04 sts 0x042F, r24
|
||
progTimer = 1;
|
||
948: 81 e0 ldi r24, 0x01 ; 1
|
||
94a: 80 93 2e 04 sts 0x042E, r24
|
||
regulatorCounter = 0;
|
||
94e: 10 92 41 04 sts 0x0441, r1
|
||
952: 19 c1 rjmp .+562 ; 0xb86 <updateProgram+0x650>
|
||
}
|
||
else
|
||
{
|
||
uint8_t calculateProgTimer = 0;
|
||
if (regulatorMode == 0) // Tittar h<>ger
|
||
954: 80 91 3f 04 lds r24, 0x043F
|
||
958: 88 23 and r24, r24
|
||
95a: 09 f0 breq .+2 ; 0x95e <updateProgram+0x428>
|
||
95c: 47 c0 rjmp .+142 ; 0x9ec <updateProgram+0x4b6>
|
||
{
|
||
lcdSetPos(0x00);
|
||
95e: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString(" ]--- (1m) --->|");
|
||
962: 83 e9 ldi r24, 0x93 ; 147
|
||
964: 93 e0 ldi r25, 0x03 ; 3
|
||
966: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
if(tempDistance > DISTANCE_ONE_METER)
|
||
96a: 20 91 31 04 lds r18, 0x0431
|
||
96e: 30 91 32 04 lds r19, 0x0432
|
||
972: 87 e1 ldi r24, 0x17 ; 23
|
||
974: 21 37 cpi r18, 0x71 ; 113
|
||
976: 38 07 cpc r19, r24
|
||
978: 30 f0 brcs .+12 ; 0x986 <updateProgram+0x450>
|
||
showDistanceOnLCD((tempDistance-DISTANCE_ONE_METER),3,2);
|
||
97a: 42 e0 ldi r20, 0x02 ; 2
|
||
97c: 63 e0 ldi r22, 0x03 ; 3
|
||
97e: c9 01 movw r24, r18
|
||
980: 80 57 subi r24, 0x70 ; 112
|
||
982: 97 41 sbci r25, 0x17 ; 23
|
||
984: 06 c0 rjmp .+12 ; 0x992 <updateProgram+0x45c>
|
||
else
|
||
showDistanceOnLCD((DISTANCE_ONE_METER-tempDistance),2,2);
|
||
986: 42 e0 ldi r20, 0x02 ; 2
|
||
988: 62 e0 ldi r22, 0x02 ; 2
|
||
98a: 80 e7 ldi r24, 0x70 ; 112
|
||
98c: 97 e1 ldi r25, 0x17 ; 23
|
||
98e: 82 1b sub r24, r18
|
||
990: 93 0b sbc r25, r19
|
||
992: 0e 94 7c 01 call 0x2f8 ; 0x2f8 <showDistanceOnLCD>
|
||
|
||
if((tempDistance < tempLastDistanceToWall) && (tempDistance < (DISTANCE_ONE_METER -1000)))
|
||
996: 60 91 31 04 lds r22, 0x0431
|
||
99a: 70 91 32 04 lds r23, 0x0432
|
||
99e: 80 91 35 04 lds r24, 0x0435
|
||
9a2: 90 91 36 04 lds r25, 0x0436
|
||
9a6: 68 17 cp r22, r24
|
||
9a8: 79 07 cpc r23, r25
|
||
9aa: 70 f4 brcc .+28 ; 0x9c8 <updateProgram+0x492>
|
||
9ac: 23 e1 ldi r18, 0x13 ; 19
|
||
9ae: 68 38 cpi r22, 0x88 ; 136
|
||
9b0: 72 07 cpc r23, r18
|
||
9b2: 28 f4 brcc .+10 ; 0x9be <updateProgram+0x488>
|
||
{
|
||
// sv<73>ng v<>nster
|
||
servoMotorLeft = SERVO_POS_MOTOR_RE_FAST;
|
||
9b4: 88 e6 ldi r24, 0x68 ; 104
|
||
9b6: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_FAST;
|
||
9ba: 86 e8 ldi r24, 0x86 ; 134
|
||
9bc: 4a c0 rjmp .+148 ; 0xa52 <updateProgram+0x51c>
|
||
progTimer = calculateProgTimer;
|
||
else
|
||
progTimer = 15;
|
||
|
||
}
|
||
else if((tempDistance < tempLastDistanceToWall) && (tempDistance < (DISTANCE_ONE_METER -10)))
|
||
9be: 66 56 subi r22, 0x66 ; 102
|
||
9c0: 77 41 sbci r23, 0x17 ; 23
|
||
9c2: 08 f0 brcs .+2 ; 0x9c6 <updateProgram+0x490>
|
||
9c4: 7c c0 rjmp .+248 ; 0xabe <updateProgram+0x588>
|
||
9c6: 73 c0 rjmp .+230 ; 0xaae <updateProgram+0x578>
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_FAST;
|
||
|
||
progTimer = 5;
|
||
|
||
}
|
||
else if((tempDistance > tempLastDistanceToWall) && (tempDistance > (DISTANCE_ONE_METER+1000)))
|
||
9c8: 86 17 cp r24, r22
|
||
9ca: 97 07 cpc r25, r23
|
||
9cc: 08 f0 brcs .+2 ; 0x9d0 <updateProgram+0x49a>
|
||
9ce: 77 c0 rjmp .+238 ; 0xabe <updateProgram+0x588>
|
||
9d0: 8b e1 ldi r24, 0x1B ; 27
|
||
9d2: 69 35 cpi r22, 0x59 ; 89
|
||
9d4: 78 07 cpc r23, r24
|
||
9d6: 28 f0 brcs .+10 ; 0x9e2 <updateProgram+0x4ac>
|
||
{
|
||
// sv<73>ng h<>ger
|
||
servoMotorLeft = SERVO_POS_MOTOR_FW_FAST;
|
||
9d8: 86 e8 ldi r24, 0x86 ; 134
|
||
9da: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_RE_FAST;
|
||
9de: 88 e6 ldi r24, 0x68 ; 104
|
||
9e0: 4e c0 rjmp .+156 ; 0xa7e <updateProgram+0x548>
|
||
progTimer = calculateProgTimer;
|
||
else
|
||
progTimer = 15;
|
||
|
||
}
|
||
else if((tempDistance > tempLastDistanceToWall) && (tempDistance > (DISTANCE_ONE_METER+10)))
|
||
9e2: 6b 57 subi r22, 0x7B ; 123
|
||
9e4: 77 41 sbci r23, 0x17 ; 23
|
||
9e6: 08 f4 brcc .+2 ; 0x9ea <updateProgram+0x4b4>
|
||
9e8: 6a c0 rjmp .+212 ; 0xabe <updateProgram+0x588>
|
||
9ea: 39 c0 rjmp .+114 ; 0xa5e <updateProgram+0x528>
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_SOFT;
|
||
progTimer = 4;
|
||
}
|
||
}
|
||
|
||
else if (regulatorMode == 1) // Tittar v<>nster
|
||
9ec: 81 30 cpi r24, 0x01 ; 1
|
||
9ee: 09 f0 breq .+2 ; 0x9f2 <updateProgram+0x4bc>
|
||
9f0: 6e c0 rjmp .+220 ; 0xace <updateProgram+0x598>
|
||
{
|
||
lcdSetPos(0x00);
|
||
9f2: 80 e0 ldi r24, 0x00 ; 0
|
||
9f4: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("|<--- (1m) ---[ ");
|
||
9f8: 84 ea ldi r24, 0xA4 ; 164
|
||
9fa: 93 e0 ldi r25, 0x03 ; 3
|
||
9fc: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
if(tempDistance > DISTANCE_ONE_METER)
|
||
a00: 20 91 31 04 lds r18, 0x0431
|
||
a04: 30 91 32 04 lds r19, 0x0432
|
||
a08: 47 e1 ldi r20, 0x17 ; 23
|
||
a0a: 21 37 cpi r18, 0x71 ; 113
|
||
a0c: 34 07 cpc r19, r20
|
||
a0e: 30 f0 brcs .+12 ; 0xa1c <updateProgram+0x4e6>
|
||
showDistanceOnLCD((tempDistance-DISTANCE_ONE_METER),2,2);
|
||
a10: 42 e0 ldi r20, 0x02 ; 2
|
||
a12: 62 e0 ldi r22, 0x02 ; 2
|
||
a14: c9 01 movw r24, r18
|
||
a16: 80 57 subi r24, 0x70 ; 112
|
||
a18: 97 41 sbci r25, 0x17 ; 23
|
||
a1a: 06 c0 rjmp .+12 ; 0xa28 <updateProgram+0x4f2>
|
||
else
|
||
showDistanceOnLCD((DISTANCE_ONE_METER-tempDistance),3,2);
|
||
a1c: 42 e0 ldi r20, 0x02 ; 2
|
||
a1e: 63 e0 ldi r22, 0x03 ; 3
|
||
a20: 80 e7 ldi r24, 0x70 ; 112
|
||
a22: 97 e1 ldi r25, 0x17 ; 23
|
||
a24: 82 1b sub r24, r18
|
||
a26: 93 0b sbc r25, r19
|
||
a28: 0e 94 7c 01 call 0x2f8 ; 0x2f8 <showDistanceOnLCD>
|
||
|
||
if((tempDistance < tempLastDistanceToWall) && (tempDistance < (DISTANCE_ONE_METER-1000)))
|
||
a2c: 60 91 31 04 lds r22, 0x0431
|
||
a30: 70 91 32 04 lds r23, 0x0432
|
||
a34: 80 91 35 04 lds r24, 0x0435
|
||
a38: 90 91 36 04 lds r25, 0x0436
|
||
a3c: 68 17 cp r22, r24
|
||
a3e: 79 07 cpc r23, r25
|
||
a40: 98 f4 brcc .+38 ; 0xa68 <updateProgram+0x532>
|
||
a42: 83 e1 ldi r24, 0x13 ; 19
|
||
a44: 68 38 cpi r22, 0x88 ; 136
|
||
a46: 78 07 cpc r23, r24
|
||
a48: 38 f4 brcc .+14 ; 0xa58 <updateProgram+0x522>
|
||
{
|
||
// sv<73>ng h<>ger
|
||
servoMotorLeft = SERVO_POS_MOTOR_FW_FAST;
|
||
a4a: 86 e8 ldi r24, 0x86 ; 134
|
||
a4c: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_RE_FAST;
|
||
a50: 88 e6 ldi r24, 0x68 ; 104
|
||
a52: 80 93 05 04 sts 0x0405, r24
|
||
a56: 26 c0 rjmp .+76 ; 0xaa4 <updateProgram+0x56e>
|
||
progTimer = calculateProgTimer;
|
||
else
|
||
progTimer = 15;
|
||
|
||
}
|
||
else if((tempDistance < tempLastDistanceToWall) && (tempDistance < (DISTANCE_ONE_METER-10)))
|
||
a58: 66 56 subi r22, 0x66 ; 102
|
||
a5a: 77 41 sbci r23, 0x17 ; 23
|
||
a5c: 80 f5 brcc .+96 ; 0xabe <updateProgram+0x588>
|
||
{
|
||
// sv<73>ng h<>ger
|
||
servoMotorLeft = SERVO_POS_MOTOR_FW_FAST;
|
||
a5e: 86 e8 ldi r24, 0x86 ; 134
|
||
a60: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_RE_FAST;
|
||
a64: 88 e6 ldi r24, 0x68 ; 104
|
||
a66: 27 c0 rjmp .+78 ; 0xab6 <updateProgram+0x580>
|
||
|
||
progTimer = 5;
|
||
|
||
}
|
||
else if((tempDistance > tempLastDistanceToWall) && (tempDistance > (DISTANCE_ONE_METER +1000)))
|
||
a68: 86 17 cp r24, r22
|
||
a6a: 97 07 cpc r25, r23
|
||
a6c: 40 f5 brcc .+80 ; 0xabe <updateProgram+0x588>
|
||
a6e: 4b e1 ldi r20, 0x1B ; 27
|
||
a70: 69 35 cpi r22, 0x59 ; 89
|
||
a72: 74 07 cpc r23, r20
|
||
a74: c8 f0 brcs .+50 ; 0xaa8 <updateProgram+0x572>
|
||
{
|
||
// sv<73>ng v<>nster
|
||
servoMotorLeft = SERVO_POS_MOTOR_RE_FAST;
|
||
a76: 88 e6 ldi r24, 0x68 ; 104
|
||
a78: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_FAST;
|
||
a7c: 86 e8 ldi r24, 0x86 ; 134
|
||
a7e: 80 93 05 04 sts 0x0405, r24
|
||
|
||
calculateProgTimer = ((tempDistance - DISTANCE_ONE_METER)/40);
|
||
a82: 80 e0 ldi r24, 0x00 ; 0
|
||
a84: 90 e0 ldi r25, 0x00 ; 0
|
||
a86: 60 57 subi r22, 0x70 ; 112
|
||
a88: 77 41 sbci r23, 0x17 ; 23
|
||
a8a: 80 40 sbci r24, 0x00 ; 0
|
||
a8c: 90 40 sbci r25, 0x00 ; 0
|
||
a8e: 28 e2 ldi r18, 0x28 ; 40
|
||
a90: 30 e0 ldi r19, 0x00 ; 0
|
||
a92: 40 e0 ldi r20, 0x00 ; 0
|
||
a94: 50 e0 ldi r21, 0x00 ; 0
|
||
a96: 0e 94 e7 0b call 0x17ce ; 0x17ce <__udivmodsi4>
|
||
|
||
if(calculateProgTimer < 15)
|
||
a9a: 2f 30 cpi r18, 0x0F ; 15
|
||
a9c: 18 f4 brcc .+6 ; 0xaa4 <updateProgram+0x56e>
|
||
progTimer = calculateProgTimer;
|
||
a9e: 20 93 2e 04 sts 0x042E, r18
|
||
aa2: 15 c0 rjmp .+42 ; 0xace <updateProgram+0x598>
|
||
else
|
||
progTimer = 15;
|
||
aa4: 8f e0 ldi r24, 0x0F ; 15
|
||
aa6: 11 c0 rjmp .+34 ; 0xaca <updateProgram+0x594>
|
||
}
|
||
else if((tempDistance > tempLastDistanceToWall) && (tempDistance > (DISTANCE_ONE_METER +10)))
|
||
aa8: 6b 57 subi r22, 0x7B ; 123
|
||
aaa: 77 41 sbci r23, 0x17 ; 23
|
||
aac: 40 f0 brcs .+16 ; 0xabe <updateProgram+0x588>
|
||
{
|
||
// sv<73>ng v<>nster
|
||
servoMotorLeft = SERVO_POS_MOTOR_RE_FAST;
|
||
aae: 88 e6 ldi r24, 0x68 ; 104
|
||
ab0: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_FAST;
|
||
ab4: 86 e8 ldi r24, 0x86 ; 134
|
||
ab6: 80 93 05 04 sts 0x0405, r24
|
||
|
||
progTimer = 5;
|
||
aba: 85 e0 ldi r24, 0x05 ; 5
|
||
abc: 06 c0 rjmp .+12 ; 0xaca <updateProgram+0x594>
|
||
}
|
||
else
|
||
{
|
||
servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT;
|
||
abe: 8f e7 ldi r24, 0x7F ; 127
|
||
ac0: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_SOFT;
|
||
ac4: 80 93 05 04 sts 0x0405, r24
|
||
progTimer = 4;
|
||
ac8: 84 e0 ldi r24, 0x04 ; 4
|
||
aca: 80 93 2e 04 sts 0x042E, r24
|
||
}
|
||
}
|
||
tempLastDistanceToWall = tempDistance;
|
||
ace: 80 91 31 04 lds r24, 0x0431
|
||
ad2: 90 91 32 04 lds r25, 0x0432
|
||
ad6: 90 93 36 04 sts 0x0436, r25
|
||
ada: 80 93 35 04 sts 0x0435, r24
|
||
progPosition--;
|
||
ade: 80 91 2f 04 lds r24, 0x042F
|
||
progPosition--;
|
||
ae2: 82 50 subi r24, 0x02 ; 2
|
||
ae4: 4e c0 rjmp .+156 ; 0xb82 <updateProgram+0x64c>
|
||
|
||
break;
|
||
|
||
case 19:
|
||
|
||
servoPing = SERVO_POS_CENTER;
|
||
ae6: 8c e8 ldi r24, 0x8C ; 140
|
||
ae8: 80 93 03 04 sts 0x0403, r24
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_STOP;
|
||
aec: 87 e7 ldi r24, 0x77 ; 119
|
||
aee: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_STOP;
|
||
af2: 80 93 05 04 sts 0x0405, r24
|
||
|
||
progTimer = 35;
|
||
af6: 83 e2 ldi r24, 0x23 ; 35
|
||
af8: 80 93 2e 04 sts 0x042E, r24
|
||
progPosition++;
|
||
afc: 84 e1 ldi r24, 0x14 ; 20
|
||
afe: 41 c0 rjmp .+130 ; 0xb82 <updateProgram+0x64c>
|
||
|
||
break;
|
||
|
||
case 20:
|
||
|
||
progTimer = 3;
|
||
b00: 83 e0 ldi r24, 0x03 ; 3
|
||
b02: 80 93 2e 04 sts 0x042E, r24
|
||
pingSendPing();
|
||
b06: 0e 94 8c 0b call 0x1718 ; 0x1718 <pingSendPing>
|
||
|
||
if(pingGetReady())
|
||
b0a: 0e 94 a7 0b call 0x174e ; 0x174e <pingGetReady>
|
||
b0e: 88 23 and r24, r24
|
||
b10: d1 f1 breq .+116 ; 0xb86 <updateProgram+0x650>
|
||
{
|
||
|
||
tempDistance = pingGetDistance();
|
||
b12: 0e 94 a0 0b call 0x1740 ; 0x1740 <pingGetDistance>
|
||
b16: 90 93 32 04 sts 0x0432, r25
|
||
b1a: 80 93 31 04 sts 0x0431, r24
|
||
|
||
if(tempDistance < DISTANCE_ONE_METER)
|
||
b1e: 27 e1 ldi r18, 0x17 ; 23
|
||
b20: 80 37 cpi r24, 0x70 ; 112
|
||
b22: 92 07 cpc r25, r18
|
||
b24: 40 f4 brcc .+16 ; 0xb36 <updateProgram+0x600>
|
||
{
|
||
showDistanceOnLCD(0,0,1);
|
||
b26: 41 e0 ldi r20, 0x01 ; 1
|
||
b28: 60 e0 ldi r22, 0x00 ; 0
|
||
b2a: 80 e0 ldi r24, 0x00 ; 0
|
||
b2c: 90 e0 ldi r25, 0x00 ; 0
|
||
b2e: 0e 94 7c 01 call 0x2f8 ; 0x2f8 <showDistanceOnLCD>
|
||
progPosition = 2;
|
||
b32: 82 e0 ldi r24, 0x02 ; 2
|
||
b34: 26 c0 rjmp .+76 ; 0xb82 <updateProgram+0x64c>
|
||
b36: 9c 01 movw r18, r24
|
||
b38: 20 57 subi r18, 0x70 ; 112
|
||
b3a: 37 41 sbci r19, 0x17 ; 23
|
||
}
|
||
else if (tempDistance < (DISTANCE_ONE_METER*2))
|
||
b3c: 80 5e subi r24, 0xE0 ; 224
|
||
b3e: 9e 42 sbci r25, 0x2E ; 46
|
||
b40: 38 f4 brcc .+14 ; 0xb50 <updateProgram+0x61a>
|
||
{
|
||
showDistanceOnLCD(tempDistance-DISTANCE_ONE_METER,0,1);
|
||
b42: 41 e0 ldi r20, 0x01 ; 1
|
||
b44: 60 e0 ldi r22, 0x00 ; 0
|
||
b46: c9 01 movw r24, r18
|
||
b48: 0e 94 7c 01 call 0x2f8 ; 0x2f8 <showDistanceOnLCD>
|
||
regulatorTimer = 2;
|
||
b4c: 82 e0 ldi r24, 0x02 ; 2
|
||
b4e: 06 c0 rjmp .+12 ; 0xb5c <updateProgram+0x626>
|
||
progPosition++;
|
||
}
|
||
else
|
||
{
|
||
showDistanceOnLCD(tempDistance-DISTANCE_ONE_METER,0,1);
|
||
b50: 41 e0 ldi r20, 0x01 ; 1
|
||
b52: 60 e0 ldi r22, 0x00 ; 0
|
||
b54: c9 01 movw r24, r18
|
||
b56: 0e 94 7c 01 call 0x2f8 ; 0x2f8 <showDistanceOnLCD>
|
||
regulatorTimer = 10;
|
||
b5a: 8a e0 ldi r24, 0x0A ; 10
|
||
b5c: 80 93 40 04 sts 0x0440, r24
|
||
progPosition++;
|
||
b60: 80 91 2f 04 lds r24, 0x042F
|
||
b64: 8f 5f subi r24, 0xFF ; 255
|
||
b66: 0d c0 rjmp .+26 ; 0xb82 <updateProgram+0x64c>
|
||
|
||
break;
|
||
|
||
case 21:
|
||
|
||
if (regulatorMode == 0) // Tittar h<>ger
|
||
b68: 80 91 3f 04 lds r24, 0x043F
|
||
b6c: 88 23 and r24, r24
|
||
b6e: 11 f4 brne .+4 ; 0xb74 <updateProgram+0x63e>
|
||
{
|
||
servoPing = SERVO_POS_RIGHT_90;
|
||
b70: 83 e4 ldi r24, 0x43 ; 67
|
||
b72: 01 c0 rjmp .+2 ; 0xb76 <updateProgram+0x640>
|
||
}
|
||
else
|
||
{
|
||
servoPing = SERVO_POS_LEFT_90;
|
||
b74: 80 ed ldi r24, 0xD0 ; 208
|
||
b76: 80 93 03 04 sts 0x0403, r24
|
||
}
|
||
|
||
progTimer = 5;
|
||
b7a: 85 e0 ldi r24, 0x05 ; 5
|
||
b7c: 80 93 2e 04 sts 0x042E, r24
|
||
progPosition = 15;
|
||
b80: 8f e0 ldi r24, 0x0F ; 15
|
||
b82: 80 93 2f 04 sts 0x042F, r24
|
||
|
||
break;
|
||
|
||
}
|
||
|
||
progCounter = 0;
|
||
b86: 10 92 2d 04 sts 0x042D, r1
|
||
}
|
||
}
|
||
|
||
// Program for robot AI
|
||
if (roboActive == 2)
|
||
b8a: 20 91 3b 04 lds r18, 0x043B
|
||
b8e: 22 30 cpi r18, 0x02 ; 2
|
||
b90: 09 f0 breq .+2 ; 0xb94 <updateProgram+0x65e>
|
||
b92: 01 c1 rjmp .+514 ; 0xd96 <updateProgram+0x860>
|
||
{
|
||
// Program(2) for random RFID serach
|
||
if (++progCounter >= progTimer)
|
||
b94: 80 91 2d 04 lds r24, 0x042D
|
||
b98: 8f 5f subi r24, 0xFF ; 255
|
||
b9a: 80 93 2d 04 sts 0x042D, r24
|
||
b9e: 90 91 2e 04 lds r25, 0x042E
|
||
ba2: 89 17 cp r24, r25
|
||
ba4: 08 f4 brcc .+2 ; 0xba8 <updateProgram+0x672>
|
||
ba6: f7 c0 rjmp .+494 ; 0xd96 <updateProgram+0x860>
|
||
{
|
||
|
||
switch (progPosition)
|
||
ba8: 80 91 2f 04 lds r24, 0x042F
|
||
bac: 84 30 cpi r24, 0x04 ; 4
|
||
bae: 09 f4 brne .+2 ; 0xbb2 <updateProgram+0x67c>
|
||
bb0: 68 c0 rjmp .+208 ; 0xc82 <updateProgram+0x74c>
|
||
bb2: 85 30 cpi r24, 0x05 ; 5
|
||
bb4: 50 f4 brcc .+20 ; 0xbca <updateProgram+0x694>
|
||
bb6: 81 30 cpi r24, 0x01 ; 1
|
||
bb8: 11 f1 breq .+68 ; 0xbfe <updateProgram+0x6c8>
|
||
bba: 81 30 cpi r24, 0x01 ; 1
|
||
bbc: c8 f0 brcs .+50 ; 0xbf0 <updateProgram+0x6ba>
|
||
bbe: 82 30 cpi r24, 0x02 ; 2
|
||
bc0: 59 f1 breq .+86 ; 0xc18 <updateProgram+0x6e2>
|
||
bc2: 83 30 cpi r24, 0x03 ; 3
|
||
bc4: 09 f0 breq .+2 ; 0xbc8 <updateProgram+0x692>
|
||
bc6: e5 c0 rjmp .+458 ; 0xd92 <updateProgram+0x85c>
|
||
bc8: 4e c0 rjmp .+156 ; 0xc66 <updateProgram+0x730>
|
||
bca: 87 30 cpi r24, 0x07 ; 7
|
||
bcc: 09 f4 brne .+2 ; 0xbd0 <updateProgram+0x69a>
|
||
bce: 7c c0 rjmp .+248 ; 0xcc8 <updateProgram+0x792>
|
||
bd0: 88 30 cpi r24, 0x08 ; 8
|
||
bd2: 38 f4 brcc .+14 ; 0xbe2 <updateProgram+0x6ac>
|
||
bd4: 85 30 cpi r24, 0x05 ; 5
|
||
bd6: 09 f4 brne .+2 ; 0xbda <updateProgram+0x6a4>
|
||
bd8: 5d c0 rjmp .+186 ; 0xc94 <updateProgram+0x75e>
|
||
bda: 86 30 cpi r24, 0x06 ; 6
|
||
bdc: 09 f0 breq .+2 ; 0xbe0 <updateProgram+0x6aa>
|
||
bde: d9 c0 rjmp .+434 ; 0xd92 <updateProgram+0x85c>
|
||
be0: 61 c0 rjmp .+194 ; 0xca4 <updateProgram+0x76e>
|
||
be2: 88 30 cpi r24, 0x08 ; 8
|
||
be4: 09 f4 brne .+2 ; 0xbe8 <updateProgram+0x6b2>
|
||
be6: 78 c0 rjmp .+240 ; 0xcd8 <updateProgram+0x7a2>
|
||
be8: 89 30 cpi r24, 0x09 ; 9
|
||
bea: 09 f0 breq .+2 ; 0xbee <updateProgram+0x6b8>
|
||
bec: d2 c0 rjmp .+420 ; 0xd92 <updateProgram+0x85c>
|
||
bee: c6 c0 rjmp .+396 ; 0xd7c <updateProgram+0x846>
|
||
{
|
||
case 0:
|
||
|
||
lcdClearDisplay();
|
||
bf0: 0e 94 df 07 call 0xfbe ; 0xfbe <lcdClearDisplay>
|
||
lcdSetLayout(1);
|
||
bf4: 81 e0 ldi r24, 0x01 ; 1
|
||
bf6: 0e 94 a8 07 call 0xf50 ; 0xf50 <lcdSetLayout>
|
||
|
||
progTimer = 1;
|
||
bfa: 81 e0 ldi r24, 0x01 ; 1
|
||
bfc: b9 c0 rjmp .+370 ; 0xd70 <updateProgram+0x83a>
|
||
|
||
break;
|
||
|
||
case 1:
|
||
|
||
lcdSetPos(0x00);
|
||
bfe: 80 e0 ldi r24, 0x00 ; 0
|
||
c00: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Drive: FORWARD ");
|
||
c04: 80 e2 ldi r24, 0x20 ; 32
|
||
c06: 93 e0 ldi r25, 0x03 ; 3
|
||
c08: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_FW_FAST;
|
||
c0c: 86 e8 ldi r24, 0x86 ; 134
|
||
c0e: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_FAST;
|
||
c12: 80 93 05 04 sts 0x0405, r24
|
||
c16: 56 c0 rjmp .+172 ; 0xcc4 <updateProgram+0x78e>
|
||
|
||
break;
|
||
|
||
case 2:
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_FW_SOFT;
|
||
c18: 8f e7 ldi r24, 0x7F ; 127
|
||
c1a: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_SOFT;
|
||
c1e: 80 93 05 04 sts 0x0405, r24
|
||
|
||
pingSendPing();
|
||
c22: 0e 94 8c 0b call 0x1718 ; 0x1718 <pingSendPing>
|
||
progTimer = 3;
|
||
c26: 83 e0 ldi r24, 0x03 ; 3
|
||
c28: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
if(pingGetReady())
|
||
c2c: 0e 94 a7 0b call 0x174e ; 0x174e <pingGetReady>
|
||
c30: 88 23 and r24, r24
|
||
c32: 09 f4 brne .+2 ; 0xc36 <updateProgram+0x700>
|
||
c34: ae c0 rjmp .+348 ; 0xd92 <updateProgram+0x85c>
|
||
{
|
||
|
||
tempDistance = pingGetDistance();
|
||
c36: 0e 94 a0 0b call 0x1740 ; 0x1740 <pingGetDistance>
|
||
c3a: 90 93 32 04 sts 0x0432, r25
|
||
c3e: 80 93 31 04 sts 0x0431, r24
|
||
|
||
if(tempDistance < DISTANCE_TO_STOP)
|
||
c42: 25 e1 ldi r18, 0x15 ; 21
|
||
c44: 8c 37 cpi r24, 0x7C ; 124
|
||
c46: 92 07 cpc r25, r18
|
||
c48: 38 f4 brcc .+14 ; 0xc58 <updateProgram+0x722>
|
||
{
|
||
showDistanceOnLCD(0,0,2);
|
||
c4a: 42 e0 ldi r20, 0x02 ; 2
|
||
c4c: 60 e0 ldi r22, 0x00 ; 0
|
||
c4e: 80 e0 ldi r24, 0x00 ; 0
|
||
c50: 90 e0 ldi r25, 0x00 ; 0
|
||
c52: 0e 94 7c 01 call 0x2f8 ; 0x2f8 <showDistanceOnLCD>
|
||
c56: 8e c0 rjmp .+284 ; 0xd74 <updateProgram+0x83e>
|
||
progPosition++;
|
||
}
|
||
else
|
||
{
|
||
showDistanceOnLCD(tempDistance-DISTANCE_TO_STOP,0,2);
|
||
c58: 42 e0 ldi r20, 0x02 ; 2
|
||
c5a: 60 e0 ldi r22, 0x00 ; 0
|
||
c5c: 8c 57 subi r24, 0x7C ; 124
|
||
c5e: 95 41 sbci r25, 0x15 ; 21
|
||
c60: 0e 94 7c 01 call 0x2f8 ; 0x2f8 <showDistanceOnLCD>
|
||
c64: 96 c0 rjmp .+300 ; 0xd92 <updateProgram+0x85c>
|
||
|
||
break;
|
||
|
||
case 3:
|
||
|
||
lcdSetPos(0x00);
|
||
c66: 80 e0 ldi r24, 0x00 ; 0
|
||
c68: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Drive: STOP ");
|
||
c6c: 81 e3 ldi r24, 0x31 ; 49
|
||
c6e: 93 e0 ldi r25, 0x03 ; 3
|
||
c70: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
// Stop and breake
|
||
servoMotorLeft = SERVO_POS_MOTOR_STOP;
|
||
servoMotorRight = SERVO_POS_MOTOR_STOP;
|
||
servoMotorLeft = SERVO_POS_MOTOR_RE;
|
||
c74: 8c e6 ldi r24, 0x6C ; 108
|
||
c76: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_RE;
|
||
c7a: 80 93 05 04 sts 0x0405, r24
|
||
|
||
progTimer = 50;
|
||
c7e: 82 e3 ldi r24, 0x32 ; 50
|
||
c80: 77 c0 rjmp .+238 ; 0xd70 <updateProgram+0x83a>
|
||
|
||
break;
|
||
|
||
case 4:
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_STOP;
|
||
c82: 87 e7 ldi r24, 0x77 ; 119
|
||
c84: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_STOP;
|
||
c88: 80 93 05 04 sts 0x0405, r24
|
||
|
||
progTimer = 2;
|
||
c8c: 20 93 2e 04 sts 0x042E, r18
|
||
|
||
progPosition++;
|
||
c90: 85 e0 ldi r24, 0x05 ; 5
|
||
c92: 7d c0 rjmp .+250 ; 0xd8e <updateProgram+0x858>
|
||
|
||
break;
|
||
|
||
case 5:
|
||
|
||
servoPing = SERVO_POS_LEFT_45;
|
||
c94: 8e ea ldi r24, 0xAE ; 174
|
||
c96: 80 93 03 04 sts 0x0403, r24
|
||
|
||
progTimer = 20;
|
||
c9a: 84 e1 ldi r24, 0x14 ; 20
|
||
c9c: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
progPosition++;
|
||
ca0: 86 e0 ldi r24, 0x06 ; 6
|
||
ca2: 75 c0 rjmp .+234 ; 0xd8e <updateProgram+0x858>
|
||
|
||
break;
|
||
|
||
case 6:
|
||
|
||
pingSendPing();
|
||
ca4: 0e 94 8c 0b call 0x1718 ; 0x1718 <pingSendPing>
|
||
progTimer = 4;
|
||
ca8: 84 e0 ldi r24, 0x04 ; 4
|
||
caa: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
if(pingGetReady())
|
||
cae: 0e 94 a7 0b call 0x174e ; 0x174e <pingGetReady>
|
||
cb2: 88 23 and r24, r24
|
||
cb4: 09 f4 brne .+2 ; 0xcb8 <updateProgram+0x782>
|
||
cb6: 6d c0 rjmp .+218 ; 0xd92 <updateProgram+0x85c>
|
||
{
|
||
tempLeftDistance = pingGetDistance();
|
||
cb8: 0e 94 a0 0b call 0x1740 ; 0x1740 <pingGetDistance>
|
||
cbc: 90 93 38 04 sts 0x0438, r25
|
||
cc0: 80 93 37 04 sts 0x0437, r24
|
||
progTimer = 20;
|
||
cc4: 84 e1 ldi r24, 0x14 ; 20
|
||
cc6: 54 c0 rjmp .+168 ; 0xd70 <updateProgram+0x83a>
|
||
|
||
break;
|
||
|
||
case 7:
|
||
|
||
servoPing = SERVO_POS_RIGHT_45;
|
||
cc8: 87 e6 ldi r24, 0x67 ; 103
|
||
cca: 80 93 03 04 sts 0x0403, r24
|
||
|
||
progTimer = 40;
|
||
cce: 88 e2 ldi r24, 0x28 ; 40
|
||
cd0: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
progPosition++;
|
||
cd4: 88 e0 ldi r24, 0x08 ; 8
|
||
cd6: 5b c0 rjmp .+182 ; 0xd8e <updateProgram+0x858>
|
||
|
||
break;
|
||
|
||
case 8:
|
||
|
||
pingSendPing();
|
||
cd8: 0e 94 8c 0b call 0x1718 ; 0x1718 <pingSendPing>
|
||
progTimer = 4;
|
||
cdc: 84 e0 ldi r24, 0x04 ; 4
|
||
cde: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
if(pingGetReady())
|
||
ce2: 0e 94 a7 0b call 0x174e ; 0x174e <pingGetReady>
|
||
ce6: 88 23 and r24, r24
|
||
ce8: 09 f4 brne .+2 ; 0xcec <updateProgram+0x7b6>
|
||
cea: 53 c0 rjmp .+166 ; 0xd92 <updateProgram+0x85c>
|
||
{
|
||
tempRightDistance = pingGetDistance();
|
||
cec: 0e 94 a0 0b call 0x1740 ; 0x1740 <pingGetDistance>
|
||
cf0: 9c 01 movw r18, r24
|
||
cf2: 90 93 3a 04 sts 0x043A, r25
|
||
cf6: 80 93 39 04 sts 0x0439, r24
|
||
|
||
servoPing = SERVO_POS_CENTER;
|
||
cfa: 8c e8 ldi r24, 0x8C ; 140
|
||
cfc: 80 93 03 04 sts 0x0403, r24
|
||
|
||
if((tempLeftDistance < DISTANCE_TO_STOP )
|
||
d00: 80 91 37 04 lds r24, 0x0437
|
||
d04: 90 91 38 04 lds r25, 0x0438
|
||
d08: 45 e1 ldi r20, 0x15 ; 21
|
||
d0a: 8c 37 cpi r24, 0x7C ; 124
|
||
d0c: 94 07 cpc r25, r20
|
||
d0e: 98 f4 brcc .+38 ; 0xd36 <updateProgram+0x800>
|
||
d10: 45 e1 ldi r20, 0x15 ; 21
|
||
d12: 2c 37 cpi r18, 0x7C ; 124
|
||
d14: 34 07 cpc r19, r20
|
||
d16: 78 f4 brcc .+30 ; 0xd36 <updateProgram+0x800>
|
||
&& (tempRightDistance < DISTANCE_TO_STOP))
|
||
{
|
||
lcdSetPos(0x00);
|
||
d18: 80 e0 ldi r24, 0x00 ; 0
|
||
d1a: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Drive: Turn <<< ");
|
||
d1e: 85 eb ldi r24, 0xB5 ; 181
|
||
d20: 93 e0 ldi r25, 0x03 ; 3
|
||
d22: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_RE_FAST;
|
||
d26: 88 e6 ldi r24, 0x68 ; 104
|
||
d28: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_FAST;
|
||
d2c: 86 e8 ldi r24, 0x86 ; 134
|
||
d2e: 80 93 05 04 sts 0x0405, r24
|
||
progTimer = 70;
|
||
d32: 86 e4 ldi r24, 0x46 ; 70
|
||
d34: 1d c0 rjmp .+58 ; 0xd70 <updateProgram+0x83a>
|
||
}
|
||
else if(tempLeftDistance > tempRightDistance)
|
||
d36: 28 17 cp r18, r24
|
||
d38: 39 07 cpc r19, r25
|
||
d3a: 60 f4 brcc .+24 ; 0xd54 <updateProgram+0x81e>
|
||
{
|
||
lcdSetPos(0x00);
|
||
d3c: 80 e0 ldi r24, 0x00 ; 0
|
||
d3e: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Drive: Turn < ");
|
||
d42: 86 ec ldi r24, 0xC6 ; 198
|
||
d44: 93 e0 ldi r25, 0x03 ; 3
|
||
d46: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_RE_FAST;
|
||
d4a: 88 e6 ldi r24, 0x68 ; 104
|
||
d4c: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_FW_FAST;
|
||
d50: 86 e8 ldi r24, 0x86 ; 134
|
||
d52: 0b c0 rjmp .+22 ; 0xd6a <updateProgram+0x834>
|
||
progTimer = 40;
|
||
}
|
||
else
|
||
{
|
||
lcdSetPos(0x00);
|
||
d54: 80 e0 ldi r24, 0x00 ; 0
|
||
d56: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Drive: Turn > ");
|
||
d5a: 87 ed ldi r24, 0xD7 ; 215
|
||
d5c: 93 e0 ldi r25, 0x03 ; 3
|
||
d5e: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_FW_FAST;
|
||
d62: 86 e8 ldi r24, 0x86 ; 134
|
||
d64: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_RE_FAST;
|
||
d68: 88 e6 ldi r24, 0x68 ; 104
|
||
d6a: 80 93 05 04 sts 0x0405, r24
|
||
progTimer = 40;
|
||
d6e: 88 e2 ldi r24, 0x28 ; 40
|
||
d70: 80 93 2e 04 sts 0x042E, r24
|
||
}
|
||
|
||
progPosition++;
|
||
d74: 80 91 2f 04 lds r24, 0x042F
|
||
d78: 8f 5f subi r24, 0xFF ; 255
|
||
d7a: 09 c0 rjmp .+18 ; 0xd8e <updateProgram+0x858>
|
||
|
||
break;
|
||
|
||
case 9:
|
||
|
||
servoMotorLeft = SERVO_POS_MOTOR_STOP;
|
||
d7c: 87 e7 ldi r24, 0x77 ; 119
|
||
d7e: 80 93 04 04 sts 0x0404, r24
|
||
servoMotorRight = SERVO_POS_MOTOR_STOP;
|
||
d82: 80 93 05 04 sts 0x0405, r24
|
||
|
||
progTimer = 10;
|
||
d86: 8a e0 ldi r24, 0x0A ; 10
|
||
d88: 80 93 2e 04 sts 0x042E, r24
|
||
progPosition = 1;
|
||
d8c: 81 e0 ldi r24, 0x01 ; 1
|
||
d8e: 80 93 2f 04 sts 0x042F, r24
|
||
|
||
break;
|
||
}
|
||
|
||
progCounter = 0;
|
||
d92: 10 92 2d 04 sts 0x042D, r1
|
||
}
|
||
}
|
||
|
||
if (roboActive == 3)
|
||
d96: 80 91 3b 04 lds r24, 0x043B
|
||
d9a: 83 30 cpi r24, 0x03 ; 3
|
||
d9c: 09 f0 breq .+2 ; 0xda0 <updateProgram+0x86a>
|
||
d9e: 46 c0 rjmp .+140 ; 0xe2c <updateProgram+0x8f6>
|
||
{
|
||
// Program(2) for random RFID serach
|
||
if (++progCounter >= progTimer)
|
||
da0: 80 91 2d 04 lds r24, 0x042D
|
||
da4: 8f 5f subi r24, 0xFF ; 255
|
||
da6: 80 93 2d 04 sts 0x042D, r24
|
||
daa: 90 91 2e 04 lds r25, 0x042E
|
||
dae: 89 17 cp r24, r25
|
||
db0: e8 f1 brcs .+122 ; 0xe2c <updateProgram+0x8f6>
|
||
{
|
||
|
||
switch (progPosition)
|
||
db2: 80 91 2f 04 lds r24, 0x042F
|
||
db6: 88 23 and r24, r24
|
||
db8: 19 f0 breq .+6 ; 0xdc0 <updateProgram+0x88a>
|
||
dba: 81 30 cpi r24, 0x01 ; 1
|
||
dbc: a9 f5 brne .+106 ; 0xe28 <updateProgram+0x8f2>
|
||
dbe: 1c c0 rjmp .+56 ; 0xdf8 <updateProgram+0x8c2>
|
||
{
|
||
case 0:
|
||
|
||
lcdClearDisplay();
|
||
dc0: 0e 94 df 07 call 0xfbe ; 0xfbe <lcdClearDisplay>
|
||
lcdSetLayout(1);
|
||
dc4: 81 e0 ldi r24, 0x01 ; 1
|
||
dc6: 0e 94 a8 07 call 0xf50 ; 0xf50 <lcdSetLayout>
|
||
lcdSetPos(0x00);
|
||
dca: 80 e0 ldi r24, 0x00 ; 0
|
||
dcc: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Servo: forward ");
|
||
dd0: 88 ee ldi r24, 0xE8 ; 232
|
||
dd2: 93 e0 ldi r25, 0x03 ; 3
|
||
dd4: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
lcdSetPos(0x10);
|
||
dd8: 80 e1 ldi r24, 0x10 ; 16
|
||
dda: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteString("Distance: ");
|
||
dde: 88 ef ldi r24, 0xF8 ; 248
|
||
de0: 93 e0 ldi r25, 0x03 ; 3
|
||
de2: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
|
||
progTimer = 1;
|
||
de6: 81 e0 ldi r24, 0x01 ; 1
|
||
de8: 80 93 2e 04 sts 0x042E, r24
|
||
progPosition++;
|
||
dec: 80 91 2f 04 lds r24, 0x042F
|
||
df0: 8f 5f subi r24, 0xFF ; 255
|
||
df2: 80 93 2f 04 sts 0x042F, r24
|
||
df6: 18 c0 rjmp .+48 ; 0xe28 <updateProgram+0x8f2>
|
||
|
||
break;
|
||
|
||
case 1:
|
||
|
||
pingSendPing();
|
||
df8: 0e 94 8c 0b call 0x1718 ; 0x1718 <pingSendPing>
|
||
progTimer = 10;
|
||
dfc: 8a e0 ldi r24, 0x0A ; 10
|
||
dfe: 80 93 2e 04 sts 0x042E, r24
|
||
|
||
if(pingGetReady())
|
||
e02: 0e 94 a7 0b call 0x174e ; 0x174e <pingGetReady>
|
||
e06: 88 23 and r24, r24
|
||
e08: 79 f0 breq .+30 ; 0xe28 <updateProgram+0x8f2>
|
||
{
|
||
|
||
tempDistance = pingGetDistance();
|
||
e0a: 0e 94 a0 0b call 0x1740 ; 0x1740 <pingGetDistance>
|
||
e0e: 90 93 32 04 sts 0x0432, r25
|
||
e12: 80 93 31 04 sts 0x0431, r24
|
||
lcdSetPos(0x1A);
|
||
e16: 8a e1 ldi r24, 0x1A ; 26
|
||
e18: 0e 94 d3 07 call 0xfa6 ; 0xfa6 <lcdSetPos>
|
||
lcdWriteHexAsDecimal(tempDistance);
|
||
e1c: 80 91 31 04 lds r24, 0x0431
|
||
e20: 90 91 32 04 lds r25, 0x0432
|
||
e24: 0e 94 80 08 call 0x1100 ; 0x1100 <lcdWriteHexAsDecimal>
|
||
}
|
||
|
||
break;
|
||
}
|
||
|
||
progCounter = 0;
|
||
e28: 10 92 2d 04 sts 0x042D, r1
|
||
e2c: 1f 91 pop r17
|
||
e2e: 08 95 ret
|
||
|
||
00000e30 <main>:
|
||
|
||
}
|
||
/*================================================================================================
|
||
Main
|
||
================================================================================================*/
|
||
int main (void){
|
||
e30: cf 93 push r28
|
||
e32: df 93 push r29
|
||
|
||
cli(); // Disable global interrupt
|
||
e34: f8 94 cli
|
||
|
||
initIO();
|
||
e36: 0e 94 e8 00 call 0x1d0 ; 0x1d0 <initIO>
|
||
lcdInit();
|
||
e3a: 0e 94 40 09 call 0x1280 ; 0x1280 <lcdInit>
|
||
rfIdInit();
|
||
e3e: 0e 94 b0 09 call 0x1360 ; 0x1360 <rfIdInit>
|
||
roboMSPInit();
|
||
e42: 0e 94 30 0a call 0x1460 ; 0x1460 <roboMSPInit>
|
||
pingInit();
|
||
e46: 0e 94 ab 0b call 0x1756 ; 0x1756 <pingInit>
|
||
|
||
lcdSetIntensity(50);
|
||
e4a: 82 e3 ldi r24, 0x32 ; 50
|
||
e4c: 0e 94 99 07 call 0xf32 ; 0xf32 <lcdSetIntensity>
|
||
lcdSetLayout(2);
|
||
e50: 82 e0 ldi r24, 0x02 ; 2
|
||
e52: 0e 94 a8 07 call 0xf50 ; 0xf50 <lcdSetLayout>
|
||
lcdWriteStringP(menuTable[0]);
|
||
e56: 8c e9 ldi r24, 0x9C ; 156
|
||
e58: 90 e0 ldi r25, 0x00 ; 0
|
||
e5a: 0e 94 2d 08 call 0x105a ; 0x105a <lcdWriteStringP>
|
||
|
||
rfIdDisable();
|
||
e5e: 0e 94 bb 09 call 0x1376 ; 0x1376 <rfIdDisable>
|
||
roboMSPDisable();
|
||
e62: 0e 94 42 0a call 0x1484 ; 0x1484 <roboMSPDisable>
|
||
|
||
sei(); // Enable global interrupt
|
||
e66: 78 94 sei
|
||
e68: c0 e6 ldi r28, 0x60 ; 96
|
||
e6a: d1 e0 ldi r29, 0x01 ; 1
|
||
|
||
while(1){
|
||
|
||
if(progDoUpdate)
|
||
e6c: 80 91 30 04 lds r24, 0x0430
|
||
e70: 88 23 and r24, r24
|
||
e72: 21 f0 breq .+8 ; 0xe7c <main+0x4c>
|
||
{
|
||
progDoUpdate = 0;
|
||
e74: 10 92 30 04 sts 0x0430, r1
|
||
updateProgram();
|
||
e78: 0e 94 9b 02 call 0x536 ; 0x536 <updateProgram>
|
||
}
|
||
|
||
// Active-mode 1 (left switch lower position)
|
||
if (!bit_is_set(PINA,PA4))
|
||
e7c: cc 99 sbic 0x19, 4 ; 25
|
||
e7e: 08 c0 rjmp .+16 ; 0xe90 <main+0x60>
|
||
{
|
||
if(switchOneCheck)
|
||
e80: 80 91 3d 04 lds r24, 0x043D
|
||
e84: 88 23 and r24, r24
|
||
e86: 59 f1 breq .+86 ; 0xede <main+0xae>
|
||
{
|
||
activateRobot(3);
|
||
e88: 83 e0 ldi r24, 0x03 ; 3
|
||
e8a: 0e 94 5b 01 call 0x2b6 ; 0x2b6 <activateRobot>
|
||
e8e: 25 c0 rjmp .+74 ; 0xeda <main+0xaa>
|
||
switchOneCheck = 0;
|
||
}
|
||
}
|
||
// Active-mode 2 (left switch middle position)
|
||
else if ((bit_is_set(PINA,PA5)) && (bit_is_set(PINA,PA4)))
|
||
e90: cd 9b sbis 0x19, 5 ; 25
|
||
e92: 10 c0 rjmp .+32 ; 0xeb4 <main+0x84>
|
||
e94: cc 9b sbis 0x19, 4 ; 25
|
||
e96: 0e c0 rjmp .+28 ; 0xeb4 <main+0x84>
|
||
{
|
||
if(!switchOneCheck)
|
||
e98: 80 91 3d 04 lds r24, 0x043D
|
||
e9c: 88 23 and r24, r24
|
||
e9e: f9 f4 brne .+62 ; 0xede <main+0xae>
|
||
{
|
||
deactivateRobot();
|
||
ea0: 0e 94 6f 01 call 0x2de ; 0x2de <deactivateRobot>
|
||
rfEnable = 0;
|
||
ea4: 10 92 3c 04 sts 0x043C, r1
|
||
switchOneCheck = 1;
|
||
ea8: 81 e0 ldi r24, 0x01 ; 1
|
||
eaa: 80 93 3d 04 sts 0x043D, r24
|
||
main();
|
||
eae: 0e 94 18 07 call 0xe30 ; 0xe30 <main>
|
||
eb2: 15 c0 rjmp .+42 ; 0xede <main+0xae>
|
||
}
|
||
}
|
||
// Active-mode 3 (left switch upper position)
|
||
else if (!bit_is_set(PINA,PA5))
|
||
eb4: cd 99 sbic 0x19, 5 ; 25
|
||
eb6: 13 c0 rjmp .+38 ; 0xede <main+0xae>
|
||
{
|
||
if(switchOneCheck)
|
||
eb8: 80 91 3d 04 lds r24, 0x043D
|
||
ebc: 88 23 and r24, r24
|
||
ebe: 79 f0 breq .+30 ; 0xede <main+0xae>
|
||
{
|
||
lcdSetLayout(0);
|
||
ec0: 80 e0 ldi r24, 0x00 ; 0
|
||
ec2: 0e 94 a8 07 call 0xf50 ; 0xf50 <lcdSetLayout>
|
||
lcdWriteStringP(menuTable[4]);
|
||
ec6: ce 01 movw r24, r28
|
||
ec8: 0e 94 2d 08 call 0x105a ; 0x105a <lcdWriteStringP>
|
||
rfEnable = 1;
|
||
ecc: 81 e0 ldi r24, 0x01 ; 1
|
||
ece: 80 93 3c 04 sts 0x043C, r24
|
||
rfIdEnable();
|
||
ed2: 0e 94 bf 09 call 0x137e ; 0x137e <rfIdEnable>
|
||
roboMSPEnable();
|
||
ed6: 0e 94 45 0a call 0x148a ; 0x148a <roboMSPEnable>
|
||
switchOneCheck = 0;
|
||
eda: 10 92 3d 04 sts 0x043D, r1
|
||
}
|
||
}
|
||
|
||
// Active-mode 1 (left switch lower position)
|
||
if (!bit_is_set(PINA,PA6))
|
||
ede: ce 99 sbic 0x19, 6 ; 25
|
||
ee0: 06 c0 rjmp .+12 ; 0xeee <main+0xbe>
|
||
{
|
||
if(switchTwoCheck)
|
||
ee2: 80 91 3e 04 lds r24, 0x043E
|
||
ee6: 88 23 and r24, r24
|
||
ee8: 09 f2 breq .-126 ; 0xe6c <main+0x3c>
|
||
{
|
||
activateRobot(1);
|
||
eea: 81 e0 ldi r24, 0x01 ; 1
|
||
eec: 1b c0 rjmp .+54 ; 0xf24 <main+0xf4>
|
||
switchTwoCheck = 0;
|
||
}
|
||
}
|
||
// Active-mode 2 (left switch middle position)
|
||
else if ((bit_is_set(PINA,PA7)) && (bit_is_set(PINA,PA6)))
|
||
eee: cf 9b sbis 0x19, 7 ; 25
|
||
ef0: 11 c0 rjmp .+34 ; 0xf14 <main+0xe4>
|
||
ef2: ce 9b sbis 0x19, 6 ; 25
|
||
ef4: 0f c0 rjmp .+30 ; 0xf14 <main+0xe4>
|
||
{
|
||
if(!switchTwoCheck)
|
||
ef6: 80 91 3e 04 lds r24, 0x043E
|
||
efa: 88 23 and r24, r24
|
||
efc: 09 f0 breq .+2 ; 0xf00 <main+0xd0>
|
||
efe: b6 cf rjmp .-148 ; 0xe6c <main+0x3c>
|
||
{
|
||
deactivateRobot();
|
||
f00: 0e 94 6f 01 call 0x2de ; 0x2de <deactivateRobot>
|
||
rfEnable = 0;
|
||
f04: 10 92 3c 04 sts 0x043C, r1
|
||
switchTwoCheck = 1;
|
||
f08: 81 e0 ldi r24, 0x01 ; 1
|
||
f0a: 80 93 3e 04 sts 0x043E, r24
|
||
main();
|
||
f0e: 0e 94 18 07 call 0xe30 ; 0xe30 <main>
|
||
f12: ac cf rjmp .-168 ; 0xe6c <main+0x3c>
|
||
}
|
||
}
|
||
// Active-mode 3 (left switch upper position)
|
||
else if (!bit_is_set(PINA,PA7))
|
||
f14: cf 99 sbic 0x19, 7 ; 25
|
||
f16: aa cf rjmp .-172 ; 0xe6c <main+0x3c>
|
||
{
|
||
if(switchTwoCheck)
|
||
f18: 80 91 3e 04 lds r24, 0x043E
|
||
f1c: 88 23 and r24, r24
|
||
f1e: 09 f4 brne .+2 ; 0xf22 <main+0xf2>
|
||
f20: a5 cf rjmp .-182 ; 0xe6c <main+0x3c>
|
||
{
|
||
activateRobot(2);
|
||
f22: 82 e0 ldi r24, 0x02 ; 2
|
||
f24: 0e 94 5b 01 call 0x2b6 ; 0x2b6 <activateRobot>
|
||
switchTwoCheck = 0;
|
||
f28: 10 92 3e 04 sts 0x043E, r1
|
||
f2c: 9f cf rjmp .-194 ; 0xe6c <main+0x3c>
|
||
|
||
00000f2e <lcdEngToSwe>:
|
||
data=0x83;
|
||
break;
|
||
}
|
||
|
||
return(data);
|
||
}
|
||
f2e: 99 27 eor r25, r25
|
||
f30: 08 95 ret
|
||
|
||
00000f32 <lcdSetIntensity>:
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdSetIntensity (uint8_t intensity)
|
||
{
|
||
|
||
OCR0 = intensity;
|
||
f32: 81 bf out 0x31, r24 ; 49
|
||
f34: 08 95 ret
|
||
|
||
00000f36 <lcdWriteIns>:
|
||
|
||
Input: cData
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdWriteIns (uint8_t data)
|
||
{
|
||
f36: 1f 93 push r17
|
||
f38: 18 2f mov r17, r24
|
||
|
||
spiSetLowSpeed();
|
||
f3a: 0e 94 f9 0a call 0x15f2 ; 0x15f2 <spiSetLowSpeed>
|
||
spiSelectDeviceIO(LCD_CS);
|
||
f3e: 80 e0 ldi r24, 0x00 ; 0
|
||
f40: 0e 94 fc 0a call 0x15f8 ; 0x15f8 <spiSelectDeviceIO>
|
||
LCD_PORT &= ~(1<<LCD_RS);
|
||
f44: c1 98 cbi 0x18, 1 ; 24
|
||
spiWrite(data);
|
||
f46: 81 2f mov r24, r17
|
||
f48: 0e 94 ef 0a call 0x15de ; 0x15de <spiWrite>
|
||
f4c: 1f 91 pop r17
|
||
f4e: 08 95 ret
|
||
|
||
00000f50 <lcdSetLayout>:
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdSetLayout (uint8_t layoutType)
|
||
{
|
||
|
||
switch(layoutType)
|
||
f50: 81 30 cpi r24, 0x01 ; 1
|
||
f52: 51 f0 breq .+20 ; 0xf68 <lcdSetLayout+0x18>
|
||
f54: 81 30 cpi r24, 0x01 ; 1
|
||
f56: 18 f0 brcs .+6 ; 0xf5e <lcdSetLayout+0xe>
|
||
f58: 82 30 cpi r24, 0x02 ; 2
|
||
f5a: f9 f4 brne .+62 ; 0xf9a <lcdSetLayout+0x4a>
|
||
f5c: 12 c0 rjmp .+36 ; 0xf82 <lcdSetLayout+0x32>
|
||
{
|
||
case 0: // 3 lines
|
||
lcdWriteIns(0x39);
|
||
f5e: 89 e3 ldi r24, 0x39 ; 57
|
||
f60: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
lcdWriteIns(0x1D); // bias = 1/4 , 3 line mode
|
||
f64: 8d e1 ldi r24, 0x1D ; 29
|
||
f66: 0a c0 rjmp .+20 ; 0xf7c <lcdSetLayout+0x2c>
|
||
break;
|
||
|
||
case 1: // 2 lines, Double font on lower position
|
||
lcdWriteIns(0x39);
|
||
f68: 89 e3 ldi r24, 0x39 ; 57
|
||
f6a: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
lcdWriteIns(0x1C); // bias = 1/4 , 2 line mode
|
||
f6e: 8c e1 ldi r24, 0x1C ; 28
|
||
f70: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
lcdWriteIns(0x3E);
|
||
f74: 8e e3 ldi r24, 0x3E ; 62
|
||
f76: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
lcdWriteIns(0x10);
|
||
f7a: 80 e1 ldi r24, 0x10 ; 16
|
||
f7c: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
f80: 08 95 ret
|
||
break;
|
||
|
||
case 2: // 2 lines, Double font on upper position
|
||
lcdWriteIns(0x39);
|
||
f82: 89 e3 ldi r24, 0x39 ; 57
|
||
f84: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
lcdWriteIns(0x1C); // bias = 1/4 , 2 line mode
|
||
f88: 8c e1 ldi r24, 0x1C ; 28
|
||
f8a: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
lcdWriteIns(0x3E);
|
||
f8e: 8e e3 ldi r24, 0x3E ; 62
|
||
f90: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
lcdWriteIns(0x18);
|
||
f94: 88 e1 ldi r24, 0x18 ; 24
|
||
f96: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
f9a: 08 95 ret
|
||
|
||
00000f9c <lcdSetContrast>:
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdSetContrast (uint8_t contrastValue)
|
||
{
|
||
|
||
lcdWriteIns(0x70|(0x0F & contrastValue));
|
||
f9c: 8f 70 andi r24, 0x0F ; 15
|
||
f9e: 80 67 ori r24, 0x70 ; 112
|
||
fa0: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
fa4: 08 95 ret
|
||
|
||
00000fa6 <lcdSetPos>:
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdSetPos (uint8_t address)
|
||
{
|
||
|
||
lcdWriteIns(0x80|address);
|
||
fa6: 80 68 ori r24, 0x80 ; 128
|
||
fa8: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
fac: 08 95 ret
|
||
|
||
00000fae <lcdReturnHome>:
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdReturnHome (void)
|
||
{
|
||
|
||
lcdWriteIns(0x02);
|
||
fae: 82 e0 ldi r24, 0x02 ; 2
|
||
fb0: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
fb4: 80 e4 ldi r24, 0x40 ; 64
|
||
fb6: 9f e1 ldi r25, 0x1F ; 31
|
||
fb8: 01 97 sbiw r24, 0x01 ; 1
|
||
fba: f1 f7 brne .-4 ; 0xfb8 <lcdReturnHome+0xa>
|
||
fbc: 08 95 ret
|
||
|
||
00000fbe <lcdClearDisplay>:
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdClearDisplay (void)
|
||
{
|
||
|
||
lcdWriteIns(0x01);
|
||
fbe: 81 e0 ldi r24, 0x01 ; 1
|
||
fc0: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
fc4: 80 e4 ldi r24, 0x40 ; 64
|
||
fc6: 9f e1 ldi r25, 0x1F ; 31
|
||
fc8: 01 97 sbiw r24, 0x01 ; 1
|
||
fca: f1 f7 brne .-4 ; 0xfc8 <lcdClearDisplay+0xa>
|
||
fcc: 08 95 ret
|
||
|
||
00000fce <lcdSetBlink>:
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdSetBlink (uint8_t value)
|
||
{
|
||
|
||
switch (value)
|
||
fce: 88 23 and r24, r24
|
||
fd0: 31 f0 breq .+12 ; 0xfde <lcdSetBlink+0x10>
|
||
fd2: 81 30 cpi r24, 0x01 ; 1
|
||
fd4: 49 f4 brne .+18 ; 0xfe8 <lcdSetBlink+0x1a>
|
||
{
|
||
case ON:
|
||
lcdTempReg |= 0x01;
|
||
fd6: 80 91 43 04 lds r24, 0x0443
|
||
fda: 81 60 ori r24, 0x01 ; 1
|
||
fdc: 03 c0 rjmp .+6 ; 0xfe4 <lcdSetBlink+0x16>
|
||
break;
|
||
case OFF:
|
||
lcdTempReg &= ~(0x01);
|
||
fde: 80 91 43 04 lds r24, 0x0443
|
||
fe2: 8e 7f andi r24, 0xFE ; 254
|
||
fe4: 80 93 43 04 sts 0x0443, r24
|
||
break;
|
||
}
|
||
|
||
lcdWriteIns(0x08|lcdTempReg);
|
||
fe8: 80 91 43 04 lds r24, 0x0443
|
||
fec: 88 60 ori r24, 0x08 ; 8
|
||
fee: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
ff2: 08 95 ret
|
||
|
||
00000ff4 <lcdSetCursor>:
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdSetCursor (uint8_t value)
|
||
{
|
||
|
||
switch (value)
|
||
ff4: 88 23 and r24, r24
|
||
ff6: 31 f0 breq .+12 ; 0x1004 <lcdSetCursor+0x10>
|
||
ff8: 81 30 cpi r24, 0x01 ; 1
|
||
ffa: 49 f4 brne .+18 ; 0x100e <lcdSetCursor+0x1a>
|
||
{
|
||
case ON:
|
||
lcdTempReg |= 0x02;
|
||
ffc: 80 91 43 04 lds r24, 0x0443
|
||
1000: 82 60 ori r24, 0x02 ; 2
|
||
1002: 03 c0 rjmp .+6 ; 0x100a <lcdSetCursor+0x16>
|
||
break;
|
||
case OFF:
|
||
lcdTempReg &= ~(0x02);
|
||
1004: 80 91 43 04 lds r24, 0x0443
|
||
1008: 8d 7f andi r24, 0xFD ; 253
|
||
100a: 80 93 43 04 sts 0x0443, r24
|
||
break;
|
||
}
|
||
|
||
lcdWriteIns(0x08|lcdTempReg);
|
||
100e: 80 91 43 04 lds r24, 0x0443
|
||
1012: 88 60 ori r24, 0x08 ; 8
|
||
1014: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
1018: 08 95 ret
|
||
|
||
0000101a <lcdSetDisplay>:
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdSetDisplay (uint8_t value)
|
||
{
|
||
|
||
switch (value)
|
||
101a: 88 23 and r24, r24
|
||
101c: 31 f0 breq .+12 ; 0x102a <lcdSetDisplay+0x10>
|
||
101e: 81 30 cpi r24, 0x01 ; 1
|
||
1020: 49 f4 brne .+18 ; 0x1034 <lcdSetDisplay+0x1a>
|
||
{
|
||
case ON:
|
||
lcdTempReg |= 0x04;
|
||
1022: 80 91 43 04 lds r24, 0x0443
|
||
1026: 84 60 ori r24, 0x04 ; 4
|
||
1028: 03 c0 rjmp .+6 ; 0x1030 <lcdSetDisplay+0x16>
|
||
break;
|
||
case OFF:
|
||
lcdTempReg &= ~(0x04);
|
||
102a: 80 91 43 04 lds r24, 0x0443
|
||
102e: 8b 7f andi r24, 0xFB ; 251
|
||
1030: 80 93 43 04 sts 0x0443, r24
|
||
break;
|
||
}
|
||
|
||
lcdWriteIns(0x08|lcdTempReg);
|
||
1034: 80 91 43 04 lds r24, 0x0443
|
||
1038: 88 60 ori r24, 0x08 ; 8
|
||
103a: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
103e: 08 95 ret
|
||
|
||
00001040 <lcdWriteChar>:
|
||
|
||
Input: cData
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdWriteChar (uint8_t data)
|
||
{
|
||
1040: 1f 93 push r17
|
||
1042: 18 2f mov r17, r24
|
||
|
||
spiSetLowSpeed();
|
||
1044: 0e 94 f9 0a call 0x15f2 ; 0x15f2 <spiSetLowSpeed>
|
||
spiSelectDeviceIO(LCD_CS);
|
||
1048: 80 e0 ldi r24, 0x00 ; 0
|
||
104a: 0e 94 fc 0a call 0x15f8 ; 0x15f8 <spiSelectDeviceIO>
|
||
LCD_PORT |= (1<<LCD_RS);
|
||
104e: c1 9a sbi 0x18, 1 ; 24
|
||
spiWrite(lcdEngToSwe(data));
|
||
1050: 81 2f mov r24, r17
|
||
1052: 0e 94 ef 0a call 0x15de ; 0x15de <spiWrite>
|
||
1056: 1f 91 pop r17
|
||
1058: 08 95 ret
|
||
|
||
0000105a <lcdWriteStringP>:
|
||
|
||
Input: *stringPointer (int[])
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdWriteStringP (const uint8_t *progmemStringPointer)
|
||
{
|
||
105a: cf 93 push r28
|
||
105c: df 93 push r29
|
||
105e: ec 01 movw r28, r24
|
||
1060: 02 c0 rjmp .+4 ; 0x1066 <lcdWriteStringP+0xc>
|
||
|
||
register uint8_t c;
|
||
|
||
while((c = pgm_read_byte(progmemStringPointer++)))
|
||
{
|
||
lcdWriteChar(c);
|
||
1062: 0e 94 20 08 call 0x1040 ; 0x1040 <lcdWriteChar>
|
||
1066: fe 01 movw r30, r28
|
||
void lcdWriteStringP (const uint8_t *progmemStringPointer)
|
||
{
|
||
|
||
register uint8_t c;
|
||
|
||
while((c = pgm_read_byte(progmemStringPointer++)))
|
||
1068: 21 96 adiw r28, 0x01 ; 1
|
||
106a: 84 91 lpm r24, Z
|
||
106c: 88 23 and r24, r24
|
||
106e: c9 f7 brne .-14 ; 0x1062 <lcdWriteStringP+0x8>
|
||
1070: df 91 pop r29
|
||
1072: cf 91 pop r28
|
||
1074: 08 95 ret
|
||
|
||
00001076 <lcdWriteString>:
|
||
|
||
Input: *stringPointer (int[])
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdWriteString (const uint8_t *stringPointer)
|
||
{
|
||
1076: cf 93 push r28
|
||
1078: df 93 push r29
|
||
107a: ec 01 movw r28, r24
|
||
107c: 02 c0 rjmp .+4 ; 0x1082 <lcdWriteString+0xc>
|
||
|
||
register uint8_t c;
|
||
|
||
while((c = *stringPointer++))
|
||
{
|
||
lcdWriteChar(c);
|
||
107e: 0e 94 20 08 call 0x1040 ; 0x1040 <lcdWriteChar>
|
||
void lcdWriteString (const uint8_t *stringPointer)
|
||
{
|
||
|
||
register uint8_t c;
|
||
|
||
while((c = *stringPointer++))
|
||
1082: 89 91 ld r24, Y+
|
||
1084: 88 23 and r24, r24
|
||
1086: d9 f7 brne .-10 ; 0x107e <lcdWriteString+0x8>
|
||
1088: df 91 pop r29
|
||
108a: cf 91 pop r28
|
||
108c: 08 95 ret
|
||
|
||
0000108e <lcdWriteHex>:
|
||
Description: Writes hex to LCD
|
||
Input: hexValue
|
||
Output: -
|
||
----------------------------------------------------------------------------------------------------------*/
|
||
void lcdWriteHex(uint16_t hexValue)
|
||
{
|
||
108e: cf 93 push r28
|
||
1090: df 93 push r29
|
||
1092: cd b7 in r28, 0x3d ; 61
|
||
1094: de b7 in r29, 0x3e ; 62
|
||
1096: 27 97 sbiw r28, 0x07 ; 7
|
||
1098: 0f b6 in r0, 0x3f ; 63
|
||
109a: f8 94 cli
|
||
109c: de bf out 0x3e, r29 ; 62
|
||
109e: 0f be out 0x3f, r0 ; 63
|
||
10a0: cd bf out 0x3d, r28 ; 61
|
||
10a2: bc 01 movw r22, r24
|
||
uint8_t tempString[7];
|
||
|
||
uint8_t n=0;
|
||
uint8_t i;
|
||
|
||
tempString[n] = '0';
|
||
10a4: 80 e3 ldi r24, 0x30 ; 48
|
||
10a6: 89 83 std Y+1, r24 ; 0x01
|
||
n++;
|
||
tempString[n] = 'x';
|
||
10a8: 88 e7 ldi r24, 0x78 ; 120
|
||
10aa: 8a 83 std Y+2, r24 ; 0x02
|
||
10ac: fe 01 movw r30, r28
|
||
10ae: 33 96 adiw r30, 0x03 ; 3
|
||
10b0: 4c e0 ldi r20, 0x0C ; 12
|
||
10b2: 50 e0 ldi r21, 0x00 ; 0
|
||
10b4: 33 e0 ldi r19, 0x03 ; 3
|
||
n++;
|
||
|
||
for(i=0;i<4;i++)
|
||
{
|
||
|
||
if(((hexValue>>(12-(i*4)))&0x000F)>0x0009)
|
||
10b6: cb 01 movw r24, r22
|
||
10b8: 04 2e mov r0, r20
|
||
10ba: 02 c0 rjmp .+4 ; 0x10c0 <lcdWriteHex+0x32>
|
||
10bc: 96 95 lsr r25
|
||
10be: 87 95 ror r24
|
||
10c0: 0a 94 dec r0
|
||
10c2: e2 f7 brpl .-8 ; 0x10bc <lcdWriteHex+0x2e>
|
||
10c4: 28 2f mov r18, r24
|
||
10c6: 2f 70 andi r18, 0x0F ; 15
|
||
10c8: 8f 70 andi r24, 0x0F ; 15
|
||
10ca: 90 70 andi r25, 0x00 ; 0
|
||
10cc: 0a 97 sbiw r24, 0x0a ; 10
|
||
10ce: 10 f0 brcs .+4 ; 0x10d4 <lcdWriteHex+0x46>
|
||
{
|
||
tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)+0x37);
|
||
10d0: 29 5c subi r18, 0xC9 ; 201
|
||
10d2: 01 c0 rjmp .+2 ; 0x10d6 <lcdWriteHex+0x48>
|
||
n++;
|
||
}
|
||
else
|
||
{
|
||
tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)|0x30);
|
||
10d4: 20 63 ori r18, 0x30 ; 48
|
||
10d6: 20 83 st Z, r18
|
||
10d8: 44 50 subi r20, 0x04 ; 4
|
||
10da: 50 40 sbci r21, 0x00 ; 0
|
||
10dc: 3f 5f subi r19, 0xFF ; 255
|
||
10de: 31 96 adiw r30, 0x01 ; 1
|
||
tempString[n] = '0';
|
||
n++;
|
||
tempString[n] = 'x';
|
||
n++;
|
||
|
||
for(i=0;i<4;i++)
|
||
10e0: 37 30 cpi r19, 0x07 ; 7
|
||
10e2: 49 f7 brne .-46 ; 0x10b6 <lcdWriteHex+0x28>
|
||
tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)|0x30);
|
||
n++;
|
||
}
|
||
}
|
||
|
||
tempString[n] = '\0';
|
||
10e4: 1f 82 std Y+7, r1 ; 0x07
|
||
|
||
lcdWriteString(tempString);
|
||
10e6: ce 01 movw r24, r28
|
||
10e8: 01 96 adiw r24, 0x01 ; 1
|
||
10ea: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
10ee: 27 96 adiw r28, 0x07 ; 7
|
||
10f0: 0f b6 in r0, 0x3f ; 63
|
||
10f2: f8 94 cli
|
||
10f4: de bf out 0x3e, r29 ; 62
|
||
10f6: 0f be out 0x3f, r0 ; 63
|
||
10f8: cd bf out 0x3d, r28 ; 61
|
||
10fa: df 91 pop r29
|
||
10fc: cf 91 pop r28
|
||
10fe: 08 95 ret
|
||
|
||
00001100 <lcdWriteHexAsDecimal>:
|
||
Description: Writes hex value as decimal to LCD
|
||
Input: sensorValue
|
||
Output: -
|
||
----------------------------------------------------------------------------------------------------------*/
|
||
void lcdWriteHexAsDecimal(uint16_t hexValue)
|
||
{
|
||
1100: 8f 92 push r8
|
||
1102: 9f 92 push r9
|
||
1104: af 92 push r10
|
||
1106: bf 92 push r11
|
||
1108: cf 92 push r12
|
||
110a: df 92 push r13
|
||
110c: ef 92 push r14
|
||
110e: ff 92 push r15
|
||
1110: 0f 93 push r16
|
||
1112: 1f 93 push r17
|
||
1114: cf 93 push r28
|
||
1116: df 93 push r29
|
||
1118: cd b7 in r28, 0x3d ; 61
|
||
111a: de b7 in r29, 0x3e ; 62
|
||
111c: 25 97 sbiw r28, 0x05 ; 5
|
||
111e: 0f b6 in r0, 0x3f ; 63
|
||
1120: f8 94 cli
|
||
1122: de bf out 0x3e, r29 ; 62
|
||
1124: 0f be out 0x3f, r0 ; 63
|
||
1126: cd bf out 0x3d, r28 ; 61
|
||
1128: 8c 01 movw r16, r24
|
||
uint8_t tempString[5]={" "};
|
||
112a: de 01 movw r26, r28
|
||
112c: 11 96 adiw r26, 0x01 ; 1
|
||
112e: e8 e0 ldi r30, 0x08 ; 8
|
||
1130: f4 e0 ldi r31, 0x04 ; 4
|
||
1132: 85 e0 ldi r24, 0x05 ; 5
|
||
1134: 01 90 ld r0, Z+
|
||
1136: 0d 92 st X+, r0
|
||
1138: 81 50 subi r24, 0x01 ; 1
|
||
113a: e1 f7 brne .-8 ; 0x1134 <lcdWriteHexAsDecimal+0x34>
|
||
uint8_t secondDigit = 0;
|
||
uint8_t thirdDigit = 0;
|
||
uint8_t fourthDigit = 0;
|
||
uint8_t fifthDigit = 0;
|
||
|
||
firstDigit = (hexValue/10000);
|
||
113c: c8 01 movw r24, r16
|
||
113e: 60 e1 ldi r22, 0x10 ; 16
|
||
1140: 77 e2 ldi r23, 0x27 ; 39
|
||
1142: 0e 94 d3 0b call 0x17a6 ; 0x17a6 <__udivmodhi4>
|
||
1146: fb 01 movw r30, r22
|
||
1148: e6 2e mov r14, r22
|
||
secondDigit = ((hexValue-(firstDigit*10000))/1000);
|
||
114a: 26 2f mov r18, r22
|
||
114c: 33 27 eor r19, r19
|
||
114e: 80 e1 ldi r24, 0x10 ; 16
|
||
1150: 97 e2 ldi r25, 0x27 ; 39
|
||
1152: 28 9f mul r18, r24
|
||
1154: 60 01 movw r12, r0
|
||
1156: 29 9f mul r18, r25
|
||
1158: d0 0c add r13, r0
|
||
115a: 38 9f mul r19, r24
|
||
115c: d0 0c add r13, r0
|
||
115e: 11 24 eor r1, r1
|
||
1160: c8 01 movw r24, r16
|
||
1162: 8c 19 sub r24, r12
|
||
1164: 9d 09 sbc r25, r13
|
||
1166: 68 ee ldi r22, 0xE8 ; 232
|
||
1168: 73 e0 ldi r23, 0x03 ; 3
|
||
116a: 0e 94 d3 0b call 0x17a6 ; 0x17a6 <__udivmodhi4>
|
||
116e: f6 2e mov r15, r22
|
||
thirdDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)))/100);
|
||
1170: 26 2f mov r18, r22
|
||
1172: 33 27 eor r19, r19
|
||
1174: 88 ee ldi r24, 0xE8 ; 232
|
||
1176: 93 e0 ldi r25, 0x03 ; 3
|
||
1178: 28 9f mul r18, r24
|
||
117a: 40 01 movw r8, r0
|
||
117c: 29 9f mul r18, r25
|
||
117e: 90 0c add r9, r0
|
||
1180: 38 9f mul r19, r24
|
||
1182: 90 0c add r9, r0
|
||
1184: 11 24 eor r1, r1
|
||
1186: 94 01 movw r18, r8
|
||
1188: 2c 0d add r18, r12
|
||
118a: 3d 1d adc r19, r13
|
||
118c: c8 01 movw r24, r16
|
||
118e: 82 1b sub r24, r18
|
||
1190: 93 0b sbc r25, r19
|
||
1192: 64 e6 ldi r22, 0x64 ; 100
|
||
1194: 70 e0 ldi r23, 0x00 ; 0
|
||
1196: 0e 94 d3 0b call 0x17a6 ; 0x17a6 <__udivmodhi4>
|
||
119a: 46 2f mov r20, r22
|
||
fourthDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)+(thirdDigit*100)))/10);
|
||
119c: 84 e6 ldi r24, 0x64 ; 100
|
||
119e: 68 9f mul r22, r24
|
||
11a0: 50 01 movw r10, r0
|
||
11a2: 11 24 eor r1, r1
|
||
11a4: 2a 0d add r18, r10
|
||
11a6: 3b 1d adc r19, r11
|
||
11a8: c8 01 movw r24, r16
|
||
11aa: 82 1b sub r24, r18
|
||
11ac: 93 0b sbc r25, r19
|
||
11ae: 6a e0 ldi r22, 0x0A ; 10
|
||
11b0: 70 e0 ldi r23, 0x00 ; 0
|
||
11b2: 0e 94 d3 0b call 0x17a6 ; 0x17a6 <__udivmodhi4>
|
||
fifthDigit = (hexValue-(firstDigit*10000+(secondDigit*1000)+(thirdDigit*100)+(fourthDigit*10)));
|
||
|
||
uint8_t n = 0;
|
||
|
||
if(firstDigit)
|
||
11b6: ee 23 and r30, r30
|
||
11b8: 11 f4 brne .+4 ; 0x11be <lcdWriteHexAsDecimal+0xbe>
|
||
11ba: 30 e0 ldi r19, 0x00 ; 0
|
||
11bc: 04 c0 rjmp .+8 ; 0x11c6 <lcdWriteHexAsDecimal+0xc6>
|
||
{
|
||
tempString[n] = (0x30|firstDigit);
|
||
11be: 8e 2f mov r24, r30
|
||
11c0: 80 63 ori r24, 0x30 ; 48
|
||
11c2: 89 83 std Y+1, r24 ; 0x01
|
||
11c4: 31 e0 ldi r19, 0x01 ; 1
|
||
n++;
|
||
}
|
||
if(secondDigit||firstDigit)
|
||
11c6: ff 20 and r15, r15
|
||
11c8: 11 f4 brne .+4 ; 0x11ce <lcdWriteHexAsDecimal+0xce>
|
||
11ca: ee 20 and r14, r14
|
||
11cc: 39 f0 breq .+14 ; 0x11dc <lcdWriteHexAsDecimal+0xdc>
|
||
{
|
||
tempString[n] = (0x30|secondDigit);
|
||
11ce: fe 01 movw r30, r28
|
||
11d0: e3 0f add r30, r19
|
||
11d2: f1 1d adc r31, r1
|
||
11d4: 8f 2d mov r24, r15
|
||
11d6: 80 63 ori r24, 0x30 ; 48
|
||
11d8: 81 83 std Z+1, r24 ; 0x01
|
||
n++;
|
||
11da: 3f 5f subi r19, 0xFF ; 255
|
||
}
|
||
if(thirdDigit||secondDigit||firstDigit)
|
||
11dc: 44 23 and r20, r20
|
||
11de: 21 f4 brne .+8 ; 0x11e8 <lcdWriteHexAsDecimal+0xe8>
|
||
11e0: ff 20 and r15, r15
|
||
11e2: 11 f4 brne .+4 ; 0x11e8 <lcdWriteHexAsDecimal+0xe8>
|
||
11e4: ee 20 and r14, r14
|
||
11e6: 39 f0 breq .+14 ; 0x11f6 <lcdWriteHexAsDecimal+0xf6>
|
||
{
|
||
tempString[n] = (0x30|thirdDigit);
|
||
11e8: fe 01 movw r30, r28
|
||
11ea: e3 0f add r30, r19
|
||
11ec: f1 1d adc r31, r1
|
||
11ee: 84 2f mov r24, r20
|
||
11f0: 80 63 ori r24, 0x30 ; 48
|
||
11f2: 81 83 std Z+1, r24 ; 0x01
|
||
n++;
|
||
11f4: 3f 5f subi r19, 0xFF ; 255
|
||
}
|
||
if(fourthDigit||thirdDigit||secondDigit||firstDigit)
|
||
11f6: 66 23 and r22, r22
|
||
11f8: 31 f4 brne .+12 ; 0x1206 <lcdWriteHexAsDecimal+0x106>
|
||
11fa: 44 23 and r20, r20
|
||
11fc: 21 f4 brne .+8 ; 0x1206 <lcdWriteHexAsDecimal+0x106>
|
||
11fe: ff 20 and r15, r15
|
||
1200: 11 f4 brne .+4 ; 0x1206 <lcdWriteHexAsDecimal+0x106>
|
||
1202: ee 20 and r14, r14
|
||
1204: 39 f0 breq .+14 ; 0x1214 <lcdWriteHexAsDecimal+0x114>
|
||
{
|
||
tempString[n] = (0x30|fourthDigit);
|
||
1206: fe 01 movw r30, r28
|
||
1208: e3 0f add r30, r19
|
||
120a: f1 1d adc r31, r1
|
||
120c: 86 2f mov r24, r22
|
||
120e: 80 63 ori r24, 0x30 ; 48
|
||
1210: 81 83 std Z+1, r24 ; 0x01
|
||
n++;
|
||
1212: 3f 5f subi r19, 0xFF ; 255
|
||
}
|
||
tempString[n] = (0x30|fifthDigit);
|
||
1214: ae 01 movw r20, r28
|
||
1216: 4f 5f subi r20, 0xFF ; 255
|
||
1218: 5f 4f sbci r21, 0xFF ; 255
|
||
121a: fa 01 movw r30, r20
|
||
121c: e3 0f add r30, r19
|
||
121e: f1 1d adc r31, r1
|
||
1220: 20 2f mov r18, r16
|
||
1222: 2c 19 sub r18, r12
|
||
1224: 28 19 sub r18, r8
|
||
1226: 2a 19 sub r18, r10
|
||
1228: 8a e0 ldi r24, 0x0A ; 10
|
||
122a: 68 9f mul r22, r24
|
||
122c: c0 01 movw r24, r0
|
||
122e: 11 24 eor r1, r1
|
||
1230: 28 1b sub r18, r24
|
||
1232: 20 63 ori r18, 0x30 ; 48
|
||
1234: 20 83 st Z, r18
|
||
n++;
|
||
1236: 23 2f mov r18, r19
|
||
1238: 04 c0 rjmp .+8 ; 0x1242 <lcdWriteHexAsDecimal+0x142>
|
||
|
||
while(n<5)
|
||
{
|
||
tempString[n] = ' ';
|
||
123a: ae 0f add r26, r30
|
||
123c: bf 1f adc r27, r31
|
||
123e: 80 e2 ldi r24, 0x20 ; 32
|
||
1240: 8c 93 st X, r24
|
||
n++;
|
||
1242: 2f 5f subi r18, 0xFF ; 255
|
||
1244: da 01 movw r26, r20
|
||
1246: e2 2f mov r30, r18
|
||
1248: ff 27 eor r31, r31
|
||
n++;
|
||
}
|
||
tempString[n] = (0x30|fifthDigit);
|
||
n++;
|
||
|
||
while(n<5)
|
||
124a: 25 30 cpi r18, 0x05 ; 5
|
||
124c: b0 f3 brcs .-20 ; 0x123a <lcdWriteHexAsDecimal+0x13a>
|
||
{
|
||
tempString[n] = ' ';
|
||
n++;
|
||
}
|
||
tempString[n] = '\0';
|
||
124e: e4 0f add r30, r20
|
||
1250: f5 1f adc r31, r21
|
||
1252: 10 82 st Z, r1
|
||
|
||
lcdWriteString(tempString);
|
||
1254: ca 01 movw r24, r20
|
||
1256: 0e 94 3b 08 call 0x1076 ; 0x1076 <lcdWriteString>
|
||
125a: 25 96 adiw r28, 0x05 ; 5
|
||
125c: 0f b6 in r0, 0x3f ; 63
|
||
125e: f8 94 cli
|
||
1260: de bf out 0x3e, r29 ; 62
|
||
1262: 0f be out 0x3f, r0 ; 63
|
||
1264: cd bf out 0x3d, r28 ; 61
|
||
1266: df 91 pop r29
|
||
1268: cf 91 pop r28
|
||
126a: 1f 91 pop r17
|
||
126c: 0f 91 pop r16
|
||
126e: ff 90 pop r15
|
||
1270: ef 90 pop r14
|
||
1272: df 90 pop r13
|
||
1274: cf 90 pop r12
|
||
1276: bf 90 pop r11
|
||
1278: af 90 pop r10
|
||
127a: 9f 90 pop r9
|
||
127c: 8f 90 pop r8
|
||
127e: 08 95 ret
|
||
|
||
00001280 <lcdInit>:
|
||
Output: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdInit (void)
|
||
{
|
||
|
||
spiInit();
|
||
1280: 0e 94 06 0b call 0x160c ; 0x160c <spiInit>
|
||
|
||
//LCD I/O
|
||
LCD_DDR |= (1<<LCD_BLED)|(1<<LCD_RS); // Set LCD related pins output
|
||
1284: 87 b3 in r24, 0x17 ; 23
|
||
1286: 83 60 ori r24, 0x03 ; 3
|
||
1288: 87 bb out 0x17, r24 ; 23
|
||
TCCR0 |= (1<<COM01)|(1<<WGM01)|(1<<WGM00)|(1<<CS01); // Timer0 set as fast PWM, set clock rate to fck/8
|
||
128a: 83 b7 in r24, 0x33 ; 51
|
||
128c: 8a 66 ori r24, 0x6A ; 106
|
||
128e: 83 bf out 0x33, r24 ; 51
|
||
|
||
//LCD init
|
||
lcdSetLayout(0);
|
||
1290: 80 e0 ldi r24, 0x00 ; 0
|
||
1292: 0e 94 a8 07 call 0xf50 ; 0xf50 <lcdSetLayout>
|
||
|
||
lcdWriteIns(0x50); // booster off, contrast C5, set C4
|
||
1296: 80 e5 ldi r24, 0x50 ; 80
|
||
1298: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
lcdWriteIns(0x6C); // set voltage follower and gain
|
||
129c: 8c e6 ldi r24, 0x6C ; 108
|
||
129e: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
lcdWriteIns(0x06); // cursor auto-increment right
|
||
12a2: 86 e0 ldi r24, 0x06 ; 6
|
||
12a4: 0e 94 9b 07 call 0xf36 ; 0xf36 <lcdWriteIns>
|
||
|
||
lcdSetDisplay(ON);
|
||
12a8: 81 e0 ldi r24, 0x01 ; 1
|
||
12aa: 0e 94 0d 08 call 0x101a ; 0x101a <lcdSetDisplay>
|
||
lcdSetCursor(OFF);
|
||
12ae: 80 e0 ldi r24, 0x00 ; 0
|
||
12b0: 0e 94 fa 07 call 0xff4 ; 0xff4 <lcdSetCursor>
|
||
lcdSetBlink(OFF);
|
||
12b4: 80 e0 ldi r24, 0x00 ; 0
|
||
12b6: 0e 94 e7 07 call 0xfce ; 0xfce <lcdSetBlink>
|
||
lcdSetContrast(6);
|
||
12ba: 86 e0 ldi r24, 0x06 ; 6
|
||
12bc: 0e 94 ce 07 call 0xf9c ; 0xf9c <lcdSetContrast>
|
||
lcdClearDisplay();
|
||
12c0: 0e 94 df 07 call 0xfbe ; 0xfbe <lcdClearDisplay>
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdSetIntensity (uint8_t intensity)
|
||
{
|
||
|
||
OCR0 = intensity;
|
||
12c4: 11 be out 0x31, r1 ; 49
|
||
12c6: 08 95 ret
|
||
|
||
000012c8 <rfIdGetTag>:
|
||
Input: -
|
||
Return: pointer to rfIdTagBuffer
|
||
------------------------------------------------------------------------------------------------*/
|
||
uint8_t* rfIdGetTag( void )
|
||
{
|
||
rfIdGotTag = 0;
|
||
12c8: 10 92 45 04 sts 0x0445, r1
|
||
//PORT_RFID |= (1<<RFID_ENABLE);
|
||
return rfIdTagBuffer;
|
||
}
|
||
12cc: 86 e4 ldi r24, 0x46 ; 70
|
||
12ce: 94 e0 ldi r25, 0x04 ; 4
|
||
12d0: 08 95 ret
|
||
|
||
000012d2 <rfIdClearBuffer>:
|
||
Input: -
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void rfIdClearBuffer( void )
|
||
{
|
||
rfIdByteCount = 0;
|
||
12d2: 10 92 44 04 sts 0x0444, r1
|
||
PORT_RFID &= ~(1<<RFID_ENABLE);
|
||
12d6: 95 98 cbi 0x12, 5 ; 18
|
||
12d8: 08 95 ret
|
||
|
||
000012da <rfIdGetTagPresent>:
|
||
|
||
Input: -
|
||
Return: 1 if true, else 0
|
||
------------------------------------------------------------------------------------------------*/
|
||
uint8_t rfIdGetTagPresent( void )
|
||
{
|
||
12da: 80 91 45 04 lds r24, 0x0445
|
||
return rfIdGotTag;
|
||
}
|
||
12de: 99 27 eor r25, r25
|
||
12e0: 08 95 ret
|
||
|
||
000012e2 <__vector_19>:
|
||
Description: UART(0) Receive Complete Interrupt
|
||
|
||
Input: -
|
||
Output: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
SIGNAL (SIG_USART0_RECV){
|
||
12e2: 1f 92 push r1
|
||
12e4: 0f 92 push r0
|
||
12e6: 0f b6 in r0, 0x3f ; 63
|
||
12e8: 0f 92 push r0
|
||
12ea: 11 24 eor r1, r1
|
||
12ec: 2f 93 push r18
|
||
12ee: 3f 93 push r19
|
||
12f0: 4f 93 push r20
|
||
12f2: 5f 93 push r21
|
||
12f4: 6f 93 push r22
|
||
12f6: 7f 93 push r23
|
||
12f8: 8f 93 push r24
|
||
12fa: 9f 93 push r25
|
||
12fc: af 93 push r26
|
||
12fe: bf 93 push r27
|
||
1300: ef 93 push r30
|
||
1302: ff 93 push r31
|
||
|
||
uint8_t data = usart0Receive();
|
||
1304: 0e 94 30 0b call 0x1660 ; 0x1660 <usart0Receive>
|
||
|
||
if (rfIdByteCount == 0)
|
||
1308: 90 91 44 04 lds r25, 0x0444
|
||
130c: 99 23 and r25, r25
|
||
130e: 31 f4 brne .+12 ; 0x131c <__vector_19+0x3a>
|
||
{
|
||
if (data == START_BYTE)
|
||
1310: 8a 30 cpi r24, 0x0A ; 10
|
||
1312: a9 f4 brne .+42 ; 0x133e <__vector_19+0x5c>
|
||
{
|
||
rfIdByteCount++;
|
||
1314: 81 e0 ldi r24, 0x01 ; 1
|
||
1316: 80 93 44 04 sts 0x0444, r24
|
||
131a: 11 c0 rjmp .+34 ; 0x133e <__vector_19+0x5c>
|
||
}
|
||
}
|
||
else if (rfIdByteCount < 11)
|
||
131c: 9b 30 cpi r25, 0x0B ; 11
|
||
131e: 48 f4 brcc .+18 ; 0x1332 <__vector_19+0x50>
|
||
{
|
||
rfIdTagBuffer[rfIdByteCount - 1] = data;
|
||
1320: e9 2f mov r30, r25
|
||
1322: ff 27 eor r31, r31
|
||
1324: eb 5b subi r30, 0xBB ; 187
|
||
1326: fb 4f sbci r31, 0xFB ; 251
|
||
1328: 80 83 st Z, r24
|
||
rfIdByteCount++;
|
||
132a: 9f 5f subi r25, 0xFF ; 255
|
||
132c: 90 93 44 04 sts 0x0444, r25
|
||
1330: 06 c0 rjmp .+12 ; 0x133e <__vector_19+0x5c>
|
||
}
|
||
else if (rfIdByteCount == 11)
|
||
1332: 9b 30 cpi r25, 0x0B ; 11
|
||
1334: 21 f4 brne .+8 ; 0x133e <__vector_19+0x5c>
|
||
{
|
||
PORT_RFID |= (1<<RFID_ENABLE);
|
||
1336: 95 9a sbi 0x12, 5 ; 18
|
||
rfIdGotTag = 1;
|
||
1338: 81 e0 ldi r24, 0x01 ; 1
|
||
133a: 80 93 45 04 sts 0x0445, r24
|
||
133e: ff 91 pop r31
|
||
1340: ef 91 pop r30
|
||
1342: bf 91 pop r27
|
||
1344: af 91 pop r26
|
||
1346: 9f 91 pop r25
|
||
1348: 8f 91 pop r24
|
||
134a: 7f 91 pop r23
|
||
134c: 6f 91 pop r22
|
||
134e: 5f 91 pop r21
|
||
1350: 4f 91 pop r20
|
||
1352: 3f 91 pop r19
|
||
1354: 2f 91 pop r18
|
||
1356: 0f 90 pop r0
|
||
1358: 0f be out 0x3f, r0 ; 63
|
||
135a: 0f 90 pop r0
|
||
135c: 1f 90 pop r1
|
||
135e: 18 95 reti
|
||
|
||
00001360 <rfIdInit>:
|
||
Input: -
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void rfIdInit(void)
|
||
{
|
||
usart0Init();
|
||
1360: 0e 94 3d 0b call 0x167a ; 0x167a <usart0Init>
|
||
usart0SetBaud(USART0_BAUD_RATE);
|
||
1364: 80 e6 ldi r24, 0x60 ; 96
|
||
1366: 99 e0 ldi r25, 0x09 ; 9
|
||
1368: 0e 94 10 0b call 0x1620 ; 0x1620 <usart0SetBaud>
|
||
rfIdByteCount = 0;
|
||
136c: 10 92 44 04 sts 0x0444, r1
|
||
|
||
DDR_RFID |= (1<<RFID_ENABLE);
|
||
1370: 8d 9a sbi 0x11, 5 ; 17
|
||
PORT_RFID &= ~(1<<RFID_ENABLE);
|
||
1372: 95 98 cbi 0x12, 5 ; 18
|
||
1374: 08 95 ret
|
||
|
||
00001376 <rfIdDisable>:
|
||
Input: -
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void rfIdDisable(void)
|
||
{
|
||
usart0RxIntDisable();
|
||
1376: 0e 94 3b 0b call 0x1676 ; 0x1676 <usart0RxIntDisable>
|
||
PORT_RFID |= (1<<RFID_ENABLE);
|
||
137a: 95 9a sbi 0x12, 5 ; 18
|
||
137c: 08 95 ret
|
||
|
||
0000137e <rfIdEnable>:
|
||
Input: -
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void rfIdEnable(void)
|
||
{
|
||
PORT_RFID &= ~(1<<RFID_ENABLE);
|
||
137e: 95 98 cbi 0x12, 5 ; 18
|
||
usart0RxIntEnable();
|
||
1380: 0e 94 39 0b call 0x1672 ; 0x1672 <usart0RxIntEnable>
|
||
1384: 08 95 ret
|
||
|
||
00001386 <roboMSPGetActiveStatus>:
|
||
uint8_t firstDigit = 0;
|
||
uint8_t secondDigit = 0;
|
||
uint8_t thirdDigit = 0;
|
||
uint8_t fourthDigit = 0;
|
||
uint8_t fifthDigit = 0;
|
||
|
||
1386: 80 91 0e 04 lds r24, 0x040E
|
||
firstDigit = (hexValue/10000);
|
||
138a: 10 92 0e 04 sts 0x040E, r1
|
||
secondDigit = ((hexValue-(firstDigit*10000))/1000);
|
||
thirdDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)))/100);
|
||
138e: 99 27 eor r25, r25
|
||
1390: 08 95 ret
|
||
|
||
00001392 <calculateChecksum>:
|
||
|
||
if(firstDigit)
|
||
{
|
||
tempString[n] = (0x30|firstDigit);
|
||
n++;
|
||
}
|
||
1392: bc 01 movw r22, r24
|
||
1394: 40 e0 ldi r20, 0x00 ; 0
|
||
1396: 50 e0 ldi r21, 0x00 ; 0
|
||
1398: 20 e0 ldi r18, 0x00 ; 0
|
||
139a: 30 e0 ldi r19, 0x00 ; 0
|
||
if(secondDigit||firstDigit)
|
||
{
|
||
tempString[n] = (0x30|secondDigit);
|
||
n++;
|
||
}
|
||
if(thirdDigit||secondDigit||firstDigit)
|
||
139c: fb 01 movw r30, r22
|
||
139e: e2 0f add r30, r18
|
||
13a0: f3 1f adc r31, r19
|
||
13a2: 80 81 ld r24, Z
|
||
13a4: 48 0f add r20, r24
|
||
13a6: 51 1d adc r21, r1
|
||
13a8: 2f 5f subi r18, 0xFF ; 255
|
||
13aa: 3f 4f sbci r19, 0xFF ; 255
|
||
n++;
|
||
}
|
||
if(secondDigit||firstDigit)
|
||
{
|
||
tempString[n] = (0x30|secondDigit);
|
||
n++;
|
||
13ac: 2c 30 cpi r18, 0x0C ; 12
|
||
13ae: 31 05 cpc r19, r1
|
||
13b0: a9 f7 brne .-22 ; 0x139c <calculateChecksum+0xa>
|
||
{
|
||
tempString[n] = (0x30|thirdDigit);
|
||
n++;
|
||
}
|
||
if(fourthDigit||thirdDigit||secondDigit||firstDigit)
|
||
{
|
||
13b2: 84 2f mov r24, r20
|
||
13b4: 99 27 eor r25, r25
|
||
13b6: 08 95 ret
|
||
|
||
000013b8 <roboMSPValidatePacket>:
|
||
|
||
Input: data - char to correct
|
||
Return: corrected char
|
||
------------------------------------------------------------------------------------------------*/
|
||
uint8_t lcdEngToSwe (uint8_t data)
|
||
{
|
||
13b8: 1f 93 push r17
|
||
|
||
13ba: 10 91 62 04 lds r17, 0x0462
|
||
13be: 86 e5 ldi r24, 0x56 ; 86
|
||
13c0: 94 e0 ldi r25, 0x04 ; 4
|
||
13c2: 0e 94 c9 09 call 0x1392 ; 0x1392 <calculateChecksum>
|
||
13c6: 18 17 cp r17, r24
|
||
13c8: 51 f5 brne .+84 ; 0x141e <roboMSPValidatePacket+0x66>
|
||
switch(data)
|
||
{
|
||
13ca: 80 91 57 04 lds r24, 0x0457
|
||
13ce: 99 27 eor r25, r25
|
||
13d0: 8f 70 andi r24, 0x0F ; 15
|
||
13d2: 90 70 andi r25, 0x00 ; 0
|
||
13d4: 89 2b or r24, r25
|
||
13d6: 19 f5 brne .+70 ; 0x141e <roboMSPValidatePacket+0x66>
|
||
case '<27>':
|
||
data=0x99;
|
||
13d8: 80 91 58 04 lds r24, 0x0458
|
||
13dc: 82 34 cpi r24, 0x42 ; 66
|
||
13de: b1 f0 breq .+44 ; 0x140c <roboMSPValidatePacket+0x54>
|
||
13e0: 83 34 cpi r24, 0x43 ; 67
|
||
13e2: 28 f4 brcc .+10 ; 0x13ee <roboMSPValidatePacket+0x36>
|
||
13e4: 80 32 cpi r24, 0x20 ; 32
|
||
13e6: 61 f0 breq .+24 ; 0x1400 <roboMSPValidatePacket+0x48>
|
||
13e8: 81 34 cpi r24, 0x41 ; 65
|
||
13ea: c9 f4 brne .+50 ; 0x141e <roboMSPValidatePacket+0x66>
|
||
13ec: 0c c0 rjmp .+24 ; 0x1406 <roboMSPValidatePacket+0x4e>
|
||
13ee: 84 34 cpi r24, 0x44 ; 68
|
||
13f0: 99 f0 breq .+38 ; 0x1418 <roboMSPValidatePacket+0x60>
|
||
13f2: 84 34 cpi r24, 0x44 ; 68
|
||
13f4: 70 f0 brcs .+28 ; 0x1412 <roboMSPValidatePacket+0x5a>
|
||
13f6: 8a 3f cpi r24, 0xFA ; 250
|
||
13f8: 91 f4 brne .+36 ; 0x141e <roboMSPValidatePacket+0x66>
|
||
13fa: 85 e0 ldi r24, 0x05 ; 5
|
||
13fc: 90 e0 ldi r25, 0x00 ; 0
|
||
13fe: 11 c0 rjmp .+34 ; 0x1422 <roboMSPValidatePacket+0x6a>
|
||
1400: 81 e0 ldi r24, 0x01 ; 1
|
||
1402: 90 e0 ldi r25, 0x00 ; 0
|
||
1404: 0e c0 rjmp .+28 ; 0x1422 <roboMSPValidatePacket+0x6a>
|
||
break;
|
||
case '<27>':
|
||
data=0x94;
|
||
1406: 82 e0 ldi r24, 0x02 ; 2
|
||
1408: 90 e0 ldi r25, 0x00 ; 0
|
||
140a: 0b c0 rjmp .+22 ; 0x1422 <roboMSPValidatePacket+0x6a>
|
||
break;
|
||
case '<27>':
|
||
140c: 83 e0 ldi r24, 0x03 ; 3
|
||
140e: 90 e0 ldi r25, 0x00 ; 0
|
||
1410: 08 c0 rjmp .+16 ; 0x1422 <roboMSPValidatePacket+0x6a>
|
||
data=0x8E;
|
||
break;
|
||
1412: 84 e0 ldi r24, 0x04 ; 4
|
||
1414: 90 e0 ldi r25, 0x00 ; 0
|
||
1416: 05 c0 rjmp .+10 ; 0x1422 <roboMSPValidatePacket+0x6a>
|
||
case '<27>':
|
||
data=0x84;
|
||
1418: 86 e0 ldi r24, 0x06 ; 6
|
||
141a: 90 e0 ldi r25, 0x00 ; 0
|
||
141c: 02 c0 rjmp .+4 ; 0x1422 <roboMSPValidatePacket+0x6a>
|
||
break;
|
||
case '<27>':
|
||
141e: 80 e0 ldi r24, 0x00 ; 0
|
||
1420: 90 e0 ldi r25, 0x00 ; 0
|
||
1422: 1f 91 pop r17
|
||
1424: 08 95 ret
|
||
|
||
00001426 <roboMSPSetData>:
|
||
Input: cIntensity
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdSetIntensity (uint8_t intensity)
|
||
{
|
||
|
||
1426: dc 01 movw r26, r24
|
||
1428: e1 e1 ldi r30, 0x11 ; 17
|
||
142a: f4 e0 ldi r31, 0x04 ; 4
|
||
OCR0 = intensity;
|
||
|
||
}
|
||
/*------------------------------------------------------------------------------------------------
|
||
lcdWriteChar
|
||
142c: 8d 91 ld r24, X+
|
||
142e: 81 93 st Z+, r24
|
||
void lcdSetIntensity (uint8_t intensity)
|
||
{
|
||
|
||
OCR0 = intensity;
|
||
|
||
}
|
||
1430: 84 e0 ldi r24, 0x04 ; 4
|
||
1432: eb 31 cpi r30, 0x1B ; 27
|
||
1434: f8 07 cpc r31, r24
|
||
1436: d1 f7 brne .-12 ; 0x142c <roboMSPSetData+0x6>
|
||
/*------------------------------------------------------------------------------------------------
|
||
lcdWriteChar
|
||
|
||
Description: Writes character data to LCD.
|
||
|
||
1438: cf 01 movw r24, r30
|
||
143a: 0c 97 sbiw r24, 0x0c ; 12
|
||
143c: 0e 94 c9 09 call 0x1392 ; 0x1392 <calculateChecksum>
|
||
1440: 80 93 1b 04 sts 0x041B, r24
|
||
Input: cData
|
||
Return: -
|
||
1444: 81 e0 ldi r24, 0x01 ; 1
|
||
1446: 80 93 54 04 sts 0x0454, r24
|
||
144a: 08 95 ret
|
||
|
||
0000144c <roboMSPGetCommand>:
|
||
spiSelectDeviceIO(LCD_CS);
|
||
LCD_PORT |= (1<<LCD_RS);
|
||
spiWrite(lcdEngToSwe(data));
|
||
|
||
//_delay_us(20);
|
||
//_delay_us(20);
|
||
144c: 80 91 53 04 lds r24, 0x0453
|
||
|
||
}
|
||
1450: 99 27 eor r25, r25
|
||
1452: 08 95 ret
|
||
|
||
00001454 <roboMSPClearBuffer>:
|
||
Input: cData
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdWriteIns (uint8_t data)
|
||
{
|
||
|
||
1454: 10 92 52 04 sts 0x0452, r1
|
||
spiSetLowSpeed();
|
||
1458: 81 e0 ldi r24, 0x01 ; 1
|
||
145a: 80 93 55 04 sts 0x0455, r24
|
||
145e: 08 95 ret
|
||
|
||
00001460 <roboMSPInit>:
|
||
|
||
Input: *stringPointer (int[])
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdWriteStringP (const uint8_t *progmemStringPointer)
|
||
{
|
||
1460: 0e 94 7d 0b call 0x16fa ; 0x16fa <usart1Init>
|
||
|
||
1464: 80 e8 ldi r24, 0x80 ; 128
|
||
1466: 95 e2 ldi r25, 0x25 ; 37
|
||
1468: 0e 94 4c 0b call 0x1698 ; 0x1698 <usart1SetBaud>
|
||
register uint8_t c;
|
||
146c: 8c 9a sbi 0x11, 4 ; 17
|
||
|
||
while((c = pgm_read_byte(progmemStringPointer++)))
|
||
146e: 10 92 52 04 sts 0x0452, r1
|
||
{
|
||
1472: 81 e0 ldi r24, 0x01 ; 1
|
||
1474: 80 93 55 04 sts 0x0455, r24
|
||
lcdWriteChar(c);
|
||
1478: 10 92 54 04 sts 0x0454, r1
|
||
}
|
||
|
||
147c: 84 e0 ldi r24, 0x04 ; 4
|
||
147e: 80 93 0e 04 sts 0x040E, r24
|
||
1482: 08 95 ret
|
||
|
||
00001484 <roboMSPDisable>:
|
||
|
||
register uint8_t c;
|
||
|
||
while((c = *stringPointer++))
|
||
{
|
||
lcdWriteChar(c);
|
||
1484: 0e 94 79 0b call 0x16f2 ; 0x16f2 <usart1RxIntDisable>
|
||
1488: 08 95 ret
|
||
|
||
0000148a <roboMSPEnable>:
|
||
|
||
}
|
||
/*------------------------------------------------------------------------------------------------
|
||
lcdWriteString
|
||
|
||
Description: Writes a string of characters to LCD.
|
||
148a: 0e 94 75 0b call 0x16ea ; 0x16ea <usart1RxIntEnable>
|
||
148e: 08 95 ret
|
||
|
||
00001490 <roboMSPSendData>:
|
||
n++;
|
||
|
||
while(n<5)
|
||
{
|
||
tempString[n] = ' ';
|
||
n++;
|
||
1490: cf 93 push r28
|
||
1492: df 93 push r29
|
||
}
|
||
tempString[n] = '\0';
|
||
|
||
1494: 94 9a sbi 0x12, 4 ; 18
|
||
1496: 80 e4 ldi r24, 0x40 ; 64
|
||
1498: 9c e9 ldi r25, 0x9C ; 156
|
||
149a: fc 01 movw r30, r24
|
||
149c: 31 97 sbiw r30, 0x01 ; 1
|
||
149e: f1 f7 brne .-4 ; 0x149c <roboMSPSendData+0xc>
|
||
14a0: fc 01 movw r30, r24
|
||
14a2: 31 97 sbiw r30, 0x01 ; 1
|
||
14a4: f1 f7 brne .-4 ; 0x14a2 <roboMSPSendData+0x12>
|
||
14a6: fc 01 movw r30, r24
|
||
14a8: 31 97 sbiw r30, 0x01 ; 1
|
||
14aa: f1 f7 brne .-4 ; 0x14a8 <roboMSPSendData+0x18>
|
||
14ac: 01 97 sbiw r24, 0x01 ; 1
|
||
14ae: f1 f7 brne .-4 ; 0x14ac <roboMSPSendData+0x1c>
|
||
lcdWriteHex
|
||
|
||
Description: Writes hex to LCD
|
||
Input: hexValue
|
||
Output: -
|
||
----------------------------------------------------------------------------------------------------------*/
|
||
14b0: 80 e0 ldi r24, 0x00 ; 0
|
||
14b2: 0e 94 71 0b call 0x16e2 ; 0x16e2 <usart1Send>
|
||
void lcdWriteHex(uint16_t hexValue)
|
||
14b6: 80 e0 ldi r24, 0x00 ; 0
|
||
14b8: 0e 94 71 0b call 0x16e2 ; 0x16e2 <usart1Send>
|
||
{
|
||
14bc: 80 e0 ldi r24, 0x00 ; 0
|
||
14be: 0e 94 71 0b call 0x16e2 ; 0x16e2 <usart1Send>
|
||
uint8_t tempString[7];
|
||
|
||
uint8_t n=0;
|
||
14c2: 80 91 54 04 lds r24, 0x0454
|
||
14c6: 88 23 and r24, r24
|
||
14c8: 51 f0 breq .+20 ; 0x14de <roboMSPSendData+0x4e>
|
||
14ca: cf e0 ldi r28, 0x0F ; 15
|
||
14cc: d4 e0 ldi r29, 0x04 ; 4
|
||
uint8_t i;
|
||
|
||
tempString[n] = '0';
|
||
n++;
|
||
tempString[n] = 'x';
|
||
14ce: 89 91 ld r24, Y+
|
||
14d0: 0e 94 71 0b call 0x16e2 ; 0x16e2 <usart1Send>
|
||
uint8_t tempString[7];
|
||
|
||
uint8_t n=0;
|
||
uint8_t i;
|
||
|
||
tempString[n] = '0';
|
||
14d4: 84 e0 ldi r24, 0x04 ; 4
|
||
14d6: cc 31 cpi r28, 0x1C ; 28
|
||
14d8: d8 07 cpc r29, r24
|
||
14da: 51 f0 breq .+20 ; 0x14f0 <roboMSPSendData+0x60>
|
||
14dc: f8 cf rjmp .-16 ; 0x14ce <roboMSPSendData+0x3e>
|
||
14de: cc e1 ldi r28, 0x1C ; 28
|
||
14e0: d4 e0 ldi r29, 0x04 ; 4
|
||
for(i=0;i<4;i++)
|
||
{
|
||
|
||
if(((hexValue>>(12-(i*4)))&0x000F)>0x0009)
|
||
{
|
||
tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)+0x37);
|
||
14e2: 89 91 ld r24, Y+
|
||
14e4: 0e 94 71 0b call 0x16e2 ; 0x16e2 <usart1Send>
|
||
n++;
|
||
|
||
for(i=0;i<4;i++)
|
||
{
|
||
|
||
if(((hexValue>>(12-(i*4)))&0x000F)>0x0009)
|
||
14e8: 84 e0 ldi r24, 0x04 ; 4
|
||
14ea: c9 32 cpi r28, 0x29 ; 41
|
||
14ec: d8 07 cpc r29, r24
|
||
14ee: c9 f7 brne .-14 ; 0x14e2 <roboMSPSendData+0x52>
|
||
tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)+0x37);
|
||
n++;
|
||
}
|
||
else
|
||
{
|
||
tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)|0x30);
|
||
14f0: 80 e0 ldi r24, 0x00 ; 0
|
||
14f2: 0e 94 71 0b call 0x16e2 ; 0x16e2 <usart1Send>
|
||
n++;
|
||
14f6: 80 e0 ldi r24, 0x00 ; 0
|
||
14f8: 0e 94 71 0b call 0x16e2 ; 0x16e2 <usart1Send>
|
||
}
|
||
14fc: 80 e0 ldi r24, 0x00 ; 0
|
||
14fe: 0e 94 71 0b call 0x16e2 ; 0x16e2 <usart1Send>
|
||
}
|
||
|
||
1502: 94 98 cbi 0x12, 4 ; 18
|
||
1504: 80 e8 ldi r24, 0x80 ; 128
|
||
1506: 9e e3 ldi r25, 0x3E ; 62
|
||
1508: 01 97 sbiw r24, 0x01 ; 1
|
||
150a: f1 f7 brne .-4 ; 0x1508 <roboMSPSendData+0x78>
|
||
150c: df 91 pop r29
|
||
150e: cf 91 pop r28
|
||
1510: 08 95 ret
|
||
|
||
00001512 <__vector_20>:
|
||
------------------------------------------------------------------------------------------------*/
|
||
void lcdSetDisplay (uint8_t value)
|
||
{
|
||
|
||
switch (value)
|
||
{
|
||
1512: 1f 92 push r1
|
||
1514: 0f 92 push r0
|
||
1516: 0f b6 in r0, 0x3f ; 63
|
||
1518: 0f 92 push r0
|
||
151a: 11 24 eor r1, r1
|
||
151c: 2f 93 push r18
|
||
151e: 3f 93 push r19
|
||
1520: 4f 93 push r20
|
||
1522: 5f 93 push r21
|
||
1524: 6f 93 push r22
|
||
1526: 7f 93 push r23
|
||
1528: 8f 93 push r24
|
||
152a: 9f 93 push r25
|
||
152c: af 93 push r26
|
||
152e: bf 93 push r27
|
||
1530: ef 93 push r30
|
||
1532: ff 93 push r31
|
||
case ON:
|
||
1534: 0e 94 6c 0b call 0x16d8 ; 0x16d8 <usart1Receive>
|
||
lcdTempReg |= 0x04;
|
||
break;
|
||
1538: 90 91 52 04 lds r25, 0x0452
|
||
153c: 99 23 and r25, r25
|
||
153e: 41 f4 brne .+16 ; 0x1550 <__vector_20+0x3e>
|
||
case OFF:
|
||
lcdTempReg &= ~(0x04);
|
||
1540: 8a 30 cpi r24, 0x0A ; 10
|
||
1542: 81 f4 brne .+32 ; 0x1564 <__vector_20+0x52>
|
||
break;
|
||
}
|
||
1544: 80 93 56 04 sts 0x0456, r24
|
||
|
||
1548: 81 e0 ldi r24, 0x01 ; 1
|
||
154a: 80 93 52 04 sts 0x0452, r24
|
||
154e: 0a c0 rjmp .+20 ; 0x1564 <__vector_20+0x52>
|
||
lcdWriteIns(0x08|lcdTempReg);
|
||
|
||
}
|
||
1550: 9d 30 cpi r25, 0x0D ; 13
|
||
1552: 40 f4 brcc .+16 ; 0x1564 <__vector_20+0x52>
|
||
/*------------------------------------------------------------------------------------------------
|
||
lcdSetCursor
|
||
1554: e9 2f mov r30, r25
|
||
1556: ff 27 eor r31, r31
|
||
1558: ea 5a subi r30, 0xAA ; 170
|
||
155a: fb 4f sbci r31, 0xFB ; 251
|
||
155c: 80 83 st Z, r24
|
||
|
||
155e: 9f 5f subi r25, 0xFF ; 255
|
||
1560: 90 93 52 04 sts 0x0452, r25
|
||
Description: Switch cursor on/off on LCD. Value: ON or OFF
|
||
|
||
1564: 80 91 52 04 lds r24, 0x0452
|
||
1568: 8d 30 cpi r24, 0x0D ; 13
|
||
156a: 41 f5 brne .+80 ; 0x15bc <__vector_20+0xaa>
|
||
Input: value
|
||
Return: -
|
||
156c: 0e 94 42 0a call 0x1484 ; 0x1484 <roboMSPDisable>
|
||
------------------------------------------------------------------------------------------------*/
|
||
1570: 78 94 sei
|
||
void lcdSetCursor (uint8_t value)
|
||
{
|
||
1572: 0e 94 dc 09 call 0x13b8 ; 0x13b8 <roboMSPValidatePacket>
|
||
1576: 80 93 53 04 sts 0x0453, r24
|
||
|
||
switch (value)
|
||
157a: 83 30 cpi r24, 0x03 ; 3
|
||
157c: a1 f0 breq .+40 ; 0x15a6 <__vector_20+0x94>
|
||
157e: 84 30 cpi r24, 0x04 ; 4
|
||
1580: 28 f4 brcc .+10 ; 0x158c <__vector_20+0x7a>
|
||
1582: 81 30 cpi r24, 0x01 ; 1
|
||
1584: 51 f0 breq .+20 ; 0x159a <__vector_20+0x88>
|
||
1586: 82 30 cpi r24, 0x02 ; 2
|
||
1588: a9 f4 brne .+42 ; 0x15b4 <__vector_20+0xa2>
|
||
158a: 0d c0 rjmp .+26 ; 0x15a6 <__vector_20+0x94>
|
||
158c: 85 30 cpi r24, 0x05 ; 5
|
||
158e: 71 f0 breq .+28 ; 0x15ac <__vector_20+0x9a>
|
||
1590: 85 30 cpi r24, 0x05 ; 5
|
||
1592: 40 f0 brcs .+16 ; 0x15a4 <__vector_20+0x92>
|
||
1594: 86 30 cpi r24, 0x06 ; 6
|
||
1596: 71 f4 brne .+28 ; 0x15b4 <__vector_20+0xa2>
|
||
1598: 06 c0 rjmp .+12 ; 0x15a6 <__vector_20+0x94>
|
||
{
|
||
case ON:
|
||
lcdTempReg |= 0x02;
|
||
159a: 80 93 0e 04 sts 0x040E, r24
|
||
break;
|
||
159e: 0e 94 48 0a call 0x1490 ; 0x1490 <roboMSPSendData>
|
||
15a2: 08 c0 rjmp .+16 ; 0x15b4 <__vector_20+0xa2>
|
||
|
||
}
|
||
/*------------------------------------------------------------------------------------------------
|
||
lcdSetBlink
|
||
|
||
Description: Switch blink on/off on LCD. Value: ON or OFF
|
||
15a4: 84 e0 ldi r24, 0x04 ; 4
|
||
|
||
Input: value
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
15a6: 80 93 0e 04 sts 0x040E, r24
|
||
15aa: 04 c0 rjmp .+8 ; 0x15b4 <__vector_20+0xa2>
|
||
void lcdSetBlink (uint8_t value)
|
||
{
|
||
|
||
switch (value)
|
||
15ac: 80 93 0e 04 sts 0x040E, r24
|
||
{
|
||
15b0: 10 92 54 04 sts 0x0454, r1
|
||
case ON:
|
||
lcdTempReg |= 0x01;
|
||
break;
|
||
case OFF:
|
||
15b4: 10 92 52 04 sts 0x0452, r1
|
||
lcdTempReg &= ~(0x01);
|
||
15b8: 0e 94 45 0a call 0x148a ; 0x148a <roboMSPEnable>
|
||
15bc: ff 91 pop r31
|
||
15be: ef 91 pop r30
|
||
15c0: bf 91 pop r27
|
||
15c2: af 91 pop r26
|
||
15c4: 9f 91 pop r25
|
||
15c6: 8f 91 pop r24
|
||
15c8: 7f 91 pop r23
|
||
15ca: 6f 91 pop r22
|
||
15cc: 5f 91 pop r21
|
||
15ce: 4f 91 pop r20
|
||
15d0: 3f 91 pop r19
|
||
15d2: 2f 91 pop r18
|
||
15d4: 0f 90 pop r0
|
||
15d6: 0f be out 0x3f, r0 ; 63
|
||
15d8: 0f 90 pop r0
|
||
15da: 1f 90 pop r1
|
||
15dc: 18 95 reti
|
||
|
||
000015de <spiWrite>:
|
||
Input: sensorValue
|
||
Output: -
|
||
----------------------------------------------------------------------------------------------------------*/
|
||
void lcdWriteHexAsDecimal(uint16_t hexValue)
|
||
{
|
||
uint8_t tempString[5]={" "};
|
||
15de: 8f b9 out 0x0f, r24 ; 15
|
||
uint8_t firstDigit = 0;
|
||
15e0: 77 9b sbis 0x0e, 7 ; 14
|
||
15e2: fe cf rjmp .-4 ; 0x15e0 <spiWrite+0x2>
|
||
15e4: 08 95 ret
|
||
|
||
000015e6 <spiReadIO>:
|
||
secondDigit = ((hexValue-(firstDigit*10000))/1000);
|
||
thirdDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)))/100);
|
||
fourthDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)+(thirdDigit*100)))/10);
|
||
fifthDigit = (hexValue-(firstDigit*10000+(secondDigit*1000)+(thirdDigit*100)+(fourthDigit*10)));
|
||
|
||
uint8_t n = 0;
|
||
15e6: 8f b1 in r24, 0x0f ; 15
|
||
|
||
15e8: 99 27 eor r25, r25
|
||
15ea: 08 95 ret
|
||
|
||
000015ec <spiSetHighSpeed>:
|
||
if(secondDigit||firstDigit)
|
||
{
|
||
tempString[n] = (0x30|secondDigit);
|
||
n++;
|
||
}
|
||
if(thirdDigit||secondDigit||firstDigit)
|
||
15ec: 68 98 cbi 0x0d, 0 ; 13
|
||
{
|
||
15ee: 69 98 cbi 0x0d, 1 ; 13
|
||
15f0: 08 95 ret
|
||
|
||
000015f2 <spiSetLowSpeed>:
|
||
n++;
|
||
}
|
||
tempString[n] = (0x30|fifthDigit);
|
||
n++;
|
||
|
||
while(n<5)
|
||
15f2: 68 98 cbi 0x0d, 0 ; 13
|
||
{
|
||
15f4: 69 9a sbi 0x0d, 1 ; 13
|
||
15f6: 08 95 ret
|
||
|
||
000015f8 <spiSelectDeviceIO>:
|
||
}
|
||
/*----------------------------------------------------------------------------------------------------------
|
||
lcdWriteHex
|
||
|
||
Description: Writes hex to LCD
|
||
Input: hexValue
|
||
15f8: 21 e0 ldi r18, 0x01 ; 1
|
||
15fa: 30 e0 ldi r19, 0x00 ; 0
|
||
15fc: 02 c0 rjmp .+4 ; 0x1602 <spiSelectDeviceIO+0xa>
|
||
15fe: 22 0f add r18, r18
|
||
1600: 33 1f adc r19, r19
|
||
1602: 8a 95 dec r24
|
||
1604: e2 f7 brpl .-8 ; 0x15fe <spiSelectDeviceIO+0x6>
|
||
1606: 20 95 com r18
|
||
1608: 2b bb out 0x1b, r18 ; 27
|
||
160a: 08 95 ret
|
||
|
||
0000160c <spiInit>:
|
||
uint8_t i;
|
||
|
||
tempString[n] = '0';
|
||
n++;
|
||
tempString[n] = 'x';
|
||
n++;
|
||
160c: 87 b3 in r24, 0x17 ; 23
|
||
160e: 80 6b ori r24, 0xB0 ; 176
|
||
1610: 87 bb out 0x17, r24 ; 23
|
||
|
||
1612: c6 9a sbi 0x18, 6 ; 24
|
||
for(i=0;i<4;i++)
|
||
{
|
||
1614: d0 9a sbi 0x1a, 0 ; 26
|
||
|
||
1616: d8 9a sbi 0x1b, 0 ; 27
|
||
if(((hexValue>>(12-(i*4)))&0x000F)>0x0009)
|
||
{
|
||
1618: 8d b1 in r24, 0x0d ; 13
|
||
161a: 81 65 ori r24, 0x51 ; 81
|
||
161c: 8d b9 out 0x0d, r24 ; 13
|
||
161e: 08 95 ret
|
||
|
||
00001620 <usart0SetBaud>:
|
||
================================================================================================*/
|
||
/*----------------------------------------------------------------------------------------------------------
|
||
lcdWriteHexAsDecimal
|
||
|
||
Description: Writes hex value as decimal to LCD
|
||
Input: sensorValue
|
||
1620: 9c 01 movw r18, r24
|
||
1622: 94 e0 ldi r25, 0x04 ; 4
|
||
1624: 22 0f add r18, r18
|
||
1626: 33 1f adc r19, r19
|
||
1628: 9a 95 dec r25
|
||
162a: e1 f7 brne .-8 ; 0x1624 <usart0SetBaud+0x4>
|
||
162c: 44 27 eor r20, r20
|
||
162e: 55 27 eor r21, r21
|
||
1630: 60 e0 ldi r22, 0x00 ; 0
|
||
1632: 74 e2 ldi r23, 0x24 ; 36
|
||
1634: 84 ef ldi r24, 0xF4 ; 244
|
||
1636: 90 e0 ldi r25, 0x00 ; 0
|
||
1638: 0e 94 09 0c call 0x1812 ; 0x1812 <__divmodsi4>
|
||
163c: 21 50 subi r18, 0x01 ; 1
|
||
163e: 30 40 sbci r19, 0x00 ; 0
|
||
1640: 40 40 sbci r20, 0x00 ; 0
|
||
1642: 50 40 sbci r21, 0x00 ; 0
|
||
1644: bb 27 eor r27, r27
|
||
1646: 57 fd sbrc r21, 7
|
||
1648: ba 95 dec r27
|
||
164a: a5 2f mov r26, r21
|
||
164c: 94 2f mov r25, r20
|
||
164e: 83 2f mov r24, r19
|
||
1650: 2f 5f subi r18, 0xFF ; 255
|
||
1652: 3f 4f sbci r19, 0xFF ; 255
|
||
1654: 4f 4f sbci r20, 0xFF ; 255
|
||
1656: 5f 4f sbci r21, 0xFF ; 255
|
||
1658: 80 bd out 0x20, r24 ; 32
|
||
Output: -
|
||
165a: 21 50 subi r18, 0x01 ; 1
|
||
165c: 29 b9 out 0x09, r18 ; 9
|
||
165e: 08 95 ret
|
||
|
||
00001660 <usart0Receive>:
|
||
uint8_t fourthDigit = 0;
|
||
uint8_t fifthDigit = 0;
|
||
|
||
firstDigit = (hexValue/10000);
|
||
secondDigit = ((hexValue-(firstDigit*10000))/1000);
|
||
thirdDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)))/100);
|
||
1660: 5f 9b sbis 0x0b, 7 ; 11
|
||
1662: fe cf rjmp .-4 ; 0x1660 <usart0Receive>
|
||
fourthDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)+(thirdDigit*100)))/10);
|
||
fifthDigit = (hexValue-(firstDigit*10000+(secondDigit*1000)+(thirdDigit*100)+(fourthDigit*10)));
|
||
1664: 8c b1 in r24, 0x0c ; 12
|
||
|
||
1666: 99 27 eor r25, r25
|
||
1668: 08 95 ret
|
||
|
||
0000166a <usart0Send>:
|
||
}
|
||
if(secondDigit||firstDigit)
|
||
{
|
||
tempString[n] = (0x30|secondDigit);
|
||
n++;
|
||
}
|
||
166a: 5d 9b sbis 0x0b, 5 ; 11
|
||
166c: fe cf rjmp .-4 ; 0x166a <usart0Send>
|
||
if(thirdDigit||secondDigit||firstDigit)
|
||
{
|
||
166e: 8c b9 out 0x0c, r24 ; 12
|
||
1670: 08 95 ret
|
||
|
||
00001672 <usart0RxIntEnable>:
|
||
Input: hexValue
|
||
Output: -
|
||
----------------------------------------------------------------------------------------------------------*/
|
||
void lcdWriteHex(uint16_t hexValue)
|
||
{
|
||
uint8_t tempString[7];
|
||
1672: 57 9a sbi 0x0a, 7 ; 10
|
||
1674: 08 95 ret
|
||
|
||
00001676 <usart0RxIntDisable>:
|
||
n++;
|
||
|
||
for(i=0;i<4;i++)
|
||
{
|
||
|
||
if(((hexValue>>(12-(i*4)))&0x000F)>0x0009)
|
||
1676: 57 98 cbi 0x0a, 7 ; 10
|
||
1678: 08 95 ret
|
||
|
||
0000167a <usart0Init>:
|
||
}
|
||
}
|
||
|
||
tempString[n] = '\0';
|
||
|
||
lcdWriteString(tempString);
|
||
167a: 89 9a sbi 0x11, 1 ; 17
|
||
}
|
||
167c: 8a b1 in r24, 0x0a ; 10
|
||
167e: 88 69 ori r24, 0x98 ; 152
|
||
1680: 8a b9 out 0x0a, r24 ; 10
|
||
1682: 08 95 ret
|
||
|
||
00001684 <usart0SendString>:
|
||
tempString[n] = (0x30|fourthDigit);
|
||
n++;
|
||
}
|
||
tempString[n] = (0x30|fifthDigit);
|
||
n++;
|
||
|
||
1684: fc 01 movw r30, r24
|
||
1686: 04 c0 rjmp .+8 ; 0x1690 <usart0SendString+0xc>
|
||
}
|
||
if(secondDigit||firstDigit)
|
||
{
|
||
tempString[n] = (0x30|secondDigit);
|
||
n++;
|
||
}
|
||
1688: 5d 9b sbis 0x0b, 5 ; 11
|
||
168a: fe cf rjmp .-4 ; 0x1688 <usart0SendString+0x4>
|
||
if(thirdDigit||secondDigit||firstDigit)
|
||
{
|
||
168c: 8c b9 out 0x0c, r24 ; 12
|
||
|
||
while(n<5)
|
||
{
|
||
tempString[n] = ' ';
|
||
n++;
|
||
}
|
||
168e: 31 96 adiw r30, 0x01 ; 1
|
||
}
|
||
tempString[n] = (0x30|fifthDigit);
|
||
n++;
|
||
|
||
while(n<5)
|
||
{
|
||
1690: 80 81 ld r24, Z
|
||
1692: 88 23 and r24, r24
|
||
1694: c9 f7 brne .-14 ; 0x1688 <usart0SendString+0x4>
|
||
1696: 08 95 ret
|
||
|
||
00001698 <usart1SetBaud>:
|
||
static uint8_t lcdTempReg;
|
||
/*================================================================================================
|
||
Functions
|
||
================================================================================================*/
|
||
/*----------------------------------------------------------------------------------------------------------
|
||
lcdWriteHexAsDecimal
|
||
1698: 9c 01 movw r18, r24
|
||
169a: 94 e0 ldi r25, 0x04 ; 4
|
||
169c: 22 0f add r18, r18
|
||
169e: 33 1f adc r19, r19
|
||
16a0: 9a 95 dec r25
|
||
16a2: e1 f7 brne .-8 ; 0x169c <usart1SetBaud+0x4>
|
||
16a4: 44 27 eor r20, r20
|
||
16a6: 55 27 eor r21, r21
|
||
16a8: 60 e0 ldi r22, 0x00 ; 0
|
||
16aa: 74 e2 ldi r23, 0x24 ; 36
|
||
16ac: 84 ef ldi r24, 0xF4 ; 244
|
||
16ae: 90 e0 ldi r25, 0x00 ; 0
|
||
16b0: 0e 94 09 0c call 0x1812 ; 0x1812 <__divmodsi4>
|
||
16b4: 21 50 subi r18, 0x01 ; 1
|
||
16b6: 30 40 sbci r19, 0x00 ; 0
|
||
16b8: 40 40 sbci r20, 0x00 ; 0
|
||
16ba: 50 40 sbci r21, 0x00 ; 0
|
||
16bc: bb 27 eor r27, r27
|
||
16be: 57 fd sbrc r21, 7
|
||
16c0: ba 95 dec r27
|
||
16c2: a5 2f mov r26, r21
|
||
16c4: 94 2f mov r25, r20
|
||
16c6: 83 2f mov r24, r19
|
||
16c8: 2f 5f subi r18, 0xFF ; 255
|
||
16ca: 3f 4f sbci r19, 0xFF ; 255
|
||
16cc: 4f 4f sbci r20, 0xFF ; 255
|
||
16ce: 5f 4f sbci r21, 0xFF ; 255
|
||
16d0: 8c bf out 0x3c, r24 ; 60
|
||
|
||
16d2: 21 50 subi r18, 0x01 ; 1
|
||
16d4: 20 b9 out 0x00, r18 ; 0
|
||
16d6: 08 95 ret
|
||
|
||
000016d8 <usart1Receive>:
|
||
uint8_t firstDigit = 0;
|
||
uint8_t secondDigit = 0;
|
||
uint8_t thirdDigit = 0;
|
||
uint8_t fourthDigit = 0;
|
||
uint8_t fifthDigit = 0;
|
||
|
||
16d8: 17 9b sbis 0x02, 7 ; 2
|
||
16da: fe cf rjmp .-4 ; 0x16d8 <usart1Receive>
|
||
firstDigit = (hexValue/10000);
|
||
secondDigit = ((hexValue-(firstDigit*10000))/1000);
|
||
16dc: 83 b1 in r24, 0x03 ; 3
|
||
thirdDigit = ((hexValue-(firstDigit*10000+(secondDigit*1000)))/100);
|
||
16de: 99 27 eor r25, r25
|
||
16e0: 08 95 ret
|
||
|
||
000016e2 <usart1Send>:
|
||
{
|
||
tempString[n] = (0x30|firstDigit);
|
||
n++;
|
||
}
|
||
if(secondDigit||firstDigit)
|
||
{
|
||
16e2: 15 9b sbis 0x02, 5 ; 2
|
||
16e4: fe cf rjmp .-4 ; 0x16e2 <usart1Send>
|
||
tempString[n] = (0x30|secondDigit);
|
||
n++;
|
||
16e6: 83 b9 out 0x03, r24 ; 3
|
||
16e8: 08 95 ret
|
||
|
||
000016ea <usart1RxIntEnable>:
|
||
|
||
Description: Writes hex to LCD
|
||
Input: hexValue
|
||
Output: -
|
||
----------------------------------------------------------------------------------------------------------*/
|
||
void lcdWriteHex(uint16_t hexValue)
|
||
16ea: 81 b1 in r24, 0x01 ; 1
|
||
16ec: 80 69 ori r24, 0x90 ; 144
|
||
16ee: 81 b9 out 0x01, r24 ; 1
|
||
16f0: 08 95 ret
|
||
|
||
000016f2 <usart1RxIntDisable>:
|
||
n++;
|
||
tempString[n] = 'x';
|
||
n++;
|
||
|
||
for(i=0;i<4;i++)
|
||
{
|
||
16f2: 81 b1 in r24, 0x01 ; 1
|
||
16f4: 8f 76 andi r24, 0x6F ; 111
|
||
16f6: 81 b9 out 0x01, r24 ; 1
|
||
16f8: 08 95 ret
|
||
|
||
000016fa <usart1Init>:
|
||
tempString[n] = (((hexValue>>(12-(i*4)))&0x000F)|0x30);
|
||
n++;
|
||
}
|
||
}
|
||
|
||
tempString[n] = '\0';
|
||
16fa: bb 9a sbi 0x17, 3 ; 23
|
||
|
||
16fc: 81 b1 in r24, 0x01 ; 1
|
||
16fe: 88 69 ori r24, 0x98 ; 152
|
||
1700: 81 b9 out 0x01, r24 ; 1
|
||
1702: 08 95 ret
|
||
|
||
00001704 <usart1SendString>:
|
||
}
|
||
if(fourthDigit||thirdDigit||secondDigit||firstDigit)
|
||
{
|
||
tempString[n] = (0x30|fourthDigit);
|
||
n++;
|
||
}
|
||
1704: fc 01 movw r30, r24
|
||
1706: 04 c0 rjmp .+8 ; 0x1710 <usart1SendString+0xc>
|
||
{
|
||
tempString[n] = (0x30|firstDigit);
|
||
n++;
|
||
}
|
||
if(secondDigit||firstDigit)
|
||
{
|
||
1708: 15 9b sbis 0x02, 5 ; 2
|
||
170a: fe cf rjmp .-4 ; 0x1708 <usart1SendString+0x4>
|
||
tempString[n] = (0x30|secondDigit);
|
||
n++;
|
||
170c: 83 b9 out 0x03, r24 ; 3
|
||
}
|
||
tempString[n] = (0x30|fifthDigit);
|
||
n++;
|
||
|
||
while(n<5)
|
||
{
|
||
170e: 31 96 adiw r30, 0x01 ; 1
|
||
{
|
||
tempString[n] = (0x30|fourthDigit);
|
||
n++;
|
||
}
|
||
tempString[n] = (0x30|fifthDigit);
|
||
n++;
|
||
1710: 80 81 ld r24, Z
|
||
1712: 88 23 and r24, r24
|
||
1714: c9 f7 brne .-14 ; 0x1708 <usart1SendString+0x4>
|
||
1716: 08 95 ret
|
||
|
||
00001718 <pingSendPing>:
|
||
|
||
Description: Gets pointer current TAG id
|
||
|
||
Input: -
|
||
Return: pointer to rfIdTagBuffer
|
||
------------------------------------------------------------------------------------------------*/
|
||
1718: f8 94 cli
|
||
uint8_t* rfIdGetTag( void )
|
||
{
|
||
171a: 80 91 64 04 lds r24, 0x0464
|
||
171e: 88 23 and r24, r24
|
||
1720: 69 f4 brne .+26 ; 0x173c <pingSendPing+0x24>
|
||
rfIdGotTag = 0;
|
||
//PORT_RFID |= (1<<RFID_ENABLE);
|
||
return rfIdTagBuffer;
|
||
1722: 8a 9a sbi 0x11, 2 ; 17
|
||
}
|
||
1724: 92 9a sbi 0x12, 2 ; 18
|
||
1726: 8a e0 ldi r24, 0x0A ; 10
|
||
1728: 8a 95 dec r24
|
||
172a: f1 f7 brne .-4 ; 0x1728 <pingSendPing+0x10>
|
||
/*------------------------------------------------------------------------------------------------
|
||
rfIDClearBuffer
|
||
|
||
Description: Clearing current TAG-buffer
|
||
172c: 92 98 cbi 0x12, 2 ; 18
|
||
|
||
172e: 8a 98 cbi 0x11, 2 ; 17
|
||
Input: -
|
||
Return: -
|
||
1730: 85 b7 in r24, 0x35 ; 53
|
||
1732: 83 60 ori r24, 0x03 ; 3
|
||
1734: 85 bf out 0x35, r24 ; 53
|
||
------------------------------------------------------------------------------------------------*/
|
||
1736: 8b b7 in r24, 0x3b ; 59
|
||
1738: 80 64 ori r24, 0x40 ; 64
|
||
173a: 8b bf out 0x3b, r24 ; 59
|
||
void rfIdClearBuffer( void )
|
||
{
|
||
rfIdByteCount = 0;
|
||
173c: 78 94 sei
|
||
173e: 08 95 ret
|
||
|
||
00001740 <pingGetDistance>:
|
||
Description: Returns if a TAG has been transfered to the TAG-buffer
|
||
|
||
Input: -
|
||
Return: 1 if true, else 0
|
||
------------------------------------------------------------------------------------------------*/
|
||
uint8_t rfIdGetTagPresent( void )
|
||
1740: 10 92 64 04 sts 0x0464, r1
|
||
{
|
||
1744: 80 91 88 00 lds r24, 0x0088
|
||
1748: 90 91 89 00 lds r25, 0x0089
|
||
174c: 08 95 ret
|
||
|
||
0000174e <pingGetReady>:
|
||
|
||
Description: Enable incoming data
|
||
|
||
Input: -
|
||
Return: -
|
||
------------------------------------------------------------------------------------------------*/
|
||
174e: 80 91 64 04 lds r24, 0x0464
|
||
void rfIdEnable(void)
|
||
{
|
||
1752: 99 27 eor r25, r25
|
||
1754: 08 95 ret
|
||
|
||
00001756 <pingInit>:
|
||
/*------------------------------------------------------------------------------------------------
|
||
rfIdDisable
|
||
|
||
Description: Disable incoming data
|
||
|
||
Input: -
|
||
1756: 08 95 ret
|
||
|
||
00001758 <__vector_1>:
|
||
rfIdInit
|
||
|
||
Description: Initialize components
|
||
|
||
Input: -
|
||
Return: -
|
||
1758: 1f 92 push r1
|
||
175a: 0f 92 push r0
|
||
175c: 0f b6 in r0, 0x3f ; 63
|
||
175e: 0f 92 push r0
|
||
1760: 11 24 eor r1, r1
|
||
1762: 8f 93 push r24
|
||
------------------------------------------------------------------------------------------------*/
|
||
1764: 05 b6 in r0, 0x35 ; 53
|
||
1766: 00 fe sbrs r0, 0
|
||
1768: 0d c0 rjmp .+26 ; 0x1784 <__vector_1+0x2c>
|
||
void rfIdInit(void)
|
||
{
|
||
176a: 10 92 89 00 sts 0x0089, r1
|
||
usart0Init();
|
||
176e: 10 92 88 00 sts 0x0088, r1
|
||
usart0SetBaud(USART0_BAUD_RATE);
|
||
rfIdByteCount = 0;
|
||
1772: 85 b7 in r24, 0x35 ; 53
|
||
1774: 8e 7f andi r24, 0xFE ; 254
|
||
1776: 85 bf out 0x35, r24 ; 53
|
||
|
||
1778: 80 91 8a 00 lds r24, 0x008A
|
||
177c: 82 60 ori r24, 0x02 ; 2
|
||
177e: 80 93 8a 00 sts 0x008A, r24
|
||
1782: 0b c0 rjmp .+22 ; 0x179a <__vector_1+0x42>
|
||
DDR_RFID |= (1<<RFID_ENABLE);
|
||
PORT_RFID &= ~(1<<RFID_ENABLE);
|
||
}
|
||
/*================================================================================================
|
||
1784: 80 91 8a 00 lds r24, 0x008A
|
||
1788: 8d 7f andi r24, 0xFD ; 253
|
||
178a: 80 93 8a 00 sts 0x008A, r24
|
||
Interrupt
|
||
178e: 81 e0 ldi r24, 0x01 ; 1
|
||
1790: 80 93 64 04 sts 0x0464, r24
|
||
================================================================================================*/
|
||
1794: 8b b7 in r24, 0x3b ; 59
|
||
1796: 8f 7b andi r24, 0xBF ; 191
|
||
1798: 8b bf out 0x3b, r24 ; 59
|
||
179a: 8f 91 pop r24
|
||
179c: 0f 90 pop r0
|
||
179e: 0f be out 0x3f, r0 ; 63
|
||
17a0: 0f 90 pop r0
|
||
17a2: 1f 90 pop r1
|
||
17a4: 18 95 reti
|
||
|
||
000017a6 <__udivmodhi4>:
|
||
17a6: aa 1b sub r26, r26
|
||
17a8: bb 1b sub r27, r27
|
||
17aa: 51 e1 ldi r21, 0x11 ; 17
|
||
17ac: 07 c0 rjmp .+14 ; 0x17bc <__udivmodhi4_ep>
|
||
|
||
000017ae <__udivmodhi4_loop>:
|
||
17ae: aa 1f adc r26, r26
|
||
17b0: bb 1f adc r27, r27
|
||
17b2: a6 17 cp r26, r22
|
||
17b4: b7 07 cpc r27, r23
|
||
17b6: 10 f0 brcs .+4 ; 0x17bc <__udivmodhi4_ep>
|
||
17b8: a6 1b sub r26, r22
|
||
17ba: b7 0b sbc r27, r23
|
||
|
||
000017bc <__udivmodhi4_ep>:
|
||
17bc: 88 1f adc r24, r24
|
||
17be: 99 1f adc r25, r25
|
||
17c0: 5a 95 dec r21
|
||
17c2: a9 f7 brne .-22 ; 0x17ae <__udivmodhi4_loop>
|
||
17c4: 80 95 com r24
|
||
17c6: 90 95 com r25
|
||
17c8: bc 01 movw r22, r24
|
||
17ca: cd 01 movw r24, r26
|
||
17cc: 08 95 ret
|
||
|
||
000017ce <__udivmodsi4>:
|
||
17ce: a1 e2 ldi r26, 0x21 ; 33
|
||
17d0: 1a 2e mov r1, r26
|
||
17d2: aa 1b sub r26, r26
|
||
17d4: bb 1b sub r27, r27
|
||
17d6: fd 01 movw r30, r26
|
||
17d8: 0d c0 rjmp .+26 ; 0x17f4 <__udivmodsi4_ep>
|
||
|
||
000017da <__udivmodsi4_loop>:
|
||
17da: aa 1f adc r26, r26
|
||
17dc: bb 1f adc r27, r27
|
||
17de: ee 1f adc r30, r30
|
||
17e0: ff 1f adc r31, r31
|
||
17e2: a2 17 cp r26, r18
|
||
17e4: b3 07 cpc r27, r19
|
||
17e6: e4 07 cpc r30, r20
|
||
17e8: f5 07 cpc r31, r21
|
||
17ea: 20 f0 brcs .+8 ; 0x17f4 <__udivmodsi4_ep>
|
||
17ec: a2 1b sub r26, r18
|
||
17ee: b3 0b sbc r27, r19
|
||
17f0: e4 0b sbc r30, r20
|
||
17f2: f5 0b sbc r31, r21
|
||
|
||
000017f4 <__udivmodsi4_ep>:
|
||
17f4: 66 1f adc r22, r22
|
||
17f6: 77 1f adc r23, r23
|
||
17f8: 88 1f adc r24, r24
|
||
17fa: 99 1f adc r25, r25
|
||
17fc: 1a 94 dec r1
|
||
17fe: 69 f7 brne .-38 ; 0x17da <__udivmodsi4_loop>
|
||
1800: 60 95 com r22
|
||
1802: 70 95 com r23
|
||
1804: 80 95 com r24
|
||
1806: 90 95 com r25
|
||
1808: 9b 01 movw r18, r22
|
||
180a: ac 01 movw r20, r24
|
||
180c: bd 01 movw r22, r26
|
||
180e: cf 01 movw r24, r30
|
||
1810: 08 95 ret
|
||
|
||
00001812 <__divmodsi4>:
|
||
1812: 97 fb bst r25, 7
|
||
1814: 09 2e mov r0, r25
|
||
1816: 05 26 eor r0, r21
|
||
1818: 0e d0 rcall .+28 ; 0x1836 <__divmodsi4_neg1>
|
||
181a: 57 fd sbrc r21, 7
|
||
181c: 04 d0 rcall .+8 ; 0x1826 <__divmodsi4_neg2>
|
||
181e: d7 df rcall .-82 ; 0x17ce <__udivmodsi4>
|
||
1820: 0a d0 rcall .+20 ; 0x1836 <__divmodsi4_neg1>
|
||
1822: 00 1c adc r0, r0
|
||
1824: 38 f4 brcc .+14 ; 0x1834 <__divmodsi4_exit>
|
||
|
||
00001826 <__divmodsi4_neg2>:
|
||
1826: 50 95 com r21
|
||
1828: 40 95 com r20
|
||
182a: 30 95 com r19
|
||
182c: 21 95 neg r18
|
||
182e: 3f 4f sbci r19, 0xFF ; 255
|
||
1830: 4f 4f sbci r20, 0xFF ; 255
|
||
1832: 5f 4f sbci r21, 0xFF ; 255
|
||
|
||
00001834 <__divmodsi4_exit>:
|
||
1834: 08 95 ret
|
||
|
||
00001836 <__divmodsi4_neg1>:
|
||
1836: f6 f7 brtc .-4 ; 0x1834 <__divmodsi4_exit>
|
||
1838: 90 95 com r25
|
||
183a: 80 95 com r24
|
||
183c: 70 95 com r23
|
||
183e: 61 95 neg r22
|
||
1840: 7f 4f sbci r23, 0xFF ; 255
|
||
1842: 8f 4f sbci r24, 0xFF ; 255
|
||
1844: 9f 4f sbci r25, 0xFF ; 255
|
||
1846: 08 95 ret
|
||
|
||
00001848 <_exit>:
|
||
1848: ff cf rjmp .-2 ; 0x1848 <_exit>
|