This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

MSP430

请问一下这个程序为什么报错我数组没有定义,不知道怎么发截图,我把错误地方标注x、

#include <msp430x24x.h>
#include <math.h>
int y=0
//定义正弦表,将正弦波正半周分为9份//
const long SinTable[36]=                                     
{
22979, 9598, 36938, 27637, 20566, 42342,
8414, 51941, 1948, 55274, 1948, 51941
8414, 42342, 2056, 27637, 36938, 9598,
22979, 9598, 36938, 27637, 20566, 42342,
8414, 51941, 1948, 55274, 1948, 51941,
8414, 42342, 2056, 27637, 36938, 9598,         };         //x
//合成正弦波主程序
void main(void)
{
int i;
WDTCTL= WDTPW+ WDTHOLD;//禁止看门狗定时器
//设置系统时钟,使用外接晶振:8MHz,使单片机的时钟源设为XT2//
BCSCTL1 &=~XT2OFF;
do
{IFG1 &=~OFIFG;
for(i=0xFF; i>0; i--);
}
while((IFG1 & OFIFG)!=0);
BCSCTL2 |=SELM1+DIVM1+DIVM0;
//初始化端口//
P2DIR |=0x03; //P2.0,P2.1为输出
P2OUT &=0X00;
//设置 Timer a//
TACTL |= TASSEL1 + TACLR+ID1+ID0;//选择MLK为时钟,定时器清除
CCTL0=CCIE;
TACCR0=SinTable[0];            // x
//中断允许
_EINT();
TACTL|=MC0;//选择up,16位模式
}
//调用中断函数//
#pragma vector=TIMERA0_VECTOR
interrupt void Timer_A(void)
{
y=(y+1)%36;
if(y==0)
{
TACCR0=SinTable[y];                // x
P2OUT &=0X00;
}
else if(y>0&y<18)
{
TACCR0=SinTable[y];            // x
P2OUT^=0X01;
}
else if(y==18)
{
TACCR0=SinTable[y];           // x
P2OUT=0X00;
}
else if(y>18&y<=35)
{
TACCR0=SinTable[y];            // x
P2OUT^=0X02;
}
}

  • 我测试一下后给您回复

    发送截图的话,您可以点击右下角的“使用高级编辑器编辑文本”,而后点击 附件 图标上传就可以了
  • 请您试一下下面的代码

    #include <msp430.h> 
    
    
    #include <math.h>
    int y=0;
    
    const long SinTable[36];
    
    const long SinTable[36]=
    {
    22979, 9598, 36938, 27637, 20566, 42342,
    8414, 51941, 1948, 55274, 1948, 51941,
    8414, 42342, 2056, 27637, 36938, 9598,
    22979, 9598, 36938, 27637, 20566, 42342,
    8414, 51941, 1948, 55274, 1948, 51941,
    8414, 42342, 2056, 27637, 36938, 9598,         };
    
    void main(void)
    {
    int i;
    WDTCTL= WDTPW+ WDTHOLD;
    
    BCSCTL1 &=~XT2OFF;
    do
    {IFG1 &=~OFIFG;
    for(i=0xFF; i>0; i--);
    }
    while((IFG1 & OFIFG)!=0);
    BCSCTL2 |=SELM1+DIVM1+DIVM0;
    
    P2DIR |=0x03;
    P2OUT &=0X00;
    
    TACTL |= TASSEL1 + TACLR+ID1+ID0;
    CCTL0=CCIE;
    TACCR0=SinTable[0];
    
    _EINT();
    TACTL|=MC0;
    }
    
    #pragma vector=TIMERA0_VECTOR
    interrupt void Timer_A(void)
    {
    y=(y+1)%36;
    if(y==0)
    {
    TACCR0=SinTable[y];
    P2OUT &=0X00;
    }
    else if(y>0&y<18)
    {
    TACCR0=SinTable[y];
    P2OUT^=0X01;
    }
    else if(y==18)
    {
    TACCR0=SinTable[y];
    P2OUT=0X00;
    }
    else if(y>18&y<=35)
    {
    TACCR0=SinTable[y];
    P2OUT^=0X02;
    }
    }
    

  • 谢谢你,程序好像确实没问题了,诶但是仿真图我还是不太会画,没有出结果来。
  • 我在另外一个帖子回复了您,您可以看一下

    e2echina.ti.com/.../573296

    目前暂时手边没有板子,我明天测试一下后给您回复
  • 还是用proteus仿真吗?慢慢来,参考下这个资料:

    基于Proteus的MSP430单片机仿真实例

    http://bbs.eeworld.com.cn/thread-610333-1-1.html