我正在嘗試模擬PIC16F84,現在需要實作PCL/PCLATH暫存器。
PIC16F84有 1K 的程式記憶體。
PCL是 8Bit 寬,所以在這種情況下,Bit 0 和 1用于PCLATH在每個大小為 的四個頁面之間切換,256B到目前為止我是對的嗎?
基于此,我不明白以下內容:
資料表說明了GOTO:
PC 的高位從 PCLATH<4:3> 加載。GOTO 是一個兩周期指令。
但是上位是不是PCLATH太多了?我的意思是只有 4 個頁面,每個 256B,因此只PCLATH需要第 0 位和第 1 位。或者換句話說 - 第 3 位和第 4 位PCLATH始終為 0 ?為什么我在執行“CALL”或“GOTO”時需要關心“PCLATH”?
uj5u.com熱心網友回復:
PIC16F84 具有 13 位程式計數器(PC)。GOTO并且CALL指令有 11 位地址運算元,其余 2 位需要來自某個地方,即PCLATH<4:3>. PCLATH由于 PIC16F84 只有 1K 字的程式存盤器,所以使用GOTO&時無需關心CALL。即使具有非零隨機值也不會影響尋址,因為資料表指出:
訪問物理實作地址之上的位置將導致回繞。
不過,最好保持PCLATH<4:3>位清潔,以便將來與具有更大閃存的其他 PIC 型號兼容。
那么,PCLATH與PIC16F84完全無關嗎?不,還有一種PCLATH使用情況:修改PCLPC的低8位。當PCL被修改時,PC 的剩余 5 位來自PCLATH<4:0>. 修改PCL,主要是給它添加一些值,用于創建RETLW表,可以用來將常量值陣列嵌入到閃存中。因此,最好始終在PCLATH.
uj5u.com熱心網友回復:
程式計數器為 13 位。的運算元是 11 位,因此對于其余位,您需要從 開始GOTO的兩位,即。PCLATH11-sizeof(PCL)3
這里有一張圖來說明這一點:
12 11 10 9 8 7 6 5 4 3 2 1 0
-------------------------------------------------
|--|--|--| | | | | | | | | | | | | | PC (PCH:PCL)
-------------------------------------------------
^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
| | | | | | | | | | | | |
| | 10 9 8 7 6 5 4 3 2 1 0
| | ----------------------------------
| | | | | | | | | | | | | | GOTO operand
| | ----------------------------------
7 6 5 4 3 2 1 0
-------------------------
|--|--|--| | | | | | PCLATH
-------------------------
PCH(PC)的高位元組不能直接訪問。相反,您通過PCLATH. 因此,為什么我的圖表中的第 0PCLATH位與第 8 位對齊。PC
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/424434.html
