PIC的程序計數器PC 作者: 時(shí)間:2016-11-26 來(lái)源:網(wǎng)絡(luò ) 加入技術(shù)交流群 掃碼加入和技術(shù)大咖面對面交流海量資料庫查詢(xún) 收藏 程序計數器PC用來(lái)控制指令的執行順序。它的寬度決定了能夠直接尋址的范圍,在PIC單片機內核設計時(shí),PC寬度有12/13/14/16位,最常用的一般是13位,故理論上能執行的指令代碼最多為8K字。如果實(shí)際沒(méi)有8K則從最高位開(kāi)始的若干位無(wú)效。通過(guò)指令的執行可以強制更改PC的值,從而控制程序的分支或者跳轉。程序執行時(shí),針對所有操作數的算術(shù)或邏輯運算都將在其ALU邏輯運算單元上實(shí)現。操作后的標志結果將會(huì )在狀態(tài)寄存器STATUS中描述。W寄存器等同于其他單片機的累加器ACC,在PIC單片機上被叫做工作寄存器。它是一個(gè)非常特殊的寄存器(和下面講述的歸屬于寄存器文檔的數據寄存器相比),可用于操作數的賦值或傳遞,也可以存放最后的運算結果。任何針對數據寄存器的操作,其尋址方式分兩種:直接尋址和間接尋址。直接尋址是用指令中直接包含的地址信息,配合輔助寄存器STATUS提供的額外地址位,對確定地址的寄存器操作;間接尋址利用指針寄存器FSR和輔助寄存器STATUS提供的全地址信息對目標寄存器操作。寄存器文檔概念:PIC單片機內的寄存器可分為兩種。其一是工作寄存器,只有一個(gè)W寄存器;其它是全部歸屬于寄存器文檔的數據寄存器。寄存器文檔(register file)概念,實(shí)際上是指其它內部結構將所有的用戶(hù)寄存器(即用戶(hù)可用的RAM)、所有的輸入/輸出端口、所有的特殊功能控制寄存器看作是完全相同的數據寄存器。在算術(shù)邏輯單元ALU中任何運算,其操作的數據有兩個(gè)來(lái)源:一個(gè)是W寄存器,另一個(gè)就來(lái)自于任何其它數據寄存器,不管是RAM,還是I/O口,或者是特殊寄存器,其操作方式完全相同。而且其結果存放目的寄存器也有兩個(gè):一個(gè)是W寄存器,還有一個(gè)就是數據寄存器本身。這個(gè)和熟悉的51單片機不同:它們的操作結果一定是放在累加器內的。基于“哈佛”結構,其取指令總線(xiàn)和取數據總線(xiàn)是完全獨立分開(kāi)的,它不同于“馮.諾漫”結構的統一編址。因此PIC單片機的內讀取程序的總線(xiàn)寬度和數據總線(xiàn)寬度可以不一樣,中檔PIC單片機的所有指令都描述成一個(gè)字,其長(cháng)度為14位。在這一個(gè)指令中包含兩個(gè)部分:一部分為操作碼,它告訴單片機這是一條什么樣的指令,它要實(shí)現什么樣的任務(wù),操作數在哪里等等;另一部分就是具體的操作數,已經(jīng)內含在指令中間。所以對程序的空間只需進(jìn)行一次讀取操作即可同時(shí)得到指令的操作碼和操作數,指令執行效率得到提高。由于指令是單字節的存放,所以不管程序計數器PC的值多少,從程序空間取出的指令都是一條完整的指令。為了防止在干擾場(chǎng)合出現程序跑飛的情形,只需要簡(jiǎn)單的在程序的空間的相關(guān)位置插入陷阱代碼,就可以捕捉非法程序跳轉,便可使程序恢復正常。而且其它單片機家族有很多是基于多字節指令體系,如51,moto公司的Freescale單片機完成同樣的立即數賦值時(shí)的指令組成情況。正常情況下單片機在執行指令時(shí)總是首先讀取操作碼,譯碼后根據不同的指令的具體任務(wù)要求繼續從程序的空間讀取若干個(gè)字節的操作數。如此的讀取指令方式,在碰到干擾使程序指針PC跑飛時(shí),有可能使PC值落在某一條指令操作碼后的操作數位置上,單片機就會(huì )把該操作數當作操作碼讀取并譯碼,此時(shí)的情形就無(wú)法控制,因為不知道此操作數代表的是什么操作碼,所以后面的連續一大串的指令操作都可能是非法指令,根本無(wú)法預測。
評論