Microchip PIC16F1619实验:双速时钟启动

分享到:

大家好,我是混森蓝兽,感谢社区给我提供这次pic16系列单片机试用的机会!我是初学者,第一次接触这个系列的,我将把我学习的过程记录下来,希望以后这些记录能对像我这样的初学者有用。

开篇我先大概的说一下双数启动是啥意思吧。就这么说,dalao出场,自带收割战场的蓝火加特林,战力很强。但是有一个问题,就是越厉害的武器越是会有一段出场的冷却缓冲时间。在这段缓冲时间里,dalao是没啥输出的,所以需要前面有小弟帮忙砍人挡枪。待缓冲结束,小弟退场,dalao开启无双收割模式,大杀四方。
 
       接下来是正题了,说说我们这个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 <htc.h>

#include <pic16f1619.h>
#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不存在的,只有挡刀的小兵。

115125uh8jsxojaujowjjl

继续阅读
51单片机、AVR单片机和PIC单片机IO口的操作

51单片机、AVR单片机和PIC单片机IO口结构的均不同,导致了IO口操作也不同。操作单片机IO口的目的是让单片机的管脚输出逻辑电平和读取单片机管脚的逻辑电平。下面我们来看看51单片机、AVR单片机和PIC单片机IO口的操作的方法。

Microchip Curiosity PIC32MX470+简单测试 +点亮LED灯

我这次拿到的板子是PIC32MX470 Curiosity开发板,第一次使用,就先来点个LED灯吧。使用定时器中断来实现,亮灭时间各一秒。

用Microchip Curiosity PIC32MX470驱动OLED12864显示屏

这次要测试的是驱动OLED12864显示屏。OLED12864模块使用的是IIC接口,SDA接RF4引脚,SCL接RF5引脚,电源为3.3V。IIC时序使用软件模拟,采用强制读写模式。

Microchip PIC单片机12864汉字液晶模块显示文字

本文是用PIC单片机12864汉字液晶模块来显示文字

项目分享:基于Microchip PIC32MM Curiosity的超级电容器

级电容器的应用非常广泛,电动车起步、加速,给HIFI做电源,点焊机等。这次分享的项目,是超级电容器充电控制。

©2018 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss