C8051F学习笔记2:C8051F振荡器.doc
上传人:sy****28 上传时间:2024-09-14 格式:DOC 页数:4 大小:45KB 金币:18 举报 版权申诉
预览加载中,请您耐心等待几秒...

C8051F学习笔记2:C8051F振荡器.doc

C8051F学习笔记2:C8051F振荡器.doc

预览

在线预览结束,喜欢就下载吧,查找使用更方便

18 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

C8051F320/1有一个可编程内部振荡器、一个外部振荡器驱动电路和一个4倍时钟乘法器。系统时钟(SYSCLK)可以来自内部振荡器、外部振荡器电路或4倍时钟乘法器二分频。USB时钟(USBCLK)可以来自内部振荡器、外部振荡器电路或4倍时钟乘法器。可编程内部振荡器系统复位后内部振动器默认系统时钟并工作在1.5MHz。两个寄存器:OSCICL(内部振荡器校准寄存器)和OSCICN(内部振荡器控制寄存器)。OSCICL(内部振荡器校准寄存器)OSCICL复位值已经过工厂校准,对应的基频为12MHz,精度为±1.5%,该频率适合作为USB时钟。软件可以下面所述修改内部振荡器的频率。一般情况下是不用对OSCICL进行配置。OSCICN(内部振荡器控制寄存器)IOSCEN:为内部振荡器使能位,0禁止,1使能,手册上写复位值为0,是错误的,应该为1,这样,复位后系统时钟默认为内部振荡器。IFCN1-0:内部振荡器分频选择,复位后为00,系统默认为1.5MHz内部振荡器初始化OSCICN|=0x03;//内部振荡器输出为12MHz程序也可以这样写OSCICN=0x83;//内部振荡器输出为0x83——12MHz;0x82——6MHz;0x813MHz当程序没有对振荡器初始化时,默认系统时钟采用内部振荡器,并运行在1.5MHz频率下。OSCICN=0x83;外部振荡器驱动电路外部振荡器电路可以驱动外部晶体、陶瓷谐振器、电容或RC网络和外部CMOS时钟提供系统时钟。当使用外部振荡器电路时,必须对所用端口引脚进行配置。端口I/O交叉开关应被配置为跳过被振荡器占用的引脚。当外部振荡器电路被配置为CMOS时钟方式时,端口引脚P0.3被用作XTAL2。当外部振荡器电路被配置为晶体/谐振器方式时,端口引脚P0.2和P0.3分别被用作XTAL1和XTAL2当外部振荡器电路被配置为RC方式时,端口引脚P0.3被用作XTAL2。当外部振荡器电路被配置为电容方式时,端口引脚P0.3被用作XTAL2。OSCXCN:外部振荡器控制寄存器OSCXCN(外部振荡器控制寄存器)的具体配置方法可以参考应用笔记“AN002配置内部和外部振荡器”。使用外部RC或外部C连接要注意:1.由于RC振荡频率误差较大,建议在可能的情况下,波特率尽可能小,以免通讯失误。2.如果单片机之间通讯,且单片机为同型号,均采用相同值的RC振荡,只要按相同的值设定波特率即可。3.如果产品是与计算机通讯的,可让计算机以300波特率发00H,用单片机测一下,需编程处理。4.其它测定频率的办法:(1)用带有晶振振荡的单片机来测,需编程处理。(2)用仿真机来测,需编程处理。(3)用RC振荡的单片机测定频率信号源(频率要稳、准、低),需编程处理。4倍时钟乘法器用CLKMUL寄存器配置4倍时钟乘法器。配置和使能4倍时钟乘法器的步骤如下:1.通过向寄存器CLKMUL写0x00来复位时钟乘法器。2.用MULSEL位选择时钟乘法器的输入。3.用MULEN位使能时钟乘法器(CLKMUL|=0x80)。4.延时大于5μs。5.用MULINIT位初始化时钟乘法器(CLKMUL|=0xC0)。6.查询等待MULRDY=>‘1’。注意:当使用外部振荡器作为4倍时钟乘法器的输入时,外部振荡源必须在乘法器被初始化之前被使能并稳定运行。CLKMUL:时钟乘法器控制寄存器要注意的是,4倍时钟乘法器使能(MULEN=1),MULSEL选择4倍时钟乘法器的输入,如果选择的是内部振荡器(MULSEL=00),则4倍时钟乘法器的输出为24MHz(12MHzX4÷2),与IFCN1-0无关,既是无论内部振荡器是不分频还是2,4,8分频,4倍时钟乘法器的输出都是24MHz。(系统初始的出厂校准频率为12MHz,OSCICL没动)例子:voidOscillator_Init(){inti=0;CLKMUL=0x80;//时钟乘法器使能,连接时钟乘法器的是内部振荡器for(i=0;i<20;i++);//Wait5usforinitializationCLKMUL|=0xC0;while((CLKMUL&0x20)==0);CLKSEL=0x02;//4倍时钟乘法器/2OSCICN=0x83;//使能内部振荡}voidOscillator_Init(){inti=0;OSCXCN=0x20;//外部COMS时钟方式CLKMUL=0x82;//时钟乘法器使能,连接时钟乘法器的是外部振荡器for(i=0;i<20;i++);//Wait5usforinitializationCLKMUL|=