Können PIC lügen?

Gast #2586032
Lesenswert?

Moin Moin!

Ich habe ein Phänomen, was ich, mit meinem anscheinend sehr beschränkten 
Verstand, nicht begreifen kann.

Wie kann es kommen, dass man in einem SFR Register ein Bit ausließt und 
es anstatt einer 1, eine 0 erkennt?

Ich frage in der Interruptroutine das Bit 2 vom SSPSTAT Register ab und 
bekomme im ersten Durchlauf als Ergebnis eine 1 und beim zweiten 
Durchlauf eine 0.
Wenn ich im zweiten Durchlauf einen Breakpoint bei -movwf  SSPSTAT_save- 
setze, ist im Zwischenspeicher SSPSTAT_save das Bit 2 = 0 und wenn ich 
im single-step weiter gehe ist das Ergebnis der Abfrage auf SSPSTAT,2 = 
1.

Wie kann das sein?

r_w_abfr    nop
            banksel    SSPSTAT
            movf       SSPSTAT,0     ;Test: Ablaufuntersuchung
(B)         movwf      SSPSTAT_save  ;Test: Ablaufuntersuchung
            btfsc      SSPSTAT,2     ;read/write Abfrage
            goto       schreiben
            goto       lesen

Auch wenn ich das Bit, bei dem Ergebnis von 0, wieder zur Adresse 
-r_w_abfr- schicke und weitere 255 mal abfrage, ob es auch wirklich 0 
und nicht doch vielleicht 1 ist, macht es die Fehler.

Hoffe sehr, dass jemand das entscheidende Bit mehr an Verstand hat als 
ich ;) und mir weiter helfen kann!?

Gruß
Daniel1979
Gast #2586061
Lesenswert?

Patrick

1. PIC 16F877

2. Der PIC ist als Slave geschaltet, wird von einem weiteren Prozessor 
der als Master arbeitet, durch die Slave Adresse, angesprochen und 
sendet lediglich ein Byte zurück an den Master. Da der Slave in dieser 
Kommunikation lediglich senden soll, kam es zu Störungen weil er in den 
lesen-Programmteil springt.

3.Datenblatt weitestgehend gelesen- kenne es aber noch nicht auswendig!

4.Muss gestehen -Errata Sheet- sagt mir nichts, was ist das und wo finde 
ich es?
Gast #2586067
Lesenswert?

jaff schrieb:
> Kann es sein, dass sich
> der Zustand unabhängig von Deinem Softwareteil ändert?


Den Master habe ich direkt nachdem ich den Slave zum schreiben 
adressiert habe, durch einen Breakpoint still gelegt. Also bin ich mir 
ziemlich sicher, dass sich bei den I2C Bus Register nichts mehr ändern 
kann, da keine Signale mehr anliegen.
Gast #2586081
Lesenswert?

Direkt aus'm Datenblatt:

>>
bit 2 -  R/W: Read/Write bit Information (I2C mode only)
This bit holds the R/W bit information following the last address match. 
This bit is only valid from the
address match to the next START bit, STOP bit or not ACK bit.
In I2 C Slave mode:
1 = Read
0 = Write
In I2 C Master mode:
1 = Transmit is in progress
0 = Transmit is not in progress
Logical OR of this bit with SEN, RSEN, PEN, RCEN, or ACKEN will indicate 
if the MSSP is in IDLE mode.
>>

hth
PICfan

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren