EEProm lesen funktioniert nicht

OP #3794745
Lesenswert?

Liebes Forum,
ich habe einen ATmega32 und habe ein Programm mit Assembler geschrieben.
Ich will aus meinem EEprom das erste von 8 Bytes laden, und an PortD 
ausgeben. Doch leider wird an PortD ständig 0b11111111 ausgegeben, kann 
mir jemand sagen warum?
1
.include "m32def.inc"  ; Definitionsdatei
2

3
.cseg // Programm Code für den Flash Speicher
4

5
//  Deklaration von Konstanten //////////////////////////////////////
6
  .equ anim_res = 8
7

8
//   Definitionen ////////////////////////////////////////////////////
9
  .def Count1 = R16
10

11
  .def WaitCount1 = R17  
12
  .def CharAddr1  = R18
13
  .def CharAddr2  = R19
14
  .def AnimCount  = R23
15

16
  .def Xc = R20
17
  .def Yc = R21
18
  .def Zc = R22
19
  
20
//  Stackpointer initialisieren
21
  LDI  R16, low(RAMEND)
22
  OUT  SPL, R16
23
  LDI  R16, high(RAMEND)
24
  OUT  SPH, R16
25

26
//  Hauptroutine ////////////////////////////////////////////////////
27
  MAIN:
28
  
29
  // Chip initialisieren
30
  RCALL INIT
31

32
  //  Starte Animationsschleife
33
  RCALL ANIMATION_LOOP
34

35
  RJMP MAIN
36
// //////////////////////////////////////////////////////////////////
37

38
//  Initialisierung /////////////////////////////////////////////////
39
  INIT:
40

41
  //  I/O Port Richtung definieren
42
  LDI R16,  0xFF       
43
  OUT DDRA, R16       
44
  OUT DDRB, R16
45
  OUT DDRC, R16
46
  OUT DDRD, R16
47

48
  //  EEPROM Zeiger Adresse resetten
49
  LDI     CharAddr1,high(daten)               ; Z-Zeiger laden
50
  LDI     CharAddr2,low(daten)
51

52
  //  Z Byte löschen
53
  LDI Zc,0b00000000
54

55
  RET
56
// //////////////////////////////////////////////////////////////////
57

58
//  ANIMATION_LOOP    ///////////////////////////////////////////////
59
  ANIMATION_LOOP:
60
    RCALL Display_CHAR
61
  RJMP ANIMATION_LOOP
62

63
  // Zeige Symbol an
64
  DISPLAY_CHAR:
65
    // Y-Coordinate zurücksetzen
66
    RCALL RESET_Y_COORD
67
    RCALL RESET_X_COORD
68

69
    LDI AnimCount,anim_res
70
    DISPLAY_CHAR_sub1:  
71
      //  LOAD_Z_Byte
72
      RCALL LOAD_Z_BYTE
73
  
74
      //  Warte 10 µS
75
      RCALL Wait_10_muS
76
      ;LDI Zc,0b00000000
77

78
      //  Bewege X Coordinate um 1
79
      RCALL NEXT_X_COORD
80

81
    DEC AnimCount
82
    BRNE DISPLAY_CHAR_sub1
83
  RET
84

85
  // Lade Z_Byte aus EEProm Char
86
  LOAD_Z_BYTE:
87
      SBIC    EECR,EEWE      ; prüfe ob der vorherige Schreibzugriff
88
                                  ; beendet ist
89
      RJMP    LOAD_Z_BYTE      ; nein, nochmal prüfen
90
 
91
      OUT     EEARH, CharAddr1  ; Adresse laden
92
      OUT     EEARL, CharAddr2    
93
      SBI     EECR,  EERE      ; Lesevorgang aktivieren
94
      IN      Zc,    EEDR      ; Daten in Z-Byte ablegen
95
    OUT     PORTD, Zc
96
    RET
97

98
// //////////////////////////////////////////////////////////////////
99
// ...
100
/////////////////////////////////////////////////////////////////////
101

102
.eseg  // Daten der 8x8 Chars für das 2D Animationssystem
103
daten:
104
    .db     0b00011000
105
    .db     0b00100100
106
    .db     0b01000010
107
    .db     0b10000001
108
    .db     0b10000001
109
    .db     0b01000010
110
    .db     0b00100100
111
    .db     0b00011000

Danke für eure Hilfe,
m.f.G.: Developer_x
#3795007
Lesenswert?

Hallo K.R.
na der beitrag war ja bisher ein Selbstgespräch :-)
Aber trotzdem erfolgreich...

Aber wieso erst flahen und dann Eeprom laden?
Ich habe meinen Atmel schun gefühlt hundert Mal geflashed und nie ein 
Eeprom drüber gebügelt und trotzdem sind alle Parameter noch vorhanden.
Es gibt aber beim AVR Studio irgendwo ein Hacken damit der Eprom bei 
Device löschen nicht mit gelöscht wird.
#3795329
Lesenswert?

Du kannst deine EEPROM Daten auch im Code unter .eseg schreiben dann 
wird es gleich mit geflashed mindestens im Avr-Studio.

.ESEG ;* Data table:
.db 0x46 ;data00 = F
.db 0x52 ;data01 = R
.db 0x4F ;data02 = O
.db 0x48 ;data03 = H
.db 0x45 ;data04 = E

.eseg
Data: .db 0x6f, 0x06, 0xab, 0x8f, 0xc6, 0xcd, 0xed, 0x07, 0xef, 0xcf, 
0x01, 0x02, 0x03, 0x04, 0x05, 0x06im Quelltext steht?

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