-
-
Verständnisproblem mit Bitorientierten Befehlen
Hallo
Habe folgendes Verständnisproblem. Ich versuche an meinem PIC Demo Board 2 LEDs einzuschalten.
Zuerst aktiviere ich die Ausgänge und danach schalte ich sie einzeln mit dem Befehl "BSF" ein. Siehe folgeder CODE:
BSF STATUS,RP0
BCF TRISC,0
BCF TRISC,1
BCF STATUS,RP0
BSF PORTC,0
BSF PORTC,1
Das Ergebnis ist nur, dass die 2. LED leuchtet, jedoch die erste nicht. Überschreibe ich mit jedem neu geschrieben BITBEFEHL das Regsiter komplett oder was mache ich falsch? (Ich weiss das mann obigen Code vereinfachen kann, aber mich nimmt dass jetzt wunder)
MFG Marius
-
Neuer Benutzer
Öfters hier
Das liegt daran, das BCF,BSF u. a. Read-Modify-Write-Befehle sind.
Das entsprechende Register wird gelesen, ein Bit gesetzt/gelöscht
und das ganze Byte wieder zurückgeschrieben.
Durch das interne Befehlspipelining überlappen sich die Ausführungs-
zyklen aufeinaneiderfolgender Befehle.
In deinem Fall wird bei dem zweiten BSF-Befehl das Port gelesen,
bevor der erste Befehl zurückgeschrieben hat.
Abhilfe: NOP-Befehl dazwischensetzen, LAT-Register verwenden
oder beide Bits mit einem Befehl verändern,
z.B. durch movlw B'00000011'
iorwf PortX
Gruss
Digger
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen