Hallo,

danke für die Tipps. In der Tat waren da ein paar Fehler in der PIN-Zuordnung bei den LEDs .

Hab den Code jetzt mal wie folgt umgestalltet. Wußte leider noch nichts mit flags anzufangen. Jetzt weis ich aber um was es etwa geht:

Code:
	list p=16f84a
;**************************************************************
;*  	Pinbelegung
;*	----------------------------------	
;*	PORTA: 	Eingänge
;*		0 - PIN 17 - Tastereingang
;*		1 - PIN 18 - n.c.
;*		2 - PIN 01 - Input #4
;*		3 - PIN 02 - Input #5
;*		4 - PIN 03 - n.c.
;*	PORTB:
;*		0 - PIN 06 - Tastersignal 
;*		1 - PIN 07 - n.c.	
;*		2 - PIN 08 - n.c.
;*		3 - PIN 09 - n.c.
;*		4 - PIN 10 - LED x-Achse
;*		5 - PIN 11 - LED y-Achse
;*		6 - PIN 12 - LED z-Achse
;*		7 - PIN 13 - LED a-Achse
;*	
;**************************************************************
;
;jorues 30.03.2007
;
; Handradlogik
;
; Taktquelle: 4 MHz
;
;**************************************************************
; Includedatei für den 16F84A einbinden

	#include <P16f84a.INC>

; Configuration festlegen
; bis 4 MHz: Power on Timer, kein Watchdog, XT-Oscillator

	__CONFIG	_PWRTE_ON & _WDT_OFF & _XT_OSC
;***************************************************************
; Variablen festlegen

Input  Equ	0x20
Input_kor	Equ	0x21
Result	Equ	0x22
loops   Equ     0x24            ; Zähler für Warteschleife 
loops2  Equ     0x25            ; Zähler für Warteschleife  

; Constanten festlegen
	
Ini_con Equ	B'00000000'		; TMR0 -> Intetupt disable
digit0 Equ B'00000000'			; Wert0 festlegen
digit1 Equ B'00000100'			; Wert1 festlegen
digit2 Equ B'00001000'			; Wert2 festlegen
digit3 Equ B'00001100'			; Wert3 festlegen
LED_X Equ B'10000000'			; LED für X-Achse
LED_Y Equ B'01000000'			; LED für Y-Achse
LED_Z Equ B'00100000'			; LED für Z-Achse
LED_A Equ B'00010000'			; LED für A-Achse
;*************************************************************
;Reset vector
; This code will start executing when a reset occurs.

        ORG 0x0000

;**************************************************************
; Das Programm beginnt mit der Initialisierung

Init	

	bsf     STATUS, RP0		; Bank 1
	movlw	B'11111111'		; PortA alle inputs 
	movwf	TRISA			; 
	movlw	B'00000000'		; PortB alle outputs 
	movwf	TRISB			;
	bcf     STATUS, RP0		; Bank 0
	clrf	PORTA		
	clrf	PORTB		
				
	movlw   Ini_con     		; Interupt disable
	movwf   INTCON
	clrw

;****************************************************************
Main
   
	movfw   PORTA		; Port A lesen und nach W kopieren >> W = PORTA
				;
	movwf   Input         	; von W in Input (0x20) kopieren >> Input = W
				;
	andlw   12            	; W = W & 0x0C, Zero-Flag in STATUS ggf. auf 1 wenn Ergebnis 0
				;
	movwf   Input_kor     	; Input_kor = W
				; jetzt haben wir also den Originalzustand von PORTA in Input und den sauberen 
				; Zustand in Input_kor und W
				;
 	clrw               	; W löschen  >> nicht nötig, wir brauchen Input_kor ja gleich wieder
				;
	clrf	PORTA		; Alle Leitungen auf 0 (LOW)
	clrf	PORTB		;

;****************************************************************************************************************
;PORTB auf 10000000 (LED_X) wenn Input_kor = 00000000 (digit0)

