msp430G2553的定时器捕获中断进不去,求高手指点,
#include<msp430g2553.h>voidmain(){WDTCTL=WDTPW+WDTHOLD;DCOCTL|=CALDCO_16MHZ;BCSCTL1|=...
#include <msp430g2553.h>
void main()
{
WDTCTL = WDTPW + WDTHOLD;
DCOCTL |= CALDCO_16MHZ;
BCSCTL1 |= CALBC1_16MHZ;
P1DIR &=~BIT1;
P1SEL |= BIT1;
TA0CTL |= TACLR + TASSEL_2 + MC_2;
TA0CCTL1 |= CAP + CM_3 + CCIS_0 + SCS + CCIE;
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
_EINT();
while(1);
}
#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer1_A0()
{
if(TA0CTL&TAIFG) //判断是否计数溢出
{
P1DIR |= BIT0;
P1OUT ^= BIT0;
TA0CTL&=~TAIFG; //清除计数溢出中断标志
}
}
这个程序哪里出错了,为什么进不去啊!谢谢了 展开
void main()
{
WDTCTL = WDTPW + WDTHOLD;
DCOCTL |= CALDCO_16MHZ;
BCSCTL1 |= CALBC1_16MHZ;
P1DIR &=~BIT1;
P1SEL |= BIT1;
TA0CTL |= TACLR + TASSEL_2 + MC_2;
TA0CCTL1 |= CAP + CM_3 + CCIS_0 + SCS + CCIE;
_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
_EINT();
while(1);
}
#pragma vector=TIMER1_A0_VECTOR
__interrupt void Timer1_A0()
{
if(TA0CTL&TAIFG) //判断是否计数溢出
{
P1DIR |= BIT0;
P1OUT ^= BIT0;
TA0CTL&=~TAIFG; //清除计数溢出中断标志
}
}
这个程序哪里出错了,为什么进不去啊!谢谢了 展开
2个回答
展开全部
我这里就有一个捕获的程序,你看看。如果你的设置没问题的话就应该是没有进行初始化。
#include<msp430x14x.h>
#define BHSEL P2SEL //定义捕获端口
#define BH_IO BIT2
void InitSys()
{
unsigned int iq0;
//使用XT2振荡器
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG;// 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--);// 延时,等待XT2起振
}while ((IFG1 & OFIFG) != 0);// 判断XT2是否起振
BCSCTL2 =SELM_2+SELS;//选择MCLK、SMCLK为XT2
_EINT();//打开全局中断控制,若不需要打开,可以屏蔽本句
}
void InitBhTimerA() //初始化
{
TACTL = TASSEL_2+ID_3+TACLR;//定时器A,时钟源:ACLK,连续计数模式
CCTL0 = CCIS_1+CM_2+CAP;//选择上降沿捕获,CCIB(P2.2)为信号源,
BHSEL |= BH_IO; //选择P2.2使用第二功能
TACTL |= MC_2+TACLR;//打开计数器
CCTL0 |= CCIE; //捕获中断允许
InitSys();
}
void main(void)
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
InitBhTimerA();
while(1)
{
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA0()
{
_EINT();
}
#include<msp430x14x.h>
#define BHSEL P2SEL //定义捕获端口
#define BH_IO BIT2
void InitSys()
{
unsigned int iq0;
//使用XT2振荡器
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG;// 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--);// 延时,等待XT2起振
}while ((IFG1 & OFIFG) != 0);// 判断XT2是否起振
BCSCTL2 =SELM_2+SELS;//选择MCLK、SMCLK为XT2
_EINT();//打开全局中断控制,若不需要打开,可以屏蔽本句
}
void InitBhTimerA() //初始化
{
TACTL = TASSEL_2+ID_3+TACLR;//定时器A,时钟源:ACLK,连续计数模式
CCTL0 = CCIS_1+CM_2+CAP;//选择上降沿捕获,CCIB(P2.2)为信号源,
BHSEL |= BH_IO; //选择P2.2使用第二功能
TACTL |= MC_2+TACLR;//打开计数器
CCTL0 |= CCIE; //捕获中断允许
InitSys();
}
void main(void)
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
InitBhTimerA();
while(1)
{
}
}
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA0()
{
_EINT();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
意法半导体(中国)投资有限公司
2023-06-12 广告
2023-06-12 广告
STM32F103是一款高性能的嵌入式芯片,由意法半导体(STMicroelectronics)公司生产。它是STM32系列芯片之一,具有紧凑、低功耗、高性能等特点,被广泛应用于嵌入式系统中。STM32F103的主要特点包括:1. 集成了A...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询