Nochmal PIC-Probleme

Hallo,
tut mir echt leid, aber ich muss schon wieder nerven.
Baue gerade wieder ein PIC-Projekt und programmiere natürlich „quick-and-dirty“, soll heißen, ich nehme vorhandene Programteile von alten Projekten.
Klappte bisher auch immer ganz toll, nur heute bin ich am Verzweifeln.
Mein Problem liegt beim EEprom. Schreiben ist OK, aber beim Auslesen krieg ich für mich unlösbare Probleme.

Also wenn da steht:

movlw .0
call EEadrset
call EEread
;movwf eins

dann läuft das Programm, nur die Daten fehlen =8o(

Mache ich das Programm richtig scharf, also ohne das Semikolon, hängt sich das Teil auf.

movlw .0
call EEadrset
call EEread
movwf eins

Ich hab inzwischen ales durch, nur diese blöde Anweisung von „w“ nach „eins“ verursacht das Problem.
Hab auch schon den Variablennamen geändert, nichts. Selbst wenn ich ab dieser Stelle sowohl „w“ als auch „eins“ nicht mehr benutze, das Programm bleibt in dieser Zeile hängen.

In der Hoffnung auf irgend einen Hinweis

Zeulino

hallo.

Baue gerade wieder ein PIC-Projekt und programmiere natürlich
„quick-and-dirty“, soll heißen, ich nehme vorhandene
Programteile von alten Projekten.

das muß nicht zwangsläufig q&d sein, wenn du dir die mühe machst, die programmteile mit sauberen schnittstellen zu versehen.

Also wenn da steht:

movlw .0
call EEadrset
call EEread
;movwf eins

dann läuft das Programm, nur die Daten fehlen =8o(

was ja nicht verwunderlich ist.

Ich hab inzwischen ales durch, nur diese blöde Anweisung von
„w“ nach „eins“ verursacht das Problem.

wo liegt denn „eins“? vielleicht schreibst du ja an eine stelle, an die zu schreiben tödlich ist?

gruß

michael

Richtige ‚Bank‘ auswählen
Hallo Zeulino,

höchstwahrscheinlich liegt der Fehler daran, dass Du vor dem letzten Befehl (movwf eins) nicht die richtige RAM-Bank eingestellt hast.
Begründung:
Bei jedem Zugriff auf das EE-PROM, muss Bank „2“ eingestellt sein. Wenn Du also die Variable „eins“ nicht in Bank „2“, sondern in Bank „0“ stehen hast (was bei Dir der Fall sein dürfte), landet der Befehl „movwf eins“ im Nirgendwo, sprich, die Variable „eins“ bekommt nicht den Inhalt des Akkus zugewiesen, sondern irgendeinen Schmarrn.
Wenn jedoch die Variable „eins“ in Bank „2“ steht, dann musst Du natürlich vor jeder Abfrage dieser Variable erst auf Bank „2“ umschalten (Status-Register Bit 5 und 6).
Einfaches Umschalten geschieht mit dem Befehl "banksel ". Dieser Befehl bewirkt ein automatisch richtiges einstellen der Bank-Bits im STATUS Register.
Hinweis: dieser Befehl dauert zwei Prozessorzyklen.

Also wenn da steht:

movlw .0
call EEadrset
call EEread
;movwf eins

dann läuft das Programm, nur die Daten fehlen =8o(

Mache ich das Programm richtig scharf, also ohne das
Semikolon, hängt sich das Teil auf.

Gruß,
Hilarion