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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > PIC16F887與MPLAB之應(yīng)用設(shè)計(jì)

          PIC16F887與MPLAB之應(yīng)用設(shè)計(jì)

          作者: 時間:2011-02-24 來源:網(wǎng)絡(luò) 收藏
          前言
            近年來由於半導(dǎo)體技術(shù)發(fā)展快速,使得電子產(chǎn)品的製造成本大幅降低,電子產(chǎn)品的使用也逐漸成為日常生活之中人們不可或缺的一部份,由於使用者的需求不同,電子產(chǎn)品也需不斷的求新求變。目前許多電子產(chǎn)品需利用單晶片微電腦(Single Chip Microcomputer) 作為控制核心,這一類的產(chǎn)品特色在於,只要將寫好的控制程式寫入單晶片的記憶體中,而且在單晶片外接一些週邊的電子元件,就可以形成一個新的電子產(chǎn)品,這一類電子產(chǎn)品在日常生活中隨處可見,例如生日卡片上的音樂IC、各式遙控器、行動電話,以及家電用品和汽車等其他產(chǎn)品均有的運(yùn)用,除此之外在個人電腦(PC)以及相關(guān)週邊也都需利用,另外工業(yè)控制應(yīng)用上更是少不了。
            繼學(xué)習(xí)和使用Intel MCS-51系列單片機(jī)之後,我們決定再研究Microchip PIC16F87X系列單片機(jī),以PIC16F877為研究目標(biāo),來探討單片機(jī)微電腦的組成架構(gòu),程式開發(fā)及控制應(yīng)用技術(shù),以此作為基礎(chǔ),再擴(kuò)展於其他類型單晶片的運(yùn)用與應(yīng)用電路設(shè)計(jì)。
          I簡 介
          1.1單片機(jī)基本架構(gòu)
            單片機(jī)係指由中央處理單元(CPU),記憶體單元(Memory)及輸入/輸出單元三大部分所組成。其中CPU可分為兩部分,即算數(shù)邏輯(ALU)及控制單元(CU),CPU透過匯流排(BUS)執(zhí)行程式碼的Fetch、Decode、算數(shù)邏輯運(yùn)算及讀寫時序信號的控制。記憶體單元提供存放程式與資料之空間,包含唯讀記憶體(ROM)與隨機(jī)存取記憶體(RAM)。而輸入/輸出單元提供與外界週邊設(shè)備或元件溝通的管道。
          1.1.1單片機(jī)微電腦
            單片機(jī)微電腦(Single Chip Microcomputer)簡稱為單片機(jī),而所謂單片機(jī)微電腦就是構(gòu)成一部微電腦系統(tǒng)所需的元件,如中央處理單元(CPU)、記憶體單元(Memory)、輸入/輸出(I/O)、時脈產(chǎn)生單元及相關(guān)週邊裝置製作在同一晶片上,而成為一能夠獨(dú)立運(yùn)作的控制系統(tǒng)。
          1.2 PIC16F877 單晶片微電腦
            PIC 16F87X系列單晶片是Microchip 公司所推出的產(chǎn)品,它為一顆RISC的八位元微電腦控制單晶片,搭配了高達(dá)8K的採用Flah型式的程式記憶體及5組的I/O PORT,和支援達(dá)14個中斷。
            PIC16F877的特性說明如下:

            ●採用高性能的RISC CPU核心
            ●8位元微電腦控制晶片
            ●8Kx14程式記憶體(Flash)
            ●368Bytes資料記憶體及256Bytes的EEPROM資料記憶體
            ●5組I/O ports(A,B,C,D,E)
            ●2組8位元計(jì)時/計(jì)數(shù)器Timer0,Timer2,及1組16位元計(jì)時/計(jì)數(shù)器Timer1
            ●支援14個中斷處理

          1.3 MPLAB
            MPLAB是Microchip 公司對PIC系列單片機(jī)所發(fā)展的一套整合發(fā)展環(huán)境(Integrated Development Environment , IDE) MPLAB包含下列工具:
            ☆MPLAB Editor─程式編輯器
            ☆MPASM Assembler─程式組譯器
            ☆MPLAB-SIM Software Simulator─軟體模擬器
            ☆MPLAB-ICEMULATOR─硬體模擬器
            ☆MPLAB-ICD─ICD元件的偵錯模擬環(huán)境
          II 系統(tǒng)架構(gòu)
          2.1 PIC16F87X單片機(jī)核心架構(gòu)
            PIC系列單片機(jī)為RISC架構(gòu)單片機(jī),它所採用的Harvard結(jié)構(gòu)和過去一般單晶片所採用的Von Neumann架構(gòu)最大的差異在於匯流排的改變。Von Neumann結(jié)構(gòu)是傳統(tǒng)的單晶片結(jié)構(gòu),程式記憶體和資料記憶體是在同一個記憶體區(qū)塊,記憶體與CPU之間只使用單一匯流排,不論是要對程式記憶體或資料記憶體作存取都是使用此匯流排,因此要完成一個指令通常必須依序使用匯流排,從指令的擷取、解碼、資料讀取、執(zhí)行到資料的寫入,最後的結(jié)果是一個指令大都需要等待好幾個週期才能完成。Harvard結(jié)構(gòu)改善了這樣的缺點(diǎn),主要是程式記憶體和資料記憶體使用不同的記憶體區(qū)塊,而且也有各自獨(dú)立的匯流排,這樣的做法大大的改善了指令執(zhí)行的頻寬,兩個匯流排可以同時的工作,最大的優(yōu)點(diǎn)是當(dāng)一個指令在執(zhí)行時,已經(jīng)可以去抓下一個指令,因此對於運(yùn)作的效率會有顯著的提昇。
          2.2內(nèi)部結(jié)構(gòu)圖
            圖2.2為 PIC16F877單片機(jī)的內(nèi)部功能架構(gòu)圖,圖中說明匯流排和各個功能方塊之間的連接方式,利用架構(gòu)圖可以讓我們對於整個系統(tǒng)更加的了解。
          2.3接腳功能描述
            下面列出PIC16F877單片機(jī)的接腳功能與說明。
            
           
          2.3單片機(jī)的振盪時脈
            振盪時脈的速度決定了工作的速度,因?yàn)閮?nèi)部所有的動作都是這個時脈來驅(qū)動進(jìn)行。PIC16F87X的時脈輸入是由OSC/CLKIN和OSC2/CLKOUT兩支接腳來輸入的,時脈的速度可以分成四種模式:
            ●LP模式─低功率振盪器
            ●XT模式─振盪器/諧振器
            ●HS模式─快速振盪器/諧振器
            ●RC模式─電阻器/電容器
            在LP、XT和HS模式之下,通常是使用石英振盪器(Crystal)或是陶瓷諧振器(ceramic resonator)連接在OSC1/CLKIN和OSC2/CLKOUT這兩支接腳上來產(chǎn)生振盪信號?;蚴侵苯佑猛獠康臅r脈信號輸入作為單晶片的時脈,這個時脈信號從OSC1/CLKIN接腳輸入單晶片,OSC2/CLKOUT接腳則不使用。
            採用RC模式在成本考量會比較低,在實(shí)際的應(yīng)用上只需一個電容與一個電阻即可。
          2.3.1指令週期與指令流程
            工作時脈是單片機(jī)工作心臟,PIC16F877單片機(jī)時脈輸入是由OSC1接腳進(jìn)入單晶片,此時脈進(jìn)入單晶片後會被除以四,以產(chǎn)生四個不重疊的四相序時脈Q1~Q4,圖2-1為時序圖。在程式的執(zhí)行中,程式計(jì)數(shù)器(Program Counter , PC)用來記錄下一個要被執(zhí)行的指令碼位址,PC值的遞增由Q1上緣觸發(fā),接下來PC中指向位址的程式碼便會被從程式記憶體中擷取出來,並放入指令暫存器(Instruction Register , IR) 之中,這個動作是在Q1相序中完成,下依次Q1上緣觸發(fā)來臨時會觸發(fā)下一個PC值得擷取,而在同樣的Q2~Q4相序中,剛剛放在IR中的指令會解碼並被執(zhí)行。因此一個Q1~Q4相序便是一個指令週期,這種在一個指令週期中同時進(jìn)行「指令擷取」與「指令執(zhí)行」的動作架構(gòu),即是所謂管線架構(gòu)(Pipeline),而PIC16F877採用兩層的Pipeline。
          2.4記憶體架構(gòu)
            PIC16F877單片機(jī)的記憶體配置可分成三個部分,程式記憶體(Program Memory),資料記憶體(Data Memory)和EEPROM資料記憶體。
          2.4.1程式記憶體
            PIC16F877單片機(jī)總共具有8K的程式記憶體,程式記憶體以2K的大小為單位分頁(Page),因此共有四個分頁。其中特別注意記憶體中兩個位址,一個是0000h,稱之為「重置向量」(Reset Vector),這是程式的起始位址,也是單晶片重置後的起始位址;另一個位只是0004h,稱之為「中斷向量」(Interrupt Vector),當(dāng)有致能的中斷產(chǎn)生時,程式計(jì)數(shù)器便會將當(dāng)時的pc值放到堆疊裡,然後跳到此位址,執(zhí)行此位址的指令。圖2.7為程式記憶體配置。
          2.4.2資料記憶體
            資料記憶體用來儲存程式執(zhí)行時的資料,PIC16F877單片機(jī)的資料記憶體在`用途上,可分為「特殊功能暫存器」(Special Function Register)和「一般用途暫存器」(General Purpose Register)兩種。特殊功能暫存器是單晶片內(nèi)部CPU與各週邊模組所使用的暫存器,由於這些週邊之功能的設(shè)定與使用都是透過記憶體存取的方式來設(shè)定相關(guān)的參數(shù)和存取其內(nèi)容,因此稱為「記憶體映射暫存器」。一般用途暫存器是留給寫程式人自行規(guī)劃使用,作為程式執(zhí)行中一些變數(shù)臨時儲存之用。 PIC16F877資料記憶體以128Bytes的大小規(guī)劃為一個Bank,共有四個Bank,在使用不同Bank中的記憶體位址時,必須先設(shè)定STATUS暫存器中Bank Select Bit , RP1:RP0STATUS6:5>。RP1和RP0位元對應(yīng)所選擇Bank的如下:
          2.5 ALU與特殊功能暫存器
          2.5.1算數(shù)邏輯單元與工作暫存器
            PIC16F877單片機(jī)的核心包含一個8位元的「算數(shù)邏輯單元」(Arithmetic Logic Unit , ALU)它可以對「工作暫存器」(Working Register , W)中的資料和其他暫存器檔案中的資料進(jìn)行算數(shù)與邏輯的運(yùn)算,在運(yùn)算的過程中ALU也控制狀態(tài)位元(位於STATUS暫存器中),用來表示運(yùn)算的結(jié)果狀態(tài)。
            「工作暫存器」(Working Register),即簡稱W暫存器,這是一個8位元的暫存器,它不屬於資料記憶體的一部份,而是位於CPU之中供ALU在運(yùn)算中使用,因此W暫存器不是一個記憶體映射暫存器?;旧螦LU中所有的運(yùn)算都會用到W暫存器,但W暫存器是無法定址存取,只能借用所提供的指令來使用。
          2.5.2狀態(tài)暫存器
            STATUS暫存器,即狀態(tài)暫存器,其內(nèi)容包含了ALU計(jì)算結(jié)果的狀態(tài)、單晶片的重置狀態(tài)以及資料記憶體的選擇位元。
          2.5.3程式計(jì)數(shù)器
            「程式計(jì)數(shù)器」(Program counter , PC )儲存了下一個所要執(zhí)行指令在程式記憶體中的位址,因此程式計(jì)數(shù)器中的內(nèi)容代表了程式記憶體中某個位址,所以程式記憶體內(nèi)容的位元寬度和可以定址的位址寬度大小是相同,PIC16F877的程式計(jì)數(shù)器為13位元寬,因此可以定址的程式記憶體大小為8K。PC中13個位元,可以分成兩部分,較低八個位元PC7:0>為PCL,較高五個位元PC13:8>為PCH,PCH是我們看不到也無法存取,PCL則是一個記憶體映射暫存器,位址是0x02而且是一個unbank的暫存器,也就是透過0x82、0x102和0x182都可以直接使用與存取。
            在使用GOTO與CALL指令時,要注意一下希望跳躍到的程式位址是位於程式記憶體的哪一頁(Page)。因?yàn)檫@兩個指令可用的位址範(fàn)圍為2K,恰為記憶體暫存器一頁的大小,所以這兩個指令只能在同一頁的程式記憶體內(nèi)範(fàn)圍跳躍。因此當(dāng)所要跳躍的位只有跨頁(Cross Page)的情形時,必須要根據(jù)目標(biāo)位址在哪一頁,由設(shè)定PCLTH4:3>這兩個位元決定。
          2.5.4堆疊
            在程式的執(zhí)行流程上,有一個很重要的部分就是「堆疊」的使用,PIC16F877單片機(jī)的內(nèi)部有一個13位元寬,8層深的硬體堆疊,這個堆疊的目的是用來放置程式中有中斷或副程式呼叫時,原來程式分歧點(diǎn)的PC內(nèi)容。堆疊的空間並不屬於任何的記憶體空間,而是一塊獨(dú)立的區(qū)塊,而且堆疊的使用時有一個堆疊指標(biāo)也不是我們可以讀取與控制的。當(dāng)中斷發(fā)生而且致能位元也有設(shè)定時,當(dāng)時的PC值便會被放到堆疊之中,然後將PC填入0x04的值,0x04是PIC16877單晶片中斷向量位址,目的是將程式的執(zhí)行轉(zhuǎn)移到中斷起始位址,然後執(zhí)行相對應(yīng)的中斷副程式。在中斷副程式結(jié)束之後,再由堆疊中取回剛剛跳出程式的PC值,繼續(xù)執(zhí)行下去。同樣的使用CALL指令呼叫副程式時,PC值也會放到堆疊中,待副程式執(zhí)行完後再取出。
            由於堆疊有八層深,因此程式可以有八層的「跳躍─返回」的動作,依照跳躍的順序先後,將跳躍位置的PC值存入堆疊中,取出PC值時則依相反的順序,先進(jìn)後出,後進(jìn)先出的方式取出PC值。如果已經(jīng)PUSH了八個PC值到堆疊中之後,再PUSH一個PC值到堆疊中,這個PC值會放到第一個放入PC值得位置,也就是以循環(huán)的方式來存入PC值,不過PIC的堆疊並沒有任何溢位旗標(biāo)或警告,因此在有好幾層副程式呼叫時,要注意一下堆疊的使用是否溢位。
          2.6中斷
            在單片機(jī)內(nèi)軟體的流程處理,中斷有其非常重要的角色,中斷允許在主要程式流程中,插入其他事件處理的副程式作優(yōu)先運(yùn)算,並且把運(yùn)算結(jié)果回存到特定暫存器,供主程式運(yùn)算。PIC16F877提供了14個中斷源,每一個中斷都有一個中斷旗標(biāo)位元和一個中斷致能位元,中斷旗標(biāo)位元表示中斷元是否產(chǎn)生這個中斷,中斷致能位元決定要不要使用這個中斷,可經(jīng)使用者利用致能位元作需要的規(guī)劃。這14個中斷中11個中斷源屬於週邊模組的中斷,由一個週邊中斷致能位元PEIE來統(tǒng)一控制所有週邊有關(guān)的中斷使用與否,另外還有3個中斷位元加上這個週邊中斷致能位元再由一個全域中斷致能位元GIE來控制,圖2.9中斷元控制流程。


          評論


          相關(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); })();