时钟电路——数字振荡器(
DCO)
电路按信号形式可分为数字和模拟。
数字电路处理的是数字信号。数字电路又可分为组合逻辑电路与时序逻辑电路。时序电路可以完成组合电路的功能,反之则不成立。两者的区别是时序电路与信号的时间有关,即有一个时钟信号。
在MSP430芯片中有3个时钟源,内部晶体振荡器(DCO)、外部低速时钟源(XT1)、外部高速时钟源(XT2)。DCO的工作可以不要外部不要外部器件的支持,因此降低了电路的复杂程度,但是它是基于RC的工作原理,工作频率不稳定。XT1、XT2需要外接一个晶振,所以工作频率稳定。采用两个外部晶振是让一个工作在高频一个工作在低频,高频晶体可以使程序执行速度快,低速晶体使芯片功耗降低。
//程序名称: Clock_DCO.C
//程序功能: 产生周期为 160 个系统时钟周期的方波信号,通过测量方波信号频率获得 DCO 时钟频率
#include 430x14x.h> //包含名称定义和对应地址或数据的头函数
void int_clk(void); //声明系统时钟初始化函数
void delay(void); //声明延时函数
int main(void) //主函数
{
int_clk( ); //系统时钟初始化
WDTCTL=WDTPW+WDTHOLD; //关闭看门狗
//看门狗控制寄存器 WDTCTL 地址以及密码位 WDTPW 内容和
//使能位 WDTHOLD 内容在头函数 MSP430x14x.h 定义
//WDTPW 内容加 WDTHOLD 内容向 WDTCTL 赋值
P3SEL=0x00; //设置 P3 端口为数字输入 / 输出口
P3DIR=0xff; //设置 P3 端口为输出口
while(1) //重复执行
{
//产生周期为 160 个系统时钟周期的方波
P3OUT&=~BIT0; // P3.0 输出低电平
delay( ); //延时 75 个系统时钟周期,保持方波信号低电平
P3OUT|=BIT0; // P3.0 输出高电平
delay( ); //延时 75 个系统时钟周期,保持方波信号高电平
}
}
void delay(void) //延时函数
{
unsigned char i; //声明实现延时的整型数据类型循环变量
for(i=0; i<10; i++) //利用循环实现延时调整
{
_NOP( ); //产生一个MSP430系统时钟周期的延时
}
}
void int_clk(void) //系统时钟初始化函数
{
unsigned char i; //声明实现延时的循环变量
DCOCTL = 0x00; //设置数字控制振荡器的工作频率***
BCSCTL1 = 0x80; //关闭 XT2
//设置数字控制振荡器的工作频率***
BCSCTL2&=~DCOR; //选择 MCLK 时钟源为 DCOCLK,分频比 1
//选择 SMCLK 时钟源为 DCOCLK,分频比 1
//选择芯片内部 DCO 电阻
do
{
IFG1&=~OFIFG; //清除振荡器错误标志
for(i=0; i<100; i++) //利用循环实现延时调整
{
_NOP( ); //产生一个MSP430系统时钟周期的延时
}
}
while((IFG1 & OFIFG)!=0); //如果标志为1,继续等待
IFG1&=~OFIFG; //清除振荡器错误标志
}