RT,小弟才学习430不久,我想用169内部的DA通过查询正弦波码表要产生正弦波,代码如下
#include <msp430x16x.h>
#define uint unsigned int
#define uchar unsigned char
uint Sin_tab[100] = {
0x7FF,0x880,0x900,0x97F,0x9FC,0xA78,0xAF1,0xB67,0xBD9,0xC48,0xCB2,0xD18,0xD79,0xDD4,0xE29,0xE77
,0xEC0,0xF01,0xF3C,0xF6F,0xF9A,0xFBE,0xFDA,0xFEE,0xFFA,0xFFE,0xFFA,0xFEE,0xFDA,0xFBE,0xF9A,0xF6F
,0xF3C,0xF01,0xEC0,0xE77,0xE29,0xDD4,0xD79,0xD18,0xCB2,0xC48,0xBD9,0xB67,0xAF1,0xA78,0x9FC,0x97F
,0x900,0x880,0x7FF,0x77E,0x6FE,0x67F,0x602,0x586,0x50D,0x497,0x425,0x3B6,0x34C,0x2E6,0x285,0x22A
,0x1D5,0x187,0x13E,0x0FD,0x0C2,0x08F,0x064,0x040,0x024,0x010,0x004,0x000,0x004,0x010,0x024,0x040
,0x064,0x08F,0x0C2,0x0FD,0x13E,0x187,0x1D5,0x22A,0x285,0x2E6,0x34C,0x3B6,0x425,0x497,0x50D,0x586
,0x602,0x67F,0x6FE,0x77E
};
uint num;
void main()
{
uint t;
WDTCTL =WDTPW + WDTHOLD;
BCSCTL1 &=~XT2OFF;
do
{
IFG1 &=~OFIFG;
for(t=0xff;t>0;t--);
}
while((IFG1 & OFIFG) !=0);
IFG1 &=~OFIFG;
BCSCTL2 |= SELS+DIVS_3;
ADC12CTL0 = REF2_5V + REFON;
DAC12_0CTL = DAC12IR + DAC12AMP_5 + DAC12ENC;
TACTL |=TACLR;
//P6DIR |=BIT6;
//P6OUT &=~BIT6;
CCR0 =100-1;
TACTL |=TASSEL_2 + MC_1;
CCTL0 |=CCIE;
_EINT();
while(1)
{
_NOP();
}
//_BIS_SR(LPM0_bits);
}
#pragma vector = TIMERA0_VECTOR
__interrupt void tiemr(void)
{
DAC12_0DAT = Sin_tab[num];
num++;
if(num==100)
{
num=0;
}
//DAC12_0CTL |=DAC12ENC;
}
我单独测得时候,不适用DA,引脚输出的频率和定时器理论上的值是一样的,但是加上DAC后,正弦波能够输出,但是频率始终上不去!最多也就几百小弟纠结好久了,还望各位大哥,各位前辈指点!谢谢了!
此致
敬礼
|