www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik char im EEPROM speichern


Autor: heinrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

ich habe ein programm geschrieben welches einen char in den eeprom 
speichern und auch wieder auslesen soll. Nur leider funktioniert die 
ganze sache nicht so richtig. Wenn jemand den Fehler findet wäre ich 
sehr sehr dankbar.

Mfg. Heinrich


#include <avr/io.h>  // Deklarationen

#include <avr/interrupt.h>

#define BAUD 9600  // Symbol fuer Baudrate
#define TAKT 3686400  // Symbol fuer Controllertakt
#define TEILER (long)TAKT/(16*(long)BAUD) - 1   // Symbol fuer Teiler


char abc = '0';



void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
{
/* Wait for completion of previous write */
  while(EECR & (1<<EEWE));
/* Set up address and data registers */
  EEAR = uiAddress;
  EEDR = ucData;
/* Write logical one to EEMWE */
  EECR |= (1<<EEMWE);
/* Start eeprom write by setting EEWE */
  EECR |= (1<<EEWE);
}

unsigned char EEPROM_read(unsigned int uiAddress)
{
/* Wait for completion of previous write */
  while(EECR & (1<<EEWE));
/* Set up address register */
  EEAR = uiAddress;
/* Start eeprom read by writing EERE */
  EECR |= (1<<EERE);
/* Return data from data register */
  return EEDR;
}

void UART_Init(void)  // UART initialisieren
{
  

  UBRRL = TEILER;      // Baudrate einstellen
  UCSRB |= (1<<RXEN);    // Empfaenger ein
  UCSRB |= (1<<TXEN);    // Sender ein
  UCSRB |= (1<<RXCIE);  // Empfaengerinterrupt frei
}


void UART_putch(unsigned char data)         // warten und Zeichen nach Sender  
{
  //warte bis UDR leer ist UCSRA / USR bei z.B.: 2313
  while (!(UCSRA&0x20));
  //sende
  UDR = data;
}


void UART_putstr(unsigned char *zeiger)    // String bis Endemarke ausgeben
{
  while (*zeiger != 0)
  {
    while (!(UCSRA&0x20));    // warte bis Datenregister frei
    UDR = *zeiger;        // Zeichen nach Sendedatenregister
    zeiger++;                         
  }
}

char gg;

SIGNAL(SIG_UART_RECV)  // Interrupt-Service fuer Empfaenger
{
register unsigned char received_ch;    // Hilfsregister

  received_ch = UDR;  
//  uart_putch(received_ch);            // Zeichen abholen
  while (!(UCSRA&0x20));        // warte bis Datenregister frei



  if(received_ch == 'a')
  { 
    //abc = 'a';
    EEPROM_write(1, 'a');
  }
  else if(received_ch == 'b')
  { 
    //abc = 'b';
    EEPROM_write(1, 'b');
  }
  else if(received_ch == 'c')
  { 
  //  abc = 'c';
  EEPROM_write(1, 'c');
  }

  else if(received_ch == 'g')
  { 


    gg = EEPROM_read(1);
    UART_putch(gg);
    UART_putstr("\r\n");
  }
      
}


int main(void)  // Hauptfunktion
{

  UART_Init();        // UART initialisieren
  sei();
  
  while(1)      // Arbeitsschleife ist leer
  {
    

  } //end while(1)

} // Ende main


Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du schon den AVR-GCC verwendest, warum dann nicht die fertigen 
Funktionen aus der eeprom.h? Abgesehen davon ist SIGNAL veraltet und 
sollte nicht mehr verwendet werden.

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.