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
Wenn kein Sprungbefehl abgearbeitet wird, führt der µC einfach den nächsten Befehl aus: Nach ldi count, 0 wird die der Code nach wait: ausgeführt.
Stevko R. schrieb: > Sonst lade Count mit "0" und fange von vorn an ***************** Der ********** Teil steht aber nicht dort. Du darfst nicht einfach Dinge erfinden. Jeder Befehl hat eine genau definierte Aktion zur Folge. Assembler ist keine Hochsprache. Wenn dort kein Jump steht, wird auch keiner gemacht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.