#include<msp430x14x.h>
unsigned int lastCCR0;
unsigned int i; //测得信号周期为j*(1/100k)
unsigned long int k,j; //测得信号占空比为k/j
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
TACTL = TASSEL0 + ID_3 + MC_2 + TACLR; //MCLK,8分频,连续计数,计数器清空
CCTL0 = CM_1 + CCIS_1 + SCS + CAP + CCIE; //上升沿,异步,捕获,捕获中断允许
k = 0;
lastCCR0 = 0;
P2DIR = 0xff;
P2OUT = 0x00;
_EINT();
for(;;)
{
for(i = 0;i < 20000;i ++);
P2OUT ^= 0x01; //产生捕获信号源
}
}
#pragma vector=TIMERA0_VECTOR //CCR0捕获产生中断
__interrupt void TIMER_cc(void)
{
if(SCCI == 0)
{
k += CCR0 - lastCCR0; //上下升沿间隔
lastCCR0 = CCR0;
j=k;
k=0;
}
}
#pragma vector=TIMERA1_VECTOR //定时器中断捕获
__interrupt void TIMER_A(void)
{
switch(TAIV)
{
case 2:break;
case 4:break;
case 10:k += 65536;
break;
}
}
unsigned int lastCCR0;
unsigned int i; //测得信号周期为j*(1/100k)
unsigned long int k,j; //测得信号占空比为k/j
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //停止看门狗
TACTL = TASSEL0 + ID_3 + MC_2 + TACLR; //MCLK,8分频,连续计数,计数器清空
CCTL0 = CM_1 + CCIS_1 + SCS + CAP + CCIE; //上升沿,异步,捕获,捕获中断允许
k = 0;
lastCCR0 = 0;
P2DIR = 0xff;
P2OUT = 0x00;
_EINT();
for(;;)
{
for(i = 0;i < 20000;i ++);
P2OUT ^= 0x01; //产生捕获信号源
}
}
#pragma vector=TIMERA0_VECTOR //CCR0捕获产生中断
__interrupt void TIMER_cc(void)
{
if(SCCI == 0)
{
k += CCR0 - lastCCR0; //上下升沿间隔
lastCCR0 = CCR0;
j=k;
k=0;
}
}
#pragma vector=TIMERA1_VECTOR //定时器中断捕获
__interrupt void TIMER_A(void)
{
switch(TAIV)
{
case 2:break;
case 4:break;
case 10:k += 65536;
break;
}
}