msp430实现两路捕获出错,用过的朋友们帮忙看看。MSP430
本帖最后由 leonlhf 于 2010年11月11日 16:51 编辑
为了实现两路捕获,写了个简单的实验程序,可是老是出错,不知道原因。
程序大意是,一共有3个LED灯,其中一个不断的闪烁,表示主程序在运行。另两个分别表示代表两路捕获,捕获成功后,LED就会取反。问题是,只有CCI0A路捕获能正常工作,而CCI1A一旦捕获后,所有的LED都不再变化,就好像死机了一样。
大家帮我检查下吧。程序如下,感觉是很简单的程序,可就是找不到原因,头疼中。。。
- #include <msp430x14x.h>
- void delay(int x)
- {
- while(x--);
- }
- void main(void)
- {
- WDTCTL = WDTPW + WDTHOLD; // 停止看门狗
- P4DIR = 0XFF; // P4 为输出
- P4OUT = 0XFF; //初始值为1,使LED灯灭
- P1SEL = 0xff; //P1 为外部功能,用于捕捉
- TACTL = TASSEL_1 + MC_2; // ACLK为时钟源,连续模式
- TACCTL0 |= 0x4000; //上升沿捕获
- TACCTL0 |= CAP; //捕获模式
- TACCTL0 |= CCIE; //捕获中断使能
- TACCTL0 &= 0XCFFF; //输入为CCI0A路
- TACCTL1 |= 0x4000; //上升沿捕获
- TACCTL1 |= CAP; //捕获模式
- TACCTL1 |= CCIE; //捕获中断使能
- TACCTL1 &= 0XCFFF; //输入为CCI1A路
- _EINT(); //开总中断
- while(1)
- {
- P4OUT ^=BIT3; //取反P4.3,LED灯闪烁,示意主程序运行中
- delay(10000);
- }
- }
- //***********************************************************************
- // Timer A0 中断服务程序, A0是指CCR0
- #pragma vector=TIMERA0_VECTOR
- __interrupt void Timer_A0 (void)
- {
- P4OUT ^= BIT0; // CCI0A路捕获后,LED闪烁
- }
- //***********************************************************************
- // Timer A3 中断服务程序, A3是指CCR1,CCR2,TAR
- #pragma vector=TIMERA1_VECTOR
- __interrupt void Timer_A1(void)
- {
- P4OUT ^= BIT1; // CCI1A路捕获后,LED闪烁
- }
|
|