什么时钟?
首先我们先讲讲什么是时钟。时钟就是单片机的心脏。每跳动一下。整个单片机的各个电路就同步的动作一下。就好像我们做广播体操的时候 广播上喊的节拍1234 2234 3234。。。。然后我们全部的同学就按照这个节奏进行一个个动作。节拍越快我们动作越快。节拍越慢我们动作的越慢。
内部时钟和外部时钟?
PIC单片机有许多型号可以设置成 用外部时钟(如外部接个4MHZ的石英晶振),也可以设置成用内部RC时钟。而且还有许多型号可以选择多种频率的时钟。
如 PICLF1823 内部时钟最高可以到达32MHZ 最低可以达到 31kHz. 这事实上提供了一条降低功耗的新路子。一般的单片机降低功耗常常用的睡眠,而睡眠期间CPU是什么都不做。如果希望降低功耗,而且CPU也能工作。降低时钟频率无疑是个非常好的选择。
时钟的设置?
时钟设置一般只和两处有关 一个是配置字,一个是振荡器控制寄存器 OSCCON 下面我们以PICLF1823为例子进行讲解。
PICLF1823 配置字设置 中与时钟有关的就是 FOSC<2:0>:振荡器选择位,和PLLEN:PLL使能位 。
OSCCON 是有关内部时钟频率选择,如果只用外部时钟一般不理会。以下是数据手册中OSCCON寄存器的详细介绍。
实例讲解:
使用内部时钟将时钟频率设置成8MHZ
开发环境:MPLAB X IDE
芯片型号:PICLF1823[page]
#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);
}
关键字:PIC单片机 时钟设置 时钟频率
引用地址:
浅析PIC单片机的时钟设置
推荐阅读最新更新时间:2024-03-16 13:23
PIC单片机控制LED点阵显示屏
本实验在proteus软件上模拟完成。 实验器件:20片8X8LED点阵显示屏,10片74LS164移位寄存器,10片74LS273数据锁存器,2片74LS138译码器,1片PIC16F877A单片机。 proteus元件库中中没有16X80点阵显示屏,所以用20片8X8LED点阵屏拼装而成。 10片74LS164移位寄存器和10片74LS273数据锁存器用于传送和保存一行数据。 2片74LS138构成4选16译码器用于行选。 实验截图: 源程序: list p=16f877A ; list directive to define processor #include p16f87
[单片机]
PIC单片机驱动LCD模块的设计
偏置电压是通过使用外部梯形电阻网络(电路见下图)而产生。因为梯形电阻网络连接在VDD和Vss之间,所以会有电流通过梯形电阻网络,电流大小与电阻成反比。也就是说,电阻越大,通过梯形电阻网络的电流就越小。如果使用10kΩ电阻,且VDD=5V,则梯形电阻网络将不断消耗166μA的电流。这对于一些使用电池供电的应用来说是很大的电流。 如何最大程度增大电阻,而又不会对显示质量产生负面影响?一些基本的电路分析可以帮助确定梯形网络中电阻增大的程度。 LCD模块实际上就是一个模拟多路开关,它交替地将LCD电压连接到各个段和公共引脚(段电极和公共电极交叉于每一个LCD像素点)。LCD像素可用电容进行模拟。梯形电阻网络中的每个分接点可以用戴维
[单片机]
PIC单片机学习知识之程序设计(二)
上文中我们讲述了 PIC单片机基础学习之程序设计(一) ,接下来将继续为大家讲解PIC单片机程序设计(二),供大家学习。 PIC单片机的查表程序可以利用子程序带值返回的特点来实现。具体是在主程序中先取表数据地址放入W,接着调用子程序,子程序的第一条指令将W置入PC,则程序跳到数据地址的地方,再由“RETLW”指令将数据放入W返回到主程序。下面程序以F10放表头地址。 MOVLW TABLE ;表头地址→F10 MOVWF 10 MOVLW 1 ;1→W,准备取“1”的线段值 ADDWF 10,1 ;F10+W =“1”的数据地址 CALL CONVERT MOVWF 6 ;
[单片机]
PIC单片机ADC的简单应用
#include pic.h __CONFIG(0X1F71); #define uchar unsigned char #define uint unsigned int const uchar Tab = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; const uchar Tab1 = {0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//带小数点的代码 void DisPlay(uchar date1,uchar date2,uchar date3,uchar date4); void DelayMS(uin
[单片机]
基于PIC单片机的数字可调稳压电源(1.3-25v)PROTEUS仿真+源程序
程序如下: list p=12c672 ; list directive to define processor #include p12c672.inc ; processor specific variable definitions w_temp EQU 0x70 status_temp EQU 0x71 pclath_temp EQU 0x72 reg0 EQU 0x75 reg1 EQU 0x76 advalue EQU 0x77 advflag EQU 0x78 bank
[单片机]
PIC单片机-继电器使用示例
使用示例: /******************************************************************************* * 跳线接法:短接P12的2、3端 * 功能描述: 利用单片机的IO来驱动继电器 *******************************************************************************/ #include htc.h #define uint8 unsigned char #define uint16 unsigned int __CONFIG(WDTDIS & LVPDIS & HS &
[单片机]
MSP430设置时钟
// MSP430F135 // | P5.4|– MCLK = DCO Max // | P5.5|– SMCLK = DCO 1/2 // | P5.6|– ACLK = 32kHz //****************************************************************************** #include msp430x13x.h void main (void) { WDTCTL = WDTPW + WDTHOLD; // STOP WDT DCOCTL |= DCO0 + DCO1 + DCO2; BCSCTL1 |= RSEL0 + RSEL1
[单片机]
PIC单片机之中断程序
什么是中断程序呢? 形象的生活比喻就比如你现在这在看我的文章,突然你的朋友喊你一起去烤地瓜,这时候你就中断了看文章和朋友烤地瓜去了,烤完地瓜之后你又回来看文章。烤地瓜这件事就好比中断程序,他中断了你看文章这件事。在程序方面来说 当CPU在执行一个程序的时候,突然产生了中断事件CPU就去执行中断程序了,当执行完成后CPU又回来执行原先的程序。 中断事件 什么是中断事件,就是引起中断的事件。对于单片机来说这些事件是多种多样的。比如 说一个按键按下,一定的时间到了,一串数据发送完毕,或接收完一个数据。 讲到中断不得不讲讲和中断相对的 查询。其实不管是按键按下 还是 时间到,还是数据发送完毕,这些事实上都可以用查询的方式办到。比如
[单片机]