尊敬的工程师,你好!
我想用定时器的时钟实现一位与半位的时间转换,但是只测到一位的时间,不能测到半位的时间,代码如下,麻烦帮我看一下,谢谢!
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:
回复 灰小子:
我之前加了一个死循环测试是没有用的!按理说加死循环可以的,但是加过死循环没有效果,所以撤了