PIC Programmierung - EEPROM Tabelle

Guten Morgen,

meine Frage richtet sich auf die Pic-Programmierung in Assembler.

Ich hab ein kleines Programm geschrieben, womit man aus dem EEPROM einprogrammierte Werte nacheinander auslesen kann.
Hierfür dient eine Routine, welche die EEPROM Adresse immer um 1 Incrementieren lässt.
Wenn jetzt allerdings meine Tabelle zu Ende ist springt er auf eine nicht genuzte Zelle im EEPROM.

Ist es möglich einen bestimmten Bereich für eine Tabelle zu definieren (z.B. 0x00 - 0x10), so dass sich mein auslesen lediglich für diesen Bereich beschränkt??
Oder muss ich mein Incrementieren zählen lassen?? Also wenn ich 5 EEPROM Zellen benutze, dann soll er nach dem 5. Hochzählen der Adresse z.B. wieder auf die erste Springen.

ich bedanke mich schon mal vor ab.

MFG Siggi

Hi Siggi,

Oder muss ich mein Incrementieren zählen lassen?? Also wenn
ich 5 EEPROM Zellen benutze, dann soll er nach dem 5.
Hochzählen der Adresse z.B. wieder auf die erste Springen.

Jep, so läufts. Denn ein Assembler kann keine Gedanken lesen:wink:
Entweder mitzählen oder du baust ein Ende-Kriterium ein, was bei Strings gerne gemacht wird. Letztes Element ist dann z.B. eine 0. Dürfte bei dir aber nicht sinnvoll sein, da in deiner Tabelle evtl. alle Werte vorkommen könnten.

mfg Ulrich

Hallo,
das sind dann Variablen.
Du kannst dort ja eine Endvaribale setzen.
Wir haben meist ein #0 verwendet.
du kannst aer auch ein als End euin Baustein Ende Abslut setzen.
Dann weisst du das hier die Variablen absolut zuende sind.

Grüsse

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi zoomi,

das sind dann Variablen.
Du kannst dort ja eine Endvaribale setzen.
Wir haben meist ein #0 verwendet.

Was bedeutet Endvariable in Assembler?

du kannst aer auch ein als End euin Baustein Ende Abslut
setzen.
Dann weisst du das hier die Variablen absolut zuende sind.

Dunkel ist der Worte Sinn… Was meinst du damit?

mfg Ulrich

Der Programm Aufbau hat sich ja etwas verändert.

Du hast nicht mehr Daten, Datenbausteine etc.
Sonder Variablen.
Mag Sinn machen, mag keinen machen, weiss nicht, egal, ist halt so.

Lustig halt gerade mit den neuen Din und Normen.
Da muss ja jemand ein Jahr studuieren um allein nur die Din zu kapieren, bzw den derzeitigen Vorschlag. Europa lässt grüssen.
In der Steuerungstechnik ist mag es langsam ein Graus das Programme auf jeder Anlage laufen sollen.
Mag schwachsinn sein, mag gut sein, weiss nicht, egal, ist halt so.

Als letztes gibst du eine Variable ein die du als letzte Variable im Programmaufruf deklarierst.

Am besten ihr fragt mal Peter, der ist da sicher sehr Fit.

Ursprünglich im Assembler Programm muss er ja eine Deklaration einrbingen.
Varibale kommt in Akku, wird verarbeitet, eine Variable geht raus oder ein Zustand wird erbracht.
Einfach die Speicherstelle um 1 oder 5 hoch zählen zu lassen führt ja genau zu dem Problem warum er die Frage stellt.

Er brauchst also nun ein Register, sprich Varibale, um weiter in das programm gehen zu können.

Ist nun schon lange her mein Assembler, hoffe ist richtig:

Akku 1 (LDA reg1) Variable
Akku 2 (LDA value2) Endzeichen
Subtrahiere (SUB reg)
Spinge wenn Null zu Adresse (JZ label)
Oder Springe wenn grösser Null zu Adresse (JG label)

start: LDA reg1 Wert
cont: LDA value2 #0
cont: SUB reg
cont: JZ label ende
ende:

dann setzte den Counter wieder auf seien adresse 0

Start: LDA value1 00000000
Count: STO reg1 Counterwertadresse
ende: MUL startadresse

Hoffe ist hilfreich.
Grüsse

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Du kannst dort ja eine Endvaribale setzen.
Wir haben meist ein #0 verwendet.
du kannst aer auch ein als End euin Baustein Ende Abslut
setzen.
Dann weisst du das hier die Variablen absolut zuende sind.

Das mit dem Zählen ist mir klar;
aber nicht das mit den „Endvariablen“ und das mit dem "absoluten End-Baustein.

So was in etwa? mein Assembler ist schon bisschen her?

Start:stuck_out_tongue:rogrammteil
Count:LDA reg1 Zählerwert
INC
STO reg1 Zählerwert

LDA value2 5
SUB reg1 Zählerwert
LG Label Start

LDA value1 0
STO reg1 Zählerwert
MUL reg Start