Microchip PIC16F1619实验:PIC16的双速启动教程

描述

  PIC16的双速启动模式

  当振荡器模块被配置为HS模式时,系统使用外部晶振提供的频率作为系统时钟。但是晶振起振与代码执行之间是存在延时的,在这段延时期间,单片机是无法执行任何程序的。HS模式下,上电之后晶振起振,提供时钟信号,但是这个信号不能马上被系统使用,因为这时候的时钟信号可能还不大稳定,所以需要等待一段稳定时间,振荡器才能用作系统时钟源。振荡器起振定时器(OST)的作用就在这里,HS模式OST会被使能接收到晶振的振荡信号后它会开始计数,当计数到1024次振荡时,稳定时间已过,外部晶振开始作用于系统时钟源。

  对于一些需要快速启动的系统,这段延时可能会是一个比较让人头疼的问题,例如需要经常休眠然后需要快速启动的系统,这段延时启动会降低系统的反应敏捷度,空等延时也是浪费了无意义的电量损耗。双速时钟启动模式,则可以解决这个问题。

  双速时钟启动简单来说,就是在启动延时这段时间里,启动内部振荡器来提供时钟信号,程序上电就能跑,然后当1024次震荡周期过了之后,切换回外部晶振提供的时钟信号。两者合作,度过这段虚无的时光。

  1.双速启动顺序

  1. 从上电复位或休眠中唤醒。

  2. 使用内部振荡器以OSCCON寄存器的IRCF《3:0》位设置的频率(默认只500 kHz)开始执行指令。

  3. OST使能,计数1024个时钟周期。

  4. OST超时,等待内部振荡器下降沿出现。

  5. OSCSTAT寄存器的OSTS位置1(根据此标志位判断是外部时钟源运行,还是内部振荡器运行)。

  6. 系统时钟保持为低电平,直到新时钟下一个下降沿出现(HS模式)。

  7. 系统时钟切换到外部时钟源。

  2.通过以下设置来配置双速启动模式:

  1.配置字CONFIG1的bit 12(IESO)=1,使能内/外部时钟切换模式

  2.SCS(在OSCCON寄存器中)= 00,由配置字中的FOSC《1:0》决定时钟来源。

  3. 配置字中的FOSC《2:0》位被配置HS模式,即FOSC《2:0》 = 010。

  3.实验代码

  #include

  #include

  #define _XTAL_FREQ 500000

  // CONFIG1

  #pragma config FOSC = HS // Oscillator Selection Bits (HS Oscillator, High-speed crystal/resonator connected between OSC1 and OSC2 pins)

  #pragma config PWRTE = OFF // Power-up Timer Enable (PWRT disabled)

  #pragma config MCLRE = ON // MCLR Pin Function Select (MCLR/VPP pin function is MCLR)

  #pragma config CP = OFF // Flash Program Memory Code Protection (Program memory code protection is disabled)

  #pragma config BOREN = ON // Brown-out Reset Enable (Brown-out Reset enabled)

  #pragma config CLKOUTEN = OFF // Clock Out Enable (CLKOUT function is disabled. I/O or oscillator function on the CLKOUT pin)

  #pragma config IESO = ON // Internal/External Switch Over (Internal External Switch Over mode is enabled)

  #pragma config FCMEN = ON // Fail-Safe Clock Monitor Enable (Fail-Safe Clock Monitor is enabled)

  void main()

  {

  OSCCON = 0x38; //0011 1000 时钟初始化

  PORTA |= 0x04;

  TRISA &= 0xfb;

  while(1)

  {

  RA2=1;

  __delay_ms(100);

  RA2=0;

  __delay_ms(100);

  }

  }

  不过,事实上虽然有代码了,但是没办法进入双速时钟模式,因为板子根本就没有外部晶振。将工程编译烧录之后,确实可以看到D6在闪烁,因为muc以配置的500KHz时钟在运行。dalao不存在的,只有挡刀的小兵。

  

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分