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.
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.
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.
Michael
Olin Lathrop
Michael