Ich möchte den Akkumulator mit dem Inhalt des Programmspeichers 2010 Hex
laden. Mit dem Inhalt 31 hex. Der DPTR soll als Basisadresse also
2000hex und Akku als Offsetadresse 10h benutzt werden.
Ich weiss das ich mit MOVC A,A+DPTR bekomme. Aber irgendwie scheint das
nicht zu laufen.
das ist mein Assembler code:
MOV A,#10h
MOV DPTR,#2000h 16
MOVC A,@A+DPTR
MOV 2010h,#31h
MOVC schrieb:> MOV A,#10h> MOV DPTR,#2000h 16> MOVC A,@A+DPTR> MOV 2010h,#31h
Wenn ich mich recht entsinne, muss man bei der Immediate Adressierung
eine '0' davor setzen. Also nicht beispielsweise #77h, sondern #077h.
mfg.
Hallo MOVC,
in den Programmspeicher kann man nicht schreiben, da geht nur lesen. Es
sei denn du hast den Speicher umorganisiert nach "von Neumann" und an
Adresse 2010h befindet sich RAM. Dann wäre der Befehl dafür aber MOVX
@DPTR,A oder für Page-RAM MOVX @R0, A oder MOVX @R1,A.
Gruß. Tom
und wie soll der Inhalt in den Programmspeicher kommen? Der Inhalt der
Speicherzelle 2010h soll 31h sein.
Die letzte Zeile löschen wir dann. Aber wenn ich an dieser Zeile
ankomme:
MOVC A,@A+DPTR muss ich ja im Akku 2010 haben, was ich aber nicht
bekomme.
MOVC schrieb:> MOV 2010h,#31h
MOV DPTR, #2010h
MOV A, #31h
MOVX @DPTR, A
Das geht aber nur bei 8051 wo der Programmspeicher nicht ein ROM sondern
Flash ist.
Bei normalen MCS51 kann man den Programmspeicher nicht im laufenden
Programm beschreiben. Da gibt es keinen Befehl dafür. In MOVX steht das
X für den externen Datenspeicher, der µC wird dafür das WR-Signal
aktivieren. Der Programmspeicher wird aber mit PSEN (Program Store
ENable) angesprochen und dieses Signal wird durch MOVC (C wie Code)
aktiviert. MOVC gibt es aber nur in Leserichtung MOVC A,@A+DPTR, einen
MOVC @DPTR,A gibt es nicht.
Möglich, daß ein Derivat existiert, bei dem der interne Programmspeicher
per Programm beschreibbar ist, der braucht dafür aber einen eigenen
Befehl.
Üblicherweise kommt das Programm für den Programmspeicher durch ein
Programmiergerät in diesen. Ausnahmen bilden Systeme mit "von Neumann"
Architektur.
TomA schrieb:> Möglich, daß ein Derivat existiert, bei dem der interne Programmspeicher> per Programm beschreibbar ist, der braucht dafür aber einen eigenen> Befehl.
Keineswegs es ist Standard das auf 8051 mit Flash IAP mit MOVX
ausgeführt wird z.B. C8051, EFM8 etc. Das geht weil solche 8051 bis 64KB
Flash haben aber nur wenige KB internes XRAM, somit kann man nur wenige
KB des unteren Flash nicht beschreiben, da ist aber ohnehin nur das
Programm und keine großen Arrays. Wenn man nun auch noch externes XRAM
per EMC anschliesst (macht aber niemand wer viel RAM braucht nimmt ARM)
muss man ein Banking-Register bemühen.
TomA schrieb:> bei denen wurde einiges anders gelöst als beim Original
Hast recht z.B. bei den LPC900 geht Flash IAP nicht mit MOVX und DPTR
sondern nur mit SFR: FMDATA, FMADR
MOVC schrieb:> Die letzte Zeile löschen wir dann. Aber wenn ich an dieser Zeile> ankomme:> MOVC A,@A+DPTR muss ich ja im Akku 2010 haben, was ich aber nicht> bekomme.
Nein, Du musst den Inhalt der Speicherzelle 2010h im Akku haben.
soul e. schrieb:> Nein, Du musst den Inhalt der Speicherzelle 2010h im Akku haben.
Ja, ic hweiss aber immernoch nicht wie ich den Inhalt 31h nach 2010h
bekomme. Die Speicheradresse bilde ich aus A und dem DPTR. Die letzte
Zeile ist gegeben, also muss sie stimmen. Es ist zudem gesagt:"Der DPTR
soll als
(2000hex) und Akku als Offsetadresse (10h) benutzt werden."
Damit ich auf die Adresse 2010h komme und in 2010h muss der Wert 31h
stehen.
MOV A,#10h
MOV DPTR,#2000h
MOVC A,@A+DPTR
>Ja, ic hweiss aber immernoch nicht wie ich den Inhalt 31h nach 2010h>bekomme
mit MOVC garnicht MOVC ist ein Lesebefehl kein Schreibbefehl
MOV A,#10h
MOV DPTR,#2000h
MOVC A,@A+DPTR ;nun steht im Akku der Inhalt von Code
#2010h
so geht's:
MOV A,#31h
MOV DPTR,#2010h
MOVX @DPTR,A ;Bedingung: Code und Data gleich Neumann
Thomas