PIC单片机应用开发实践教程(七):PIC16F153xx——时钟使用

源码基于  PIC16F15355开发板,想了解详情,请点 PIC16F15355开发板

PIC16F15355 内部晶振框图如下,从框图中我们知道MCU时钟来源有3个:外部时钟,内部时钟,Timer1

内部时钟源(INTERNAL CLOCK SOURCES)HFINTOSC:内部高速时钟,最大32MHz。
MFINTOSC:内部中速时钟,500 kHz频率
LFINTOSC:内部低速时钟,只有31 kHz频率

 下面我们以内部时钟为例,时钟最高可以跑到32MHz,可以通过OSCFRQ 1MHz,2MHz,4MHz,8MHz,12MHz,16MHz,32MHz,那程序如何来切换呢?

时钟源的选择

通过OSCCON1寄存器,选择系统所需的时钟源

NOSC 选择时钟源,000---111 有8种模式;NDIV 设置时钟分频比,如果分频值为1,那PIC16F15355 最大频率就可以跑到32MHz,最后通过OSCFRQ来选择内部时钟频率

OSCCON1 = 0x60;     // NOSC HFINTOSC; NDIV 1; 
OSCCON3 = 0x00;     // CSWHOLD may proceed; SOSCPWR Low power; 
OSCEN = 0x00;       // MFOEN disabled; LFOEN disabled; ADOEN disabled; SOSCEN disabled; EXTOEN disabled; HFOEN disabled; 
OSCFRQ = 0x06;      // HFFRQ 32_MHz; 
OSCSTAT = 0x00;     // MFOR not ready; 
OSCTUNE = 0x00;     // HFTUN 0; 

那如何实现时钟切换呢?其实,也是通过设置OSCFRQ的值设置,但有一个注意点就是,切换时钟后,要等待时钟切换完成。

 //等待时钟切换成功,要不然还是以原时钟运行
while(OSCSTATbits.HFOR != 0x01);    //HFINTOSC Oscillator Ready bit 

 OSCCON1bits.NDIV = 0x00;     //Clock divider 1:1
    OSCCON1bits.NOSC = 0x60;     //复位时钟1MHz
    OSCFRQbits.HFFRQ = clock_freq;    

    switch(clock_freq)
    {
        case OSC_1M_HF:
        case OSC_2M_HF:
        case OSC_4M_HF:
        case OSC_8M_HF:
        case OSC_16M_HF:   
        case OSC_32M_HF: 
        
            //等待时钟切换成功,要不然还是以原时钟运行
        while(OSCSTATbits.HFOR != 0x01);    //HFINTOSC Oscillator Ready bit 

        break;

        default:
            break;
    }

好了,本章节就到这里,谢谢大家的关注。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值