SchreibeBitMap:
push XH
push XL
push YH
push YL
push ZH
push ZL
push r16
push r17
push r18
push r19
push r20
push r21
push r22
push r23
.def Hoehe = r24
.def Laenge = r25
.def SpeicherWert = r18
.def Anzahl = r19
.def Xi = r20
.def AktWert = r21
.def AdressZaehler = r22
.def Counter = r23
lds ZH, BitmH
lds ZL, BitmL
;Laenge einlesen
lpm
mov Laenge, r0
adiw ZL,1
;Höhe einlesen
lpm
mov Hoehe, r0
ldi XL,0x85 ;StartAdresse vom Ram für BitmapBuffer
ldi XH,0x01
NextByte:
ldi Counter,0
adiw ZL,1
lpm
mov SpeicherWert, r0
sbrc SpeicherWert,7
rjmp Bit7High
mov Anzahl,SpeicherWert
ldi SpeicherWert,0
rjmp Bit7Ende
Bit7High:
subi SpeicherWert,128
mov Anzahl,SpeicherWert
ldi SpeicherWert,128
Bit7Ende:
StoreLoop:
Schieben:
cp Counter,Xi
breq SchiebenE
inc Counter
lsr SpeicherWert
rjmp Schieben
schiebenE:
ld AktWert,X
or AktWert,SpeicherWert
st X,AktWert
adiw XL,1
dec Anzahl
inc AdressZaehler
cp AdressZaehler,Hoehe
breq NachLinks
rjmp NachLinksE
nachLinks:
cpi Xi,7
breq StoreLoopE
inc Xi
ldi XL,0x85
ldi XH,0x01
ldi AdressZaehler,0
NachLinksE:
cpi Anzahl,0
breq NextByte
rjmp StoreLoop
StoreLoopE:
ldi Xi,0
ldi XL,0x85
ldi AdressZaehler,0
;rjmp NextByte
ldi r16,0x00
ldi r17,0x00
rcall setCursorPos
ldi YL,0xDC
ldi YH,0x05
ldi XL,0x85
ldi XH,0x01
ldi AdressZaehler,0
ldi r18,48
SchreibLoop:
ld r16,X
add r16,r18
rcall setchar
adiw XL,1
inc AdressZaehler
cp Adresszaehler,Hoehe
brne Schreibloop
pop r23
pop r22
pop r21
pop r20
pop r19
pop r18
pop r17
pop r16
pop ZL
pop ZH
pop YL
pop YH
pop XL
pop XH
ret
irgendwo zwischen 'SchreibeBitMap:' und 'ret' mit anderen worten: gehts auch etwas genauer? :-P
Es geht darum das, das speichern im ram nicht richtig funktioniert. manchmal gehts manchmal nicht.
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.