单片机的时钟信号好比是单片机的心脏。单片机的时钟频率决定了单片机运行一个指令周期的时间。原理的话应该是晶振与外部电容构成电容三点式振荡电路,此时时钟输入为正弦波,经过内部施密特触发器整形变为方波。
内部时钟方式:
利用单片机内部的振荡器,然后在引脚XTAL1(18脚)和XTAL2(19脚)两端接晶振,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部时钟电路,外接晶振时,晶振两端的电容一般选择为30PF左右;这两个电容对频率有微调的作用,晶振的频率范围可在1.2MHz-12MHz之间选择。为了减少寄生电容,更好地保证振荡器稳定、可靠地工作,振荡器和电容应尽可能安装得与单片机芯片靠近。
外部时钟方式: 此方式是利用外部振荡脉冲接入XTAL1或XTAL2。HMOS和CHMOS单片机外时钟信号接入方式不同,HMOS型单片机(例如8051)外时钟信号由XTAL2端脚注入后直接送至内部时钟电路,输入端XTAL1应接地。由于XTAL2端的逻辑电平不是TTL的,故建议外接一个上接电阻。对于CHMOS型的单片机(例如80C51),因内部时钟发生器的信号取自反相器的输入端,故采用外部时钟源时,接线方式为外时钟信号接到XTAL1而XTAL2悬空。 PIC单片机时钟的设置: 时钟设置一般只和两处有关 一个是配置字,一个是振荡器控制寄存器 OSCCON 下面我们以PICLF1823为例子进行讲解。 PICLF1823 配置字设置 中与时钟有关的就是 FOSC《2:0》:振荡器选择位,和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《2:0》:振荡器选择位设置成 INTOSC, void init_fosc(void) { OSCCON = 0x70;//8MHZ IRCF《3:0》时钟频率选择位设置成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《2:0》:振荡器选择位设置成 INTOSC,使能PLLEN void init_fosc(void) { OSCCON = 0xF0;//32MHZ IRCF《3:0》时钟频率选择位设置成8MHZ ,使能4XPLL } int main(int argc, char** argv) { init_fosc(); while(1); }
|