外部中断作业应用

直接上代码

 1 #include "ioCC2530.h"
 2 
 3 #define D3  P1_0
 4 #define D4  P1_1
 5 #define D5  P1_3
 6 #define D6  P1_4
 7 
 8 /*=======================简单的延时函数========================*/
 9 void Delay(unsigned int t)
10 {
11   while(t--);
12 }
13 /*======================端口初始化函数========================*/
14 void Init_Port()
15 {
16   P1SEL &= ~0x1b;    //P1_0、P1_1、P1_3和P1_4作为通用I/O端口   0001 1011->1110 0100
17   P1DIR |= 0x1b;    //P1_0、P1_1、P1_3和P1_4端口输出 0001 1011
18  
19   P1SEL &= ~0x04;     //P1_2作为通用I/O端口  0000 0100->1111 1011 
20   P1DIR &= ~0x04;     //P1_2端口输入   1111 1011 输入
21   P1INP &= ~0x04;     //P1_2设置为上拉/下拉模式 1111 1011 下拉模式
22   P2INP &= ~0x40;     //P1_2设置为上拉   0100 0000->1011 1111 端口1的选择 0为上拉
23   
24   D3 = 0;          //默认关闭
25   D4 = 0;          
26   D5 = 0;           
27   D6 = 0; 
28 }
29 
30 /*========================灯光闪烁函数=========================*/
31 void LED_Running()    //流水灯函数  D3闪烁
32 {
33   D3 = ~D3;  
34   Delay(60000);
35 }
36 
37 /*====================外部中断初始化函数======================*/
38 void Init_INTP1()
39 {
40   IEN2 |= 0x10;     //使能P1端口组外部中断(IEN2不能位操作)0001 0000
41   P1IEN |= 0x04;    //使能P1_2引脚外部中断  0000 0100   P1_2使能中断
42   PICTL &= ~0x02;   //配置P1_0到P1_3上升沿触发 0000 0010->1111 1101  0为上升沿
43   EA = 1;           //打开总中断
44 }
45 
46 /*=====================外部中断服务函数=======================*/
47 #pragma vector = P1INT_VECTOR
48 __interrupt void INTP1_Service()
49 {
50   if((P1IFG & 0x04) == 0x04)    //判断是否P1_2引脚产生中断
51   {
52     D6 = ~D6;
53     P1IFG &= ~0x04;             //清除P1_2引脚中断标志
54   }
55   P1IF = 0;                     //清除P2端口组中断标志
56 }
57 
58 /*==========================主函数============================*/
59 void main()
60 {
61   Init_Port();        //端口初始化
62   Init_INTP1();       //初始化外部中断
63   while(1)
64   {
65     LED_Running();    //运行灯光闪烁主程序
66   }
67 }

本题目的意思为:模块上SW1(P1_2)按键设置为外部中断输入引脚。
在中断服务函数中,控制一个LED6灯的开关切换,也就是原来LED是点亮的熄灭,原来熄灭的点亮。
同时在主程序中,运行一段跑马灯程序,使LED3点亮和熄灭。

需要注意是

要在中断服务函数中把相应的中断标志位清除。必须先清除引脚的中断标志,再清除端口组的中断标志。否则会不断进入中断。

还有就是在外部中断服务函数中添加判断引脚是否产生中断。

原文地址:https://www.cnblogs.com/yuling520/p/12679444.html