您的位置 首页 数字

C8051F340体系时钟装备

C8051F340包含一个可编程内部高频振荡器,该振荡器在系统内复位后默认为系统时钟。该高频振荡器为12MHz。使能外部振荡器后,至少要等待1m

//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
}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/zhishi/shuzi/255894.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部