PIC微控制器總結

2021-03-04 04:24:41 字數 5102 閱讀 9973

標籤: pic微控制器

本人收集的pic微控制器資料

最全的關於pic微控制器入門寶典

為了給前一段時間學習pic16f616型微控制器的乙個總結和方便大家的交流,我寫了這篇關於pic微控制器的學習心得,都是在看了手冊和程式設計除錯後用自己的語言組織的,其中有不足或者有疑問的地方希望大家能及時的給予糾正和批評,提出寶貴的意見.

2.pic微控制器的概述

pic16f616是一款14引腳、8位的cmos微控制器.採用精簡指令集,僅有35條指令,由於採用了資料匯流排和指令匯流排分離的哈佛匯流排結構,使得除少量指令不是單週期之外,大部分的指令都是單週期指令.這樣有利於提高微控制器的執行速度和執行效率.

pic16f616這款微控制器供電電壓可以在2v到5.5v之間,內部整合了乙個rc振盪器,頻率可以配置成8mhz或者4mhz,也可以用外部晶振提供時鐘.內部整合有ad轉換、比較器等硬體模組,還具有上電復位、欠壓復位、看門狗、**保護等功能.

三個定時器、pwm發生器等可以由使用者程式設計.下面我來一一介紹關於pic微控制器的這些模組和功能.

3.儲存器

pic16f616分為程式儲存其和資料儲存器,程式儲存器的大小是2048words,資料儲存器的大小是128bytes.

程式儲存器中0000h的位址為復位位址,當上電或者看門狗計時器等復位的時候,均會導致pc指標指向復位位址.位址0004h為中斷位址,當無論發生什麼中斷的時候,pc指標就會指向此位址.在位址0005h~07ffh可以移植程式.

資料儲存器分為兩個部分,分別叫做bank0和bank1,其中bank0的位址範圍為:00h-7fh,bank1的位址範圍為80h-ffh.一般的暫存器都放在裡面.

可以通過暫存器statusl裡面的rp0位來選擇bank0和bank1.

在程式設計序的時候要注意的是,當你要操作的暫存器在bank0的時候,先要選擇bank0(將暫存器status的rp0位置0),然後再對你所要操作的暫存器進行操作,當你要操作的暫存器在bank1的時候,同理先要選擇bank1.

如果想要定義一些變數,可以在資料儲存器20h開始的位址定義,定義的位址範圍為20h-7fh.一般這麼多就夠用了.

4.pic的輸入輸出埠

在學習這個部分的時候,曾經遇到過一些問題.pic微控制器的引腳不多,大多都是復用引腳,例如ad、io、比較器、外接晶振等等,所以在配置埠的時候,一定要知道每個功能怎樣設定才能實現的,在這一小節中,我要講的是通用io口的設定問題.

pic16f616有12個io口,但是有乙個引腳(ra3)只能作為輸入引腳用,不能用作輸出,另外,a口具有電平變化中斷的功能,而c口沒有,在設計的時候要注意.

在設定的時候,一般要進行以下幾項設定:

(1)設定埠是模擬埠還是數字埠,可以通過暫存器ansel來設定.例如你想用ad,就要將相應的引腳設定為模擬輸入埠.

(2)如果你選擇的是數字埠,接下來就要設定埠的方向,是輸入還是輸出(ra3除外),可通過暫存器trisa(a口)或trisc(c口)來設定.

(3)設定埠的輸出電平,可以通過暫存器porta(a口)或portc(c口)來設定.

這是對io口的通用設定,但是這不是全部的設定,接下來的設定要看時a口還是c口了.對於a口,它有幾個特殊的功能:內部弱上拉、電平變化中斷、ra2/int引腳的沿中斷.

如果想要這些功能,就要對相應的暫存器進行設定.

弱上拉的設定:只有當引腳為輸出的時候弱上拉才有效,可以通過暫存器wpua來設定相應引腳的弱上拉,值得一提的如果開啟了弱上拉,會有多餘的電流浪費,這樣對於低功耗的設計是不可取的,但是如果在進行一些例如鍵盤電路設計的候,可以開啟弱上拉功能,這樣就不需要在鍵盤電路中加上拉電阻了.

