• 外部中断作业应用


    直接上代码

     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点亮和熄灭。

    需要注意是

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

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

  • 相关阅读:
    map 取最大value
    tmux 常用快捷键
    史蒂夫 乔布斯(Steve Jobs)在 Stanford 2005年毕业典礼上的演讲(中英文对照)
    黄聪:WordPress后台添加侧边栏菜单(WP教程add_menu_page)
    黄聪:ASP.NET AJAX入门系列(1) AjaxControlToolkit安装篇
    黄聪:ASP.NET AJAX入门系列(2) Accordion控件
    黄聪:wordpress调用函数大全
    黄聪:使用Wordpress中的wpdb类操作数据库
    黄聪:C#的Microsoft图表控件
    黄聪:如何写出兼容性强的CSS代码,适应各种浏览器:IE、火狐等
  • 原文地址:https://www.cnblogs.com/yuling520/p/12679444.html
Copyright © 2020-2023  润新知