|
msp430F149之定时器捕获部分,恳请大神指教
[复制链接]
如下为我从书上摘抄的程序(《
单片机原理及其应用详解》源程序),这个程序小弟看不懂,恳请大神指教~~~
#include
#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;
}
}
|
|