一、前言
1、外部振荡器电路可以驱动外部晶体、陶瓷谐振器、电容或 RC 网络。也可以使用一个外部CMOS 时钟提供系统时钟。
2、本文使用外部 RC 电路作为单片机的外部振荡源,电容不应大于 100pF;但当电容值很小时,PCB 的寄生电容将在总电容中占支配地位。如果所希望的频率是 100kHz,选 R = 246kΩ 和 C = 50pF。
频率计算公式如下:
3、实际上手头并没有246K的电阻,实际手头只有330K的电阻和33pF的电容,计算出的RC的频率为82.5KHz。
二、程序展示
1、头文件部分
#include <c8051F340.h>
#define XFCN 2
void OSCILLATOR_Init (void);
void PORT_Init (void);
2、主程序部分
void main (void)
{
PCA0MD &= ~0x40; // 关闭看门狗
PORT_Init(); //端口初始化
OSCILLATOR_Init (); //振荡器初始化
while (1) {};
}
3、振荡器初始化
void OSCILLATOR_Init (void)
{
int i; // 延时用
OSCXCN = (0x40 | XFCN); //启动外部晶振
for (i=0; i < 256; i++); // 延时等待启动完成
RSTSRC = 0x06; // 允许丢失复位
CLKSEL = 0x01; //选择外部时钟
OSCICN = 0x00; // 禁止内部时钟
}
4、端口初始化
void PORT_Init (void)
{
P0MDIN &= ~0x80;
P0SKIP |= 0x80;
P0MDOUT |= 0x01; // P0.0输出系统时钟,用于检测
XBR0 = 0x08;
XBR1 = 0x40;
}
5、说明
由于电路板上实际存在一些寄生电容,最后实际测出的频率位89K左右,每块电路板的情况不一样,测出的实际频率也会有差别,毕竟RC作为振荡器的是一种比较粗糙的振荡器。