Hallo,
ich habe ein Programm für ne Uhr geschrieben. Funktiomiert soweit auch,
nun wollte ich eine Led im Sekundentakt blinken lassen. Also hab ich
noch ein Codestück eingefügt, sobald dieses Stück mit eingefügt ist
werden nur die Ziffern bis einschlieslich 7 angezeigt also für acht und
neun wird nur mist angezeigt.
Hier mal die Codestücke:
Hallo,
er will damit folgendes sagen:
ldi ZH, HIGH(Daten*2)
ldi ZL, LOW(Daten*2)
add ZL, shift
lpm shift, Z
Du lädst hier richtig Z mit dem Zeiger auf die Tabelle.
Dann addierst Du den Offset zu Deinem passenden Byte.
Z ist aber ein 16Bit Wert. Wenn Du zu den unteren 8 Bit in ZL was
addierst, kann es natürlich auch einen Übertrag geben wenn Z z.B. 0x00FF
enthält und Du da 1 addierst muß richig 0x0100 rauskommen. Bei Dir kommt
aber dann 0x0000 raus.
Also mit adc (Add with Carry) den Übertrag dazurechnen.
Leider hat Atmel keine immediate-Version von adc eingebaut, Du mußt also
z.B. ein freies Register mit Inhalt 0 bemühen.
clr freies_regeister
ldi ZH, HIGH(Daten*2)
ldi ZL, LOW(Daten*2)
add ZL, shift
adc ZH, freies_register ; hier einen eventuellen Übertrag dazu
lpm shift, Z
dann sollte es wieder klappen.
Gruß aus Berlin
Michael