Hallo,
z.B. so:
Code:TxtWerte de cr, lf de "; WERTE --------", cr, lf de "; Helligkeit ", 0 , " [%]", cr, lf de "; Ist / Soll ", 0 , cr, lf de "; Programm ", 0 , cr, lf, 0 de 18 ; Dezimal de 0x18 ; Hexadezimal de 00011000b ; Binär
Hallo an alle,
ich möchte mit der DB Assembler - Anweisung im Speicher des Pic´s ein Bitmuster ablegen. Es klappt einfach nicht. es befinden sich im speicher Daten die mit meinen keine Änlichkeit haben. Wer hat das schon mal probiert?
mfg
Wolf
Hallo,
z.B. so:
Code:TxtWerte de cr, lf de "; WERTE --------", cr, lf de "; Helligkeit ", 0 , " [%]", cr, lf de "; Ist / Soll ", 0 , cr, lf de "; Programm ", 0 , cr, lf, 0 de 18 ; Dezimal de 0x18 ; Hexadezimal de 00011000b ; Binär
MfG Karl-Heinz
HobbyElektronik hier klicken ....
Hallo Karl Heinz
hast du das mal ausprobiert?
Die Syntax ist schon klar.
aber was ist im Speicher z.B. de 00011000b ; Binär ?
Du meintest bestimmt immer DB?
wfg
wolf
Hallo wolf***!
Du meinst bestimmt ein Flaschspeicher, oder?
MfG
Hallo Wolf,
ich mache in all meinen Programmen nichts anderes, wie das, was ich oben geschrieben habe. Wie das wirklich im Flash-Speicher abgelegt wird, interessiert mich nicht wirklich, da es richtig ausgelesen wird. Die dazugehörigen Flash-Lese-Routinen findest Du hier und hier .
Ich schreibe auch 'de' für define eeprom-data-byte, nicht 'db' für define byte. Bei 'de' steht: "... evaluete to an 8-bit value. The upper bits of the program word are zeros".
Das steht bei 'db' nicht; was 'db' also wirklich macht, kann ich Dir nicht sagen, Flash-Memory hat nämlich 12...14 Bits !
MfG Karl-Heinz
HobbyElektronik hier klicken ....
Hallo wolf***!
Anstatt langer Erklärung ein Teil meines funktionierendes Programms. Das Programm ist auf dem PIC18F252 gelaufen. Da die PIC18FXXX Familie eine andere Organisation des Programmspeichers hat konnte ich sogar mit der Anweisung "dw" 16-bit Werte ablegen. Ich habe es mit den "kleinen" PIC`s (12F und 16F) nicht probiert, müsste aber genauso, bloss mit "db" und 8-bit Werten gehen.
MfGCode:ORG 0x7C00 RAMSave dw 0x0100 dw 0x0302 dw 0x0504 u.s.w.
@PICture
Bei 16 Bit Datenbreite im Programm-Speicher wirst es sicher keine Probleme geben. Was passiert aber bei 1 mal DW bzw. 2 mal DB nacheinander, wenn der Flash-Speicher nur 12...14 Bit Datenbreite hat ? Für die ersten 8 Bit (= 1. Byte) Null Problemo, bleiben für das zweite DB noch 4...6 Bits ?; was passiert dann wirklich ?
Mit DE ist das laut MPASM User's Guide klar geregelt und funktioniert bei mir auch anstandslos bei PIC16F877 und PIC12F629:
Reserve Memory words with 8-bit data. Each <expr> must evaluate to an 8-bit value. The upper bits of the program word are zeroes. Each charachter in a string is stored in a separate word.
Wenn Word's verarbeitet werden sollen, kann
DE LOW(word)
DE HIGH(word)
verwendet werden.
MfG Karl-Heinz
HobbyElektronik hier klicken ....
Hallo kalledom!
Danke für Deine ausführliche Erklärung. Wenn ich einen Bedarf haben werde, werde ich das nutzen. Ich habe bisher bei den "kleinen" nur "retlw" fürs Ablegen von 8-bit Werten im Flasch benutzt.
Schönste Grüsse
um lookup tabels zu erzeugen benutz einfach den Befehl "dt" das erzeugt dir einen Data-Table mit retlw befehlen. Ist aber wirklich nur zur Übersichtlichkeit gut, bzw. wenn man sehr viele Rückgabe-Werte hat (z.b.: Lookup-Table für einen Sinus) und es mit ein Haufen von retlw-Befehlen einfach zu groß werden würde. Wird genauso wie db, etc verwendet, also halt
jump:
codes zur Vektorerrechnung
table:
dt 1,2,3,4,5,6,...
MfG
Mobius
Hallo Mobius,
richtig, dafür sind die 12...14 Bits Flash-Speicher-Datenbreite ausreichend, um die 8 Bits vom Datenbyte und die Bit-Konstellation für den RETLW-Befehl unter zu bringen.
Für einen Text-String oder andere Datenfolge ist diese Methode allerdings nicht besonders glücklich. Außerdem müssen einige Vorkehrungen getroffen werden, falls diese 'Ansammlung' auf einer 256-Byte-Grenze liegt.
MfG Karl-Heinz
HobbyElektronik hier klicken ....
Lesezeichen