Weiß nicht recht, man sieht ja nicht, was für einen Monstercode der C da zusammenpfriemelt. Nur um es auszuschliessen: Probier' mal das Rücksetzen von RCIF erst am ENDE der Routine. Nutzt's nix, schad's nix.
Hallo zusammen,
ich versuche mit einem PIC18F452 einen GPS-String von 75 Zeichen Länge von der GPS-Maus zum PIC zu übertragen. Zu Beginn hatte ich diese Abfrage zyklisch, also über Polling gemacht. Da lief es prima.
Jetzt habe ich den Empfang der GPS-Daten in einer Interrupt-Routine programmiert:
Hier "verschluckt" der PIC immer das 43. Zeichen. Jetzt die Frage: Kann es sein, dass der mit 4Mhz getaktete PIC (also mit Vorteiler dann 1Mhz) zu langsam für die 9600Baud des zu empfangenden Signals ist? Oder habe ich einen grundlegenden Denkfehler in meiner Empfangsroutine?Code:if (PIR1bits.RCIF) { PIR1bits.RCIF=0; if (RCREG=='$') { stringzeiger=0; fertig=0; } if (fertig==0) { chs[stringzeiger]=RCREG; stringzeiger++; if (stringzeiger==74) { stringzeiger=0; fertig=1; } } }
Viele Grüße
Steffen
ps: Nebenher wird nur noch in einer Interrupt-Routine der Timer als Uhr benutzt.
Weiß nicht recht, man sieht ja nicht, was für einen Monstercode der C da zusammenpfriemelt. Nur um es auszuschliessen: Probier' mal das Rücksetzen von RCIF erst am ENDE der Routine. Nutzt's nix, schad's nix.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
So, habe jetzt die Prioritäten geändert. Scheint auf dem ersten Blick zu funktionieren. Ist wohl dann so, dass die Timer0-Routine immer den RS232-Empfang zu lange unterbrochen hatte und dadurch ein Zeichen flöten gegangen ist...
Lesezeichen