本人想用定时器A每1ms产生产生一个中断,让P1.6电平转换,从而是LED2每隔1ms闪烁一次
#include "msp430g2553.h"
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0x40;
P1OUT=0x00;
DCOCTL=0;
BCSCTL1=CALBC1_1MHZ;
DCOCTL=CALDCO_1MHZ; //设置DCO为1MHZ
BCSCTL2 = SELM_1; //主时钟和从时钟都选择DCOCLK
TACCTL0 = CCIE; //CCR0中断使能
TACCR0 = 1000; //设置定时器A每1ms中断一次
TACTL |= TASSEL_2 + ID_0+MC_1; //设置定时器A的时钟源为MCLK,并设置为不分频(1MHZ),增计数模式
//打开全局中断
_EINT();
while(1)
{
}
}
#pragma vector = TIMER0_A0_VECTOR
__interrupt void TimerA_ISR(void)
{
P1OUT^=0x40; //电平翻转
TACCTL0&=~CCIFG; //清除中断标志位
}
然后下载到板子上测试发现LED2的灯一直亮着,即P1.6一直是高电平
偶尔我把上面的一句代码 BCSCTL2 = SELM_1; //主时钟和从时钟都选择DCOCLK
改成 BCSCTL2 = SELM_1+0x08; //主时钟选择DCOCLK,辅助时钟选择高频晶振
LED2灯闪烁了,这就奇怪了,我没有外接高频晶振的,但辅助时钟选择高频晶振反而使程序对了,难道辅助时钟选择DCOCLK会出问题的?这没有道理的,本人很是疑惑,希望懂的人能详细解答下,十分感谢!
[
本帖最后由 WPD 于 2013-5-2 21:59 编辑 ]
此帖出自
小平头技术问答
一周热门 更多>