专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

msp430定时器A、B与联调

作者:佚名   来源:本站原创   点击数:  更新时间:2014年08月31日   【字体:

 #include  <msp430x24x.h> //130731调试通过

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,增计数模式 
}
/**** 定时器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;       //关闭看门狗 
/*    DCOCTL |= 0xE0;
    BCSCTL1 &= 0x00;
    BCSCTL1 |= 0x47;
    BCSCTL2 &= 0x00;
    BCSCTL2 |= 0x88;*/
    P2DIR = 0xff;                   //设置P2口方向为输出 
    P2OUT = 0x00; 
    P5DIR = BIT4;                   //设置P6口方向为输出 
    P5OUT = BIT4; 
    P1DIR = BIT1;                   //设置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模式
    }
/******************************************* 
函数名称:Timer_A  
功    能:定时器A的中断服务函数,在这里通过标志 
          控制流水灯的流动方向和流动速度 
参    数:无 
返回值  :无 
********************************************/ 
#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(); // 退出低功耗模式
  }
}
/****** 看门狗 中断服务子程序***********/
#pragma vector = WDT_VECTOR
__interrupt void WDT_IRQ(void)
{
  __low_power_mode_off_on_exit(); // 退出低功耗模式
  P1OUT ^= BIT1;// 对引脚取反
}
 
关闭窗口