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