MSP430的另外一個特點是用C語言編寫程序簡單,而且效率較高。本例就采用C語言編寫了程序。清單如下:
#include 《msp430x44x.h》
#include 《math.h》
int SampleTimes=0;
//***定義正弦表,并用32個抽樣值初始化正弦表,不要用“0”抽樣***//
int SinTable[]={255,254,246,234,219,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 = 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設為比較模式,中斷禁止
TBCCTL2=OUTMOD_7+CLLD_1; //選擇輸出模式7,當TBR計數到0時CCRx數據加載到TBCTLx
TBCCR1=SinTable[SampleTimes]; //將正弦表加載到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=SinTable[SampleTimes]; //將新的抽樣值裝入CCR1
}
評論