Beim Aufräumen der Garage haben meine Kinder ein altes
Metalldetektorprojekt
aus meiner Ausbildungszeit hervorgezaubert. Dieses soll nun aufgefrischt
werden. Leider ist der Sourcecode nach Umzügen und neuer Hardware nicht
mehr
vorhanden. Aber das Auslesen des Hex-Files aus dem Atmega8 hat
funktioniert.
Es gibt einen Abschnitt der ISR(TIMER2_COMP_vect) im Disassembling den
ich
nicht richtig verstehe.
1 | cbi ADMUX, MUX0; 0000048C; Lösche Bit MUX0 im PortRegister ADMUX
|
2 | cbi PORTC, PORTC2; 0000048E; Lösche Bit PORTC2 im PortRegister PORTC
|
3 | cbi PORTC, PORTC5; 00000490; Lösche Bit PORTC5 im PortRegister PORTC
|
4 | lds r17, OnInterval; 00000492 10 91
|
5 | rjmp Label_049C; 00000496; Springe zu Label_049C
|
6 | Label_0498:
|
7 | rjmp Label_049A; 00000498; Springe zu Label_049A
|
8 | Label_049A:
|
9 | rjmp Label_049C; 0000049A; Springe zu Label_049C
|
10 | Label_049C:
|
11 | mov r16, r17; 0000049C; Kopiere Inhalt von R17 in R16
|
12 | dec r17; 0000049E; R17 = R17 - 1, verringere R17 um 1
|
13 | and r16, r16; 000004A0 00 23
|
14 | brne Label_0498; 000004A2 D1 F7
|
15 | sbi PORTC, PORTC5; 000004A4; Setze Bit PORTC5 im PortRegister PORTC
|
Was passiert in den Zeilen 492 - 4A2 ?
Das kann doch nur eine Zeitschleife sein ?
Aber der Footprint eines _delays_us() sieht in Assembler anders aus.
In C sollte das doch so aussehen, oder ?
1 | ADMUX &= ~(1<<MUX0);
|
2 | PORTC &= ~(1<<PC2);
|
3 | PORTC &= ~(1<<PC5);
|
4 | while (OnInterval > 0) {
|
5 | OnInterval = OnInterval - 1;
|
6 | }
|
7 | PORTC |= (1<<PC5);
|
Habt Ihr eine Idee dazu ?