#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;ifor(j=0;j<10;j++)for(z=0;z<158;z++);#elseu16 i,j;for(i=0;ifor(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=1P1IES |= 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));}}
for(j=0;j<10;j++)
for(z=0;z<158;z++)
;
#else
u16 i,j;
for(i=0;ifor(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=1P1IES |= 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));}}
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=1P1IES |= 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));}}
_NOP();
void System_Clock_Init(void) //系统时钟源配置
/*------选择系统主时钟为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选择高频晶振
/*------选择系统主时钟为DCO1MHz-------*/
DCOCTL =0x00;
BCSCTL1 &=~0x07; //清零DCOx,MODx,RSELx位
DCOCTL |=DCO2+DCO1+MOD2+MOD1+MOD0; //DCO=6,MOD=7 BCSCTL1 |=RSEL2; //RSEL=4
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));