avr assembler frage

OP #2037632
Lesenswert?

ich habe mein erstes etwas längeres Programm in assembler geschrieben.

Es ist zur Ansteuerung einer 3x3 LED Matrix mit einem ATtiny2313

Ich habe 2 Timer verwendet. Einer für das Multiplexing der Spalten
und einer für das durchschalten der einzelnen Komplettbilder.

Die Bilder sind so im Programmspeicher abgelegt
1
bilder:
2
  .db 0b00000011  ;3 Bilder
3
bild0:
4
  .db 0b00100000
5
  .db 0b00010010    
6
  .db 0b00001000
7

8
  .db 0b00100000
9
  .db 0b00010010    
10
  .db 0b00001000
11

12
  .db 0b00100010
13
  .db 0b00010101    
14
  .db 0b00001010

am Anfang des Programmes wird dann der Wert an der Stelle bilder in 
einem Register gespeichert.
1
  ldi ZH,LOW(bilder*2)    ;Low-Byte der Adresse von bilder in ZL  
2
  ldi ZH,HIGH(bilder*2)    ;High-Byte der Adresse von bilder in ZH
3
  lpm 
4
  mov bilderanzahl,r0

In einem weiteren REgister ist die nr. des aktuellen Bildes gespeichert.
Im Interrupt Handler Für den Bilder Timer wird dieser Wert dann mit der 
gesamtanzahl der Bilder verglichen und bei Bedarf wieder auf null 
gesetzt.
Und am ende um 1 erhöht.
1
  cp nextbild,bilderanzahl  ;nextbild mit Anzahl Bilder vergeleichen
2
  brne next
3
  mov nextbild,zero
4
next:
Das funktioniert leider nicht. Es sieht so aus als ob weiter als 3 
gezählt wird.

Wenn ich aber
1
cpi nextbild,3
nehem funktioniert es wie gewünscht

muss ich da evtl. einen anderen Vergleichsbefehl oder eine andere 
Sprungbedingung nehmen?

Das komplette Programm ist hier zu finden
http://pastebin.com/ebNeXcN2

p.s.:
ich beschäftige mich erst seit gut 1-2 Wochen mit der µC Programmierung.
Gast #2037648
Lesenswert?

Hi

>Du musst das LB auch in's ZL laden...

Genau.

> lpm
>  mov bilderanzahl,r0

Das kannst du dir auch sparen

  lpm bilderanzahl,Z

Oder besser

  lpm bilderanzahl,Z+

dann zeigt Z gleich auf den naächsten Wert.

MfG Spess

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