mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem mit RS232! PIC 16f88


Autor: Mario K. (mario1989)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Es soll ein byte bei "Senderpic" nach einem Tasterdruck ins TXREG 
geladen werden. Beim "Empfängerpic" sollte dieses byte aus dem RCREG 
gelesen und in eine Variable geladen werden, und weiters eine LED 
einschalten, wenn das nullte Bit gesetzt ist.

Nun zum Problem: Wenn ich im Debugmodus beim "Senderpic" das TXREG 
anschaue, wird das Byte in dieses geladen. Jedoch erhält der 
"Empfängerpic" kein Signal!! Beide PICs wurden programmiert.

Verwendete PICs: 16f88 Michrochip

Im Anhang sind die asm files!

Bitte helft mir!

Mit freundlichen Grüßen

Mario

Autor: TK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Mario,

ich hab den Code zwar nicht ganz durchgesehen - ABER:
Die Empfangsroutine für RCREG sollte in einer Interruptsequenz
ausgewertet werden.
Das label test_store existiert nicht.
Die Baudrate ist nicht definiert.
Kurz um - schau mal im Handbuch nach dem Kapitel UART.
Da sind auch Beispiele für die richtige Deklaration der UART
zum Senden / Empfangen von Bytes.
Ach so:
Mit welchem Oscillator arbeitest Du? Intern oder Extern
Ich vermute mal Intern - wegen dem OSCCAL-Register.
Das sollte übrigens nicht manuell mit einem Wert belegt werden,
sondern den Fabrikwert übernommen werden. (s. Handbuch)

Gruß
TK

Autor: Mario K. (mario1989)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Also, die Baudrate ist meines Wissens schon definiert ("SPBRG")!! Und 
auch "store" ist auf einer eigenen Ramzelle ("equ 0x20")!!

Schulkollegen meinten, dass der Code so stimmen sollte (sie haben auch 
keine Interrupts verwendet und es funktioniert!)

LG Mario

Autor: TK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit der Baudrate hab ich übersehen. Die muss aber auch zum 
Oszillator passen. Besser gesagt zur Frequenz. Und dann auch noch zum 
BRGH-Bit im TXSTA-Register.
Dann noch ein Tipp zum Programmaufbau:
Nach einem Power-On reicht es, wenn die Initialisierungsroutine EINMALIG 
angesprungen wird. Von da aus kann dann die MAIN aufgerufen werden. Die 
MAIN kann dann eine Dauerloop sein. Also nicht nochmal nach INIT 
springen.

Klar geht die Abfrage auf Empfang eines Bytes auch im Polling-Mode. Wenn 
der PIC sonst nichts zu tun hat, ist das auch OK - aber halt nicht die 
Regel, daher hab ich auch geschrieben, dass am Besten die 
Interruptroutine für den
Empfang von Daten angesprungen wird.

Wie sind deine Einsprungadressen definiert?
Resetadresse ist ORG 0x00
Interruptadresse ist ORG 0x04
Die sind nicht vorhanden. z.B:
ORG 0x00
  goto init
ORG 0x04
  retfie
init
  (hier alles initialisieren)
main
  (hier Senden oder Empfangen)
  goto  main

In deiner Empfangsroutine muss auch noch das Register TXSTA belegt 
werden, sonst wird der Port nicht auf UART Mode umgeschaltet. Und dann 
ist das BRGH-Bit auf 0 gesetzt - in deiner Senderoutine jedoch auf 1 -> 
falsche Baudrate.

Gruß
TK

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.