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
Welcher PIC? Welche Hardware-Revision? Datenblatt gelesen? Errata Sheet gelesen? Sobald alle vier o. g. Punkte erfüllt sind, bitte nochmals mit detaillierter Fragestellung melden.
Meister welcher PIC denn genau? Kannst du dieses Verhalten auch beim Betrieb auserhalb des ICD / der Simulation beobachten. Häng mal ne LED an und schreib ein kleines Testprogramm dazu.
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?
Das Bit 2 fragt den Zustand des I2C-Buses ab. Kann es sein, dass sich der Zustand unabhängig von Deinem Softwareteil ändert?
B. Limer (b8limer) PIC16F877 Danke für den Tipp, werde es gerade mal ausprobieren- zweifel ein bisschen, ob mir das weiter hilft- aber dümmer werde ich bestimmt nicht ;)
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.
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
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.