PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Probleme beim UART-Empfang über Interrupt



SteffenJ
13.09.2006, 08:11
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:

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;
}
}
}

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?

Viele Grüße
Steffen

ps: Nebenher wird nur noch in einer Interrupt-Routine der Timer als Uhr benutzt.

PicNick
13.09.2006, 09:10
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.

SteffenJ
13.09.2006, 09:39
Das Rücksetzen hat nichts gebracht. Ich werde jetzt versuchen, dass ich den Timer0 und den UART auf unterschiedlich priorisierte Interrupts verteile, so dass das Lesen von RS232 nicht durch den Timer unterbrochen werden kann. Mal sehen, vielleicht funktioniert ja das...

SteffenJ
13.09.2006, 09:59
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...