2019-08-07 14:27发布
vivilzb1985 发表于 2013-12-10 23:51 弱弱的问一下的。楼主你这是什么型号的单片机或Arm的啊?
yc_2503 发表于 2013-12-11 00:03 不用捕获可以么 直接把外部的脉冲当时钟来计数可以么
最多设置5个标签!
MSP430G2553哎
//#include <msp430x14x.h>
#include <msp430G2553.h>
#include "in430.h"
typedef unsigned char uchar;
typedef unsigned int uint;
uint temp=0x00;
void InitClock();
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
InitClock();
P1SEL |= BIT0;
P1DIR=0Xfe;
// P2DIR=0XFC; //P1、0、1、2、3用作输入端
// P2OUT=0XC0;
P1OUT= 0xff;
CCTL0=CCIE;
CCR0=10;
TACTL=TASSEL_0+MC_1; //子系统时钟,增计数模式
//TACTL = TASSEL_2 + MC_2 + TAIE; // SMCLK, contmode, interrupt
//_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt
//P1OUT=0x00;
_EINT();
for(;;)
{
}
}
/*****************************************************************************
函数名称:Time_A
功能: 定时器A中断服务子程序
参数: 无
返回值: 无
******************************************************************************/
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Time_A(void)
{
//if(temp==0xff+1)
// temp=0x00;
//while(keyAct());
P1OUT^=BIT3;
}
// Timer_A3 Interrupt Vector (TAIV) handler
/*
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A(void)
{
switch( TAIV )
{
case 2: break; // CCR1 not used
case 4: break; // CCR2 not used
case 10: P4OUT ^= BIT5; // overflow
break;
}
}
*/
/*
// Timer A0 interrupt service routine
#pragma vector=TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
P4OUT ^= BIT5; // Toggle P3.4
}
*/
/************************************
函数名:InitClock
功能: 初始化时钟
参数: 无
返回值:无
************************************/
void InitClock()
{
unsigned int oscdly;
BCSCTL1&=~XT2OFF; //清XT2,使XT2振荡器有效
do
{
IFG1&=~OFIFG; //清OFIFG
oscdly=5;
while(oscdly--);
}
while(IFG1&OFIFG);
DCOCTL|=DCO0+DCO1+DCO2;
BCSCTL1|=RSEL1+RSEL2+RSEL0;
*/
BCSCTL2|=SELM_2+SELS; //SMCLK AND MCLK USING XT2
}
这是刚刚写的 然后 第一次跑的时候很正常。。。然后过了几分钟之后 再跑就不对了 用仿真器来单步调会发现TAR莫名的清零了。。。
没见过这样用的
一周热门 更多>