MSP430讨论区
返回
登录/注册
求利用定时器捕获模式和定时中断的测频程序
楼主
7225323 于 2011-07-26 16:07:42
求利用定时器捕获模式和定时中断的测频程序
[P]大哥大姐们,帮我看看这儿哪出问题了啊,仿真不能运行,出错误!!!!急求!!![/P][P] [/P][P] [/P][P]/*实现功能:测量外部信号的频率*/
#include <msp430x14x.h>
#include "cry12864.c"
#define uchar unsigned char
#define uint unsigned int
uint Cap_Tar,pulse,cap_last,cap_fist,time;[/P][P]struct result //定义结构类型
{
unsigned long product;
unsigned int sumext;
}MPYresult; //硬件乘法器结果 声明结构变量
unsigned int *p ; //指针声明 [/P][P]void xianshi(unsigned int i)
{
if(i<1000)
{
uint ptr[6],t1,t2,t3;
i=i*100;
ptr[0] = (i / 10000);
t1 = i - (ptr[0] * 10000);
ptr[1] = t1 / 1000;
t2 = t1 - (ptr[1] * 1000);
ptr[2] = t2 / 100;
t3 = t2 - (ptr[2]*100);
ptr[4] = t3 / 10;
ptr[5] = t3 - (ptr[4]*10);
ptr[3] = 0x2e;
ptr[0] = ptr[0]+48;
ptr[1] = ptr[1]+48;
ptr[2] = ptr[2]+48;
ptr[4] = ptr[4]+48;
ptr[5] = ptr[5]+48;
//在液晶上显示变换后的结果
Write_Cmd(0x9c);
for(i = 0;i < 6;i++)
Write_Data(ptr[I]);
}
else
if(i>1000 & i<10000)
{
uint ptr[6],t1,t2,t3;
i=i*10;
ptr[0] = (i / 10000);
t1 = i - (ptr[0] * 10000);
ptr[1] = t1 / 1000;
t2 = t1 - (ptr[1] * 1000);
ptr[2] = t2 / 100;
t3 = t2 - (ptr[2]*100);
ptr[3] = t3 / 10;
ptr[5] = t3 - (ptr[3]*10);
ptr[4] = 0x2e;
ptr[0] = ptr[0]+48;
ptr[1] = ptr[1]+48;
ptr[2] = ptr[2]+48;
ptr[3] = ptr[4]+48;
ptr[5] = ptr[5]+48;
//在液晶上显示变换后的结果
Write_Cmd(0x9c);
for(i = 0;i < 6;i++)
Write_Data(ptr[I]);
}
else
if(i>10000)
{
uint ptr[5],t1,t2,t3;
ptr[0] = (i / 10000);
t1 = i - (ptr[0] * 10000);
ptr[1] = t1 / 1000;
t2 = t1 - (ptr[1] * 1000);
ptr[2] = t2 / 100;
t3 = t2 - (ptr[2]*100);
ptr[3] = t3 / 10;
ptr[4] = t3 - (ptr[4]*10);
ptr[0] = ptr[0]+48;
ptr[1] = ptr[1]+48;
ptr[2] = ptr[2]+48;
ptr[3] = ptr[3]+48;
ptr[4] = ptr[4]+48;
//在液晶上显示变换后的结果
Write_Cmd(0x9c);
for(i = 0;i < 5;i++)
Write_Data(ptr[I]);
}
}
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR = 0x02;
P1SEL = BIT1;
TACTL = TASSEL_1+MC_2+TAIE+TACLR;
TACCTL0 = CM_1+CCIS_0+SCS+CAP+CCIE;
Cap_Tar=0;
cap_last=0;
cap_fist=0;
pulse=0;
time=0;
MPY=1/((1/32768)*time);
OP2=pulse;
p = (unsigned int*)&(MPYresult.product);
*p = RESHI;
MPYresult.product = SUMEXT;
Ini_Lcd();
xianshi(MPYresult.product);
_EINT();
//LPM3;
}[/P][P] [/P][P]
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA0(void)
{
if(Cap_Tar==0)
{
cap_fist = TACCR0;
Cap_Tar++;
}
else
{
cap_last = TACCR0;
Cap_Tar++;
}
} [/P][P]#pragma vector=TIMERA1_VECTOR
__interrupt void TimerA1(void)
{
switch(TAIV)
{
case 2: break;
case 4: break;
case 10:
if(Cap_Tar==0)
pulse=0;
else
{
pulse=Cap_Tar-1;
time = cap_last-cap_fist;
Cap_Tar=0;
TACTL &=~BIT0;
// BIC_SR_IRQ(LPM3_bits);
}
break;
}
}[/P][/I][/I][/I]
回复
1楼
DC 于 2011-07-26 18:47:05
[EM03]天啊,有这样问问题吗...;你这样提问使大家如何出手[EM59]
回复
2楼
7225323 于 2011-07-28 16:06:34
[P]测频程序 如何 调试啊[/P]
回复
3楼
DC 于 2011-07-28 20:45:07
大概预知测频范围,然后弄个方法输入相应的输入端。调试看看其结果....这些思路都得想得到吧。[EM52]
回复
1
电脑版
Page created in 0.5000 seconds width 3 queries.