Hallo
Dein Programm hat in "Main" einen grundsätzlichen Fehler. Ein neuer
Durchlauf kann nur erfolgen wenn Bit 0 wieder gesetzt wird (vgl. meinen
Code wieter unten)
Beim Erlernen des Programmierens, sollte das Datenblatt des verwendeten
Prozessors stets Schritt für Schritt zu Rate gezogen werden, das hilft
viel gegen "Verirrungen" und Fehlschlüsse!
Dazu gibt es in MPLAB den Simulator "MPLAB-SIM" mit welchem man (fast)
alle Möglichkeiten der PICs durchspielen kann.
-Datenblatt-
4.1 PORTA and the TRISA Register
PORTA is a 6-bit wide, bidirectional port. The corresponding data
direction register is TRISA.
...Other PORTA pins are multiplexed with analog inputs and the analog
VREF input for both the A/D converters and the comparators.
-Datenblatt Ausszug Ende-
Kurzum: Am PORTA stehen nicht 8, sondern nur 6 Bits zur Verfügung. Daher
kann "RLF" - ein 8bit-Schiebefehl an PORTA nicht ohne weiteres zum
Durchschieben eines einzelnen Bits verwendet werden! Zudem werden einige
Pins nach Reset/Neustart nicht als digitale I/O sonder als analoge
Eingänge konfiguriert.
Besser ist es da schon PORTB oder PORTC zu verwenden. Dann klappt auch
der Übertrag des letzten Bits "RB7" ins Carrybit als Indikator, dass
jetzt alle Bits durchgeschoben sind. So kann RB0 erneut gesetzt werden.
-Alternativer Code-
Nachstehend habe ich Deinen Code mal entsprechend korrigiert (Die
Initialisierung von PORTB habe ich mir geschenkt:
Main
movlw b'00000001' ;erstmal RB0=1 setzen
movwf PORTB
Main_Loop
call Delay100ms ;LED kurz zeigen, dann weiterschalten
bcf STATUS,C ;Carry=0 (wird automatisch nach PORTB,RB0 kopiert)
rlf PORTB,f ;LED um 1 bit weiter nach links schieben
btfss STATUS,C ;Carry=1? letztes Bit von RB7 nach Carry
;geschoben? Dann sind jetzt alle LEDs aus!
GOTO Main_Loop ;NEIN, weiter mit bitshift left
GOTO Main ;JA, wieder von vorn, dazu RB0=1 setzen
mfG Ottmar