标题:
新手求助MSP430单片机定时器时间不准问题
[打印本页]
作者:
mming
时间:
2018-9-15 11:42
标题:
新手求助MSP430单片机定时器时间不准问题
请教坛里各位资深前辈、老师们,帮我看看为什么我配置的定时器时间不准,开发板是149,高速晶体为8M,P2.7连接LED,利用定时器A实现每隔num2秒,LED翻转一次。现在的问题就是如果计数模式我设置成MC_1增计数,定时器直接进不了中断,或者只能进入一次,再就是我配置为连续计数模式后,主程序里放的位置不同,LED的闪烁时间就不同,不知道什么原因,在此感激各位前辈!
void main()
{
WDTCTL = WDTPW + WDTHOLD;
CLOCK_Init();
PORT_Init();
/*
TACTL = TASSEL_2 + ID_3 + MC_2 + TAIE + TACLR; // 这段注释的定时器配置放在此处和放在主程序while()里,
CCTL1 = CCIE; // P2.7端口LED的闪烁时间不一样
CCR1 = 9999; */
_EINT();
while(1)
{
TACTL = TASSEL_2 + ID_3 + MC_2 + TAIE + TACLR; // 8M 晶体 8分频 连续计数
CCTL1 = CCIE;
CCR1 = 9999; // CCR1 为 定时0.01秒
KEY_SCAN(); //按键检测
KEY_service(); //按键服务函数
Display_service(); //显示服务函数
Display(); //显示函数
if(t == num2) //num2 是时间设定显示函数里的变量,可以任意取值,num2 =1就是1秒,等于X就是X秒
{
t=0;
P2OUT ^= BIT7;
}
}
}
#pragma vector = PORT1_VECTOR // P2.0中断函数
__interrupt void P1_Interrupt()
{
P1IFG=0X00;
PULSE++;
P2OUT ^= 0X01;
_DINT();
}
#pragma vector = TIMERA1_VECTOR
__interrupt void TIMEA1()
{
switch(TAIV)
{
case 2: t++; if(t>num2) t=0; break;
case 4: break;
case 10: break;
}
}
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1