電平變化中斷的設定:可以通過暫存器ioca來設定,但是首先要將相應引腳設定為數字埠且為輸入狀態.同時要將暫存器intcon的reie位設定為1,總中斷要允許(置暫存器intcon的gie位),如果設定相應引腳有這個功能,當此引腳電平發生的時候,就會產生乙個中斷,同時一些中斷標誌位被置上(intcon的raif位被置1),且總中斷gie被置為0.

在中斷服務程式中,要軟體清除raif位和重新置gie位才能繼續開啟此中斷.

ra2/int腳的沿中斷設定:同樣首先要將相應引腳設定為數字埠且為輸入狀態,設定intcon的intf位為1,表示允許int引腳外部中斷,暫存器option_reg的integd位可以設定是上公升沿中斷還是下降沿中斷.當發生中斷時,intcon的intf位被置為1,gie被清零,在中斷服務程式中,要軟體清除intf位和重新置gie位才能繼續開啟此中斷.

對於c口,不能產生電平變化中斷和沿中斷.

5.定時器

定時器是微控制器的乙個很重要的部分,用它可以產生很多不同的定時時間,來滿足程式設計的不同需求.pic16f616有三個定時器,分別是timer0、timer1、timer2.它們的用法不是很相同,下面來分別談談這三個定時器的用法和設定問題.

(1)timer0

timer0是乙個八位的計數器,它有乙個八位的計數暫存器tmr0,八位的預分頻器(與看門狗共用),可以選擇內部或者是外部時鐘源,有計數器溢位中斷的功能.

timer0可以作為乙個定時器或者計數器來使用,與timer0有關的暫存器有:tmr0,intcon,option_reg,trisa.

當timer0作為定時器來使用的時候,要設定option_reg的t0cs位為0,表示用的是內部時鐘,每乙個指令週期tmr0的值會增加(當沒有預分頻的時候),當tmr0被賦值的時候,會有兩個指令週期的延時.預分頻器可以和看門狗共用,可以由option_reg的psa位來設定,當psa 為0的時候分頻器選擇timer0,當psa為1的時候分頻器選擇看門狗.同時,與分頻器的分頻值可以通過暫存器option_reg來設定,設定的值可以由1:

2到1:256.當timer0的計數器tmr0計數從ffh到00h的時候會產生溢位,同時溢位標誌位(intcon暫存器的t0if位)會置位(無論timer0的中斷是否開啟),如果中斷已經開啟了(intcon暫存器的t0ie被置位),那麼就會產生溢位中斷.

t0if位需要軟體對其進行清零.

當timer0作為計數器來使用的時候,就要用外部時鐘源(option_reg的t0cs置1),每次當引腳t0ck1的沿到來時timer0的 tmr0會增加1,上公升沿和下降沿可以由option_reg的t0se來設定.中斷和timer0作為定時器使用時一樣.在我們程式設計序的時候,可以用 timer0進行定時或產生定時資訊,下面我來解釋定時器的定時時間的計算.

假設timer0用的時鐘源是內部的4mhz,那麼每條指令的執行時間就是 1us,設timer0的預分頻係數是1:256,tmr0的初值是6,那麼定時時間為:

256×(256-6)×1us=64ms

在程式設計的時候需要注意的是timer0的中斷是不能把微控制器從sleep的狀態喚醒的.

(2)timer1

timer1是乙個十六位的計數器.它有乙個計數暫存器對(tmr1h:tmr1l),時鐘源也是內外可選的,具有乙個2bit的預分頻器,可以同步或者非同步操作,具有中斷功能,但是溢位中斷只能在外部時鐘、非同步的模式才能將微控制器從sleep中喚醒,timer1具有捕獲/比較功能,還有被一些特殊事件觸發功能(eccp),比較器的輸出可以與timer1的時鐘同步.

下面來一一介紹這些功能.

在程式設計的時候也可以按照這樣的步驟來進行.設定暫存器t1con,時鐘源可以選擇外部或者內部的時鐘源,外部時鐘源可以選擇lp晶體.timer1在選擇內部時鐘時,可以執行在定時器的狀態,選擇外部時鐘的時候,可以執行在定時器或者是計數器狀態,工作於計數器狀態時可以選擇門限是高電平還是低電平計數.

這些都可以通過暫存器t1con來設定.

以下是t1con每個位的具體功能:bit1:timer1是否開啟位,當此位設為1時,timer1開啟,設為0時,timer1關閉;bit2:

