文档库 最新最全的文档下载
当前位置:文档库 › msp430f149 外部中断

msp430f149 外部中断

msp430f149 外部中断
msp430f149 外部中断

#include

//#define Exterior_8MHz 0x55 //MCLK和SMCLK选择外部8M高频晶振

#define u8 unsigned char

#define u16 unsigned short

#define u32 unsigned long

void Delay_ms(u16 Time) //软件ms延时,1MHz频率下

{

#ifdef Exterior_8MHz

u16 i,j,z;

for(i=0;i

for(j=0;j<10;j++)

for(z=0;z<158;z++)

;

#else

u16 i,j;

for(i=0;i

for(j=0;j<200;j++)

;

#endif

}

void Delay_us( u16 Time ) //软件us延时,1MHz频率下

{

u16 i;

for(i=0;i

{

_NOP();

_NOP();

}

}

void System_Clock_Init(void) //系统时钟源配置

{

#ifdef Exterior_8MHz

/*------选择系统主时钟为8MHz-------*/

u8 z;

BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器

do

{

IFG1 &= ~OFIFG; //清除晶振失败标志

for (z = 0xFF; z > 0; z--); //等待8MHz晶体起振

}

while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?

BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振

#else

/*------选择系统主时钟为DCO1MHz-------*/

DCOCTL =0x00;

BCSCTL1 &=~0x07; //清零DCOx,MODx,RSELx位

DCOCTL |=DCO2+DCO1+MOD2+MOD1+MOD0; //DCO=6,MOD=7 BCSCTL1 |=RSEL2; //RSEL=4

#endif

}

void main(void)

{

WDTCTL = WDTPW + WDTHOLD; //关闭看门狗

System_Clock_Init();

P4DIR = BIT0+BIT1+BIT2+BIT3; //P4.0,P4.1,P4.2,P4.3设置输出

P4OUT |= BIT0+BIT1+BIT2+BIT3; //P4.0~P4.3=1

P1IES |= BIT0; //P1.0下降沿触发

P1IE |= BIT0; //P1.0中断允许

P1DIR &= ~BIT0; //P1.0设置输入

_EINT(); //打开全局中断控制位

while(1)

{

}

}

/**/

#pragma vector=PORT1_VECTOR

__interrupt void PORT1_ISR(void)

{

P1IFG &= ~BIT0; //清除P1.0中断标志位

Delay_ms(5);

if(!(P1IN & BIT0))

{

P4OUT ^= BIT0+BIT1+BIT2+BIT3;

while(!(P1IN & BIT0));

Delay_ms(5);

while(!(P1IN & BIT0));

}

}

相关文档