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

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