X_achse     			
	
	call    Wait            ; Wartezeit 
   	movfw   Input_kor	; Input_kor wird in W geladen 
				; 
	xorwf   digit0,0        ; Input_kor und digit0 werden verglichen, Ergenbins in W
				; wenn W gleich digit0, dann liefert XOR 0; das setzt 
				; das Zero-Flag in STATUS, und das kannst Du testen
				;
	movwf	Result          ; Ergebnis wird in Result gespeichert >> wenn Du magst, brauchen wir aber nicht
				;
	bnz	Y_achse        	; >> ungleich 0, war's also nicht (Branch on Non Zero)
	bsf	PORTB,7         ; Bit 7 von PORTB wird auf high gesetzt, die LED für X-Achse leuchtet

;****************************************************************************************************************
;PORTB auf 01000000 (LED_Y) wenn Input_kor = 00000100 (digit1)

Y_achse     			

	call    Wait            ; Wartezeit 
   	movfw   Input_kor	; Input_kor wird in W geladen 
				; 
	xorwf   digit1,0        ; Input_kor und digit1 werden verglichen, Ergenbins in W
				; wenn W gleich digit1, dann liefert XOR 0; das setzt 
				; das Zero-Flag in STATUS, und das kannst Du testen
				;
	movwf	Result          ; Ergebnis wird in Result gespeichert >> wenn Du magst, brauchen wir aber nicht
				;
	bnz	Z_achse        	; >> ungleich 0, war's also nicht (Branch on Non Zero)
	bsf	PORTB,6         ; Bit 6 von PORTB wird auf high gesetzt, die LED für Y-Achse leuchtet

;****************************************************************************************************************
;PORTB auf 00100000 (LED_Z) wenn Input_kor = 00001000 (digit2)

Z_achse
     			
	call    Wait            ; Wartezeit 
   	movfw   Input_kor	; Input_kor wird in W geladen 
				; 
	xorwf   digit2,0        ; Input_kor und digit2 werden verglichen, Ergenbins in W
				; wenn W gleich digit2, dann liefert XOR 0; das setzt 
				; das Zero-Flag in STATUS, und das kannst Du testen
				;
	movwf	Result          ; Ergebnis wird in Result gespeichert >> wenn Du magst, brauchen wir aber nicht
				;
	bnz	A_achse        	; >> ungleich 0, war's also nicht (Branch on Non Zero)
	bsf	PORTB,5         ; Bit 5 von PORTB wird auf high gesetzt, die LED für Z-Achse leuchtet

;****************************************************************************************************************
;PORTB auf 00010000 (LED_A) wenn Input_kor = 00001100 (digit3)

A_achse     			

	call    Wait            ; Wartezeit 
   	movfw   Input_kor	; Input_kor wird in W geladen 
				; 
	xorwf   digit3,0        ; Input_kor und digit3 werden verglichen, Ergenbins in W
				; wenn W gleich digit3, dann liefert XOR 0; das setzt 
				; das Zero-Flag in STATUS, und das kannst Du testen
				;
	movwf	Result          ; Ergebnis wird in Result gespeichert >> wenn Du magst, brauchen wir aber nicht
				;
	bnz	X_achse        	; >> ungleich 0, war's also nicht (Branch on Non Zero)
	bsf	PORTB,4         ; Bit 4 von PORTB wird auf high gesetzt, die LED für A-Achse leuchtet

;****************************************************************************************************************
   	
	goto Main 

;****************************************************************************************************************
; Warteschleife 250 ms

Wait
        movlw   D'250'          ; 250 ms Pause
        movwf   loops 

Wai
        movlw   .110           ; Zeitkonstante für 1ms
        movwf   loops2
Wai2    nop                    ; 
        nop
        nop
        nop
        nop
        nop
        decfsz  loops2, F      ; 1 ms vorbei?
        goto    Wai2           ; nein, noch nicht
                               ;
        decfsz  loops, F       ; 250 ms vorbei?
        goto    Wai            ; nein, noch nicht
        retlw   0              ; das Warten hat ein Ende

        end
Habs jetzt auch versuch, mit dem Ergebnis, dass nach dem einschalten erst RB7 und kurz darauf RB5 auf high, logisch 1, gehen.

Ich bin mir immer noch nicht so sicher, ob mein Grundgerüst stimmt.
Vielleicht könnte da ein PIC experte mal schnell einen Blick darauf werfen???

Vielen Dank euch allen

LG Jo