PIC16C5X單片機數據存儲器
程序計數器給出片內2048x12的ROM地址,不同的型號程序計數器與它們的兩層堆棧為9-11位寛,如表1所示。
表1 程序計數器PC與堆棧大小 | |||
型號 | PC寬度/位 | 堆棧寬度/位 | |
PIC16C54/55 | 9 | 9 | |
PIC16C56 | 10 | 10 | |
PIC16C57 | 11 | 11 |
系統復位后,PC為全“1”,程序執行每一條指令PC自動加“1”,除非程序指令本身改變PC的內容(例如程序跳轉,中斷服務等),下面的指令將改變PC的值。 [1].“GOTO”指令:允許直接裝入程序計數器的低8位,對于PIC16C56/57/58,PC的最高位由PA0、PA1兩個頁面選擇位(也即狀態寄存器的5、6位確定),此指令允許跳到任一頁的任意位置。 [2].“CALL”指令:先把當前PC的值壓入堆棧,然后使第9位清“0”,并把低8位裝入程序計數器PC,對于PIC16C56/57/58,PC的高兩位被裝入頁面選擇位PA0、PA1。 [3].“RETLW”指令:該返回指令直接把棧頂內容重裝入PC。 [4].程序計數器可由某位指令改變(例如MOVWF f2,ADDWF f2或BSF f2,5)計算結果將裝入PC低8位,第9位清“0”。對于PIC16C56/57/58,PC的高兩位被裝入頁面選擇位PA0、PA1。 需要注意的是:在執行“CALL”或其它改變PC值指令時,第9位會被清“0”,所有子程序調用指令和需要計算的跳轉指令時,要把分支程序放在任何頁面(512字節)的前256個單元(地址分別為000-0FFH、200-2FFH、400-4FFH、600-6FFH)。 多個程序存儲器頁面選擇(對PIC16C56/57/58有效)情況下,當程序計數器指向所在存儲頁的最后地址時,它仍能加1,并繼續執行到下一頁面,但PA0,PA1頁面選擇位不會改變,以后的“GOTO”、“CALL”、“ADDWF f2”、“MOVWFf2”等指令會返回原來的頁面,除非頁面選擇位在程序中被更改。例如NOP指令位于1FFH(0頁),PC加1變為200(1頁),一條在200的“GOTO XXX”指令將返回0頁的XXX地址(若f3的頁預選位“0”)。 RESET狀態下,PA0、PA1清“0”,0頁會成為預選頁。同時程序計數器PC會對最后一頁的最后一個單元尋址。因此,在這個位置的“GOTO”指令會自動返回至0頁執行。 |
評論