⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timera练习.c

📁 430各模块例程包
💻 C
字号:
//MSP430的TimerA练习实例[入门必学]
//微控设计网原创作品  作者:DC版主 
//作者:微控设计网 DC版主 
//     MC430F11实验参考图片 
   

 //增计数模式工作示意图 
  
 //关于TA的详细原理,请到学习专区中查看我整理的TA资料。 

 //此例程已在MC430F11实验板上验证过 
//利用MC430F11开发板实验的TimerA 

//增计数模式学习实验. 

#include <msp430x11x1.h> 
void main(void) 
{ 
  WDTCTL = WDTPW + WDTHOLD;                 // 停止 
  P1DIR |= BIT0+BIT2+BIT3;                  // P1.0,P1.2,P1.3为输出 
  CCTL0 = CCIE;                             // CCR0中断允许 
  CCR0  = 8000;                             // 为CCR0写入初值 
  CCTL1 = CCIE;                             // 类同上... 
  CCR1  = 6000; 
  CCTL2 = CCIE;                             // 类同上... 
  CCR2  = 4000; 
  
  TACTL = TASSEL_1 + MC_1;                  // 设置TA工作模式 
                                            // 时钟源=ACLK,工作在增计数模式 
  _EINT();                                  //开总中断 
  LPM0;                                     //进入低功耗模式0 
} 

//**************************************************************************** 
// Timer A0 中断服务程序, A0是指CCR0 
#pragma vector=TIMERA0_VECTOR 
__interrupt void Timer_A0 (void) 
{ 
  P1OUT ^= BIT0;                            // MC430F11板上的D1 LED闪烁 
} 

//**************************************************************************** 
// Timer A3 中断服务程序, A3是指CCR1,CCR2,TAR 
#pragma vector=TIMERA1_VECTOR 
__interrupt void Timer_A3(void) 
{ 
 switch( TAIV ) 
 { 
   case  2: P1OUT ^= BIT2;                   // CCR1 
            break;                           // MC430F11板上的D2 LED闪烁 
   case  4: P1OUT ^= BIT3;                   // CCR2 
            break;                           // MC430F11板上的D3 LED闪烁 
   case 10:                                  // TAR 
            break; 
 } 
}  

[ 此帖最后由DC在2010-5-5 19:26:26从 DIY制作分享区 转移过来 ] 
欢迎热心网友积极参与回贴,共同创造有活力的论坛。  
DC   2007-03-11 19:48:45 引用评价第2楼 
门派网站成员职务总版主声望+9财富5积分3276经验372930文章5838注册2006-03-07 到淘宝MCCS店购买微控产品,现可提供发票!
TimerA连续计数模式例程
 //连续计数模式工作示意图 
  
 关于TA的详细原理,请到学习专区中查看我整理的TA资料。 
 此例程已在MC430F11实验板上验证过 
//利用MC430F11开发板实验的TimerA 增计数模式学习实验. 
//编写:www.microcontrol.cn  DC 
#include <msp430x11x1.h> 
void main(void) 
{ 
  WDTCTL = WDTPW + WDTHOLD;                 // 停止 
  P1DIR |= BIT0+BIT2+BIT3;                  // P1.0,P1.2,P1.3为输出 
  CCTL0 = CCIE;                             // CCR0中断允许 
  CCR0  = 8000;                             // 为CCR0写入初值 
  CCTL1 = CCIE; 
  CCR1  = 6000; 
  CCTL2 = CCIE; 
  CCR2  = 4000; 
  
  TACTL = TASSEL_1 + MC_2;                  // 设置TA工作模式 
                                            // 时钟源=ACLK,工作在连续计数模式 
  _EINT(); 
  LPM0; 
} 

// Timer A0 中断服务程序, A0是指CCR0 
#pragma vector=TIMERA0_VECTOR 
__interrupt void Timer_A0 (void) 
{ 
  P1OUT ^= BIT0;                            // MC430F11板上的D1 LED闪烁 
  CCR0  = CCR0+8000;                        //增加下一次相等的计数值 
} 

