为什么TI官网上没有430捕获的例程的?

2019-03-24 15:52发布

哪能找到捕获测频率的资料的,资料太少了 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
wwwwfh
1楼-- · 2019-03-24 20:49
 精彩回答 2  元偷偷看……
shuizhiqing
2楼-- · 2019-03-25 01:07
< :TI_MSP430_内容页_SA7 --> #include"msp430x14x.h"

#define uchar unsigned char
#define uint unsigned int
#define lint long int

unsigned int pwm_start,pwm_end,overflow;
float data,num ,fre=0.000;
long int  j=0;
uchar a[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F}; //0->9,共阴;
uchar num1,num2,num3,num4,num5,num6;


void delay(uint j) //延时函数
{ uint x,y;
for(x=j;x>0;x--)
for(y=50;y>0;y--);
}

void xianshi(float fre)//数码管动态显示函数(P2->位,P3->段)
{
lint tt,ttt,tttt,ttttt;
tt=(lint)fre; //整数部分
ttt=(lint)(fre*10);//第一位小数
tttt=(lint)(fre*100);//第二位小数
ttttt=(lint)(fre*1000);
num1=(tt/100)%10;
num2=(tt/10)%10;
num3=tt%10;
num4=ttt%10;
num5=tttt%10;
num6=ttttt%10;
P2OUT |= BIT0;//亮第一个数码管
P3OUT=a[num1];
delay(6);
P2OUT=0x00;
P2OUT = 0x02;//亮第二个数码管
P3OUT=a[num2];
delay(6);
P2OUT=0x00;
P2OUT = 0x04;//亮第三个数码管
P3OUT=a[num3];
P3OUT |=BIT7;//点亮小数点
delay(6);
P2OUT=0x00;
P2OUT = 0x08;//亮第四个数码管
P3OUT=a[num4];
delay(6);
P2OUT=0x00;
P2OUT = 0x10;//亮第五个数码管
P3OUT =a[num5];//第一位小数
delay(6);
P2OUT =0x00;
P2OUT = 0x20;//亮第六个数码管
P3OUT =a[num6];//第二位小数
delay(6);
P2OUT=0x00;
}


void main (void)
{
WDTCTL = WDTPW+WDTHOLD; //关闭看门狗定时器
P1SEL = BIT2; //设置P1.2端口为功能模块使用,CCI0A
P2DIR =0x3f; //位选
P3DIR =0xff; //段选
P2OUT =0x00;
P3OUT =0x00;

TACTL = TASSEL0+TACLR+TAIE+MC1; //定时器A时钟信号选择ACLK,同时设置定时器A计数模式为连续增计模式
CCTL1 = CM_3+SCS+CAP+CCIE+CCIS0; //捕获模式,上升和下降都捕获,CCI0A为捕获信号源

_EINT(); //中断允许
for(;;)
{
_BIS_SR(LPM0_bits + GIE);
_NOP();
data=(pwm_end-pwm_start+overflow*65536)*0.000125;
fre=1/(2*data);     // 频率
xianshi(fre);
}
}

// Timer_A3 Interrupt Vector (TAIV) handler
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A1(void)
{

switch(TAIV)
{case 2:
if(TACCTL1 & CCI)
pwm_start=CCR1;
else
pwm_end=CCR1;
break;
case 4:
break;
case 10: overflow++;
break;
}
LPM0_EXIT;
}

一周热门 更多>

相关问题

    相关文章