Wieder mal PIC

Hallo Experten,
brauche wieder mal Eure Hilfe, PIC16F877 => EEPROM.
Was immer ich einstelle und auch speichere, beim nächsten Einschalten erscheint eine „1“, egal welchen Wert ich zuletzt abgelegt habe.
Hier mal ein Ausschnitt aus dem Programm:

org 0
clrf PCLATH ;
goto prg ;ab zum Programm,
;überspingen der ISR-Routine
;-----------------------------------------------------------
; org 4
; hier Interrupt
; retfie
;-----------------------------------------------------------
prg
movlw b’00100000’ ;Timerinterrupt
movwf INTCON ;deaktivieren
movlw .0
call EEadrset
call EEread
movwf eins
movlw b’10100000’ ;Timerinterrupt
movwf INTCON ;aktivieren
;-----------------------------------------------------------
prg2 ;Start Endlosschleife
movfw eins
call anzeige_e
movwf PORTD

btfsc Teh
goto prog2
movlw .250
call wait
btfss Teh
goto prog2
movlw .250
call wait
incf eins
movfw eins
xorlw .10
btfss STATUS,Z
goto prog2
movlw .0
movwf eins
call mem1 ;Wert im EEPROM speichern
goto prg2
;-----------------------------------------------------------
mem1
movlw b’00100000’ ;Timerinterrupt
movwf INTCON ;deaktivieren
movlw .0
call EEadrset
movfw eins
call EEwrite
movlw b’10100000’ ;Timerinterrupt
movwf INTCON ;aktivieren
return

Wo liegt hier mein Denkfehler? Was hab ich übersehen?
In der Hoffnung, daß mir jemand 'nen Tip geben kann, schon mal Danke im Voraus.

Grüße vom genervten
Zeulino

Hallo,

das ist toll… unkommentierter Code!

Was immer ich einstelle und auch speichere, beim nächsten
Einschalten erscheint eine „1“, egal welchen Wert ich zuletzt
abgelegt habe.

Was erwartest Du denn?
Woher weissst Du was im EEPROM steht? Hast Du einen Emulator/Simulator?

call EEadrset

Woher wissen wir, ob diese Routine i.O. ist?

call EEread

Woher wissen wir, ob diese Routine i.O. ist?

incf eins

Was macht Dein Compiler daraus:
incf eins, w oder
incf eins, f ???

call EEadrset

Woher wissen wir, ob diese Routine i.O. ist?

Gruss

Michael

Und ich hoffe, Du hast dafuer:

movfw eins

in MACRO definiert, denn der Assember kennt bei mir nur

movf „file“, f oder
movf „file“, d

Ist mir aber auch schon passiert.

Gruss

Michael

Auch Hallo,

das ist toll… unkommentierter Code!

Naja, ein bischen Kommentar ist ja schon drin, nur habe ich das mit den Tabs nicht hingekriegt (*kopfkratz*).

Woher weissst Du was im EEPROM steht? Hast Du einen
Emulator/Simulator?

Nicht wirklich. Also ich arbeite mit dem MPLAB IDE v8.36 und als Brenner der PICSTART Plus auch von Microchip.
(Von Sprut bin ich schon lange weg.)

call EEadrset

Woher wissen wir, ob diese Routine i.O. ist?

call EEread

Woher wissen wir, ob diese Routine i.O. ist?

call EEadrset

Woher wissen wir, ob diese Routine i.O. ist?

Die hatte ich schon beim Prototyp eingesetzt und keinen Buchstaben ausgetauscht. Und der Prototyp lief problemlos.

incf eins

Was macht Dein Compiler daraus:
incf eins, w oder
incf eins, f ???

Wenn ich sage: incf eins, dann meine ich das auch so.
Im normalen Betrieb läuft ja auch alles, auch der Über- bzw. Unterlauf funktioniert.
Nur eben das Speichern nicht.

Ich danke Dir trotzdem erstmal für Deine Hinweise.

Zeulino

incf eins

Was macht Dein Compiler daraus:
incf eins, w oder
incf eins, f ???

Wenn ich sage: incf eins, dann meine ich das auch so.

Na ja, wenn Du das so „meinst“, heisst das noch lange nicht, dass MPASM zustimmt. Das Mnemonic heisst eben
incf f,d (siehe Datenblatt) und nicht incf f!
In denn Fehlermeldungen des MPASM steht dann der HInweis darauf, dass Du was nicht richtig eingegeben hast und WAS MPASM daraus gemacht hat.

Was ist mit dem Schreibfehler, auf den ich in meionem zweiten Post hingewiesen habe?
Ist das auch was, was Du so gemeint hast?

Gruss

Michael