新聞中心

EEPW首頁(yè) > 專題 > pic單片機(jī)教程之13位程序計(jì)數(shù)器存儲(chǔ)器的組成

pic單片機(jī)教程之13位程序計(jì)數(shù)器存儲(chǔ)器的組成

作者: 時(shí)間:2016-08-19 來(lái)源:網(wǎng)絡(luò) 收藏

[導(dǎo)讀]本節(jié)主要講解PICMicro中檔系列單片機(jī)13位構(gòu)成。包括存儲(chǔ)器尋址方式、存儲(chǔ)器分頁(yè)、頁(yè)之間的跳轉(zhuǎn)實(shí)現(xiàn)及相關(guān)跳轉(zhuǎn)指令、技術(shù)原理。

本文引用地址:http://butianyuan.cn/article/201608/295777.htm

關(guān)鍵詞:PIC單片機(jī)

單片機(jī)的兩種存儲(chǔ)器模塊:程序存儲(chǔ)器與數(shù)據(jù)存儲(chǔ)器。每個(gè)存儲(chǔ)模塊都有自己的數(shù)據(jù)總線,能在同一時(shí)間戳內(nèi)對(duì)模塊同時(shí)進(jìn)行數(shù)據(jù)存儲(chǔ)與指令操作。

程序存儲(chǔ)器構(gòu)成

中檔系列單片機(jī)有一個(gè)13位的,可以尋址8K×14位的程序存儲(chǔ)空間。程序存儲(chǔ)器總線寬度(指令字)為14位。由于所有的指令均為單字指令,所以一個(gè)具有8K×14位程序存儲(chǔ)器的器件可以存儲(chǔ)8K條指令。很易于確定是否有充足的程序存儲(chǔ)空間來(lái)實(shí)現(xiàn)應(yīng)用程序。

中檔系列單片機(jī)把程序存儲(chǔ)器分成4頁(yè),每頁(yè)2K字(0h - 7FFh,、800h - FFFh、1000h - 17FFh和1800h - 1FFFh)。圖6-1所示為程序存儲(chǔ)器映射和一個(gè)8級(jí)深度硬件堆棧。實(shí)際上單片機(jī)可能只實(shí)現(xiàn)了圖中所示存儲(chǔ)器的一部分,這與器件型號(hào)有關(guān)。關(guān)于單片機(jī)所提供的存儲(chǔ)器,請(qǐng)查閱單片機(jī)的數(shù)據(jù)手冊(cè)。

為了能在程序存儲(chǔ)器頁(yè)之間跳轉(zhuǎn),必須修改(PC)的高位。這是通過(guò)在PCLATH(程序計(jì)數(shù)器高位鎖存器)中寫入需要的值來(lái)完成的。如果指令連續(xù)運(yùn)行,無(wú)需任何用戶的干預(yù),程序計(jì)數(shù)器即可以跨越程序頁(yè)面跨頁(yè)。對(duì)于那些程序存儲(chǔ)器不足8K字的器件,訪問(wèn)超過(guò)物理地址空間的存儲(chǔ)單元時(shí),會(huì)回到有效的程序存儲(chǔ)空間。也就是說(shuō),在一個(gè)有4K字存儲(chǔ)空間的單片機(jī)中,尋址17FFh實(shí)際就是尋址7FFh。2K字或更少程序存儲(chǔ)空間的器件不需要分頁(yè)。

復(fù)位向量

對(duì)于任何單片機(jī),復(fù)位都將使程序計(jì)數(shù)器指向地址0h,我們稱這個(gè)地址為“復(fù)位向量地址”,也就是單片機(jī)發(fā)生復(fù)位時(shí),程序執(zhí)行的入口地址。

任何復(fù)位操作都會(huì)將PCLATH寄存器的內(nèi)容清零。這表明,復(fù)位向量地址(0h)處的任何轉(zhuǎn)移指令都將跳轉(zhuǎn)到程序存儲(chǔ)器的第0頁(yè)(PAGE0)。

中斷向量

當(dāng)響應(yīng)中斷時(shí),PC指向地址0004h,我們稱這個(gè)地址為“中斷向量地址”。當(dāng)PC指向中斷向量時(shí),PCLATH寄存器的值并不會(huì)被修改。這意味著,在中斷服務(wù)程序中,在改寫PC實(shí)現(xiàn)程序跳轉(zhuǎn)前,應(yīng)按目的地址所處的實(shí)際程序頁(yè)面先設(shè)定PCLATH寄存器。在中斷服務(wù)程序修改PCLATH寄存器前,應(yīng)將原PCLATH的內(nèi)容保存起來(lái),以便從中斷服務(wù)程序返回時(shí)恢復(fù)PCLATH。

標(biāo)定信息

某些器件在程序存儲(chǔ)器中存儲(chǔ)標(biāo)定信息。在器件最終測(cè)試時(shí),Microchip將標(biāo)定信息寫入程序存儲(chǔ)器。應(yīng)用程序利用這些值可以獲得更好的運(yùn)行結(jié)果。標(biāo)定信息通常放在程序存儲(chǔ)器的末尾,并以RETLW指令形式實(shí)現(xiàn),該指令所帶的立即數(shù)就是標(biāo)定信息。

*注:對(duì)于窗口型器件,在擦除器件內(nèi)容前(同時(shí)會(huì)擦除標(biāo)定信息),務(wù)必先記下所有的標(biāo)定值。這樣在重新燒寫器件時(shí)能恢復(fù)標(biāo)定值。建議將標(biāo)定值寫在封裝上。

