Butuh bantuan memahami peta memori PIC

9

Beberapa latar belakang. Saya menggunakan MPLABx dengan PicKit2 untuk memprogram berbagai jenis foto. Saat ini 16F887. Saya mencoba untuk tetap berpegang pada rantai alat PICC Hi-Tech tapi saya semakin tidak senang dengan bagaimana beberapa hal dirakit. Operasi yang harus relatif cepat (mengingat siklus instruksi 500ns pada 8Mhz) membutuhkan waktu hingga 20 kita untuk menyelesaikannya. Jadi saya sudah mulai memasukkan kode ASM saya sendiri untuk menghadapinya.

Namun, saya mengalami kesulitan memahami peta memori yang disediakan dalam lembar data di Halaman 20.

Memori program dimulai pada 0005h. Namun halaman 23 menunjukkan alamat file register tujuan khusus, seperti Port A misalnya. Alamat Port A ditampilkan sebagai "05h".

Saya bingung bagaimana membedakan antara lokasi memori 0005h, dan register tujuan khusus yang terletak di 05h. Bagaimana cara mereferensikan register tujuan khusus?

Saya telah melakukan pemrograman assembler yang cukup luas untuk chip HC11 yang lebih tua, tetapi ini adalah usaha pertama saya ke PIC asm coding. Setiap bantuan di sini akan dihargai.

Michael
sumber

Jawaban:

8

PIC menggunakan apa yang disebut "Arsitektur Harvard", yang berarti bahwa ia memiliki ruang alamat terpisah untuk instruksi dan data.

Apakah alamat merujuk ke register atau instruksi tergantung pada konteks di mana ia digunakan.

Diagram di bagian 2.1 "Program Memory Organization" adalah tentang memori program, atau ruang alamat instruksi. Diagram di bagian 2.2 "Organisasi Memori Data" adalah tentang register dan register fungsi khusus, atau ruang alamat memori data.

Dave Tweed
sumber
Jadi jika saya mengatakan "MOVWF 0x0005", PIC akan tahu bahwa saya merujuk alamat 0x0005 dalam memori data, dan bukan ruang program?
Michael
@Michael: Ya. Apakah alamat dalam instruksi mengacu pada program atau memori data tergantung pada instruksi. Ini dijelaskan untuk setiap opcode. Pada dasarnya, jika berurusan dengan data, seperti MOVWF, maka itu akan mengakses memori data. Jika berurusan dengan alamat program, seperti GOTO, maka itu akan mengakses memori program.
Olin Lathrop
Terima kasih. Saya kira HC11 yang biasa saya lakukan assembler adalah von Neumann arch. Saya sering mengalami masalah karena terlalu banyak menulis kode instruksi ketika saya baru belajar. Terima kasih lagi.
Michael
3

Apa yang Dave katakan, tetapi saya juga ingin menunjukkan bahwa memori program dimulai pada 0, bukan 5. Pada saat reset, prosesor mengatur PC ke 0 dan mulai berjalan. Pada interupsi, prosesor secara efektif menyebabkan panggilan ke lokasi 4 dan mematikan bit aktif interupsi global. Program lokasi memori 5 tidak istimewa, selain ini akan menjadi instruksi kedua dari rutin interupsi jika Anda memiliki rutin interupsi.

Olin Lathrop
sumber
Ya itu dipahami. Maksud saya 5 adalah alamat instruksi generik pertama.
Michael
@Michael: Tidak, bukan itu juga. Seperti yang saya katakan, tidak ada yang benar-benar istimewa tentang lokasi memori program 5. Label alamat instruksi generik pertama tidak masuk akal untuk itu. Alamat instruksi pertama adalah 0, dan 4 juga sedikit istimewa karena interupsi. Sisanya benar-benar tidak istimewa, dan "generik" tidak masuk akal dalam konteks ini.
Olin Lathrop
Ok, bagaimana dengan alamat vektor non-reset, non-interrupt pertama? Apa yang saya katakan adalah saya mengerti apa yang ingin Anda katakan.
Michael