×
单片机 > 单片机程序设计 > 详情

C8051F340系统时钟配置

发布时间:2020-06-02 发布时间:
|
//C8051F340包含一个可编程内部高频振荡器,该振荡器在系统内复位后默认为系统时钟。该高频振荡器为12MHz。

//使能外部振荡器后,至少要等待1ms,再来判断外部晶体振荡器是否稳定工作。
//使能时钟乘法器后需要等待5us,再来初始化时钟乘法器,之后来判断时钟乘法器是否稳定工作。

使用外部晶振的时,【P0MDIN &= 0x3F;】语句一定要在ClockInit()函数调用之前执行。
原因:C8051F340的IO口默认都是数字输出。
【P0MDIN &= 0x3F;】语句含义:P0.6(XTAL1),P0.7(XTAL2)配置为模拟输入。

//函数名: ClockInit()
//描述 : 系统时钟和USB时钟初始化
//时钟来源为外部振荡器——12MHz晶振
void ClockInit(void)
{
unsigned int Temp; //临时变量
OSCXCN = 0x67; //外部振荡器为晶体振荡器方式,外部晶体振荡器频率在[10MHz,30MHz]
for (Temp=0;Temp<3000;Temp++); //等待1ms
while ((OSCXCN&0x80) == 0); //判断晶体振荡器工作是否稳定
FLSCL = 0x90; //flash相关频率配置
CLKMUL |= 0x81; //时钟乘法器使能,时钟乘法器的时钟来源为外部振荡器,即12MHz晶振
for(Temp=0;Temp<200;Temp++); //等待5us初始化
CLKMUL |= 0xC0; //初始化时钟乘法器
while ((CLKMUL & 0x20) == 0); //判断时钟乘法器是否稳定

 CLKSEL = 0x03; //USB时钟来源为时钟乘法器,系统时钟来源为时钟乘法器,即都为48MHz

OSCICN = 0x00; //禁止内部高频振荡器 ,此语句在系统时钟完全配置好了后执行
}


//函数名: ClockInit()
//描述 : 系统时钟和USB时钟初始化
//时钟来源为内部振荡器——12MHz晶振
void ClockInit( void )
{
unsigned int Temp;
OSCICN |= 0x80; //使能内部高频振荡器
CLKMUL = 0x00; //复位时钟乘法器,时钟乘法器时钟来源为内部高频振荡器
CLKMUL |= (1<<7); //使能时钟乘法器
for(Temp=0;Temp<200;Temp++); //延时5us
CLKMUL |= (1<<6)|(1<<7); //初始化时钟乘法器
for(Temp=0;Temp<2000;Temp++);
while(!(CLKMUL&(1<<5))); //等待时钟乘法器准备好
CLKSEL = 0x03; //USB时钟来源为时钟乘法器,系统时钟来源为时钟乘法器,即都为48MHz
}
关键字:C8051F340  系统时钟  配置

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
STM32中断向量表的位置.重定向