×
单片机 > 单片机程序设计 > 详情

msp430 timerA interrupt

发布时间:2020-08-21 发布时间:
|

#include

 

#define uchar unsigned char

#define uint unsigned int

uchar   table[16] ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,

                0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar  position[8] = {0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};

uchar count=1,count1=0,i,j;

void show(uchar pos,uchar num)

{

P4OUT  = 0x00;   // tobe all turn off 

P6OUT |= 0x40;   // DUAN 1

P4OUT  = table[num];  //DUAN NUM

P6OUT &= 0XBF;   // DUAN 0

        P4OUT  = 0XFF;

P5OUT |= 0X20;

P4OUT &= position[pos];

        P5OUT &= 0XDF;

 

}

 

void delayms(uint t)

{

    uint i;

    while(t--)

      for(i=1330;i>0;i--);//进过参数的调整 

}

 

int main(){

  

  WDTCTL = WDTPW + WDTHOLD;

    P6DIR |= 0X40;   // p6^6 output

    P5DIR |=0X20;    // P5^5 OUTPUT

    P4DIR  = 0XFF;   //  P4 OUTPUT

    TACTL = TASSEL_2+MC_2;  // mclock ,递增计数0···0xffff

    CCTL2 = CCIE ;         // 开中断

    CCTL1 = CCIE ;

    CCR1 = 50000 ;

    CCR2 = 25000 ;

    

    _EINT();

  

  while(1)

  {

    show(0,i);

    delayms(10);

    show(1,j);

    delayms(10);

  }

    

}

 

#pragma vector = TIMERA1_VECTOR

 

__interrupt void timer(void)

  

  switch(TAIV){    //当访问了taiv 后,taccr1 ccifg自动清零。

  case TAIV_TACCR1:  count++; if(count==20)

                    {i++; count = 0; if(i==10)i=0;}  break;

  case TAIV_TACCR2:  count1++; if(count1==10)

                    {j++; count1 = 0; if(j==10)j=0;} break;     

}

}

 

 

 

 

/*

//wdt timer 

int main(){

  

   P6DIR |= 0X40;   // p6^6 output

    P5DIR |=0X20;    // P5^5 OUTPUT

    P4DIR  = 0XFF;   //  P4 OUTPUT

  WDTCTL = WDT_MDLY_32;

  IE1 |= WDTIE;

 

 

  _EINT();

  

  while(1)

  {

    show(0,i);

    delayms(10);

  }

    

}

#pragma vector = WDT_VECTOR

__interrupt void timer(void)

   // IFG1 &= ~WDTIFG;  可以不加,自动清零

     count++;

     if(count ==20) {i++; count =0;if(i==10) i=0;} 

}

*/

/*控制led 运用ccr0,ccifg中断

int main(){

  

    P6DIR |= 0X40;   // p6^6 output

    P5DIR |=0X20;    // P5^5 OUTPUT

    P4DIR  = 0XFF;   //  P4 OUTPUT

  WDTCTL = WDTPW + WDTHOLD;

  TACTL  = TASSEL_2+MC_3;

  //TACTL = 0X0220;

  CCTL0 |= BIT4;

  CCR0 = 50000;

  _EINT();

  

  while(1)

  {

   

    show(0,i);

    delayms(10);

  }

    

}

#pragma vector = TIMERA0_VECTOR

__interrupt void timer(void)

    //CCR0+=50000;

     count++;

     if(count ==20) {i++; count =0;if(i==10) i=0;} 

}*/

 

/*运用溢出中断 taifg ,中断向量timerA1

int main(){

  

   P6DIR |= 0X40;   // p6^6 output

    P5DIR |=0X20;    // P5^5 OUTPUT

    P4DIR  = 0XFF;   //  P4 OUTPUT

  WDTCTL = WDTPW + WDTHOLD;

 

  TACTL = TASSEL_2+MC_1+TAIE;

  CCR0 = 25000;

  _EINT();

  

  while(1)

  {

    show(0,i);

    delayms(10);

  }

    

}

#pragma vector = TIMERA1_VECTOR

//#pragma vector = TIMERA0_VECTOR

__interrupt void timer(void)

    //CCR0+=50000;

    TACTL &= ~0X01;

     count++;

     if(count ==20) {i++; count =0;if(i==10) i=0;} 

}*/



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
如何为单片机选择合适的负载电容