Das ist super danke. Hab das mit dem Reset jetzt so gelöst, dass er nach
jedem durchlauf die pinbelegung wieder abfragt und vorher PortB nochmals
komplett löscht. Ist das so in Ordnung?
1. Normales Lauflicht
2. Jeden zweite LED leuchtet
3. Läuft vor und zurück
4. Blinken im Takt
Ist für mich rein zur Übung und weil es spaß macht
;**************************************************************
; Includedatei für den 16F84A einbinden
;
#include <P16f84A.INC>
;
; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator
__CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC
;
;**************************************************************
; los gehts mit dem Programm
Init
BSF STATUS, 0 ; auf Bank 1 umschalten
MOVLW B'00000011' ; PortA RA0 und RA1 Eingang
MOVWF TRISA
MOVLW B'00000000' ; PortB alle output
MOVWF TRISB
BCF STATUS, 0 ; auf Bank 0 zurückschalten
MAIN
CLRF PORTB ; alle LEDs ausschalten
BTFSS PORTA, 0 ; überspringe wenn Pin 0 am Port A "1" ist
GOTO MAIN2
GOTO MAIN3
MAIN2
BTFSS PORTA, 1 ; überspringe wenn Pin 1 am Port A "1" ist
GOTO LAUF1
GOTO LAUF2
MAIN3
BTFSS PORTA, 1 ; überspringe wenn Pin 1 am Port A "1" ist
GOTO LAUF3
GOTO BLINK
;**********************************************************
LAUF1
BSF PORTB, 0 ; LED an RB0 einschalten
CALL WAIT ; Wartezeit
RLF PORTB,f ; laufen zur nächsten LED
GOTO MAIN
;**********************************************************
LAUF2
BSF PROTB, 0
CALL WAIT
BCF PORTB, 0
BSF PORTB, 2
CALL WAIT
BCF PORTB, 2
BSF PORTB, 4
CALL WAIT
BCF PORTB, 4
BSF PORTB, 6
CALL WAIT
BCF PORTB, 6
GOTO MAIN
;**********************************************************
LAUF3
BSF PROTB, 0
CALL WAIT
BCF PORTB, 0
BSF PORTB, 1
CALL WAIT
BCF PORTB, 1
BSF PORTB, 2
CALL WAIT
BCF PORTB, 2
BSF PORTB, 3
CALL WAIT
BCF PORTB, 3
BSF PROTB, 4
CALL WAIT
BCF PORTB, 4
BSF PORTB, 5
CALL WAIT
BCF PORTB, 5
BSF PORTB, 6
CALL WAIT
BCF PORTB, 6
BSF PORTB, 7
CALL WAIT
BCF PORTB, 7
BSF PROTB, 6
CALL WAIT
BCF PORTB, 6
BSF PORTB, 5
CALL WAIT
BCF PORTB, 5
BSF PORTB, 4
CALL WAIT
BCF PORTB, 4
BSF PORTB, 3
CALL WAIT
BCF PORTB, 3
BSF PROTB, 2
CALL WAIT
BCF PORTB, 2
BSF PORTB, 1
CALL WAIT
BCF PORTB, 1
BSF PORTB, 0
CALL WAIT
BCF PORTB, 0
GOTO MAIN
;**********************************************************
BLINK
BSF PORTB
CALL WAIT
CALL WAIT
BCF PORTB
GOTO MAIN
;**********************************************************
; Warteschleife 250 ms
WAIT
MOVLW D'250' ; 250 ms Pause
MOVFW 0x22
WAI
MOVLW .110 ; Zeitkonstante für 1ms
MOVWF 0x23
WAI2
NOP
NOP
NOP
NOP
NOP
NOP
DECFSZ 0x23, F ; 1 ms vorbei?
GOTO WAI2 ; nein, noch nicht
DECFSZ 0x22, F ; 250 ms vorbei?
GOTO WAI ; nein, noch nicht
RETLW 0 ; das Warten hat ein Ende
END