Benötigen Sie Hilfe beim Verständnis der PIC-Speicherkarte

Etwas Hintergrund. Ich verwende MPLABx mit einem PicKit2, um verschiedene Arten von Bildern zu programmieren. Im Moment ist es der 16F887. Ich versuche, mich an die Hi-Tech PICC Lite-Werkzeugkette zu halten, aber ich werde zunehmend unzufrieden damit, wie einige Dinge zusammengebaut werden. Operationen, die relativ schnell sein sollten (in Anbetracht des 500-ns-Befehlszyklus bei 8 MHz), benötigen bis zu 20 us, um abgeschlossen zu werden. Also habe ich angefangen, meinen eigenen ASM-Code einzufügen, um damit umzugehen.

Ich habe jedoch Schwierigkeiten, die im Datenblatt auf Seite 20 bereitgestellte Speicherkarte zu verstehen.

Der Programmspeicher beginnt bei 0005h. Seite 23 zeigt jedoch Dateiadressen von Spezialregistern, wie zum Beispiel Port A. Die Adresse von Port A wird als „05h“ angezeigt.

Ich bin verwirrt, wie ich zwischen einem Speicherplatz 0005h und dem Spezialregister bei 05h unterscheiden soll. Wie referenziere ich die Sonderregister?

Ich habe ziemlich umfangreiche Assembler-Programmierung für ältere HC11-Chips durchgeführt, aber dies ist mein erster Vorstoß in die PIC-ASM-Codierung. Jede Hilfe hier wäre willkommen.

Antworten (2)

Der PIC verwendet eine sogenannte "Harvard-Architektur", was bedeutet, dass er separate Adressräume für Anweisungen und Daten hat.

Ob sich eine Adresse auf ein Register oder eine Anweisung bezieht, hängt vom Kontext ab, in dem sie verwendet wird.

Die Diagramme in Abschnitt 2.1 „Programmspeicherorganisation“ beziehen sich auf den Programmspeicher oder Befehlsadressraum. Die Diagramme in Abschnitt 2.2 „Datenspeicherorganisation“ handeln von Registern und Spezialfunktionsregistern oder dem Datenspeicher-Adressraum.

Wenn ich also "MOVWF 0x0005" sagen würde, würde der PIC wissen, dass ich auf die Adresse 0x0005 im Datenspeicher verweise und nicht auf den Programmbereich?
@ Michael: Ja. Ob sich die Adresse in einer Anweisung auf Programm- oder Datenspeicher bezieht, hängt von der Anweisung ab. Dies wird für jeden Opcode beschrieben. Wenn es wie MOVWF mit Daten umgeht, greift es grundsätzlich auf den Datenspeicher zu. Handelt es sich um Programmadressen wie GOTO, greift es auf den Programmspeicher zu.
Danke dir. Ich schätze, der HC11, in dem ich Assembler gemacht habe, war von Neumann Arch. Ich hatte oft Probleme damit, meinen Anweisungscode zu überschreiben, als ich gerade lernte. Danke nochmal.

Was Dave gesagt hat, aber ich möchte auch darauf hinweisen, dass der Programmspeicher bei 0 beginnt, nicht bei 5. Bei einem Reset setzt der Prozessor den PC auf 0 und beginnt zu laufen. Bei einem Interrupt verursacht der Prozessor effektiv einen Aufruf an Speicherstelle 4 und schaltet das globale Interrupt-Freigabebit aus. Programmspeicherplatz 5 ist nichts Besonderes, ansonsten ist dies die zweite Anweisung der Interrupt-Routine, wenn Sie eine Interrupt-Routine haben.

Ja das ist verstanden. Ich meinte, 5 ist die erste generische Befehlsadresse.
@Michael: Nein, das ist es auch nicht. Wie gesagt, an Programmspeicherplatz 5 ist nichts wirklich Besonderes. Die Bezeichnung erste generische Befehlsadresse macht dafür keinen Sinn. Die erste Befehlsadresse ist 0, und 4 ist aufgrund von Interrupts auch etwas speziell. Der Rest ist wirklich nichts Besonderes, und "generisch" macht in diesem Zusammenhang keinen Sinn.
Ok, wie wäre es mit der ersten nicht zurückgesetzten, nicht unterbrechenden Vektoradresse? Was ich sagen will, ist, dass ich verstehe, was Sie sagen wollen.