⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dac.c

📁 MSP430单片机C语言应用程序设计实例精讲,单片机开发的朋友可以作为参考
💻 C
字号:
#include <msp430x14x.h>

void Init_CLK(void);
void Init_TimerA(void);

//定义正弦表,并用32个抽样值初始化正弦表,不要用"0"抽样 
int nSinTable[] = {
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
};

int nCount; 

void Init_CLK(void)
{
    unsigned int i;
	//将寄存器的内容清零
	//XT2震荡器开启
	//LFTX1工作在低频模式
	//ACLK的分频因子为1
    BCSCTL1 = 0X00;	
					
    do 
    {
		// 清除OSCFault标志
		IFG1 &= ~OFIFG; 
		for (i = 0x20; i > 0; i--);                
    }
    while ((IFG1 & OFIFG) == OFIFG); 
					
    BCSCTL2 = 0X00;	
	//MCLK的时钟源为TX2CLK:2.048MHz,分频因子为0
    BCSCTL2 += SELM1 + DIVM_0;		
	//SMCLK的时钟源为TX2CLK:2.048MHz,分频因子为1
    BCSCTL2 += SELS + DIVS_0;
	return;
}
void Init_TimerA(void)
{
	nCount = 0;
	// P1.2为输出
	P1DIR |= BIT2;
	// 选择P1.2为TA1管脚
    P1SEL |= BIT2;        
	// 选择SMCLK,清除TAR
    TACTL = TASSEL1 + TACLR;  
	// CCR0 中断允许
    CCTL0 = CCIE;	
	// PWM周期为256
    CCR0 = 256 - 1;	
	// CCR1输出模式为“复位/置位”模式
	CCTL1 = OUTMOD_7;
	CCR1 = nSinTable[nCount];
	// 增记数模式
    TACTL |= MC1;			
    return;
}
interrupt [TIMERA0_VECTOR] void Timer_A0_ISR(void)
{
	nCount += 1; 
	if(nCount >= 32)
	{
		nCount = 0;
	}
	//将新的抽样值装入CCR1 
    CCR1 = nSinTable[nCount];        
}
int main(void)
{
    // 关闭看门狗
    WDTCTL = WDTPW + WDTHOLD;   
    
    // 关闭中断
    _DINT();			
    
    // 初始化
    Init_CLK();
    Init_TimerA();
    // 打开中断
	_EINT(); 
	for(;;)
	{
		//CUP进入低功耗模式
		_BIS_SR(LPM0_bits);         
        _NOP(); 
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -