看完這篇文章,PIC單片機就能入門了(續(xù))
下面貼出LED閃燈的源碼,并逐語句進行講解。
本文引用地址:http://2s4d.com/article/279441.htm#include "p30f6014A.h" //包含頭文件
_FOSC(CSW_FSCM_OFF & XT_PLL16); //配置時鐘
_FWDT(WDT_OFF); //關(guān)閉看門狗
假設(shè)使用的外部晶振為5Mhz,系統(tǒng)指令周期的計算方法為:
5M*16/4=20MIPS
16為16倍頻,每執(zhí)行一條指令要4個時鐘周期,因此要除四,就得到了實際的系統(tǒng)時鐘。
IO端口的配置
IO端口使用很簡單,和51相比只是多了一個方向控制,在使用端口之前 ,先設(shè)置好方向。假設(shè)我們使用的端口A的第十位作為LED的控制位,首先設(shè)置該管腳的方向,
TRISAbits.TRISA10 = 0;//該位置零為輸出,置1位輸入
控制端口實際輸出高低電平的寄存器位LATAbits,將該寄存器的LATA10位進行置1置0操作,即可輸出高、低電平。
#define LED LATAbits.LATA10
值得注意的是,當(dāng)進行讀引腳操作時,要讀PORTAbits寄存器,而不是LATAbits寄存器。
我們是采用定時500ms中斷的方式來進行LED的亮滅控制,因此需要進行定時器的配置,這里使用的是16位定時器timer1。涉及到兩個函數(shù)。
ConfigIntTimer1(5);//初始化定時器1,中斷優(yōu)先級為5
OpenTimer1(39062);//進行相關(guān)配置并打開定時器1
void ConfigIntTimer1(unsigned char priority)
{
IFS0bits.T1IF = 0 //清除中斷標(biāo)志
IPC0bits.T1IP = priority; //設(shè)置中斷優(yōu)先級
IEC0bits.T1IE = 1; //使能中斷
}
void OpenTimer1(unsigned int period)
{
TMR1 = 0; /* Reset Timer1 to 0x0000 */
PR1 = period; //中斷周期
T1CONbits.TCS = 0; //選擇時鐘源
T1CONbits.TSYNC =1;
T1CONbits.TCKPS =3; //256分頻
T1CONbits.TGATE =0;
T1CONbits.TSIDL =0;
T1CONbits.TON = 1; //啟動定時器
}
選擇系統(tǒng)時鐘(20MIPS),并進行256分頻,20M/256=78125,說明定時器計時到78125要用1秒鐘,定時到500ms需要39062個周期,因此需要設(shè)置計時周期為39062,而且由于定時器1為16位定時器,無法計時到一秒,如果需要計時1s可以使用32位定時器timer23和timer45。
定時器1中斷函數(shù)
void __attribute__((__interrupt__, no_auto_psv)) _T1Interrupt(void)
{
IFS0bits.T1IF = 0;//清零中斷標(biāo)志
LED = !LED;//對LED循環(huán)取反,進行亮滅控制
}
如此便可實現(xiàn)LED閃爍功能。
附上完整的工程源碼,請下載查看:
http://forum.eepw.com.cn/thread/276018/1
在使用該款單片機的時候還需要注意幾個問題:
1、 由于單片機的管腳有復(fù)用功能,在使用端口B的時候,如果想將端口B的第7位用作數(shù)字IO,需要這樣來設(shè)置,(其它端口無需這樣操作)
ADCON1bits.ADON = 0;//關(guān)閉AD轉(zhuǎn)換器
ADPCFGbits.PCFG7 = 1;//該位必須置位,否則PORTB_7無法用作數(shù)字IO管腳
2、 在系統(tǒng)的安裝目錄下,自帶了單片機各個資源的使用例程,使用者可以參考。我的目錄是:C:Program Files (x86)MicrochipMPLAB C30srcperipheral_30F_24H_33Fsrc pmc (供參考)
3、 在使用串口資源時,需要準(zhǔn)確設(shè)定串口波特率,以設(shè)置UART1, 9600波特率為例,波特率計算方法為:20MIPS/((9600+1)*16)=130。將130賦給U1BRG寄存器即可。
4、 該單片機具有內(nèi)部EEPROM,如果需要存儲的數(shù)據(jù)量不大的話,一些需要掉電存儲的參數(shù)可以存儲在單片機內(nèi)部,可簡化外部電路設(shè)計。
有了以上的基礎(chǔ),相信學(xué)習(xí)這款單片機就輕松多了,可以使初學(xué)者少走彎路,集中精力解決實質(zhì)性問題,以上是本人個人的一點經(jīng)驗,如有疏漏之處,歡迎指正。
單片機相關(guān)文章:單片機教程
單片機相關(guān)文章:單片機視頻教程
單片機相關(guān)文章:單片機工作原理
晶振相關(guān)文章:晶振原理
評論