TI中文支持网
TI专业的中文技术问题搜集分享网站

定时器时钟定时一位时间与半位时间切换问题?

尊敬的工程师,你好!

我想用定时器的时钟实现一位与半位的时间转换,但是只测到一位的时间,不能测到半位的时间,代码如下,麻烦帮我看一下,谢谢!

void main()
{P1DIR |=BIT7;TD0CCTL0 |=CCIE;TD0CTL0=TDSSEL_2+MC_1;Time_int();while(1){;}
}
unsigned int select=0;
void Time_int()
{select++;if(select%2==1){Timer();}else{Timer_5();}if(select==1000){select=0;TD0CCTL0&=~CCIE;}
}
void Timer()
{TD0CCR0=873;
 __bis_SR_register(GIE);
}
void Timer_5()
{TD0CCR0=436;__bis_SR_register(GIE); 
}
#pragma vector=TIMER0_D0_VECTOR__interrupt void TIMER0_D0_ISR(void){P1OUT ^=BIT7;
 }
灰小子:

不懂你说的半位和一位时间是什么,半秒和一秒?

Jeff Wong1:

回复 灰小子:

数据位,一位就是数据位的一位时间,也就是波特率设置,

灰小子:

回复 Jeff Wong1:

void Timer()
{
 
  TD0CCR0=873;
 __bis_SR_register(GIE);
}
void Timer_5()
{
   TD0CCR0=436;
  __bis_SR_register(GIE);
}

不能同时给一个寄存器赋两个值的。或者你设定好条件,什么条件下定时一位时间,另一个条件定时半位时间。

Jeff Wong1:

回复 灰小子:

void Time_int()
{
  
  select++;
  if(select%2==1)
  {
    Timer();
  }
  else
  {
     Timer_5();
  }
  if(select==1000)
  {
    select=0;
    TD0CCTL0&=~CCIE;
  }
}
我是这样做的,选择的,但是只运行一次

灰小子:

回复 Jeff Wong1:

你用的那一款mcu?要根据具体的型号看寄存器配置是否正确了。

Jeff Wong1:

回复 灰小子:

MSP430f5172的,寄存器配置不应该存在问题!

灰小子:

回复 Jeff Wong1:

仔细看了一下你的程序,你程序的逻辑有问题。Time_int()在整个程序只执行了一次,该函数内的select++;也只执行了一次。你观察一下这个变量就清楚了。

Jeff Wong1:

回复 灰小子:

我之前加了一个死循环测试是没有用的!按理说加死循环可以的,但是加过死循环没有效果,所以撤了

赞(0)
未经允许不得转载:TI中文支持网 » 定时器时钟定时一位时间与半位时间切换问题?
分享到: 更多 (0)