Hallo
Ein kleiner Testcode
wird wie folgt übersetztCode:#define BATTERIE (1 << MUX0) | (1 << MUX2) int main(void) { setLEDs(0); ADMUX |= BATTERIE; setLEDs(255); ADMUX |= 5;
Die setLEDs(); dienen der Orientierung im Assemblerlisting. Schön zu sehen ab LM3/5: Lesen des Ports, Wert verodern, schreiben. Wie man sieht, ist es egal, wie man es formuliert, es ist immer 5.Code:29 .LM2: 30 0008 80E0 ldi r24,lo8(0) 31 000a 0E94 0000 call setLEDs 32 .LM3: 33 000e 87B1 in r24,39-0x20 34 0010 8560 ori r24,lo8(5) 35 0012 87B9 out 39-0x20,r24 36 .LM4: 37 0014 8FEF ldi r24,lo8(-1) 38 0016 0E94 0000 call setLEDs 39 .LM5: 40 001a 87B1 in r24,39-0x20 41 001c 8560 ori r24,lo8(5) 42 001e 87B9 out 39-0x20,r24 43 .L2:
Wenn man wirklich nicht weiß, welche Spannungsreferenz und welche Bündigkeit das Ergebniss haben soll, dann weiß man sicher auch nicht, welcher ADC-Kanal zuvor ausgewählt war. Deshalb sollte man die MUX0-4 wenigstens löschen bevor man sie mit |= setzt. Oder man definiert BATTERIE etwas um:
#define BATTERIE2 (0<<REFS1) | (1<<REFS0) | (0<<ADLAR) | (1 << MUX0) | (1 << MUX2)
und mit
ADMUX = BATTERIE2;
ergibt das dann diesen Code:
ldi r24,lo8(69)
out 39-0x20,r24
Gruß
mic







Zitieren

Lesezeichen