程序計(jì)數(shù)器(PC)

程序計(jì)數(shù)器指定要取出執(zhí)行的指令的地址,其寬度為13位,其中低8位來(lái)自PCL寄存器,該寄存器可讀寫的,而高5位(PC<12:8>)來(lái)自PCH寄存器(不可直接讀寫)。PCH寄存器的值只能通過(guò)PCLATH寄存器來(lái)更新。

圖6-2所示為裝載PC值的四種情況。情況1為寫PCL時(shí),如何裝載PC(PCLATH<4:0>→PCH);情況2為執(zhí)行GOTO指令時(shí),如何裝載PC(PCLATH<4:3>→ PCH);情況3為執(zhí)行CALL指令時(shí),如何裝載PC(PCLATH<4:3> → PCH)以及PC值如何壓入棧頂;情況4為執(zhí)行返回指令時(shí),如何裝載PC,此時(shí)PC值從棧頂裝載(彈出)。

相對(duì)跳轉(zhuǎn)指令

程序的相對(duì)跳轉(zhuǎn)指令是通過(guò)向程序計(jì)數(shù)器加一個(gè)偏移量來(lái)實(shí)現(xiàn)的(ADDWF PCL),當(dāng)使用相對(duì)跳轉(zhuǎn)指令方法對(duì)表進(jìn)行讀操作時(shí),要注意表地址是否超過(guò)了PCL寄存器的尋址范圍(每塊256個(gè)字節(jié))。

*注:對(duì)程序計(jì)數(shù)器(PCL)的任何寫操作,都會(huì)使PCLATH的低五位裝載到PCH中。

堆棧

堆棧允許8級(jí)深度的子程序嵌套調(diào)用和中斷。堆棧包含了程序執(zhí)行分支的返回地址。

中檔系列單片機(jī)有一個(gè)8級(jí)深度、13位寬的硬件堆棧。堆棧既不占用程序存儲(chǔ)空間也不占用數(shù)據(jù)存儲(chǔ)空間,棧指針不能讀寫。當(dāng)執(zhí)行CALL指令或響應(yīng)中斷發(fā)生跳轉(zhuǎn)時(shí),PC值被壓入堆棧(PUSH)。而執(zhí)行RETURN、RETLW或RETFIE指令時(shí),PC值從堆棧彈出(POP)。執(zhí)行壓棧或出棧操作時(shí),不會(huì)修改PCLATH寄存器。 壓棧(PUSH)8次之后,進(jìn)行第9次壓棧時(shí),進(jìn)棧的數(shù)據(jù)將覆蓋第1次壓棧存儲(chǔ)的數(shù)據(jù),而第10次壓棧時(shí)進(jìn)棧的數(shù)據(jù)將覆蓋第2次壓棧存儲(chǔ)的數(shù)據(jù),依此類推。一個(gè)堆棧被覆蓋的例子如圖6-3所示。

*注1:沒(méi)有用于表示堆棧溢出或堆棧下溢條件的狀態(tài)位。

*注2:沒(méi)有稱為PUSH或POP的指令或助記符。而實(shí)現(xiàn)類似效果的操作是執(zhí)行CALL、RETURN、RETLW和RETFIE指令,或轉(zhuǎn)到中斷向量地址。

程序存儲(chǔ)器分頁(yè)

某些器件的程序存儲(chǔ)器空間大于2K字,但是CALL和GOTO指令只有11位地址范圍,這11位地址只允許在2K存儲(chǔ)空間范圍內(nèi)跳轉(zhuǎn)。為了使CALL和GOTO指令可以訪問(wèn)整個(gè)8K的程序存儲(chǔ)地址范圍,必須有另外兩位來(lái)指定程序存儲(chǔ)器頁(yè)。將PCLATH<4:3>位作為頁(yè)面選擇位(圖6-2)。在執(zhí)行CALL或GOTO指令前,用戶必須確保正確設(shè)置頁(yè)面選擇位PCLATH<4:3>,以便指向需要的程序存儲(chǔ)頁(yè)面(圖6-2)。當(dāng)執(zhí)行一條返回指令時(shí),整個(gè)13位PC地址值都從堆棧彈出,不需要再對(duì)PCLATH<4:3>位進(jìn)行設(shè)置。

*注:當(dāng)器件的程序存儲(chǔ)器空間小于或等于2K字時(shí),可忽略用來(lái)存取有多個(gè)頁(yè)面的程序存儲(chǔ)器的頁(yè)面選擇位(PCLATH<4:3>)。但不推薦將PCLATH<4:3>位作為一般讀寫位使用,因?yàn)檫@樣做可能影響與將來(lái)產(chǎn)品的向上兼容性。對(duì)于程序存儲(chǔ)器空間在2K到4K字之間的器件,可忽略頁(yè)面選擇位PCLATH<4>,因?yàn)樗怯脕?lái)尋址2、3頁(yè)(1000h~1FFFh)的。通常也不推薦將PCLATH<4>作為一般讀寫位使用,因?yàn)檫@樣做可能影響與將來(lái)產(chǎn)品的向上兼容性。

例6-1是調(diào)用在程序存儲(chǔ)器第1頁(yè)上子程序的例子。本例假使PCLATH寄存器由中斷服務(wù)程序保存和恢復(fù)(如果使用了中斷)。

例6-1:從第0頁(yè)調(diào)用第1頁(yè)的子程序

 



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