微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > PIC16F887与MPLAB之应用设计

PIC16F887与MPLAB之应用设计

时间:02-24 来源:互联网 点击:
  採用RC模式在成本考量會比較低,在實際的應用上只需一個電容與一個電阻即可。

2.3.1指令週期與指令流程
  工作時脈是单片机工作心臟,PIC16F877单片机時脈輸入是由OSC1接腳進入單晶片,此時脈進入單晶片後會被除以四,以產生四個不重疊的四相序時脈Q1~Q4,圖2-1為時序圖。在程式的執行中,程式計數器(Program Counter , PC)用來記錄下一個要被執行的指令碼位址,PC值的遞增由Q1上緣觸發,接下來PC中指向位址的程式碼便會被從程式記憶體中擷取出來,並放入指令暫存器(Instruction Register , IR) 之中,這個動作是在Q1相序中完成,下依次Q1上緣觸發來臨時會觸發下一個PC值得擷取,而在同樣的Q2~Q4相序中,剛剛放在IR中的指令會解碼並被執行。因此一個Q1~Q4相序便是一個指令週期,這種在一個指令週期中同時進行「指令擷取」與「指令執行」的動作架構,即是所謂管線架構(Pipeline),而PIC16F877採用兩層的Pipeline。

2.4記憶體架構
  PIC16F877单片机的記憶體配置可分成三個部分,程式記憶體(Program Memory),資料記憶體(Data Memory)和EEPROM資料記憶體。
2.4.1程式記憶體
  PIC16F877单片机總共具有8K的程式記憶體,程式記憶體以2K的大小為單位分頁(Page),因此共有四個分頁。其中特別注意記憶體中兩個位址,一個是0000h,稱之為「重置向量」(Reset Vector),這是程式的起始位址,也是單晶片重置後的起始位址;另一個位只是0004h,稱之為「中斷向量」(Interrupt Vector),當有致能的中斷產生時,程式計數器便會將當時的pc值放到堆疊裡,然後跳到此位址,執行此位址的指令。圖2.7為程式記憶體配置。

2.4.2資料記憶體
  資料記憶體用來儲存程式執行時的資料,PIC16F877单片机的資料記憶體在`用途上,可分為「特殊功能暫存器」(Special Function Register)和「一般用途暫存器」(General Purpose Register)兩種。特殊功能暫存器是單晶片內部CPU與各週邊模組所使用的暫存器,由於這些週邊之功能的設定與使用都是透過記憶體存取的方式來設定相關的參數和存取其內容,因此稱為「記憶體映射暫存器」。一般用途暫存器是留給寫程式人自行規劃使用,作為程式執行中一些變數臨時儲存之用。 PIC16F877資料記憶體以128Bytes的大小規劃為一個Bank,共有四個Bank,在使用不同Bank中的記憶體位址時,必須先設定STATUS暫存器中Bank Select Bit , RP1:RP0STATUS6:5>。RP1和RP0位元對應所選擇Bank的如下:

2.5 ALU與特殊功能暫存器
2.5.1算數邏輯單元與工作暫存器
  PIC16F877单片机的核心包含一個8位元的「算數邏輯單元」(Arithmetic Logic Unit , ALU)它可以對「工作暫存器」(Working Register , W)中的資料和其他暫存器檔案中的資料進行算數與邏輯的運算,在運算的過程中ALU也控制狀態位元(位於STATUS暫存器中),用來表示運算的結果狀態。
  「工作暫存器」(Working Register),即簡稱W暫存器,這是一個8位元的暫存器,它不屬於資料記憶體的一部份,而是位於CPU之中供ALU在運算中使用,因此W暫存器不是一個記憶體映射暫存器。基本上ALU中所有的運算都會用到W暫存器,但W暫存器是無法定址存取,只能借用所提供的指令來使用。
2.5.2狀態暫存器
  STATUS暫存器,即狀態暫存器,其內容包含了ALU計算結果的狀態、單晶片的重置狀態以及資料記憶體的選擇位元。

2.5.3程式計數器
  「程式計數器」(Program counter , PC )儲存了下一個所要執行指令在程式記憶體中的位址,因此程式計數器中的內容代表了程式記憶體中某個位址,所以程式記憶體內容的位元寬度和可以定址的位址寬度大小是相同,PIC16F877的程式計數器為13位元寬,因此可以定址的程式記憶體大小為8K。PC中13個位元,可以分成兩部分,較低八個位元PC7:0>為PCL,較高五個位元PC13:8>為PCH,PCH是我們看不到也無法存取,PCL則是一個記憶體映射暫存器,位址是0x02而且是一個unbank的暫存器,也就是透過0x82、0x102和0x182都可以直接使用與存取。
  在使用GOTO與CALL指令時,要注意一下希望跳躍到的程式位址是位於程式記憶體的哪一頁(Page)。因為這兩個指令可用的位址範圍為2K,恰為記憶體暫存器一頁的大小,所以這兩個指令只能在同一頁的程式記憶體內範圍跳躍。因此當所要跳躍的位只有跨頁(Cross Page)的情形時,必須要根據目標位址在哪一頁,由設定PCLTH4:3>這兩個位元決定。
2.5.4堆疊
  在程式的執行流程上,有一個很重要的部分就是「堆疊」的使用,PIC16F877单片机的內部有一個13位元寬,8層深的硬體堆疊,這個堆疊的目的是用來放置程式中有中斷或副程式呼叫時,原來程式分歧點的PC內容。堆疊的空間並不屬於任何的記憶體空間,而是一塊獨立的區塊,而且堆疊的使用時有一個堆疊指標也不是我們可以讀取與控制的。當中斷發生而且致能位元也有設定時,當時的PC值便會被放到堆疊之中,然後將PC填入0x04的值,0x04是PIC16877單晶片中斷向量位址,目的是將程式的執行轉移到中斷起始位址,然後執行相對應的中斷副程式。在中斷副程式結束之後,再由堆疊中取回剛剛跳出程式的PC值,繼續執行下去。同樣的使用CALL指令呼叫副程式時,PC值也會放到堆疊中,待副程式執行完後再取出。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top