|
以P2.1作为捕获输入口,如下程序可以实现对P2.1口的脉冲计数
注意看中断处的设置
#include
long int mmm=0,n=0;
void main (void)
{
WDTCTL = WDTPW+WDTHOLD; //关闭看门狗定时器
//P1SEL = 0xff; //设置P1.2端口为功能模块使用
P2SEL = 0xff;
///////////////////////////////////
P1DIR |= 0x01;
P1OUT &= 0x00;
///////////////////////////////////
TA1CTL = TASSEL_2+TACLR+TAIE+MC_2; //定时器A时钟信号选择ACLK,同时设置定时器A计数模式为连续增计模式
TA1CCTL1 = CM0+SCS+CAP+CCIE+CCIS_0; //输入上升沿捕获,CCI0A为捕获信号源
TA1CCR1=0xffff;
_EINT(); //中断允许
while(1)
{
/////////////////////////////这一部分将来正式程序中可以去掉的
volatile unsigned int i;
if((0x08 & P1IN))
n++;
else n--;
P1OUT ^= 0x01; // Toggle P1.0 using exclusive-OR
i =50; // Delay
do (i--);
while (i != 0);
}
///////////////////////////////这一部分将来正式程序中可以去掉的
}
#pragma vector=TIMER1_A1_VECTOR //定时器A中断处理
__interrupt void timer_a(void)
{
switch(TA1IV) //向量查询
{ case 2: //捕获中断
if ((0x08 & P1IN)) mmm++; // if P1.3 set, set P1.0
else mmm--;
break;
}
} |
|