Forum: Mikrocontroller und Digitale Elektronik Wo steckt der Fehler?


von Feldmaus (Gast)


Lesenswert?

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

von Ichbinsnur (Gast)


Lesenswert?

irgendwo zwischen 'SchreibeBitMap:' und 'ret'

mit anderen worten: gehts auch etwas genauer?   :-P

von Feldmaus (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.