Guten morgen

So, nachdem ich mich nun sehr intensiv aber erfolglos mit der Fehlersuche beschäftigt habe, hoffe ich dass ihr mir helfen könnt.

Hier erstmal der Code:

Code:
; PIC auswaehlen
	list p=16f628a

; Include Datei fuer den PIC
	#include <p16f628a.inc>

; Config Word / Code protection off / Low voltage programming off 
; Brown out off / Power up off / Watchdoc off / Oscilator XT / Pin RA5 digital
	__CONFIG B'11111110000001'	;3F09h

;------------------------------------------------------------------------------

Init
	
	; Comperatorausgaenge als I/O nutzen
	BANKSEL	CMCON		; In Bank wechseln
	MOVLW	B'00000111'	; Wert 0x7h nach Register W
	MOVWF	CMCON		; Register W nach CMCON

	; Pins am PortA definieren (1=Eingang 0=Ausgang)
	BANKSEL	TRISA		; In Bank wechseln
	MOVLW	B'00100011'	; Wert 0x23h nach Register W
	MOVWF	TRISA		; Register W nach TRISA

	; Level an Pins PortA definieren
	BANKSEL	PORTA		; In Bank wechseln
	MOVLW	B'00000000'	; Wert 0x0h nach Register W
	MOVWF 	PORTA		; Register W nach PortA
	MOVLW	B'01010101'	
	MOVWF	0x21

;------------------------------------------------------------------------------

S1
	
	; Pruefen ob DIP1 eingeschaltet
	BANKSEL PORTA		; In Bank wechseln
	BTFSS	PORTA, 0	; High Level an RA0 ?
	GOTO	UP1		; Sprung nach UP1
	CALL 	UP2		; Sprung nach UP2

	
	; Aufruf Unterprogramm Vergleich 
	CALL Comp
	
	; Schleife durchlaufen solange DIP1 = high
	GOTO 	S1		; Schleife
	
;------------------------------------------------------------------------------

UP1
	; Anzeigen Status LED an Pin RA2
	BCF	PORTA, 2	; Status LED aus 
	GOTO	S1

UP2	; Loeschen Status LED an Pin RA2
	BSF	PORTA, 2	; Status LED ein

	RETURN


;------------------------------------------------------------------------------

Comp
	; Vergleich der Port-Level mit Register Hardwareadresse HwAdr (0x21)
	BANKSEL	PORTB		; In Bank 0 wechseln
	MOVFW	PORTB		; Wert aus PortB in Register W
	MOVWF	0x22		; Register W nach 0x22
	MOVFW	0x21		; Register 0x22 einlesen
	SUBWF	0x22, 0		; Register vergleichen durch Subtraktion
	BTFSC	STATUS, 2	; Pruefen ob Zero Flag gesetzt
	BSF	PORTA, 4	; Out schalten
	BTFSS	Status, 2	; Pruefen ob Zero-Flag gesetzt
	BCF	PORTA, 4	; Out ausschalten
	RETURN			; Ruecksprung

;------------------------------------------------------------------------------

; Ende
	END
Ich habe mit den Kommentaren nicht gegeizt, da ich noch in der Anfängerphase bin und ich damit besser zurecht komme.

Zum Verständnis hier nochmal die Erklärung was der Code können soll:

Wenn PortA RA0 = low dann mache garnix

Wenn PortA RA0 = high dann schalte Ausgang PortA RA2 auf high
Dadurch wird eine LED eingeschaltet. Der Status der LED wird so lange erhalten wie PortA RA0 = high

Dann wird ein Wert in das Register 0x21h geschrieben. In diesem Beispiel der Wert 0x55h. Solange PortA RA0 auf high soll ein Vergleich zwischen den Pegel an PortB und dem Register 0x21h stattfinden. Dafür wird der Wert durch Subtraktion verglichen. Wenn der Wert gleich ist wird das Zero-Flag gesetzt. Dieses frage ich ab. Wenn high, dann schalte PortA RA4 auf high. Wenn Zero-Flag nicht gesetzt dann PortA RA4 = low.


Im Simulator funktioniert das ganze offensichtlich fehlerfrei.

jedoch in der Schaltung bekomme ich den PortA RA4 nicht auf high.

Jedoch macht mich etwas stutzig. Im Pic Simulator kann ich im Register PORTB keine Änderung feststellen. In der OPtion Controller View kann ich am PortB klicken wie ich will. Das Register zeigt keine Änderung. Bei PortA stellt sich das Register wie erwartet. Ist hier ein PIC Controller User der weiß was ich meine ??

Für jede Hilfe bin ich dankbar!!