<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 專(zhuān)題 > pic單片機教程之13位程序計數器存儲器的組成

pic單片機教程之13位程序計數器存儲器的組成

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

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

本文引用地址:http://dyxdggzs.com/article/201608/295777.htm

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

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

程序存儲器構成

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

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

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

復位向量

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

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

中斷向量

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

標定信息

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

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

程序計數器(PC)

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

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

相對跳轉指令

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

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

堆棧

堆棧允許8級深度的子程序嵌套調用和中斷。堆棧包含了程序執行分支的返回地址。

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

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

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

程序存儲器分頁(yè)

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

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

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

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

 



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>