專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機教程網(wǎng) >> MCU設(shè)計實例 >> 瀏覽文章

msp430定時器A、B與聯(lián)調(diào)

作者:佚名   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2014年08月31日   【字體:

 #include  <msp430x24x.h> //130731調(diào)試通過

typedef unsigned char uchar; 
typedef unsigned int  uint; 
unsigned char i = 0,j = 0; 
void DelayMs(unsigned int ms)
{
  unsigned char j;
  while(--ms)
  {
    for(j=130;j>0;--j);
//      _NOP();
  }
}
/***** 定時器A 初使化 *******/
void TimerA_Init(void)
{
    CCTL0 = CCIE;                   //使能CCR0中斷 
    CCR0 = 5000; 
    TACTL = TASSEL_2 + ID_0 + MC_1; //定時器A的時鐘源選擇SMCLK,增計數(shù)模式 
}
/**** 定時器B 初使化 *****/
void TimerB_Init (void)
{
    TBCCTL0 = CCIE; // INTERRUPT ENABLE
    TBCCR0 = 5000; // 
    TBCTL = TBSSEL_2 + ID0 + MC_1; //ID_2 + ID1 +     
}
void SystemInit(void)
{
//    WDTCTL = WDTPW + WDTHOLD;       //關(guān)閉看門狗 
/*    DCOCTL |= 0xE0;
    BCSCTL1 &= 0x00;
    BCSCTL1 |= 0x47;
    BCSCTL2 &= 0x00;
    BCSCTL2 |= 0x88;*/
    P2DIR = 0xff;                   //設(shè)置P2口方向為輸出 
    P2OUT = 0x00; 
    P5DIR = BIT4;                   //設(shè)置P6口方向為輸出 
    P5OUT = BIT4; 
    P1DIR = BIT1;                   //設(shè)置P6口方向為輸出 
    P1OUT &= ~BIT1; 
}
void Wdt(void)
{
    WDTCTL |= WDTPW | WDT_MDLY_8;//以SMCLK進行32ms的延遲
    IE1 |= WDTIE; // 開WDT中斷
}
void main(void) 
    SystemInit();
    TimerA_Init();
    TimerB_Init(); 
    Wdt();
    _EINT();                        //使能全局中斷 
    for(;;)
    {      
      P5OUT ^= BIT4;
      DelayMs(200);
      __low_power_mode_4(); // 進入LPM4模式
    }
/******************************************* 
函數(shù)名稱:Timer_A  
功    能:定時器A的中斷服務(wù)函數(shù),在這里通過標(biāo)志 
          控制流水燈的流動方向和流動速度 
參    數(shù):無 
返回值  :無 
********************************************/ 
#pragma vector = TIMERA0_VECTOR 
__interrupt void Timer_A (void) 
{   
  if(i++ >19)
  {
    i=0;
    P2OUT ^= 0xF0;
  }
/****** 定時器B 中斷處理 ***********/
#pragma vector = TIMERB0_VECTOR
__interrupt void Timer_B0 (void)
{
  if(j++ > 5)
  {
    j = 0; 
    P2OUT ^= 0x0F;
//    __low_power_mode_off_on_exit(); // 退出低功耗模式
  }
}
/****** 看門狗 中斷服務(wù)子程序***********/
#pragma vector = WDT_VECTOR
__interrupt void WDT_IRQ(void)
{
  __low_power_mode_off_on_exit(); // 退出低功耗模式
  P1OUT ^= BIT1;// 對引腳取反
}
 
關(guān)閉窗口