Fehler bei Tutorial "7-Segment-Anzeige" ?

OP #2755090
Lesenswert?

Liebe Gemeinde und Moderatoren,

ich habe mir einmal das Tutorial für die 7-Segment-Anzeige(7SA) 
angesehen.
Dort sollen die Zahlen 0..9 auf der 7SA angezeigt werden.
Die aktuelle Ziffer ist in "count" hinterlegt.

Für das Anzeigen der Zahlen von 0..9 ist folgende Schleife zuständig:
>====================
loop:
 ldi ZL, LOW(Codes*2)  ; die Startadresse der Tabelle in den
 ldi ZH, HIGH(Codes*2) ; Z-Pointer laden

 mov temp1, count      ; die wortweise Adressierung der Tabelle
 add temp1, count      ; berücksichtigen

 add ZL, temp1         ; und ausgehend vom Tabellenanfang
 adc ZH, zero          ; die Adresse des Code Bytes berechnen

 lpm                   ; dieses Code Byte in das Register r0 laden

 out PORTD, r0         ; und an die Anzeige ausgeben

 inc count             ; den Zähler erhöhen, wobei der Zähler
 cpi count, 10         ; immer nur von 0 bis 9 zählen soll
 brne wait
 ldi count, 0
;
wait:
 ldi r17, 10           ; und etwas warten, damit die Ziffer auf
 laber, laber, ...
>=====================

Wenn ich nicht total daneben liege, sieht man die Ziffer "9" gar nicht.
Sie wird wohl geladen und angezeigt, aber nur im µs Bereich -> fürs 
menschliche Auge nicht sichbar.

Gehen wir den Quellcode einmal durch:
-------------------------------------
Count ist "9" und die Ziffer die dargestellt werden soll.
* zuerst wird das Bitmuster für die "9" geladen "lpm" -> ok
* dann wird es ausgegeben "out PORTD, r0" -> ok
* jetzt wird Count um 1´s erhöht "inc count" -> Count = "10" -> ok
* nun wir der Vergleich gestartet:
   Wenn Count nicht "10" dann springe zu "wait", damit die Ziffer eine 
Zeit angezeigt wird
   Sonst lade Count mit "0" und fange von vorn an

==> bei Count="9" und INC -> Count="10" wird die Warteschleife gar nicht 
angesprungen!
==> der richtige Befehl wäre: "cpi count, 11"

Ich hoffe das ich in meiner theoretischen Betrachtung keinen Fehler 
habe.

Gruß
  stevko

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren