前辈 前辈们 快来救救我吧 都一周多了

2019-03-24 14:45发布

小弟 我卡住了
好几天了 
希望前辈们指教啊
我这个程序是产生相位互差90度 
出来的波形是 一样的 怎么回事啊
#include <msp430x14x.h>
unsigned int flag1=0,flag2=0,num=0; 全局变量
void Init_Clock(void)      
{
   int i=0;
   BCSCTL1 &= ~XT2OFF;                       // XT2on
  do
  {
  IFG1 &= ~OFIFG;                           // Clear OSCFault flag
  for (i = 0xFF; i > 0; i--);               // Time for flag to set
  }
  while ((IFG1 & OFIFG));                   // OSCFault flag still set?
  BCSCTL2 |= SELM_2 + SELS;                 // MCLK = SMCLK = XT2 (safe)
  // _EINT(); //打开全局中断控制,若不需要打开,可以屏蔽本句
}
void main(void)
{
   WDTCTL = WDTPW + WDTHOLD;
   Init_Clock();
   //定时器B的初始化
   P4DIR |= BIT1+BIT2; // P4.1 - P4.2output
   P4SEL |= BIT1+BIT2; // P4.1 - P4.2 TBx options
   P2DIR |= BIT6+BIT7; //
   TBCTL =TBSSEL_2+TBCLR;   //SMCLK
   TBCCR0 = 19999-1;  20ms
   TBCTL |=MC_1+ID_3; 增加模式 1/8分频
   //定时器A初始化
   TACTL=TASSEL_2+TACLR;//SMCLK
   TACCTL0=CCIE;//CCR0中断允许
   TACCR0=5000-1; 5ms
   TACTL |= MC_1+ID_3+TAIE; 增加模式 1/8分频 开中断
   _EINT();    开中断
   while(1)
  {
   if(flag1==1)
    {
     TBCCR0 = 19999-1;
     TBCCTL1 = OUTMOD_7; // CCR1 reset/set  
     TBCCR1 = 9999; // CCR1 PWM duty cycle 占空比为50%
    // TBCCTL1 = CCIE; 
     flag1=0;
    }
   if(flag2==1)
    {
     TBCCR0 = 19999-1;
     TBCCTL2 = OUTMOD_7;
     TBCCR2 = 9999;    占空比为50%
     //TBCCTL2 = CCIE; 
     flag2=0;
    }
  }
} #pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A(void)         定时器A 中断
   {  
   
     num++;
 switch(TAIV)
 {
   case 2:break;
   case 4:break;
   case 10:
      switch(num)
      {      case 0:break;
             case 1:flag1=1;   num=1,置位flag1
                    P2OUT&=~BIT6;      p2.6灯亮
                    break;
             case 2:flag2=1;               置位flag2
                    P2OUT&=~BIT7;     p2.7灯亮
                    TACTL&=~TAIE;     关定时器A中断
                    TACTL=MC_0;       定时器A 停止模式                      num=0;                     break;
            } 
  }}   [ 本帖最后由 t_shaojun126 于 2012-3-21 10:20 编辑 ] 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
问路者
1楼-- · 2019-03-24 22:10
啥意思啊,实现什么功能,用一个定时器不行嘛,再者就是在中断中修改的标志符在主循环中最好不要再修改,尤其是单纯的置位清零,判断最好不要用==,用逻辑判断,程序复杂了,这样容易出问题的。还有用定时器AB出中断时清一下中断标志。
t_shaojun126
2楼-- · 2019-03-25 01:39
 精彩回答 2  元偷偷看……
wangfuchong
3楼-- · 2019-03-25 03:39
把注释之类的写清楚呀
不然人家没耐心看下去呀

num在哪里复位清零的?

http://e2e.ti.com/support/microc ... /112214.aspx#398899
zch_genius
4楼-- · 2019-03-25 07:51
首先看看是不是测试方法有问题,其实你还可以通过在线调试一步步跟踪,测试外部输出。
其实你可以简单点做:控制一路输出,同时另一路取反就可以了。
t_shaojun126
5楼-- · 2019-03-25 11:16
 精彩回答 2  元偷偷看……
问路者
6楼-- · 2019-03-25 14:28
很简单的,用一个定时器就行了,CCR0来控制周期,两个捕获模块CCR1,CCR2来设置输出信号占空比及相位,输出模式应该是2吧,翻转/置位,忘了是哪个了,你可以再查查。这样你就可以在两个输出脚上得到90度相位的信号,不只90度,其他也可以得到。430定时器一个亮点就是pwm输出,能产生各种各样的信号供你选择。实际应用中很好用。

一周热门 更多>

相关问题

    相关文章