<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

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

          本文引用地址:http://www.ex-cimer.com/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ǔ)空間來實(shí)現(xiàn)應(yīng)用程序。

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

          復(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頁(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í)際程序頁面先設(shè)定PCLATH寄存器。在中斷服務(wù)程序修改PCLATH寄存器前,應(yīng)將原PCLATH的內(nè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位來自PCL寄存器,該寄存器可讀寫的,而高5位(PC<12:8>)來自PCH寄存器(不可直接讀寫)。PCH寄存器的值只能通過PCLATH寄存器來更新。

          圖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)指令是通過向程序計(jì)數(shù)器加一個(gè)偏移量來實(shí)現(xiàn)的(ADDWF PCL),當(dāng)使用相對(duì)跳轉(zhuǎn)指令方法對(duì)表進(jìn)行讀操作時(shí),要注意表地址是否超過了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í)行壓?;虺鰲2僮鲿r(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:沒有用于表示堆棧溢出或堆棧下溢條件的狀態(tài)位。

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

          程序存儲(chǔ)器分頁

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

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

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

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

           



          評(píng)論


          相關(guān)推薦

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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();