mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Daten senden über AUSART mit PIC16F88


Autor: Benjamin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter Werner (dds5)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du rufst von main aus die an und aus Routinen mit call auf, kehrst aber 
nicht mit return sondern goto main zurück - das gibt einen 
Stacküberlauf.

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Sascha (Gast)
Datum:

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

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

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

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

Autor: Benjamin (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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?

Autor: Chris (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
senden
    bsf  STATUS,RP0
    btfss   TRMT,TXSTA

Im letzten Befehl stimmt die Reihenfolge nicht.

Autor: Benjamin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mensch, stimmt ja!

 btfss   TXSTA,TRMT

Vielen Dank! Dann mach ich mich jetzt mal ran, meinen ersten PIC zu 
brennen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.