本人想利用定时器的捕获模式触发LED2灯的亮灭,但不知为何中断怎么也无法进入(我用一根杜邦线,一端连上VCC,一端间接性地连上P1.2,以实现P1.2端电平的上升和下降),看了下相应管脚对应的信号源,P1.2对应的信号源为T0A1.CCI1A,这个应该是没错的。
这里向懂的朋友请教下,十分感谢!(用的是MSP430G2553芯片)
程序如下:
#include "msp430g2553.h"
unsigned char overflow;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;//关闭看门狗
P1DIR=BIT6;
P1OUT=BIT6;
P1SEL=BIT2; //
设置P1.2端口为功能模块使用,用来捕获信号的上升下降沿
DCOCTL=0;
BCSCTL1=CALBC1_1MHZ;
DCOCTL=CALDCO_1MHZ; //设置DCO为1MHZ
BCSCTL2 = SELM_1; //主时钟和从时钟都选择DCOCLK
TACTL |= TASSEL_2 + ID_0+TACLR+MC_2; //设置定时器的时钟源为SMCLK,并设置为不分频(1MHZ),连续计数模式,TAR清零
TA0CCTL1 |= CCIE+CAP+CM_1+CCIS_0+SCS; //中断使能,捕获模式,上升沿捕获,同步模式,捕获信号源选择为
CCI1A端口
_EINT();//全局开中断
while(1)
{
}
}
#pragma vector = TIMER0_A1_VECTOR
__interrupt void TimerA_ISRTWO(void)
{
switch(TA1IV) //向量查询
{ case 2: //捕获中断
if(TA1CCTL0&CM0) //上升沿
{
TA1CCTL0=(TA1CCTL0&(~CM0))|CM1; //更变设置为下降沿触发
overflow=0; //溢出计数变量复位
P1OUT|=BIT6; //实验板的LED2亮
TA0CCTL1&=~CCIFG; //清除中断标志
}
else if (TA1CCTL0&CM1) //下降沿
{
TA1CCTL0=(TA1CCTL0&(~CM1))|CM0; //更变设置为上升沿触发
TA1R=0;
overflow=0; //溢出计数变量复位
P1OUT&=~BIT6; //实验板的LED2灭
TA0CCTL1&=~CCIFG; //清除中断标志
}
break;
case 10: //定时器溢出中断
overflow++;
break; //溢出计数加1
default:break;
}
[
本帖最后由 WPD 于 2013-5-11 20:51 编辑 ]
此帖出自
小平头技术问答
一周热门 更多>