PIC24HJ时钟
1.时钟来源
PIC24HJ系列单片机的时钟来源有以下几个:
a.主振荡器:EC,HS,XT,三个外部时钟源,这三个又有不同的频率范围,具体不赘述,可以在PIC24HJ数据手册中找到,这里有必要说明一下这三个时钟源的接法:EC高速晶振单脚接入单片机,它的特点是接电源自激振荡,并输出时钟信号至PIC24HJ,HS和XT都是通过PIC24HJ的OSC1和OSC2接入,需要单片机起振才能正常工作。
b.内部快速RC振荡器(FRC),它的标称值是7.37MHz。
c.辅助振荡器Socs,它的频率是32768KHz。
2.配置时钟
PIC24HJ的时钟源可以配置,如果我们写的代码里面没有设置时钟的话,PIC24HJ默认使用内部FRC晶振的。7.37MHz并不是直接作用于器件(外设)上的,如果使用带PLL锁相环的FRC,需要配置三个系数M,N1和N2。这里的FRC标称值7.37MHz就是Fosc,单片机的工作频率,它驱动PIC24HJ的定时器外设时,不是直接输出到定时器上的,PIC24HJ单片机有器件工作频率Fcy = Fosc / 2。
接上一篇**配置TIMER定时1MS,在中断函数中设置一个计数器,累加1000,翻转LED状态。具体是修改上一篇代码中的PR1的值,修改为:3684,因为TIMER的工作频率是3.685MHz。根据Fcy = Fosc / 2得到。代码中设置的时钟分频是1分频。
使用MPLAB X IDE 自带的配置位设置时钟源为:外部时钟HS:
具体是修改图中红色箭头所指的这两部分。一个选择时钟源为带PLL锁相环的主振荡器PRIPLL,一个是选择主振荡器的类型为HS,由于我的外部晶振是接在PIC24HJ的OSC1和OSC2上所以不能选择EC,之前选择EC发现单片机不能工作,直接影响不能使用MPLAB X IDE 调试代码,调试代码出现:“Your Target could not ready to DEBUG”类似的话,问题就出现在这,这是因为DEBUG时时钟没有起振,PIC24HJ不工作。配置完成后,点击下面的Generate Source Code,将生成的代码复制到编辑框内。
// PIC24HJ128GP506A Configuration Bit Settings
// 'C' source line config statements
// FBS
#pragma config BWRP = WRPROTECT_OFF // Boot Segment Write Protect (Boot Segment may be written)
#pragma config BSS = NO_FLASH // Boot Segment Program Flash Code Protection (No Boot program Flash segment)
#pragma config RBS = NO_RAM // Boot Segment RAM Protection (No Boot RAM)
// FSS
#pragma config SWRP = WRPROTECT_OFF // Secure Segment Program Write Protect (Secure segment may be written)
#pragma config SSS = NO_FLASH // Secure Segment Program Flash Code Protection (No Secure Segment)
#pragma config RSS = NO_RAM // Secure Segment Data RAM Protection (No Secure RAM)
// FGS
#pragma config GWRP = OFF // General Code Segment Write Protect (User program memory is not write-protected)
#pragma config GSS = OFF // General Segment Code Protection (User program memory is not code-protected)
// FOSCSEL
#pragma config FNOSC = PRIPLL // Oscillator Mode (Primary Oscillator (XT, HS, EC) w/ PLL)
#pragma config IESO = ON // Two-speed Oscillator Start-Up Enable (Start up with FRC, then switch)
// FOSC
#pragma config POSCMD = HS // Primary Oscillator Source (HS Oscillator Mode)
#pragma config OSCIOFNC = OFF // OSC2 Pin Function (OSC2 pin has clock out function)
#pragma config FCKSM = CSDCMD // Clock Switching and Monitor (Both Clock Switching and Fail-Safe Clock Monitor are disabled)
// FWDT
#pragma config WDTPOST = PS32768 // Watchdog Timer Postscaler (1:32,768)
#pragma config WDTPRE = PR128 // WDT Prescaler (1:128)
#pragma config WINDIS = OFF // Watchdog Timer Window (Watchdog Timer in Non-Window mode)
#pragma config FWDTEN = ON // Watchdog Timer Enable (Watchdog timer always enabled)
// FPOR
#pragma config FPWRT = PWR128 // POR Timer Value (128ms)
// FICD
#pragma config ICS = PGD1 // Comm Channel Select (Communicate on PGC1/EMUC1 and PGD1/EMUD1)
#pragma config JTAGEN = OFF // JTAG Port Enable (JTAG is Disabled)
// #pragma config statements should precede project file includes.
// Use project enums instead of #define for ON and OFF.
#include <xc.h>
int main(void){
return 0;
}
|