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
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
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.