Daten senden über AUSART mit PIC16F88

Gast #1272333
Lesenswert?

Hallo.

Ich versuche nun schon seit Wochen Daten mit meinen PIC zu senden. Aber 
es läuft einfach nicht.
Ich habe zwei Taster über die ich jeweils ein langes Datenpaket 
versenden möchte. Ob ich das Paket so zerstückeln darf, weiß ich zwar 
auch noch nicht, aber das ist erst mal nebensächlich. Es soll ein 
serielles Datenpaket für ein XBee Funkmodul sein.

Zur Zeit sieht es noch so aus:
Wenn ich einen Taster betätige, fängt der Versand an.
0x7E und 0x00 wird versendet, doch dann wird PIR1 nicht gelöscht. Und 
ich hänge in der senden Schleife fest.

Kann mir vielleicht jemand einen Tipp geben und sich ggf meinen Code mal 
anschauen, ob das so überhaupt funktioniert.

MfG
Angehängte Dateien:
Gast #1272474
Lesenswert?

Das mit call sowie goto ist nicht weiter schlimm, das passt schon.
Was mir aufgefallen ist, weiß aber nicht, ob das der Grund ist,
Status, RP1 ist undefiniert, also könntest du in die falschen Register
schreiben, probier mal das Statusregister, goto init, oder auch da,
mit einem clrf status zu löschen. Sonst müsste man die Initialisierung
genauer nachschauen. Mir sind da schon kleine Fehler aufgefallen, wie
z.B. TX als Input declarieren, aber eins nach dem anderen.
Gast #1272492
Lesenswert?

Dann kann es noch sein, dass du den XBee überfährst, weil du TXIF und 
nicht TRMT überprüfst. Sprut schreibt dazu:
1
++ACHTUNG FALLE++
2

3
Wird eine Menge Daten ohne Pause gesendet, und als einzige Bremse das
4
TXIF-Flag abgefragt, so kann es am Empfänger der Daten zum Verschlucken 
5
von Zeichen kommen, da der Empfänger die Lücke zwischen 2 benachbarten 
6
Zeichen nicht erkennt. In diesem Fall empfehle ich nicht TXIF sondern 
7
besser TRMT im Register  TXSTA abzufragen. Dieses Bit wird erst gesetzt, 
8
wenn das zu sendende Byte komplett herausgeschoben ist. TXSTA liegt in 
9
der Bank1 !

TX muss auf Input geschaltet sein, sonst funktioniert das Empfangen 
nicht:
1
Bit SPEN (RCSTA<7>) and bits TRISB<5,2> have to
2
be set in order to configure pins, RB5/SS/TX/CK and
3
RB2/SDO/RX/DT, as the Addressable Universal
4
Synchronous Asynchronous Receiver Transmitter.

call muss immer mit return abgeschlossen werden, sonst gibt es wie 
Dieter schon sagte, einen Stack-Overflow. Chris liegt falsch.
Gast #1273009
Lesenswert?

Danke für eure Tipps!

Habe ich gleich mal umgesetzt. Nun werden alle Daten gesendet. Aber ich 
glaube die werden nur so rausgeschleudert. Denn, wenn ich dies im MPLAB 
simuliere bleibt das Bit TRMT nach dem ersten senden auf low gesetzt. 
Dann dürfte eigentlich nicht weitergesendet werden. Merkwürdig.
Habe ich das, mit dem call und dem return, richtig umgesetzt?
Angehängte Dateien:
Gast #1273039
Lesenswert?

Schon klar, daß es den Stack-Überlauf gibt, bloß mit dieser 
Programmierung ist es egal, ob ein Stack-Überlauf passiert oder nicht, 
das programm macht das identische, gleich ob ein return oder goto 
verwendet wird. Das in
der realen HW, im Simulator kann das ein Unterschied sein.

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