搜索
bottom↓
回复: 2

launchpad 定时器问题

[复制链接]

出0入0汤圆

发表于 2012-7-27 10:36:39 | 显示全部楼层 |阅读模式
#include "msp430g2553.h"
#define CS_1 P2OUT|=BIT0
#define CS_0 P2OUT&=~BIT0

#define SCLK_1 P2OUT|=BIT1
#define SCLK_0 P2OUT&=~BIT1

#define DIN_1 P2OUT|=BIT2
#define DIN_0 P2OUT&=~BIT2

unsigned  int j=0;

unsigned int const dot[256]={0x200,0x20c,0x219,0x225,0x232,0x23e,0x24b,0x257,0x263,0x270,0x27c,0x288,0x294,
                0x2a0,0x2ac,0x2b8,0x2c3,0x2cf,0x2da,0x2e6,0x2f1,0x2fc,0x307,0x311,0x31c,0x326,0x330,0x33a,0x344,0x34e,
                0x357,0x360,0x369,0x372,0x37b,0x383,0x38b,0x393,0x39b,0x3a2,0x3a9,0x3b0,0x3b7,0x3bd,0x3c3,0x3c9,0x3ce,
                0x3d3,0x3d8,0x3dd,0x3e1,0x3e6,0x3e9,0x3ed,0x3f0,0x3f3,0x3f6,0x3f8,0x3fa,0x3fc,0x3fd,0x3fe,0x3ff,0x3ff,
                0x3ff,0x3ff,0x3ff,0x3fe,0x3fd,0x3fc,0x3fa,0x3f8,0x3f6,0x3f3,0x3f0,0x3ed,0x3ea,0x3e6,0x3e2,0x3dd,0x3d9,
                0x3d4,0x3cf,0x3c9,0x3c3,0x3bd,0x3b7,0x3b0,0x3aa,0x3a2,0x39b,0x393,0x38c,0x384,0x37b,0x373,0x36a,0x361,
                0x358,0x34e,0x345,0x33b,0x331,0x327,0x31d,0x312,0x307,0x2fc,0x2f1,0x2e6,0x2db,0x2d0,0x2c4,0x2b8,0x2ad,
                0x2a1,0x295,0x289,0x27d,0x270,0x264,0x258,0x24b,0x23f,0x232,0x226,0x219,0x20d,0x200,0x1f4,0x1e7,0x1db,
                0x1ce,0x1c2,0x1b5,0x1a9,0x19c,0x190,0x184,0x178,0x16c,0x160,0x154,0x148,0x13c,0x131,0x125,0x11a,0x10f,
                0x104,0xf9,0xee,0xe4,0xd9,0xcf,0xc5,0xbb,0xb2,0xa8,0x9f,0x96,0x8d,0x85,0x7c,0x74,0x6d,0x65,0x5e,0x56,
                0x50,0x49,0x43,0x3c,0x37,0x31,0x2c,0x27,0x22,0x1e,0x1a,0x16,0x12,0xf,0xc,0xa,0x7,0x5,0x3,0x2,0x1,0x0,
                0x0,0x0,0x0,0x0,0x1,0x2,0x3,0x5,0x7,0x9,0xc,0xf,0x12,0x15,0x19,0x1d,0x21,0x26,0x2b,0x30,0x36,0x3b,0x41,
                0x48,0x4e,0x55,0x5c,0x63,0x6b,0x73,0x7b,0x83,0x8c,0x94,0x9d,0xa7,0xb0,0xba,0xc3,0xcd,0xd7,0xe2,0xec,0xf7,
                0x102,0x10d,0x118,0x123,0x12f,0x13a,0x146,0x152,0x15d,0x169,0x175,0x182,0x18e,0x19a,0x1a6,0x1b3,0x1bf,
                0x1cc,0x1d8,0x1e5,0x1f1
                //本表由VsinTab生成 http://cinzy.com
};
void interuppt_init();
void port_init();
void sin(unsigned int date);
/*******************************中断初始化程序*******************************/
void interuppt_init()
{

/*******************************时钟源的配置********************************/
    BCSCTL1 = CALBC1_1MHZ;                      // Set range
        DCOCTL = CALDCO_1MHZ;                      // Set DCO step + modulation
        BCSCTL3 |= LFXT1S_2;               // LFXT1 = VLO
        IFG1 &= ~OFIFG;

//        BCSCTL1 |= DIVA_3;                                                  // ACLK = VLO/8
//        BCSCTL2 |= SELM_3 + DIVM_3 + DIVS_3;      // MCLK = DCO/8, SMCLK = DCO/8

/**************************定时器时钟源的选择*****************************/
        TACTL = TASSEL_2 + MC_1+ TAIE;          // 时钟源:SMCLK, 计数模式为MC_1
        CCR0 = 78;                         //定时器计数 50000次,50000*1us=50ms
        CCTL0 = CCIE;                          //中断使能
        _BIS_SR(GIE);
}

/******************************端口初始化***********************************/
void port_init()
{
    WDTCTL=WDTPW+WDTHOLD;    //关看门狗
        if (CALBC1_1MHZ ==0xFF || CALDCO_1MHZ == 0xFF)
        {
                while(1);                    // If calibration constants erased, trap CPU!!
        }
        P1DIR|=BIT0;
    P1OUT&=~BIT0;
    P2DIR|=BIT0+BIT1+BIT2;
    P2OUT&=(~BIT0)+(~BIT1)+(~BIT2);
}


void sin(unsigned int date)
{
        unsigned char i=0;
        P2DIR|=BIT0+BIT1+BIT2;
        CS_0;
        SCLK_0;
        date=(date<<6);
        for(i=0;i<12;i++)
                {
                        if(date&0x8000)
                        {
                                DIN_1;
                        }
                        else
                                DIN_0;
                        SCLK_1;
                        _delay_cycles(1);
                        SCLK_0;
                        date=date<<1;
                        _delay_cycles(1);
                }
        CS_1;
}

/*****************************主函数******************************************/
void main(void)
{
        port_init();
          interuppt_init();
    while(1);

}
// Timer A0 interrupt service routine
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void)
{

        switch( TA0IV )
        {
        case  10:
        P1OUT^=BIT0;
        /* sin(dot[j]);
         j++;
         if(j>255)
                 j=0;*/
           break;
        }
}

上面是我产生正弦波的程序,在中断函数里屏蔽/* sin(dot[j]);     j++;   if(j>255)   j=0; */与不屏蔽,中断时间不一样,不知道为什么。求解决,在线等

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2012-7-27 10:50:23 | 显示全部楼层
怎么解决阿?好烦阿

出0入0汤圆

发表于 2012-7-27 20:54:09 | 显示全部楼层
有什么号烦的
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-28 06:30

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表