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 }

 

【人生没有白走的路,每一步都算数!】

posted @ 2018-09-17 13:09  xiaobingzzh  阅读(913)  评论(0)    收藏  举报