Hallo wolf***!

Ich habe es versucht Dir das, was oben der kalledom geschrieben habe, einfacher zu erklären.

So wie ich es aus Deinem programm sehe, sollen die LED Muster im RAM abgelegt werden und danach daraus am PORTB ausgegeben werden.

Die Muster lassen sich mittels einer Schleife mit indirekter Adressierung nich ablegen, da der nächste Wert nicht aus dem vorherigen mit "incf" oder "decf" erzeugt werden kann.

Ich würde Dir empfehlen, die LED Muster folgendemassen im RAM abzulegen:

movlw Wert1
movwf RAM1
movlw Wert2
movwf RAM2, u.s.w., wo RAM ist eine Speicherstelle die mit absoluter Adresse (z.B. 0x40) oder einem Label (z.B. LED1) direkt adressiert wird.

Die so im RAM abgelegte Werte können danach nacheinander mit indirekter Adressierung in W Register eingelesen und danach ins PORTB eingeschrieben werden, z.B. so:

movlw 0x40 oder movlw LED1
movwf FSR
movf INDF,0 (das ist die Speicherstelle, dessen Adresse sich im FSR Register befindet)
movfw PORTB

incf FSR,1 (die Adresse der zu lesender Speicherstelle um 1 erhöhen)

movf INDF,0
movwf PORTB u.s.w.

Das ganze kann man natürlich in einer Schleife mit Zähler machen, so wie Du es in Deinem Programm hast.

Du musst unterscheiden zwischen Programm- und Dataspeicher und entsprechend programmieren. Dein Fehler war auch, das Du den Wert aus dem SFR lesen wolltest, der befindet sich aber immer im INDF Register.

MfG