實(shí)例講解PIC單片機(jī)的時鐘設(shè)置
什么時鐘?
首先我們先講講什么是時鐘。時鐘就是單片機(jī)的心臟。每跳動一下。整個單片機(jī)的各個電路就同步的動作一下。就好像我們做廣播體操的時候 廣播上喊的節(jié)拍1234 2234 3234。。。。然后我們?nèi)康耐瑢W(xué)就按照這個節(jié)奏進(jìn)行一個個動作。節(jié)拍越快我們動作越快。節(jié)拍越慢我們動作的越慢。
內(nèi)部時鐘和外部時鐘?
PIC單片機(jī)有許多型號可以設(shè)置成 用外部時鐘(如外部接個4MHZ的石英晶振),也可以設(shè)置成用內(nèi)部RC時鐘。而且還有許多型號可以選擇多種頻率的時鐘。
如 PICLF1823 內(nèi)部時鐘最高可以到達(dá)32MHZ 最低可以達(dá)到 31kHz. 這事實(shí)上提供了一條降低功耗的新路子。一般的單片機(jī)降低功耗常常用的睡眠,而睡眠期間CPU是什么都不做。如果希望降低功耗,而且CPU也能工作。降低時鐘頻率無疑是個非常好的選擇。
時鐘的設(shè)置?
時鐘設(shè)置一般只和兩處有關(guān) 一個是配置字,一個是振蕩器控制寄存器 OSCCON 下面我們以PICLF1823為例子進(jìn)行講解。
PICLF1823 配置字設(shè)置 中與時鐘有關(guān)的就是 FOSC<2:0>:振蕩器選擇位,和PLLEN:PLL使能位 。
OSCCON 是有關(guān)內(nèi)部時鐘頻率選擇,如果只用外部時鐘一般不理會。以下是數(shù)據(jù)手冊中OSCCON寄存器的詳細(xì)介紹。
實(shí)例講解:
使用內(nèi)部時鐘將時鐘頻率設(shè)置成8MHZ
開發(fā)環(huán)境:MPLAB X IDE
芯片型號:PICLF1823
#include
__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_OFF&BOREN_ON&CLKOUTEN_OFF&IESO_ON&FCMEN_ON);
__CONFIG(PLLEN_OFF&LVP_OFF) ;//將FOSC<2:0>:振蕩器選擇位設(shè)置成 INTOSC,
void init_fosc(void)
{
OSCCON = 0x70;//8MHZ IRCF<3:0>時鐘頻率選擇位設(shè)置成8MHZ
}
int main(int argc, char** argv) {
init_fosc();
while(1);
}
PLL是用來做什么的呢?他的作用就是能將8MHZ的時鐘頻率X4變成32MHZ,記住只有8MHZ可以,其他頻率是不行的。
使用內(nèi)部時鐘將時鐘頻率設(shè)置成32MHZ
開發(fā)環(huán)境:MPLAB X IDE
芯片型號:PICLF1823
#include
__CONFIG(FOSC_INTOSC&WDTE_OFF&PWRTE_ON&MCLRE_OFF&CP_ON&CPD_OFF&BOREN_ON
&CLKOUTEN_OFF&IESO_ON&FCMEN_ON);//這個要放到上一行去
__CONFIG(PLLEN_ON&LVP_OFF) ;//將FOSC<2:0>:振蕩器選擇位設(shè)置成 INTOSC,使能PLLEN
void init_fosc(void)
{
OSCCON = 0xF0;//32MHZ IRCF<3:0>時鐘頻率選擇位設(shè)置成8MHZ ,使能4XPLL
}
int main(int argc, char** argv) {
init_fosc();
while(1);
}