probug的个人空间 https://bbs.21ic.com/?835971 [收藏] [复制] [RSS] 。。。。。

日志

单片机时钟是什么?

热度 1已有 1175 次阅读2014-7-10 10:57 |系统分类:单片机| 单片机

        什么时钟?

        首先我们先讲讲什么是时钟。时钟就是单片机的心脏。每跳动一下。整个单片机的各个电路就同步的动作一下。就好像我们做广播体操的时候 广播上喊的节拍1234 2234 3234。。。。然后我们全部的同学就按照这个节奏进行一个个动作。节拍越快我们动作越快。节拍越慢我们动作的越慢。


        内部时钟和外部时钟?

        PIC单片机有许多型号可以设置成 用外部时钟(如外部接个4MHZ的石英晶振),也可以设置成用内部RC时钟。而且还有许多型号可以选择多种频率的时钟。

        如 PICLF1823 内部时钟最高可以到达32MHZ 最低可以达到 31kHz. 这事实上提供了一条降低功耗的新路子。一般的单片机降低功耗常常用的睡眠,而睡眠期间CPU是什么都不做。如果希望降低功耗,而且CPU也能工作。降低时钟频率无疑是个非常好的选择。


        时钟的设置?

        时钟设置一般只和两处有关 一个是配置字,一个是振荡器控制寄存器 OSCCON 下面我们以PICLF1823为例子进行讲解。

        PICLF1823 配置字设置 中与时钟有关的就是 FOSC:振荡器选择位,和PLLEN:PLL使能位 。

        OSCCON 是有关内部时钟频率选择,如果只用外部时钟一般不理会。以下是数据手册中OSCCON寄存器的详细介绍。

        实例讲解:

        使用内部时钟将时钟频率设置成8MHZ

        开发环境: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:振荡器选择位设置成 INTOSC,

void init_fosc(void)

{

OSCCON = 0x70;//8MHZ IRCF时钟频率选择位设置成8MHZ

}

int main(int argc, char** argv) {

init_fosc();

while(1);

}


        PLL是用来做什么的呢?他的作用就是能将8MHZ的时钟频率X4变成32MHZ,记住只有8MHZ可以,其他频率是不行的。


        使用内部时钟将时钟频率设置成32MHZ

        开发环境: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:振荡器选择位设置成 INTOSC,使能PLLEN

void init_fosc(void)

{

OSCCON = 0xF0;//32MHZ IRCF时钟频率选择位设置成8MHZ ,使能4XPLL

}

int main(int argc, char** argv) {

init_fosc();

while(1);

}


路过

鸡蛋
1

鲜花

握手

雷人

刚表态过的朋友 (1 人)

评论 (0 个评论)