Cần giúp đỡ để hiểu bản đồ bộ nhớ PIC


9

Một số nền tảng. Tôi sử dụng MPLABx với PicKit2 để lập trình các loại ảnh khác nhau. Tại thời điểm này, 16F887. Tôi cố gắng gắn bó với chuỗi công cụ Hi-Tech PICC Lite nhưng tôi ngày càng không hài lòng với cách thức một số thứ được lắp ráp. Các hoạt động cần nhanh chóng tương đối (xem xét chu kỳ lệnh 500ns ở tốc độ 8Mhz) đang mất tới 20us để hoàn thành. Vì vậy, tôi đã bắt đầu chèn mã ASM của riêng mình để đối phó với nó.

Tuy nhiên, tôi gặp khó khăn trong việc hiểu bản đồ bộ nhớ được cung cấp trong biểu dữ liệu trên Trang 20.

Bộ nhớ chương trình bắt đầu lúc 0005h. Tuy nhiên, trang 23 hiển thị địa chỉ tệp của các thanh ghi mục đích đặc biệt, chẳng hạn như Cổng A chẳng hạn. Địa chỉ của Cổng A được hiển thị là "05h".

Tôi bối rối làm thế nào để phân biệt giữa một vị trí bộ nhớ 0005h và thanh ghi mục đích đặc biệt nằm ở 05h. Làm thế nào để tôi tham khảo các thanh ghi mục đích đặc biệt?

Tôi đã thực hiện lập trình trình biên dịch khá rộng rãi cho các chip HC11 cũ hơn, nhưng đây là lần đầu tiên tôi tham gia vào mã hóa PIC asm. Bất kỳ trợ giúp ở đây sẽ được đánh giá cao.

Câu trả lời:


8

PIC sử dụng cái gọi là "Kiến trúc Harvard", có nghĩa là nó có không gian địa chỉ riêng cho hướng dẫn và dữ liệu.

Cho dù một địa chỉ đề cập đến một thanh ghi hoặc một hướng dẫn tùy thuộc vào bối cảnh mà nó được sử dụng.

Các sơ đồ trong phần 2.1 "Tổ chức bộ nhớ chương trình" là về bộ nhớ chương trình hoặc không gian địa chỉ lệnh. Các sơ đồ trong phần 2.2 "Tổ chức bộ nhớ dữ liệu" là về các thanh ghi và các thanh ghi chức năng đặc biệt hoặc không gian địa chỉ bộ nhớ dữ liệu.


Vì vậy, nếu tôi nói "MOVWF 0x0005", PIC sẽ biết rằng tôi đang tham chiếu địa chỉ 0x0005 trong bộ nhớ dữ liệu chứ không phải không gian chương trình?
Michael

@Michael: Vâng. Việc địa chỉ trong một lệnh có liên quan đến chương trình hay bộ nhớ dữ liệu hay không phụ thuộc vào lệnh. Điều này được mô tả cho mỗi opcode. Về cơ bản, nếu nó xử lý dữ liệu, như MOVWF, thì nó sẽ truy cập bộ nhớ dữ liệu. Nếu nó liên quan đến các địa chỉ chương trình, như GOTO, thì nó sẽ truy cập vào bộ nhớ chương trình.
Olin Lathrop

Cảm ơn bạn. Tôi đoán HC11 tôi đã sử dụng để lắp ráp trong là vòm von Neumann. Tôi thường có vấn đề về việc viết mã hướng dẫn khi tôi mới học. Cám ơn bạn một lần nữa.
Michael

3

Những gì Dave nói, nhưng tôi cũng muốn chỉ ra rằng bộ nhớ chương trình bắt đầu từ 0 chứ không phải 5. Khi thiết lập lại, bộ xử lý đặt PC thành 0 và bắt đầu chạy. Khi bị gián đoạn, bộ xử lý có hiệu quả thực hiện cuộc gọi đến vị trí 4 và tắt bit kích hoạt ngắt toàn cầu. Vị trí bộ nhớ chương trình 5 không có gì đặc biệt, ngoài ra đây sẽ là hướng dẫn thứ hai của thói quen ngắt nếu bạn có thói quen ngắt.


Vâng, điều đó được hiểu. Tôi có nghĩa là 5 là địa chỉ hướng dẫn chung đầu tiên.
Michael

@Michael: Không, nó cũng không phải vậy. Như tôi đã nói, không có gì thực sự đặc biệt về vị trí bộ nhớ chương trình 5. Địa chỉ lệnh chung chung đầu tiên không có ý nghĩa gì đối với nó. Địa chỉ lệnh đầu tiên là 0 và 4 cũng hơi đặc biệt do bị gián đoạn. Phần còn lại thực sự không đặc biệt, và "chung chung" không có ý nghĩa gì trong bối cảnh này.
Olin Lathrop

Ok, làm thế nào về địa chỉ vectơ không thiết lập lại, không ngắt đầu tiên của nó? Điều tôi đang nói là tôi hiểu những gì bạn đang cố nói.
Michael
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.