1、MSP430 单片机的时钟信号小结时钟源有 LFXT1(低频或高频),XT2 (高频),DCO(数控)。时钟信号有 ACLK(辅助时钟 ),SMCLK(子系统时钟),MCLK(系统时钟)。ACLK 由 LFXT1 驱动;SMCLK 可由 XT2,DCO 之一驱动;MCLK 可由 LFXT1,XT2,DCO 之一驱动;MSP430F449 复位后,MCLK 和 SMCLK 的驱动源为 DCO,SMCLK=MCLK=32*ACLK=32*32768=1048576Hz。fDCOCLK = D x (N + 1) x fACLK。N 的设置为 SCFQCTL = N(N 取值 1127);D 的设置
2、为 SCFI0 = D(D 取值 FLLD_1,FLLD_2,FLLD_4,FLLD_8,即 D=1,2,4,8),默认值 D 取 2;还要设置 FLL_CTL0 = DCOPLUS,D 才会生效。在寄存器 FLL_CTL1 里设置 SMCLK,MCLK 的时钟驱动源。程序清单 MSP430 的另外一个特点是用 C 语言编写程序简单,而且效率较高。本例就采用 C 语言编写了程序。清单如下: i nclude i nclude int SampleTimes=0; /*定义正弦表,并用 32 个抽样值初始化正弦表,不要用“0“抽样*/ int SinTable=255,254,246,234,2
3、19,199,177,153,128,103,79,57,37,22,10,2, 1,2,10,22,37,57,79,103,128,153,177,199,219,234,246,255; void main(void) int i; WDTCTL = WDTPW +WDTHOLD; / 禁止看门狗定时器 /*初始化端口*/ P2DIR |= 0x0C; / P2.2 和 P2.3 为输出 P2SEL |= 0x0C; / P2.2 和 P2.3 分别为 TB1 和 TB2 /*设置系统时钟*/ FLL_CTL0 = XCAP18PF; / 设置 XTAL1 的负载电容 SCFQCTL =
4、 50-1; / 1.6384MHz/32768Hz = 50,fDCO=MCLK=1.6384MHz for (i = 50000; i; i-); / 晶振初始化延时 /*设置 Timer_B*/ TBCTL = TBSSEL1 + TBCLR; / 选择 SMCLK 为时钟,定时器清除 TBCTL|=MC_1+CNTL_0+TBCLGRP_0; /选择 up,16 位模式 TBCCTL0=CCIE; /将 CCR0 设为比较模式,中断允许 TBCCR0=256-1; /PWM 的周期为 256,也就是 DAC 为 8bit TBCCTL1=OUTMOD_7+CLLD_1; /将 CCRx
5、 设为比较模式,中断禁止 TBCCTL2=OUTMOD_7+CLLD_1; /选择输出模式 7,当 TBR 计数到 0 时 CCRx 数据加载到TBCTLx TBCCR1=SinTableSampleTimes; /将正弦表加载到 CCR1 TBCCR2=128; /PWM 的占空比为 50%,产生 0.5VCC 的直流电平 _EINT(); /中断允许 for (;) _BIS_SR(LPM0_bits); /CUP 进入低功耗模式 _NOP(); /调用中断函数 interrupt TIMERB0_VECTOR void Timer_B(void) SampleTimes=(SampleTimes+1)%32; TBCCR1=SinTableSampleTimes; /将新的抽样值装入 CCR1