msp430F149之定时器捕获部分,恳请大神指教

2019-03-24 10:10发布

如下为我从书上摘抄的程序(《
单片机原理及其应用详解》源程序),这个程序小弟看不懂,恳请大神指教~~~
#include <msp430x14x.h>
#define uchar unsigned char
#define uint  unsigned int  
uint i;
uint j;
uint k;
uint lastCCR0,lastCCR1;

void main()
{
          WDTCTL = WDTPW + WDTHOLD;
          TACTL = TASSEL_2 + ID_3 + MC_2 + TACLR;//这里的ID_3(定时器工作在连续计数模式),在这里有什么意义?   
          TACCTL0 = CM_3 + CCIS_0 + SCS + CAP + CCIE;//这里的CCIS_0(input select CCIxA),说明使用P1.2 P1.3
          TACCTL1 = CM_1 + CCIS_1 + SCS + CAP + CCIE;//那这里为什么使用CCIS_1(input select CCIxB),那后面为什么使用P3口,不是应该使用P4口吗?
          j = 0;
          k = 0;
          lastCCR0 = 0;
          lastCCR1 = 0;
          P1DIR = 0x00;
          P1SEL = 0xff;
          P3DIR = 0xff;
          P3OUT = 0x00;
          _EINT();
          while(1)
          {
                  for(i=0;i<10000;i++)
                  {
                          _NOP();
                  }
                  P3OUT &= ~BIT1;//这里的P3口通过软件产生的方波能被定时器A接收到?
          }
}

#pragma vector=TIMERA1_VECTOR
__interrupt void TIMER_A(void)
{
        switch(TAIV)
        {
                case  2:P3OUT &= ~BIT2;//TACCR1 CCIFG
                        j = CCR1 - lastCCR1;//j为两次上升沿的间隔
                        lastCCR1 = CCR1;
                        break;
                case  4:break;
                case 10:P3OUT &= ~BIT1;//前面都没有打开TAIE,这里TAIFG 中断会产生吗?
                             break;
        }
}

#pragma vector=TIMERA0_VECTOR//这里只能产生CC0中断
__interrupt void Timer_cc(void)
{
        if(SCCI == 0)//这个地方的SCCI是什么东西
        {
                k = CCR0 - lastCCR0;//上下升沿间隔
                lastCCR0 = CCR0;
        }
}







此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
liuchang---
1楼-- · 2019-03-24 11:07
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章