定时器,让流水灯以1S时间闪烁

2019-03-24 10:31发布


void main(void)
{
    WDTCTL = WDTPW + WDTHOLD;           //关闭看门狗

    P2DIR |= 0xFF;
     P2OUT=0x00;
    //P2配置为输出
   
     TA0CCR0 = 50000;                   //初值设置     
     TA0CTL =TASSEL_2 +MC_1;
     TA0CTL =TAIE;//TAIE:中断使能  
      _EINT();                            //打开全局中断
      LPM3;                               //进入低功耗模式                  
}为什么不行呢?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
6条回答
zc1712061939
2019-03-24 17:12
< #include  <msp430x14x.h>
   int time=0;
void init_clk( )
{
    unsigned char i;
    WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗
    BCSCTL1&=~XT2OFF;//打开XT振荡器
    BCSCTL2|=SELM_2+SELS;//MCLK 8M and SMCLK 8M  
    do
    {
      IFG1 &= ~OFIFG;//清除振荡错误标志
      for(i = 0; i < 0xff; i++)  _NOP();//延时等待
    }
    while ((IFG1 & OFIFG) != 0);//如果标志为1继续循环等待
    IFG1&=~OFIFG;
}

void main()
{   
        init_clk();//初始化系统时钟
        TACTL=TASSEL1+ID0+ID1+TACLR+TAIE;//计数时钟源为系统时钟,8分频,允许定时器溢出        中        断,清除计数器。
        P5DIR|=0x02;
        P5DIR|=0x04;
        P5DIR|=0x08;
        P4DIR|=0x04;
        P3DIR|=0x40;
        P3DIR|=0x80;
        TACTL|=MC0;//增计数模式
        TACCR0=700;//计数周期为1000
        _EINT();//开启总中断
        while(1)
        {
                if(time==100)
                {
                        P5OUT^=0x02;
                        time++;
                }
                if(time==200)
                {
                        P5OUT^=0x02;
                        P5OUT^=0x04;
                        time++;
                }
                if(time==300)
                {
                        P5OUT^=0x04;
                        P5OUT^=0x08;
                          time++;
                }
                if(time==400)
                {
                        P5OUT^=0x08;
                        P4OUT^=0x04;
                        time++;
                }
                if(time==500)
                {
                        P4OUT^=0x04;
                        P3OUT^=0x40;
                        time++;
                }
                if(time==600)
                {
                        P3OUT^=0x40;
                        P3OUT^=0x80;
                        time++;
                }
                if(time==700)
                {
                        P3OUT^=0x80;
                        time=0;
                }
   }

}
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
        switch(TAIV)
        {
                case 2:break;
                case 4:break;
                case 10:time++;break;
        }
}
这是我暑假学430用的程序,你看一下吧

一周热门 更多>

相关问题

    相关文章