新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > PIC的程序計數(shù)器PC

PIC的程序計數(shù)器PC

作者: 時間:2016-11-26 來源:網(wǎng)絡 收藏
程序計數(shù)器PC用來控制指令的執(zhí)行順序。它的寬度決定了能夠直接尋址的范圍,在PIC單片機內核設計時,PC寬度有12/13/14/16位,最常用的一般是13位,故理論上能執(zhí)行的指令代碼最多為8K字。如果實際沒有8K則從最高位開始的若干位無效。

通過指令的執(zhí)行可以強制更改PC的值,從而控制程序的分支或者跳轉。

程序執(zhí)行時,針對所有操作數(shù)的算術或邏輯運算都將在其ALU邏輯運算單元上實現(xiàn)。操作后的標志結果將會在狀態(tài)寄存器STATUS中描述。W寄存器等同于其他單片機的累加器ACC,在PIC單片機上被叫做工作寄存器。它是一個非常特殊的寄存器(和下面講述的歸屬于寄存器文檔的數(shù)據(jù)寄存器相比),可用于操作數(shù)的賦值或傳遞,也可以存放最后的運算結果。

任何針對數(shù)據(jù)寄存器的操作,其尋址方式分兩種:直接尋址和間接尋址。直接尋址是用指令中直接包含的地址信息,配合輔助寄存器STATUS提供的額外地址位,對確定地址的寄存器操作;間接尋址利用指針寄存器FSR和輔助寄存器STATUS提供的全地址信息對目標寄存器操作。

寄存器文檔概念:PIC單片機內的寄存器可分為兩種。其一是工作寄存器,只有一個W寄存器;其它是全部歸屬于寄存器文檔的數(shù)據(jù)寄存器。寄存器文檔(register file)概念,實際上是指其它內部結構將所有的用戶寄存器(即用戶可用的RAM)、所有的輸入/輸出端口、所有的特殊功能控制寄存器看作是完全相同的數(shù)據(jù)寄存器。在算術邏輯單元ALU中任何運算,其操作的數(shù)據(jù)有兩個來源:一個是W寄存器,另一個就來自于任何其它數(shù)據(jù)寄存器,不管是RAM,還是I/O口,或者是特殊寄存器,其操作方式完全相同。而且其結果存放目的寄存器也有兩個:一個是W寄存器,還有一個就是數(shù)據(jù)寄存器本身。這個和熟悉的51單片機不同:它們的操作結果一定是放在累加器內的。

基于“哈佛”結構,其取指令總線和取數(shù)據(jù)總線是完全獨立分開的,它不同于“馮.諾漫”結構的統(tǒng)一編址。因此PIC單片機的內讀取程序的總線寬度和數(shù)據(jù)總線寬度可以不一樣,中檔PIC單片機的所有指令都描述成一個字,其長度為14位。在這一個指令中包含兩個部分:一部分為操作碼,它告訴單片機這是一條什么樣的指令,它要實現(xiàn)什么樣的任務,操作數(shù)在哪里等等;另一部分就是具體的操作數(shù),已經(jīng)內含在指令中間。所以對程序的空間只需進行一次讀取操作即可同時得到指令的操作碼和操作數(shù),指令執(zhí)行效率得到提高。由于指令是單字節(jié)的存放,所以不管程序計數(shù)器PC的值多少,從程序空間取出的指令都是一條完整的指令。為了防止在干擾場合出現(xiàn)程序跑飛的情形,只需要簡單的在程序的空間的相關位置插入陷阱代碼,就可以捕捉非法程序跳轉,便可使程序恢復正常。而且其它單片機家族有很多是基于多字節(jié)指令體系,如51,moto公司的Freescale單片機完成同樣的立即數(shù)賦值時的指令組成情況。正常情況下單片機在執(zhí)行指令時總是首先讀取操作碼,譯碼后根據(jù)不同的指令的具體任務要求繼續(xù)從程序的空間讀取若干個字節(jié)的操作數(shù)。如此的讀取指令方式,在碰到干擾使程序指針PC跑飛時,有可能使PC值落在某一條指令操作碼后的操作數(shù)位置上,單片機就會把該操作數(shù)當作操作碼讀取并譯碼,此時的情形就無法控制,因為不知道此操作數(shù)代表的是什么操作碼,所以后面的連續(xù)一大串的指令操作都可能是非法指令,根本無法預測。


評論


技術專區(qū)

關閉