Hallöchen
Ich lerne gerade Assembler und habe da ein kleines Problem, wobei ich denke das es sich um ein reines Anfängerproblem handelt.
Code:
Adresse equ 0x20 ; Vergleichsadresse, kann irgendein 5bit enthalten. Zum testen schreibe ich einfach 0h
MOVLW 0h ; Wert in W
MOVWF Adresse ; W nach Register
MOVLW b'00000111' ; Komperatorausgänge nutzen
MOVWF 1Fh
BSF STATUS, RP0 ; auf BAnk 1 wechseln
BCF TRISB, 0 ; Soll als Augang fungieren
BCF STATUS, RP0 ; zurück nach Bank 0
CLRF PORTA ; Eingänge PortA auf low
CLRF PORTB ; Eingänge PortB auf low
Nach meinem Verständnis sollte hiermit der Pin RB0 als Ausgang definiert sein und alle anderen Pins ein Low level haben.
Dann möchte ich die Pegel an den Pins abfragen:
Code:
BTFSC PORTA, 0
BSF Adresse, 0
BTFSC PORTA, 1
BSF Adresse, 1
BTFSC PORTA, 2
BSF Adresse, 2
BTFSC PORTA, 3
BSF Adresse, 3
BTFSC PORTA, 4
BSF Adresse, 4
Hierbei sollten nach meinem Verständnis die BSF Befehle ignoriert werden, da die eingelesenen Pegel = 0 sind. Das scheint auch zu funktionieren.
Wenn ich aber in das Register PORTA = ffh schreibe, müssten hierbei doch die Ausgänge alle auf High stehen und somit bei dem letzten Codeabschnitt die BSF Befehle ausführen. Oder sehe ich das falsch??
Nur falls die Frage aufkommt was die Schaltung können soll:
Beim initialisieren wird das REgister Adresse mit einem Nullwert erstellt. Beim einlesen der Pin Pegel von PortA soll das anliegende Bitmuster in das Register geschrieben werden. Im weiteren Schritten die hier aber nicht aufgeführt sind soll später das Register mit einem 5 Bit Muster von PortB verglichen werden. Das macht vieleicht für euch nicht viel Sinn, aber für Mein Verständnis an diesen kleinen Teilchen unverzichtbar 
Für eure Hilfe bedanke ich mich im voraus
Lesezeichen