原创 MPLAB C30 PIC24单片机的PLL

2010-10-30 13:16 4352 1 3 分类: MCU/ 嵌入式

PIC24单片机的PLL功能很灵活,能很容易获得需要的频率。以下代码在PIC24HJ128GP510以及PIC24HJ128GP610下通过。




// 此代码假设要把6M外部晶振倍频到80MHz
// 先选择内部晶振
_FOSCSEL(FNOSC_FRC);
// 使能时钟切换功能,设定外部晶振XT模式
_FOSC(FCKSM_CSECMD & OSCIOFNC_OFF & POSCMD_XT);

void ClockPLL(void);

int main(void)
{
    ClockPLL();
    while(1);
}   

void ClockPLL(void)
{
    // 设定PLL
    // Fosc = Fin* M / N1 / N2
    // 为了得到80MHz
    //  80 = 6 * 160 / 2 / 6
    //  M = 158; N1 = 4; N2 = 0
    PLLFBD = 158;// M=X+2
    CLKDIVbits.PLLPOST = 0;// N2=2,4, ,8
    CLKDIVbits.PLLPRE = 4;// N1=X+2
    // 切换到带PLL的外部晶振
    __builtin_write_OSCCONH(0x03);
    __builtin_write_OSCCONL(0x01);
    // 等待切换生效
    while (OSCCONbits.COSC!=0b011);
    // 等待PLL锁定
    while(OSCCONbits.LOCK!=1) {};
}
PARTNER CONTENT

文章评论2条评论)

登录后参与讨论

用户445460 2013-9-4 21:34

感觉很多都不明白,CLKDIVbits.PLLPOST = 0;// N2=2,4, ,8 CLKDIVbits.PLLPRE = 4;// N1=X+2 // 切换到带PLL的外部晶振 __builtin_write_OSCCONH(0x03); __builtin_write_OSCCONL(0x01); 比如以上这些,请问看哪部分材料才可以明白,望不吝赐教!

用户377235 2013-2-25 16:44

非常感谢,

345002072_353389109 2012-10-24 10:00

有用,谢谢啦,我转走了哈
相关推荐阅读
用户1470618 2010-05-15 16:57
LabWindows/CVI开发小记
日前用LabWindows/CVI开发了一个小程序,记下经验,以备查阅。CVI的中文资料还非常少,我基本上都是翻看LabWindows/CVI的帮助文件。涉及到Win32 API的时候最权威的资料当然...
用户1470618 2010-05-11 20:20
MPLAB C18学习 SPI总线
     C语言: 临时自用代码     //SPI 初始化void SSPINIT(void){        TRISBbits.TRISB1 = 0;     TRISCbits.TRISC...
用户1470618 2010-05-11 20:16
MPLAB C18学习 串口及串口中断
     C语言: 临时自用代码     #include <p18cxxx.h>//RS-232初始化void UARTInit(void)                {     ...
用户1470618 2010-01-26 21:23
在Labwindows/CVI中调用Excel的几种方法
  最近需要实现在CVI中对Excel文件的读写,参考了几篇论文后,总结下基本上有3种方法:1.DDE(Dynamic Data Exchange);2.ADO(ActiveX Data Object...
用户1470618 2009-07-22 14:17
MPLAB C18学习 简单的AD中断程序
注意,本人新学C18,不能保证代码质量。代码基于PIC18Fxx20系列,和PIC18Fxx2系列在寄存器上有不小差异,不能通用,具体请参照数据手册。 #include <p18cxxx.h&g...
我要评论
2
1
关闭 站长推荐上一条 /3 下一条