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