mikrocontroller.net

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


Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: smartie (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Mario (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.