002: MSP430外部中断P1端口中断运用
1 #include <msp430f169.h> 2 #define uint unsigned int 3 #define uchar unsigned char 4 /* 5 * 软件延时 6 */ 7 #define CPU_F ((double)8000000) //外部高频晶振8MHZ 8 #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) 9 #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) 10 /* 11 * 关闭看门狗 12 */ 13 void init_WDT() 14 { 15 WDTCTL = WDTPW + WDTHOLD;//关看门狗 16 } 17 /* 18 * IO端口配置 19 */ 20 void init_IO(){ 21 P1SEL |=BIT1; //P1.0普通IO功能 22 P1DIR &=~BIT0; //P1.0输入模式,外部电路已接上拉电阻 23 P1IE |=BIT0; //开启P1.0中断 24 P1IES |=BIT0; //下降沿触发中断 25 P1IFG &=~BIT0; //软件清零中断标志寄存器 26 P6DIR = 0xff; 27 } 28 /* 29 * 时钟初始化 30 */ 31 void init_clk(){ 32 uchar i; 33 BCSCTL1 &=~XT2OFF; 34 BCSCTL2 |=SELM1+SELS; 35 do{ 36 IFG1 &=~OFIFG; 37 for(i=0;i<100;i++){ 38 _NOP(); 39 } 40 }while((IFG1&OFIFG)!=0); 41 IFG1 &=~OFIFG; 42 } 43 /* 44 * P1端口中断函数 45 */ 46 #pragma vector = PORT1_VECTOR 47 __interrupt void LED(void){ 48 uchar j,k=1; 49 if(P1IFG&BIT0){ //P1.0触发中断 50 for(j=0;j<8;j++) 51 { 52 P6OUT = ~k;//反相输出,低电平点亮LED 53 delay_ms(300);//延时 54 k=k<<1;//左移一位 55 } 56 P1IFG &=~BIT0; 57 } 58 } 59 /* 60 * 主函数 61 */ 62 void main(){ 63 init_WDT(); 64 init_clk(); 65 init_IO(); 66 _EINT(); // 开启总中断 67 while(1){ 68 P6OUT = 0xaa; 69 } 70 }
【人生没有白走的路,每一步都算数!】

浙公网安备 33010602011771号