这是我的中断函数 #pragma vector=TIMERA1_VECTOR __interrupt void TIMER_a(void) { switch(TAIV) { case 2: if(CCTL1&CM0) //上升沿 { CCTL1=(CCTL1&(~CM0)... 这是我的中断函数
#pragma vector=TIMERA1_VECTOR
__interrupt void TIMER_a(void)
{
switch(TAIV)
{
case 2:
if(CCTL1&CM0) //上升沿
{
CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发
start=CCR1; //记录初始时间
t=0; //溢出计数变量复位
}
else if (CCTL1&CM1) //下降沿
{
CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发
end=CCR1; //用start,end,t计算脉冲宽度
xianshi(t,end,start);
}
//pCCR1=65535*t+end-start;
//for(;;)
break;
case 4: break;
case 10: t=t+1;break;
}
}
这个是显示函数
void xianshi(t,end,start)
{
fre=65535*t+end-start;
write_cmd(0x88);
write_data(num[fre/100000]);
write_cmd(0x89);
write_data(num[fre%100000/10000]);
write_cmd(0x8A);
write_data(num[fre%10000/1000]);
write_cmd(0x8B);
write_data(num[fre%1000/100]);
write_cmd(0x8C);
write_data(num[fre%100/10]);
write_cmd(0x8D);
write_data(num[fre%10]);
}
现在的问题是不管给多少频率,显示都不变。我不知道问题出在了哪里。。。。希望会的人帮帮忙,谢谢了
大的框架瞅过去,做不了高频的,我知道的有两点,一个是如楼上所说改CCTL,一个是显示的算法,除法是Z费时间的。尤其是用的高频晶振如8M的基本上就没有用了。可以考虑捕获模式。细节的问题就要检查参数类型会不会溢出这些