zoukankan      html  css  js  c++  java
  • 「ZigBee模块」基础实验(3)外部中断

    1.实现功能

    使用中断方式实现:

    按键KEY1按下LED1依次亮灭

    按键KEY2按下LED2依次亮灭

     

    2.元件连接方式

    P1_0连接LED1

    P1_1连接LED2

    P0_0连接KEY1

    P0_1连接KEY2

     

    3.中断相关寄存器

    PXIEN

    P0IEN

    P1IEN

    P2IEN

    地址

    0xAB

    0x8D

    0xAC

    PX[7:0] 各个控制口中断使能 (0:中断禁止 1:中断使能)

     

    PICTL

    D0~D3设置各个端口的中断触发方式(0:上升沿触发 1:下降沿触发)

    D7控制I/O引脚在输出模式下的驱动能力。选择输出驱动能力增强来补偿引脚DVDD的低I/O电压,确保在较低的电压下的驱动能力和较高电压下相同。(0:最小驱动能力增强 1:最大驱动能力增强。)

    PICTL

    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0

    地址0x8C

    IO驱动能力

    未使用

    P2_0-P2-4

    P1_4-P1_7

    P1_0-P1_3

    P0_0-p0_7

     

     

    PXIFG

    P0IFG

    P1IFG

    P2IFG

    地址

    0x89

    0x8A

    0x8B

    PX[7:0] 中断标志位,发生中断相应位置1

     

    IEN1——中断使能1(0:中断禁止 1:中断使能)

    IEN1

    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0

    地址0x80

    未用

    P0

    计数器4

    计数器3

    计数器2

    计数器1

    DMA

     

    IEN2——中断使能2(0:中断禁止 1:中断使能)

    IEN1

    D7

    D6

    D5

    D4

    D3

    D2

    D1

    D0

    地址0x9A

    未用

    看门狗

    P1

    USART1

    USART0

    P2

    PF通用

     

    4.部分代码分析

    外部中断初始化编程

    P0IEN |= 0X03;       //P0_0、P0_1 设置为中断方式
    PICTL |= 0X01;      // P0口下降沿触发
    IEN1 |= 0X20;       // 允许P0口中断;
    P0IFG = 0x00;      // 初始化中断标志位
    EA = 1;            //打开总中断

    5.完整代码

    #include <ioCC2530.h>
    
    #define uchar unsigned char
    #define uint  unsigned int
    
    //端口定义
    #define KEY1 P0_0
    #define KEY2 P0_1
    #define LED1 P1_0
    #define LED2 P1_1
    
    //函数声明
    void delayms(uint ms);    //延时函数
    void keyInit();           //按键初始化
    void ledInit();           //led初始化
    
    /*****************************
    延时函数
    *****************************/
    void delayms(uint ms)
    {
      uint i, j;
      for(i=ms; i>0; i--)
        for(j=578; j>0; j--);
    }
    
    /*****************************
    按键初始化
    *****************************/
    void keyInit()
    {
      P0IEN |= 0X03;       //P0_0、P0_1 设置为中断方式
      PICTL |= 0X01;      //P0口下降沿触发
      IEN1 |= 0X20;       //允许P0口中断;
      P0IFG = 0x00;           //初始化中断标志位
      
      P0SEL &= ~0x03;
      P0DIR &= ~0x03;
      P0INP &= ~0x03;
      
      EA = 1;                 //打开总中断
    }
    
    /*****************************
    led初始化
    *****************************/
    void ledInit()
    {
      P1SEL &= ~0x03;
      P1DIR |= 0x03;
      P1INP &= ~0x03;
      
      LED1 = 0;
      LED2 = 0;
    }
    
    /*****************************
    主函数
    *****************************/
    void main()
    {
      ledInit();
      keyInit();
      while(1);
    }
    
    /*****************************
    中断函数
    *****************************/
    #pragma vector = P0INT_VECTOR     //格式:#pragma vector = 中断向量,
    __interrupt void P0_ISR(void)     // 紧接着是中断处理程序
    {
      delayms(10);
      if(KEY1 == 0)
      {
        while(!KEY1);
        LED1 = !LED1;
      }
      if(KEY2 == 0)
      {
        while(!KEY2);
        LED2 = !LED2;
      }
      P0IFG &= ~0x03; //清中断标志
      P0IF = 0;      //清中断标志
    }
  • 相关阅读:
    如何上传整个项目或者是文件夹到github
    阅读笔记16-架构师推荐:提高90%开发效率的工具推荐
    阅读笔记15-这些普通的程序猿,如今都已进阶成为技术大佬
    python爬虫——爬取淘票票正在热映电影
    阅读笔记12-Java 面试题 —— 老田的蚂蚁金服面试经历
    SOA架构设计案例分析
    阅读笔记11-孤独后厂村:30万互联网人跳不出的中国硅谷
    阅读笔记09-Java程序员必备的Intellij插件
    阅读笔记08-程序员依然是这个时代,贫寒学子翻身的不二选择
    os.path.join()
  • 原文地址:https://www.cnblogs.com/Donut/p/4123345.html
Copyright © 2011-2022 走看看