mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interrupt WinAVR Problem


Autor: Sebastian Geier (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich probiere gerade alle möglichen Interrupts des AT90s4433 mit WinAVR
aus. Leider klappts mit dem UART Rx Interrupt nicht.
Mein Programm soll ganz einfach sein:
Sobald ich mit einem Terminalprogramm eine Zahl sende, soll diese an
den Lampen des PORTBs ausgegeben werden. (Verwende das STK500.)

Folgendes habe ich gemacht:
PORTB auf Ausgabe gestellt (DDRB=0xFF).
RXIE, RXCIE, TXCIE im UCSRB Register angeschaltet.
Die Baudrate auf 38000 in UBRR eingestellt.
Die globalen Interrupts mittels sei() freigeschaltet.
Als Interruptvektor habe ich SIG_UART_RECV gewählt.

Leider funktioniert es nicht.
Könnte mir jemand vielleicht sagen, was ich falsch gemacht habe bzw.
vergessen?

Vielen Dank

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht, weil die Baudrate bei 38400 liegen müsste?
Dann solltest du erst die Baudrate und dann die UART-Flags einstellen.
Du weisst auch, dass PORTB=0x00 beim STK500 ein Leuchten aller LEDs
nach sich zieht?!

Autor: Sebastian Geier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ich 38000 geschrieben habe, war ein versehen, es ist natürlich
38400.
Das alle Lampen leuchten weiß ich, ist ja soweit egal. Sobald eine Zahl
gesendet wird ändert sich ja was an den Lampen.

Habe die Baudrate jetzt zuerst eingestellt, leider ohne Veränderung am
Problem.

Autor: Sebastian Geier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey, jetzt klappts doch. War ein kleiner Fehler beim Aufspielen des
Programms.

Eine Frage hätte ich allerdings noch.

Ich weiß wofür SIG_UART_RECV und SIG_UART_TRANS vorhanden ist. Aber bei
SIG_UART_DATA....wofür ist das? Andere Programme, z.B. Codevision
verwenden auch nur 2 Typen Interrupt.

Danke

Autor: Rahul Der trollige (rahul)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
_TRANS wird verwendet, wenn man wissen will, ob ein Byte vollständig
gesendet wurde (halbduplex-Übertragungen wie RS485).
_DATA meldet, dass das UDR frei ist, und neue Daten in dieses Register
geschrieben werden können.

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.