時鐘源選擇位,置1時,選擇外部時鐘(t1ck1引腳的上公升沿),此位置0時,選擇的是內部時鐘,並且和t1acs(暫存器cm2con1中)配合,當 t1acs位為0時,時鐘為fosc/4,當t1acs位為1時,時鐘為fosc.bit2:t1sync:

定時器1的外部時鐘輸入同步位,當 tmr1cs位為1、t1sync位為1,定時器1被設定成與外部時鐘不同步,t1sync位為0時,定時器1被設定成與外部時鐘同步模式.bit3: t1oscen:

此位為1時timer1的時鐘選擇lp,為0時lp晶體被關閉.bit5-4:t1ckps:

timer1時鐘的預分頻係數設定,通過這兩位的是指,可以講timer1設定成1:1、1:2、1:

4、1:8幾種分頻值.bit6:

tmr1ge:只有當tmr1on位為1時才有效,當此位為 1時,timer1計數被timer1的門限控制,此位為0時,timer1正常計數.bit7:

t1ginv:此位為1時,timer1在門限為高時計數,此位為0時,timer1在門限為低時計數.

timer1的中斷程式設計:當timer1的計數產生溢位的時候,如果timer1中斷允許的話,就會產生中斷.中斷可以這樣設定,timer1的中斷允許位tmr1ie(在pie1暫存器中)置1,暫存器intcon的peie位置1,同時總中斷位gie(位於暫存器intcon中)要置為1.

當定時器產生中斷的時候,會把中斷標誌t1if置為1(位於暫存器pir1中),然後pc指標指向0004h位址.t1if位必須軟體清除.

(3)timer2

timer2的功能於timer1有些不同,timer2時乙個八位的計數器,有乙個八位的計數暫存器tmr2,timer2具有以下功能:有兩個分頻器,乙個是前分頻器,乙個是後分頻器.分頻可以軟體進行設定,另外,timer2的時鐘源是指令時間(fosc/4),timer2有乙個暫存器 pr2,此暫存器的功能是當tmr2增加到pr2的值時,將產生中斷,當然,中斷必須允許,然後pr2的值會重新變為00h.

下面來介紹timer2的程式設計:

timer2的控制暫存器t2con作用是設定timer2的開啟關閉和前後分頻的分頻係數,暫存器t2con的toutps<3:0> 位設定後分頻係數,可以被設定成1:1~1:

16;位tmr2on為1時,timer2開啟,為0時,timer2關閉;位t2ckps<1: 0>可以設定前分頻係數,可以被設定成1、4、16.

timer2的中斷可以這樣控制,允許timer2中斷位tmr2ie(位於pie1暫存器內)被置1時,timer2中斷被允許,被置0時, timer2中斷禁止.暫存器intcon的peie位置1,同時總中斷位gie(位於暫存器intcon中)置為1.通過上面的設定,timer2就可以產生中斷了.

當定時器產生中斷的時候,會把中斷標誌t2if置為1(位於暫存器pir1中),然後pc指標指向0004h位址.中斷標誌位t2if必須軟體清除.

PIC微控制器中斷模組介紹

pic16f87x系列微控制器可以接收多達14個中斷源。中斷控制器暫存器intcon標記著各個中斷源的請求,對各個中斷設定遮蔽位,對全部中斷設定全域性遮蔽位。pic16f87x系列的中斷包含 tmr0溢位中斷 toif 外部中斷 intf 埠b變化中斷 rbif 並行從動埠中斷 pspif a d變...

我的PIC微控制器除錯心得

我的pic微控制器除錯心得,給像我一樣曾經苦苦尋覓的初學者一點啟示 我是一位初學者,pic初學者,但是在微控制器行當已經混跡多年了。說句實話,c開發環境都大同小異,只不過燒寫和 大同小異。鑽研了兩天,收到了很多回應和啟發。下面應soso的請求,把最近的除錯心得和大家分享 1 先說說我要做的東西 說來...

替代PIC的台系微控制器

2009 超牛台系微控制器替代microchip pic微控制器完全對照表 microchip微控制器當中pic12,pic16系列雖是其低端產品,但應用量卻是非常大,基於這種原因,就出現了microchip的替代產品。除了抗干擾性能還比不上以外,其它如外觀,腳位排列,甚至就連指令都差不多,有些公司...