PIC Assembler: Daten im Programmspeicher ablegen

OP #3655236
Hallo Zusammen,

ich möchte gerne Daten im Speicher des PIC16F616 ablegen und diese 
später im Programm abrufen. Ich habe diesbezüglich schon zwei Varianten 
ausprobiert:

Tabelle

   IDATA
   db    0xFA
   db    0xFB

oder
  retlw  0xFA
  retlw  0xFB


In beiden Varianten stehen die Werte zwar dann im HEX File aber immer 
gefolgt von einer 0x34. Was hat dieser Wert zu bedeuten?

Vielen Dank,

Ernie
OP #3655279
OK, vielen Dank! Kann ich die Daten denn auch einfach so nacheinander in 
den Programmspeicher laden und nachher indirekt herauslesen.

Ich wollte mir eigentlich im Programm die Adresse berechnen und jetzt 
müsste ich ja den OPCODE berücksichtigen!
Gast #3655328
Es gibt program memory und data memory.Program memory ist wo das program 
abgelegt wird und es ist nicht veränderbar wärend des program läuft.
Deswegen kannst du nur deine daten im EEPPOM oder im Arbeisspeicher 
ablegen, alerdings werden sie im Arbeisspeicher nach dem ausschalten 
gelöscht.
#3655330
Sascha T. schrieb:
>
> Ich wollte mir eigentlich im Programm die Adresse berechnen und jetzt
> müsste ich ja den OPCODE berücksichtigen!

Bei Verwendung von RETLW data gibts es nichts zu berücksichtigen.

Bei direkten Zugriff auf den Flashspeicher via PMADRL:PMADRH etc. muss 
auch nichts berechnet werden. Es wird immer der Inhalt der Flashadresse 
in ganzer Breite (je nach PIC 12/14/....Bit) gelesen und in 
PMDATH:PMDATL zurückgegeben. Die Daten stehen dann in PMDATL, der Inhalt 
von PMDATH ist bei den "kleinen" PIC unbrauchbar weil nur 4 bzw. 6 Bit 
physikalisch implementiert sind.
#3655339
Sascha T. schrieb:
> OK, vielen Dank! Kann ich die Daten denn auch einfach so nacheinander in
> den Programmspeicher laden und nachher indirekt herauslesen.

Wobei die kleineren PICs traditionell nicht wirklich indirekt aus dem 
Programmspeicher auslesen, sondern indirekt dort hin springen und dort 
einen RETLW-Befehl mit dem entsprechenden Byte darin steht.
OP #3655364
Vielen Dank, ich habe jetzt auch mal viel bei SPRUT gelesen und die 
Tabelle folgendermaßen angelegt:

TABELLE

    addwf PCL,f
    retlw 0x5F
    retlw 0x1F
    retlw 0x5F
    retlw 0x1F
    retlw 0x5F

Jetzt müsste ich doch den Aufruf im Programm folgendermaßen machen:

   movlw   3
   call    TABELLE
   movwf   Temp

Damit würde ich dann den dritten Wert der Tabelle erhalten und Temp 
speichern, oder?
#3655414
Die neueren PIC12/16 (Enhanced Mid-Range) haben einen BRW Befehl, mit 
dem Funktioniert das mit dem RETLW auch über die Page-Grenzen.
1
BRW             ;Add Index in W to program counter to select data
2
RETLW DATA0     ;Index0 data
3
RETLW DATA1     ;Index1 data
4
RETLW DATA2
5
RETLW DATA3
#6168547
Zusammenfassung: Daten in (hier: 14-Bit) Flash-Speicher ablegen:
1
 de  "ABCÄÖÜ"        ; legt UTF-8 in die Low-Bytes ab, Nullen in die High-Bytes (wenn Quelltext in UTF-8 vorliegt)
2
 dt  "ABCÄÖÜ"        ; wie oben, aber 0x34 ins High-Byte = retlw
3
;de  L"ABCÄÖÜ"       ; Syntaxfehler
4
 de  0x1234          ; legt 0x0034 ab
5
 da  0x1234          ; legt 0x1234 ab
6
 da  '1','2','3','4' ; legt effektiv UTF-16 ab, aber nicht bei Umlauten!
7
;da  '12'            ; Syntaxfehler
8
;da  L'1',L'2',L'Ä'  ; Syntaxfehler
9
 da  "1","2","3","4" ; Legt jedes Zeichen 7-Bit in den High-Teil ab, also '1'<<7, '2'<<7 usw.
10
 da  "1234"          ; Legt '1'<<7|'2' und '3'<<7|'4' ab
11
 dw  1234            ; legt - wie da - 0x1234 ab
12
 db  0x12,0x34       ; legt 0x12 in das High-Byte(!), 0x34 in das Low-Byte
Leider keine Möglichkeit, UTF-16 (<0x4000) abzulegen! Würde für alle 
Buchstabenschriften reichen.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.