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.
Nur wenn die Hexadezimalzahl mit einem Buchstaben anfängt. Habe es trotzdem mal probiert, hilft leider nicht.
Ich möchte im Programmspeicher den WErt 31hex haben: MOV 2010h,#31h
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.
Danke, wieder etwas dazugelernt :) Das sind wohl die Silabs Chips, bei denen wurde einiges anders gelöst als beim Original.
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
Wie schon gesagt, Daten im Programmspeicher definiert man mit DB. http://what-when-how.com/8051-microcontroller/8051-data-types-and-directives/
>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
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.