登录注册
论坛
一粒金砂(初级)
67
0
#include<msp430x14x.h> #define uint unsigned int #define uchar unsigned char uint str[100]={0}; uchar flag=0; float count=0; uint temp; void int_clk() { uchar i; BCSCTL1&=~XT2OFF;//打开XT振荡器 BCSCTL2|=SELM1+SELS;//MCLK=SMCLK 为8 MHz do { IFG1&=~OFIFG; for(i=0;i<100;i++) _NOP();//延时等待 } while((IFG1&OFIFG)!=0);//如果标志位为1,则继续循环等待 IFG1&=~OFIFG; } void int_cap() { P4SEL |=BIT1;//设置P4.1为外围模块端口 TBCCTL1|=CM0+SCS+CAP+CCIE;//上升沿触发捕捉,同步模式,使能中断 TBCTL|=TBSSEL1+MC1;//选择SMCLK为计数时钟,不分频 } #pragma vector=TIMERB1_VECTOR __interrupt void Timer_B(void) { switch(TBIV) { case 2:{flag=1;}//置捕捉标志为1 case 4:break; case 6:break; case 8:break; case 10:break; case 12:break; case 14:break; } } void main() { uchar temp=0; WDTCTL=WDTPW+WDTHOLD;//关看门狗 int_clk();//初始化时钟 int_cap();//初始化CAP _EINT(); while(1) { while(flag)//查询捕捉标志 { _DINT(); flag=0;//清零捕捉标志 str[temp]=TBCCR1;//读时间 temp++; if(temp==2) { count=str[1]-str[0];//保存第二次捕捉信号的时间差,计算出信号频率 str[0]=0; str[1]=0; temp=0; } _EINT(); } } }
扫一扫,分享给好友
76
71
一粒金砂(中级)
3
我也是遇到这样的问题。显示的数据也是变。但是变是有规律的变。一次显示正常数据,然后显示正常数据的一半。我现在初步考虑是溢出的问题,但是加上溢出直接显示为零了。
发表回复 回帖后跳转到最后一页
EEWorld Datasheet 技术支持
查看 »