可能很多網(wǎng)友奇怪,在數(shù)字芯片高速發(fā)展的今天,32位單片機(jī)價(jià)格低廉,功能強(qiáng)大,芯片成本已經(jīng)不是產(chǎn)品開發(fā)的主要問題,那為什么還要普及PIC單片機(jī),這樣一款中低端的單片機(jī)呢?原因很簡(jiǎn)單,既然現(xiàn)在還沒有被淘汰的,總有它存在的理由,PIC單片機(jī)號(hào)稱穩(wěn)定性極好,可以在十分惡劣的環(huán)境下穩(wěn)定工作,因此在工業(yè)領(lǐng)域受到工程師們的偏愛,而且目前來看,任何一個(gè)系列的單片機(jī)都在不斷的推陳出新,產(chǎn)品性能也在不斷的提升,PIC單片機(jī)也一樣,高端的PIC單片機(jī)也有32位的,主頻高達(dá)上百兆,詳細(xì)介紹大家可以去官網(wǎng)查看。
促使我寫這樣一片文章的另外一個(gè)原因是,網(wǎng)上關(guān)于PIC單片機(jī)的入門或者學(xué)習(xí)資料相對(duì)較少,不像STM32或者51單片機(jī)那樣豐富,如果是有一定單片機(jī)基礎(chǔ)的,想學(xué)習(xí)PIC單片機(jī),看完這篇文章,應(yīng)該就可以入門了。
來介紹一下我所使用的平臺(tái)信息、調(diào)試工具。
PIC單片機(jī)型號(hào):dsPIC30F6014A
開發(fā)環(huán)境:MPLAB X IDE v3.05
下載工具:PIC Kit 3.5
PIC Kit 3.5下載器
一、 安裝開發(fā)環(huán)境
我是直接在官網(wǎng)(www.microchip.com)上下載的MPLAB X IDE v3.05版本,400多兆,應(yīng)該是最新版本了,安裝過程中使用推薦選項(xiàng)就可以,還安裝了一個(gè)C30編譯器(MPLAB_C30_V3.0)。
二、 新建項(xiàng)目
我安裝開發(fā)環(huán)境的時(shí)候,選擇了中文版本,進(jìn)入開發(fā)環(huán)境后,點(diǎn)擊:文件à新建項(xiàng)目,彈出如下界面:選擇獨(dú)立項(xiàng)目,然后點(diǎn)下一步。
步驟一
點(diǎn)擊下一步后彈出如下界面:選擇你使用的單片機(jī)型號(hào),這里我使用的是dsPIC30F6014A 16位單片機(jī)。
步驟二
繼續(xù)點(diǎn)下一步,這里選擇調(diào)試/下載工具,我使用的是PICkit3。
步驟三
下一步,這一步選擇的是編譯器,選擇C30編譯器。
步驟四
最后一步,選擇項(xiàng)目的保存目錄,編碼這里選擇的是GB2312,這樣做的目的是使項(xiàng)目中的中文字符能夠被識(shí)別,否則,添加中文注釋時(shí)會(huì)出現(xiàn)亂碼。
步驟五
至此,項(xiàng)目新建完畢,界面如下,項(xiàng)目目錄里面,我們目前只需要關(guān)注頭文件和源文件即可,在頭文件上右鍵可以選擇添加現(xiàn)有的頭文件,源文件同理。
文件添加完成后,點(diǎn)擊編譯按鈕進(jìn)行編譯,編譯通過后會(huì)在環(huán)境下方提示編譯信息,
編譯成功后,可以進(jìn)行下載和在線調(diào)試,下載按鈕用于將程序下載到單片機(jī)內(nèi)部,調(diào)試按鈕 用于在線調(diào)試程序,注意,點(diǎn)擊調(diào)試按鈕程序不會(huì)下載到單片機(jī)內(nèi)。
接下來以閃燈測(cè)試程序來講解這款單片機(jī)的使用,在此之前先來了解一下《配置位》,在開發(fā)環(huán)境中,點(diǎn)擊運(yùn)行àSet Configuration Bits,即可在環(huán)境下方調(diào)出配置窗口,Option下面的定義可以修改,
這里說一下時(shí)鐘配置和看門狗配置,F(xiàn)OSC用于配置系統(tǒng)時(shí)鐘,F(xiàn)WDT用于看門狗的配置,如果你想使用外部晶振、內(nèi)部進(jìn)行16倍頻,就選擇 XT_PLL16即可,如果是內(nèi)部時(shí)鐘、4倍頻,就在選項(xiàng)中選擇FRC_PLL4,同理,看門狗的開啟和關(guān)閉,以及開啟后的設(shè)置也可以通過FWDT來配置,這里我們選擇關(guān)閉看門狗,只需將WDT選項(xiàng)選擇為WDT_OFF即可,注意,這里選擇好之后,必須點(diǎn)擊輸出生成源代碼,會(huì)自動(dòng)生成源碼,生成的源碼拷貝到你的項(xiàng)目文件中才有效。
至于一些詳細(xì)的配置請(qǐng)自行參見手冊(cè)。
生成代碼
下面貼出LED閃燈的源碼,并逐語句進(jìn)行講解。
本文引用地址:http://www.eepw.com.cn/article/279441.htm
#include “p30f6014A.h” //包含頭文件
_FOSC(CSW_FSCM_OFF & XT_PLL16); //配置時(shí)鐘
_FWDT(WDT_OFF); //關(guān)閉看門狗
假設(shè)使用的外部晶振為5Mhz,系統(tǒng)指令周期的計(jì)算方法為:
5M*16/4=20MIPS
16為16倍頻,每執(zhí)行一條指令要4個(gè)時(shí)鐘周期,因此要除四,就得到了實(shí)際的系統(tǒng)時(shí)鐘。
IO端口的配置
IO端口使用很簡(jiǎn)單,和51相比只是多了一個(gè)方向控制,在使用端口之前 ,先設(shè)置好方向。假設(shè)我們使用的端口A的第十位作為L(zhǎng)ED的控制位,首先設(shè)置該管腳的方向,
TRISAbits.TRISA10 = 0;//該位置零為輸出,置1位輸入
控制端口實(shí)際輸出高低電平的寄存器位LATAbits,將該寄存器的LATA10位進(jìn)行置1置0操作,即可輸出高、低電平。
#define LED LATAbits.LATA10
值得注意的是,當(dāng)進(jìn)行讀引腳操作時(shí),要讀PORTAbits寄存器,而不是LATAbits寄存器。
我們是采用定時(shí)500ms中斷的方式來進(jìn)行LED的亮滅控制,因此需要進(jìn)行定時(shí)器的配置,這里使用的是16位定時(shí)器timer1。涉及到兩個(gè)函數(shù)。
ConfigIntTimer1(5);//初始化定時(shí)器1,中斷優(yōu)先級(jí)為5
OpenTimer1(39062);//進(jìn)行相關(guān)配置并打開定時(shí)器1
void ConfigIntTimer1(unsigned char priority)
{
IFS0bits.T1IF = 0 //清除中斷標(biāo)志
IPC0bits.T1IP = priority; //設(shè)置中斷優(yōu)先級(jí)
IEC0bits.T1IE = 1; //使能中斷
}
void OpenTimer1(unsigned int period)
{
TMR1 = 0; /* Reset Timer1 to 0x0000 */
PR1 = period; //中斷周期
T1CONbits.TCS = 0; //選擇時(shí)鐘源
T1CONbits.TSYNC =1;
T1CONbits.TCKPS =3; //256分頻
T1CONbits.TGATE =0;
T1CONbits.TSIDL =0;
T1CONbits.TON = 1; //啟動(dòng)定時(shí)器
}
選擇系統(tǒng)時(shí)鐘(20MIPS),并進(jìn)行256分頻,20M/256=78125,說明定時(shí)器計(jì)時(shí)到78125要用1秒鐘,定時(shí)到500ms需要 39062個(gè)周期,因此需要設(shè)置計(jì)時(shí)周期為39062,而且由于定時(shí)器1為16位定時(shí)器,無法計(jì)時(shí)到一秒,如果需要計(jì)時(shí)1s可以使用32位定時(shí)器 timer23和timer45。
定時(shí)器1中斷函數(shù)
void __attribute__((__interrupt__, no_auto_psv)) _T1Interrupt(void)
{
IFS0bits.T1IF = 0;//清零中斷標(biāo)志
LED = !LED;//對(duì)LED循環(huán)取反,進(jìn)行亮滅控制
}
如此便可實(shí)現(xiàn)LED閃爍功能。
附上完整的工程源碼,請(qǐng)下載查看:
http://forum.eepw.com.cn/thread/276018/1
在使用該款單片機(jī)的時(shí)候還需要注意幾個(gè)問題:
1、 由于單片機(jī)的管腳有復(fù)用功能,在使用端口B的時(shí)候,如果想將端口B的第7位用作數(shù)字IO,需要這樣來設(shè)置,(其它端口無需這樣操作)
ADCON1bits.ADON = 0;//關(guān)閉AD轉(zhuǎn)換器
ADPCFGbits.PCFG7 = 1;//該位必須置位,否則PORTB_7無法用作數(shù)字IO管腳
2、 在系統(tǒng)的安裝目錄下,自帶了單片機(jī)各個(gè)資源的使用例程,使用者可以參考。我的目錄是:C:Program Files (x86)MicrochipMPLAB C30srcperipheral_30F_24H_33Fsrc pmc (供參考)
3、 在使用串口資源時(shí),需要準(zhǔn)確設(shè)定串口波特率,以設(shè)置UART1, 9600波特率為例,波特率計(jì)算方法為:20MIPS/((9600+1)*16)=130。將130賦給U1BRG寄存器即可。
4、 該單片機(jī)具有內(nèi)部EEPROM,如果需要存儲(chǔ)的數(shù)據(jù)量不大的話,一些需要掉電存儲(chǔ)的參數(shù)可以存儲(chǔ)在單片機(jī)內(nèi)部,可簡(jiǎn)化外部電路設(shè)計(jì)。
有了以上的基礎(chǔ),相信學(xué)習(xí)這款單片機(jī)就輕松多了,可以使初學(xué)者少走彎路,集中精力解決實(shí)質(zhì)性問題
評(píng)論
查看更多