Helft mir bitte jemand mit UART weiterhelfen?

Gast #366427
Lesenswert?
• ▲
▼
Hallo zusammen,

ich muss bis morgen ein kleines Programm schreiben, welches Daten von
der seriellen Schnittstelle auswertet und diese in das EEPROM
schreibt.
Nun habe ich keine Erfahrung mit UART, aber ICH MUSS es hinbekommen...

Deswegen bitte ich Euch, über den folgenden Code mal drüberzuschauen,
habe lt. Datenblatt alle notwendigen Bits gesetzt hoffe ich.

Desweiteren verstehe ich nicht, an welche Stelle ich denn jetzt die
Subroutine hinschreiben soll und wie darauf verwiesen wird, die
ausgeführt werden soll, wenn Daten im Lesepuffer bereitsliegen.

Und die letzte Frage vorerst: wie schreibt man denn Daten in das
EEPROM?
Wenn z.B. eine Bedingung vorliegt, mit welchem Befehl schreibt man denn
von der ersten Adresse des EEPROMS BITWEISE (z.B.LSB) eine "1" rein?
Also sowas wie EEPROM_0x0001 = (1 << 1);

Wenn einer Hilfe braucht, dann jetzt ;o)

Danke schon mal im voraus

Grüße

PS: Controller: mega64 mit AVR-GCC

popi
Gast #366429
Lesenswert?
• ▲
▼
Sorry ;o)

hier der nächste Versuch:

<pre>
#include <avr/io.h>
#include <avr/interrupt.h>

/* USART initialisieren */
void uart_init(void);


int main(void)
{
  /* USART initialisieren */
  uart_init();

  sei();

  /* Nichts tun. Die Interrupts erledigten den Rest */
  while (1)
    ;
}

void uart_init(void)
{
  UBRR1L = 0x51;  /* Baudrate einstellen ( Normaler Modus ) */
  UCSR1A = (1 << RXC1); //RX Interrupt erlauben
  UCSR1B = (1 << RXCIE1) | (1 << RXEN1) | (1 << TXEN1); /* Aktivieren
des Empfängers, des Senders und des "Daten empfangen"-Interrupts */
  UCSR1C = (1 << UCSZ10) | (1 << UCSZ11); //8 Datenbits, 1 Stoppbit,
keine Parität
}


SIGNAL(SIG_UART_RECV) /* Interrupt wird ausgelöst sobald neue Daten im
USART-Empfangspuffer liegen */
{
  unsigned char buffer;

  /* Daten aus dem Puffer lesen ... */
  buffer = UDR1;

  /* ... warten bis der Sendepuffer leer ist ... */
  while ( !( UCSR1A & (1<<RXC1)) )
    ;
  /* ... hier in Speicher schreiben */

}
<//pre>

Stammt von einer Internetseite und habe ihn auf die Register des MEga64
angepasst, so hoffe ich zumindnst ;o)
Laut Datenblatt müsste es so stimmen.

Grüße

popi

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.