频率测量,我用TA2CCR0捕获上升沿,为什么捕获值为负值,范围不应该是0—65535吗??这是我的程序。
#include <msp430f5529.h>
#include <stdint.h>
#include <stdio.h>
#include "Dogs102x6.h"
#define CPUF ((double)1048576)
#define delay_us(x) __delay_cycles((long)(CPUF*(double)x/1000000))
#define delay_ms(x) __delay_cycles((long)(CPUF*(double)x/1000))
#define delay_s(x) __delay_cycles(CPUF*x)
#define ulint unsigned long int
/*
* main.c
*/
ulint captar=0,pulse=0,time=0,tete;
long capfirst,caplast;
ulint t,f,flag=0;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
lcdinit();
P2DIR &= ~BIT3;
P2SEL |=BIT3;
//TA2CCTL2=CCIE; //捕获比较器2开启中断 TA0CCR2=26214;
//TA2CCR2=26214;
TA2CCTL0=CM_1+SCS+CCIS_0+CAP+CCIE;
TA2CTL=TASSEL_1+MC_2+TAIE;
_EINT();
while(1){
if(flag==1){
t=pulse;
//t=f;
//t=1234/55367*43768;
//f=(int)(t);
display(t);
flag=0;
Dogs102x6_stringDraw(5,5,"1",0);
//TA2CTL |= TAIE;
//delay_s(0.5);
TA2CTL |= TAIE;
}
}
}
#pragma vector = TIMER2_A0_VECTOR
__interrupt void TIMER2_A0 (void)
{
if(captar==0)
{
capfirst=TA2CCR0;
captar++;
}
else{
caplast=TA2CCR0;
captar++;
}
}
#pragma vector = TIMER2_A1_VECTOR
__interrupt void TIMER2_A1 (void)
{
//TA2CTL&=~TAIE;
switch(TA2IV){
case 14:{
if(captar==0)
pulse=0;
else{
//TA2CTL&= ~TAIE;
pulse=captar-1;
time=caplast-capfirst;
tete=capfirst-caplast;
//Dogs102x6_numDisplay(4,58,time,0);
//Dogs102x6_numDisplay(5,58,tete,0);
//Dogs102x6_numDisplay(6,58,capfirst,0);
//Dogs102x6_numDisplay(6,58,caplast,0);显示程序
captar=0;
flag=1;
}
break;
}
default:break;
}
//TA2CTL |= TAIE;
}