Gast
#410399
hello avrfreaker..
Ich programmiere gerade die ausgabe verfahren der max7219 in assembler
(angeschlossen mit der tiny26)...
aber irgendwie laüft das nicht so rund bei mir..
also so soll die vorgehenweise sein:
* Steuerleitung LOAD löschen
* Die Adresse (TEMP1) an den MAX7219 senden
o Schleifenzähler (TEMP3) mit dem Wert 8 laden. (die
folgende
Schleife wird demnach achtmal durchlaufen
o Schleifenbeginn
+ Alle Bits im Übergaberegister (hier: TEMP1) auf die
nächst höhere Stelle schieben
+ Datenleitung DIN = Carry (= Flag im Statusregister):
Für diese Anweisung ist jedoch kein Assemblerbefehl vorhanden! Es ist
daher folgender Umweg notwendig: Zuerst prüfen, ob das Carry-Flag
gesetzt ist. Ist es gesetzt, die Datenleitung (DIN) ebenfalls setzen.
Andernfalls die Datenleitung (DIN) löschen. Ist das soeben eingelesene
Bit (Bit 0 vom Register TEMP3) gesetzt, Bit 0 des Übergaberegister
TEMP1 setzen
+ Takt erzeugen: Dazu zunächst die Taktleitung (CLK)
setzen, und wieder zurücksetzen
o Schleifenende
* Data (TEMP2) auf die gleiche Weise wie die Adresse (TEMP1) an
den
MAX7219 senden
* Steuerleitung LOAD wieder setzen, und eine positive Taktflanke
erzeugen
so habe ich gemacht ohne erfolgt...was mache ich falsch?
So habe ich es mir vorgestellt
PB1------->DIN
PB2------->CLK
PB5------->LOAD
.equ DIN=PORTB1
.equ LOAD=PORTB5
.equ CLK=PORTB2
Ausgabe: cbi PORTB,LOAD
ldi temp3,8
IN: lsl temp1
brcs MM
cbi PORTB,DIN
rjmp GO
MM: sbi PORTB,DIN
GO: sbi PORTB,CLK
cbi PORTB,CLK
dec temp3
brne IN
ldi temp3,8
IN2: lsl temp1
brcs MN
cbi PORTB,DIN
rjmp GO
MN: sbi PORTB,DIN
GOO: sbi PORTB,CLK
cbi PORTB,CLK
dec temp3
brne IN2
sbi PORTB,LOAD