Hallo zusammen... ich arbeite zur zeit mit dem PIC16F877, für diesen habe wurde das beigelegt Programm geschrieben. Das Programm entfängt Zeichen von der seriellen Schnittstelle und sendet diese auch gleich wieder zurück. Weiter schreibt er die Zeichen auch noch auf einen Ausgang. Mein Probem ist nun wenn ich einen "Lehrzeichen" und dann ein "w" senden, kommt nur das "Lehrzeichen" und dann ein 00H zurück. Wenn aber nun "ww" gesendet wird bekomme ich nur "w" zurück. Der Efekt ist auch noch bei ein paar anderen Zeichen vorhanden. Allerdings werden die Daten richtig auf dem Ausgang geschrieben. Meiner Meinung nach kann es an dem Programm nicht liegen(habe eine ganze Menge Simulationen laufen lassen. Der verwendete MAX232 ist scheint auch i.O. zusein, habe ihn mal die gesendeten Daten gleich wider zurück schicken lasse. Hat einer von Euch mal derartiege Probeme gehabt? MfG Tom
Hallo Tom, Erster Fehler in der ISR, Du lädst das Statusreg. mit movf zurück, was das Z-Flag verändert. Das sollte aber nicht das Problem sein. (oder vielleicht doch) PIE1,RCIF wird durch lesen von RCREG zurückgesetzt, brauchst Du also nicht per Hand zu machen. Allerdings sollte man in der ISR abfragen ob der Interupt überhaupt freigegeben ist und das Flag abfragen. Gut bei dir ist nur ein Interupt freigegeben da sollte eigentlich nichts weiter passieren. Vor dem Beschreiben von TXREG sollte man überprüfen, ob PIR1,TXIF gesetzt ist, sonst könnte ein Wert verloren gehen aber das dürfte auch nicht das Problem sein, da die Daten ja so gesendet werden wie sie reinkommen und die Zeit zwischen zwei Bytes ja mindestens 500µs (=500 Befehlszyklen @4MHz) beträgt. Könnte es evtl. sein, das b eim Sender ein Paritätsbit mit gesendet wird? Das könnte den Effekt erklären. MfG Steffen
Hallo Steffen; mit der ISP du hast du natürlich recht. Aber meiner Meinung nach überprüft man das TXSTA,TRMT -bit auf Pufferüberlauf. Wie auch immer selbst mit dem Änderungen ist der Fehler immernoch da.
Hallo Tom, Du mußt warten bis das Transmit Shift Register (TXSTA,TRMT) auch wirklich leer ist, bevor Du das nächste Zeichen ins TXREG lädst, sonst werden da wirklich Zeichen verschluckt. MFG Olli
Habe den Fehler gefunden! Das Probem liegt am PORTB,3. Scheinbar ist dieser Anschluss defekt. Wenn die Daten nicht auf den PORTB geschrieben werden läuft das Programm perfekt.
Daran sollte es eigentlich nicht liegen. Was mir aber noch aufgefallen ist, Du initialisierst PortC nicht. MfG Steffen
Hallo Steffen, sobalt das bit3 vom Portb setze bricht die Spannung auf der Platiene zusammen, dabei ist an ihm gerade mal eine 2mA Led angeschlossen. Zum PortC kann ich dich beruiegen. Das Programm das ich euch zu verfügung gestellt habe, ist nur ein Ausschnitt eines ca. 600 Zeilen-Programmes, und in diesem ist der PortC initialisierst. Aber Danke für den Hinweis
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.