// Timer A3 中断服务程序, A3是指CCR1,CCR2,TAR 
#pragma vector=TIMERA1_VECTOR 
__interrupt void Timer_A3(void) 
{ 
 switch( TAIV ) 
 { 
   case  2: P1OUT ^= BIT2;                   // CCR1-CCIFG1 
            CCR1  = CCR1+6000;               //增加下一次相等的计数值 
            break;                           // MC430F11板上的D2 LED闪烁 
   case  4: P1OUT ^= BIT3;                   // CCR2-CCIFG2 
             CCR2 = CCR2+4000;              //增加下一次相等的计数值 
            break;                           // MC430F11板上的D3 LED闪烁 
   case 10:                                 // TAR-TAIFG,TAR中断在此例程中未用上 
            break; 
 } 
}  

[ 此贴最后由DC在2008-11-1 13:10:47编辑过 ] 
欢迎热心网友积极参与回贴,共同创造有活力的论坛。  
DC   2007-03-11 21:08:01 引用评价第3楼 
门派网站成员职务总版主声望+9财富5积分3276经验372930文章5838注册2006-03-07 
//增减计数模式例程
  
//利用MC430F11开发板实验的TimerA 增减计数模式学习实验. 
//利用CCR0,CCR1,CCR2结合增减计数模式产生两路PWM信号输出. 
//timer_A.out1输出为PWM 翻位/置位模式 
//timer_A.out2输出为PWM 翻位/复位模式 
//编写:www.microcontrol.cn  DC 
#include <msp430x11x1.h> 
void main(void) 
{ 
  WDTCTL = WDTPW + WDTHOLD;       // 狗仔放假 
  P1DIR |= BIT0;                  // P1.0为输出 
  P2DIR |= BIT3+BIT4;             // P2.3,P2.4为输出 
  P2SEL |= BIT3+BIT4;             // TimerA-OUT1,OUT2功能输出 
  TACCTL1 |= OUTMOD_6;            //timer_A.out1输出为PWM 翻位/置位模式 
  TACCTL2 |= OUTMOD_2;            //timer_A.out2输出为PWM 翻位/复位模式 
  CCTL0 = CCIE;                   //CCR0中断在实际应用中,可以省去. 
  CCR0  = 1666;                   //选择ACLK约30us,增减计数周期是CCR0周期时间的2倍 
                                  //CCR0在增减计数模式,PWM周期约1666*30us*2=100mS 
  CCR1  = 833;                    //半方周期约833*30us*2=50mS                       
  CCR2  = 600;                    //6003*30us*2=36mS (死区时则为50-36=14ms/2=7mS)      
  
  TACTL = TASSEL_1 + MC_3;        // 设置TA工作模式 
                                  // 时钟源=ACLK,工作在增减计数模式 
  _EINT(); 
  LPM0; 
} 

//在实际PWM输出中,可以不使用CCR0中断,此例只用于LED指示. 
// Timer A0 中断服务程序, A0是指CCR0 
#pragma vector=TIMERA0_VECTOR 
__interrupt void Timer_A0 (void) 
{ 
  P1OUT ^= BIT0;                            // MC430F11板上的D1 LED闪烁 
} 

本例子中,是在驱动H桥时可以避免两相驱动电路产生关闭不当时时产生的过载。在本例两个PWM信号中,开与关之间产生了死区时间。有效防止两相同时开启的可能。 
 死区时间=TimerA_clk * (CCR1-CCR2) 
 TimerAclk:是定时器A的输入时钟周期。 
 CCR1,CCR1则是分别CCR1,2的值。 
 以下是本例程中用ezDSO虚拟示波器测量到的实验波形,图中标示的是死区时间。 
      

[ 此贴最后由DC在2008-11-1 13:11:15编辑过 ] 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -