PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Verständnisproblem mit Bitorientierten Befehlen



Marius.Meier
22.09.2006, 23:53
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

digger
23.09.2006, 09:51
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