char im EEPROM speichern

Gast #738501
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
1
#include <avr/io.h>  // Deklarationen
2

3
#include <avr/interrupt.h>
4

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

9

10
char abc = '0';
11

12

13

14
void EEPROM_write(unsigned int uiAddress, unsigned char ucData)
15
{
16
/* Wait for completion of previous write */
17
  while(EECR & (1<<EEWE));
18
/* Set up address and data registers */
19
  EEAR = uiAddress;
20
  EEDR = ucData;
21
/* Write logical one to EEMWE */
22
  EECR |= (1<<EEMWE);
23
/* Start eeprom write by setting EEWE */
24
  EECR |= (1<<EEWE);
25
}
26

27
unsigned char EEPROM_read(unsigned int uiAddress)
28
{
29
/* Wait for completion of previous write */
30
  while(EECR & (1<<EEWE));
31
/* Set up address register */
32
  EEAR = uiAddress;
33
/* Start eeprom read by writing EERE */
34
  EECR |= (1<<EERE);
35
/* Return data from data register */
36
  return EEDR;
37
}
38

39
void UART_Init(void)  // UART initialisieren
40
{
41
  
42

43
  UBRRL = TEILER;      // Baudrate einstellen
44
  UCSRB |= (1<<RXEN);    // Empfaenger ein
45
  UCSRB |= (1<<TXEN);    // Sender ein
46
  UCSRB |= (1<<RXCIE);  // Empfaengerinterrupt frei
47
}
48

49

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

58

59
void UART_putstr(unsigned char *zeiger)    // String bis Endemarke ausgeben
60
{
61
  while (*zeiger != 0)
62
  {
63
    while (!(UCSRA&0x20));    // warte bis Datenregister frei
64
    UDR = *zeiger;        // Zeichen nach Sendedatenregister
65
    zeiger++;                         
66
  }
67
}
68

69
char gg;
70

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

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

79

80

81
  if(received_ch == 'a')
82
  { 
83
    //abc = 'a';
84
    EEPROM_write(1, 'a');
85
  }
86
  else if(received_ch == 'b')
87
  { 
88
    //abc = 'b';
89
    EEPROM_write(1, 'b');
90
  }
91
  else if(received_ch == 'c')
92
  { 
93
  //  abc = 'c';
94
  EEPROM_write(1, 'c');
95
  }
96

97
  else if(received_ch == 'g')
98
  { 
99

100

101
    gg = EEPROM_read(1);
102
    UART_putch(gg);
103
    UART_putstr("\r\n");
104
  }
105
      
106
}
107

108

109
int main(void)  // Hauptfunktion
110
{
111

112
  UART_Init();        // UART initialisieren
113
  sei();
114
  
115
  while(1)      // Arbeitsschleife ist leer
116
  {
117
    
118

119
  } //end while(1)
120

121
} // Ende main

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