Forum: Mikrocontroller und Digitale Elektronik PIC EEPROM, Bank0 und 1


von Mario (Gast)


Lesenswert?

Hallo

PIC16F627 in Assembler

vermutlich sehe ich den Wald vor lauter Bäumen gerade nicht ;o)

Ich möchte die Werte aus 4 Speicherzellen in das EEPROM schreiben.

Bsp:
Wert aus 0x20 in EEPROM 0x20
...
...
Wert aus 0x23 in EEPROM 0x23

Die "normalen" Speicherzellen liegen doch in Bank 0 ?

Alle Register für das EEPROM liegen beim 16F627 in Bank 1

Kann ich die Werte immer nur mit Hilfe des Arbeitsregisters W in Bank
1
"transportieren" ? Dann müsste ich 4 mal umschalten !?!?

Außerdem wäre es günstig, wenn ich das als Unterprogramm schreibe,
wo ich die (Ziel-)Speicherzelle und den Wert übergebe. Damit ich nicht
alles 4 mal schreiben muß.

So wie ich es bisher dachte: (4 x halt)

MOVF 0x20                   ;Wert aus 0x20 in W

;UP SCHREIBEN
Umschalten zu Bank1
MOVWF EEDATA                ; W in Register
MOVLW 0x20                  ; Zelle 20 (-23) ins Register
MOVWF EEADR
...
...
Schreibroutine
...
...
Umschalten zu Bank0
Return

Vielen Dank für die Tipps

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Mario

schau doch mal ins Datenblatt (statt in den Wald). Da steht im Kapitel
13 der Zugriff auf das EEROM beschrieben inklusive einem Beispiel-Code
für das Lesen (Example 13-1) und das Schreiben (Example 13-2).

Gruß
Gerhard

von smartie (Gast)


Lesenswert?

vielleicht hilf das ja weiter:

eeprom.inc

;############ EEPROM Routinen ##################

eewrite CLRWDT
  BSF   STATUS,RP0  ; Select Bank 1
  BTFSC EECON1,WR    ; Warte bis Schreiben beendet
  GOTO  eewrite
  BCF   PIR1,EEIF    ; Interrupt-Flag loeschen
  MOVWF EEDATA
  BSF   EECON1,WREN       ; EEPROM Write Enable
  BCF   INTCON,GIE  ; Disable Interrupts
  MOVLW 55H
  MOVWF EECON2
  movlw 0AAh
  MOVWF EECON2
  BSF   EECON1,WR    ; start Write
  BSF   INTCON,GIE  ; Enable Interrupts
  BCF   STATUS,RP0  ; Select Bank 0
  RETURN

eeread  CLRWDT
  BSF   STATUS,RP0  ; Select Bank 1
  BTFSC EECON1,RD    ; Warte bis Lesen beendet
  GOTO  eeread
  BSF   EECON1,RD         ; EEPROM Read Enable
  MOVF  EEDATA,W
  BCF   STATUS,RP0  ; Select Bank 0
  RETURN

inceeadr CLRWDT
   BSF   STATUS,RP0  ; Select Bank 1
   BTFSC EECON1,RD    ; Warte bis Lesen beendet
   GOTO  inceeadr
   BTFSC EECON1,WR    ; Warte bis Schreiben beendet
   GOTO  inceeadr
   INCF  EEADR,F
   BCF    STATUS,RP0  ; Select Bank 0
   RETURN

seteeadr CLRWDT
   BSF   STATUS,RP0  ; Select Bank 1
   BTFSC EECON1,RD    ; Warte bis Lesen beendet
   GOTO  seteeadr
   BTFSC EECON1,WR    ; Warte bis Schreiben beendet
   GOTO  seteeadr
   MOVWF  EEADR
   BCF    STATUS,RP0  ; Select Bank 0
   return

von Mario (Gast)


Lesenswert?

Hi Gerhard ..
Natürlich hab ich das Datenblatt vor mir liegen, da stehen ja auch die
wichtigsten Zeilen drinne. Sprut.de hättest Du auch noch erwähnen
könnnen.........
Mir ging es um einen einfachen / kurzen Weg wie ich den Wert und die
Adresse an das UP übergeben kann.

Hi Smartie
Vielen Dank für das UP.
Wie ich sehe bleibt die ständige Umschalterei nicht erspart.
Da ich es aber mehrfach nutzen kann ist es letztendlich nicht groß.
Sicherheitroutinen sind ja auch schon eingebaut.

So lange Programmiere ich noch nicht, es dauert eben ein wenig, eh ich
die Zusammenhänge verstehe.

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo Mario

mein Comment war nicht böse gemeint. Die PICs, gerade die PIC16 haben
"Stolperfallen" - wie eigentlich jeder uC. Die Sache mit den Banken
muß man erst mal verdaut haben. Aber die Datenblätter sind eigentlich
ganz gut und für einige wichtige Funktionen gibts auch Beispielcode.
Den kann man einfach kopieren.


Gruß
Gerhard

von Mario (Gast)


Lesenswert?

Hi Gerhard,
ganz so böse war das auch gar nicht gemeint. Sorry
War nur etwas gereitzt, weil ich den Spruch mit dem Datenblatt zu oft
gelesen habe. Klar sollte das der erste Anlaufpunkt sein, so ein paar
Kniffe stehen da dann aber nicht drinne.
Mit dem Speicherplatz muß man ja auch sorgfältig umgehen.
Kann ich denn in MPLAP sehen was noch frei ist ?
Da hab ich zwar so eine Anzeige gefunden, aber die steht immer auf 0.
Nach der Größe des HEX-Files kann man ja auch nicht gehen.

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.