Forum: Mikrocontroller und Digitale Elektronik Datum an einer adresse im EEPROM speichern


von Stephanie (Gast)


Lesenswert?

Hi ich habe folgendes Problem
ich versuche was im EEPROM an  der adresse $B7f5  zu speichern aber es 
kommt zu einer Fehlermeldung
(HC11E1)  -----> Assembler


        ORG $B600       ; Start of EEPROM

ldx  $B7f0
  staa  5,x  ; put the data there  ()

ldx     $B7f0
  ldaa  5,x  ; get the data

wo konnte das problem liegen?

von Alexander L. (lippi2000)


Lesenswert?

Hi Stephanie,

schau bitte unter AVR im Tutorial nach. Dein Programm muss weiterhin im 
Flash stehen und der Zugriff erfolgt nur über Pointer. Beispielcodes 
gibts im Tutorial.

Gruß Alexander

von Stephanie (Gast)


Lesenswert?

Hi Alexander ich habe das Tutorial gelesen.aber ich kann doch meine 
Daten im internen (On CHIP EEPROM ) speichern oder
ich hätte gerne das im Assembler
ich denke mein Code ist richtig aber wo der Fehler liegt weiss ich nicht

von Johannes M. (johnny-m)


Lesenswert?

Alexander Liebhold wrote:
> schau bitte unter AVR im Tutorial nach.
Der HC11 ist aber absolut kein AVR, weshalb ihr das Tut hier nicht 
wirklich weiterhelfen dürfte...

von Stephanie (Gast)


Lesenswert?

Hi  Johannes das weiss ich dass der HC11 kein HC11 ist
hast du einen Vorschlag?

von Johannes M. (johnny-m)


Lesenswert?

Stephanie wrote:
> Hi  Johannes das weiss ich dass der HC11 kein HC11 ist
> hast du einen Vorschlag?
Doch, der HC11 ist ein HC11. Und der Kommentar bezog sich auf Alexanders 
Posting. Und nein, ich kann Dir nicht weiterhelfen, da ich mich mit HC11 
nicht auskenne. Ich bin nur in diesem Thread gelandet, weil Du 
offensichtlich die Forenregeln nicht gelesen hast und den Controllertyp 
nicht im Betreff angegeben hast...

von Stephanie (Gast)


Lesenswert?

LOL.ich meinte der HC11 ist kein AVR

von Peter D. (peda)


Lesenswert?

Stephanie wrote:
> ich versuche was im EEPROM an  der adresse $B7f5  zu speichern aber es
> kommt zu einer Fehlermeldung

Ich kenne den HC11 im speziellen nicht, aber in der Regel hat eine 
Fehlermeldung auch immer einen Wortlaut und der sagt ziemlich genau aus, 
wo den Assembler der Schuh drückt.

Wenn Dein Problem der englische Wortlaut ist, dann einfach copy&paste, 
wird schon jemand übersetzen können.


>         ORG $B600       ; Start of EEPROM
>
> ldx  $B7f0

Könnte mir gut vorstellen, daß der EEPROM nur für Daten ist, d.h. da 
darf kein Code stehen. Selbst modifizierender Code ist ja auch etwas 
strange.


Peter

von Eckhard (Gast)


Lesenswert?

Hallo,

der HC11 kann da alles speichern, weil er eine von Nemann Architektur 
hat. Wie allerdings generell läßt sich EEPROM nicht so einfach mittels 
STA beschreiben.

Im Datenblatt steht der EEPROM Schreibzyklus wie folgt beschrieben :

PROG LDAB #$02 EELAT = 1
     STAB $103B Set EELAT bit
     STAA $XXXX Store data to EEPROM address
     (  for valid EEPROM address see memory map for each device)
     LDAB #$03 EELAT = 1, EPGM = 1
     STAB $103B Turn on programming voltage
     JSR DLY10 Delay 10 ms
     CLR $103B Turn off high voltage and set to READ mode

Was der Assembler da für eine Fehler rauswirft weiß aber immer noch 
niemand.

Eckhard

von Alexander L. (lippi2000)


Lesenswert?

Sorry, habs überlesen, dachte es ist ein AVR.

Nun dein Code ist trotzdem falsch. Wenn du ein .org $B600 benutzt, 
bedeutet dies, dass folgende Assemblerbefehle an die Adresse $B600 
geschrieben werden. Dein Programmcode muss aber immer im 
Programmspeicher stehen. Von dort kannst an einen Wert an eine Adresse 
speichern.
Also meinetwegen:

.org $100   (Programmspeicher)
load Adresswert nach Adressregister A0
schreibe Wert an Adresse die in A0 steht

(Kenn jetzt nicht die Befehle beim HC11)

Willst du feste Werte wie Konstanten beim Programmieren an einer 
bestimmten Stelle ablegen (meinetwegen die Zahlen 5,4,13 sollen an 
Adresse $B600 stehen, dann muss es wie folgt heißen:

.org $xxxx
"Hauptprogramm im Programmspeicher"

.org $B600 (EEPROM)
.db 5,4,13


So ist das nun bei ASM üblich.

von Eckhard (Gast)


Lesenswert?

Hallo,

nochmal ein HC11 unterscheidet nicht zwischen Daten und 
Programmspeicher.
Der hat nur RAM und EEPROM. Das Programm kann natürlich auch im RAM 
laufen aber ist dann nach dem Einschalten weg. Deshalb legt man das 
Programm halt in den EEPROM Bereich.


Eckhard

von Stephanie (Gast)


Lesenswert?

Hi  Alex

Ich weisst jetzt was du meinst.

     ORG  $B600

     Data1 RMB 1

Daten

     FDB  5,4,13            ; DB.W  oder DB.B würde auch gehen

     LDX  #Daten
     LDAA 0,X               ; ACCA wird mit 5 initialisiert
     STAA <Data1

ich glaube so ist das Programm richtig

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.