msp430 timerA interrupt

#include <msp430x24x.h>

#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;} 
}*/



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值