- #include <msp430.h>
- #define uint unsigned int
- uint start=0;end1=0;end2=0;m=0;n=0;
- unsigned char i=0;overflow1=0;overflow2=0;overflow3=0;
- int flag=0;
- //float t=0;
- void main(void)
- {
- WDTCTL = WDTPW | WDTHOLD; // Stop watchdog timer
- DCOCTL = CALDCO_16MHZ; // 调取出厂校准后存储在Flash中的参数
- BCSCTL1 = CALBC1_16MHZ; // BCSCTL3参数默认不用设
- P1DIR |=BIT0;
- Time_init();
- while(flag)
- {
- m=overflow2*32768+(end1-start);
- n=overflow3*32768+(end2-start);
- // t=m/n*pi;
- }
- _enable_interrupts(); //使能总中断
- _bis_SR_register(CPUOFF); //LPM3方式休眠
- }
- void Time_init()
- {
- // BCSCTL3|=LFXT1S_0;
- P1SEL |= BIT2; //设置P1.2端口为功能模块使用
- P1DIR &= ~BIT2;
- CCTL1 |=CM_3+SCS+CAP+CCIE; //输入上升沿捕获,同步,capture模式 CCI0A为捕获信号源,中断使能
- TACCTL1 &=~CCIFG; //清CCR1 的标志位
- TACTL |=TACLR;
- TACTL |= TASSEL_1+TAIE+MC_2; //定时器A时钟信号选择ACLK ,清计数寄存器,使能中断,同时设置定时器A计数模式为连续增计模式
- }
- #pragma vector=TIMER0_A1_VECTOR
- __interrupt void timer_A0(void)
- {
- P1OUT ^= 0x01;
- switch(TAIV) //向量查询
- {
- case 2: //捕获中断
- flag=1;
- if(CCTL1&CM0) //上升沿
- {
- i++;
- if(i==1)
- {
- CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发
- start=TACCR1; //记录初始时间
- // overflow1=0; //溢出计数变量复位
- }
- if(i==2)
- {
- CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发
- end2=TACCR1; //记录初始时间
- overflow3=overflow1;
- i=0;
- overflow1=0; //溢出计数变量复位
- }
- }
- else if(CCTL1&CM1) //下降沿
- {
- CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发
- end1=TACCR1; //用start,end,overflow计算脉冲宽度
- overflow2=overflow1;
- TACTL &=~TAIE; //不使能中断
- CCTL1 &=~CCIE;
- P1SEL &=~BIT2;
- _DINT();
- LPM0_EXIT;
- }
- break;
- case 10: //定时器溢出中断
- overflow1++;
- break; //溢出计数加1
- default:break;
- }
- }
复制代码刚刚接触430,写了一个测相位的程序,但是为什么定时器捕获进不去中断,是不是哪里设置有错误,求大神帮忙看看,谢谢
此帖出自
小平头技术问答
一周热门 更多>