如下为我从书上摘抄的程序(《
单片机原理及其应用详解》源程序),这个程序小弟看不懂,恳请大神指教~~~
#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;
}
}
此帖出自
小平头技术问答
一周热门 更多>