您当前的位置:五五电子网电子知识单片机-工控设备AVR单片机AVR的外部中断INT示例程 正文
AVR的外部中断INT示例程

AVR的外部中断INT示例程

点击数:7839 次   录入时间:03-04 12:01:58   整理:http://www.55dianzi.com   AVR单片机

使用AVR的外部中断INT1检测PD3Key,如果有按键按下,则唤醒休眠的MCU,并使它的PB口的LED做加1指示。

      #include <iom16v.h>
      #include "D:ICC_HCmmICC.H" 

      #define DISP_DDR DDRB
      #define DISP_PORT   PORTB
      #define IN_PD3  cbi(DDRD,3)  //PD3
      #define SET_PD3  sbi(PORTD,3)
      #define GET_PD3  gbi(PIND,3) 

      /*--------------------------------------------------------------------
      程序名称:外部中断服务程序
      程序功能:
      注意事项:
      提示说明:
      输    入:
      返    回:
      --------------------------------------------------------------------*/
      #pragma interrupt_handler int1_isr:3
      void int1_isr(void)
      {
       GICR &= 0b01111111;  // dISAble int1 interrupt
       DISP_PORT++;   // 显示口指示加1,指示被按次数
       delay50ms(4);
       GICR |= 0b10000000;   // enable int1 interrupt
      }
      /*--------------------------------------------------------------------
      程序名称:外部中断初始化程序
      程序功能:
      注意事项:
      提示说明:
      输    入:
      返    回:
      --------------------------------------------------------------------*/
      void int1_init()
      {
        IN_PD3;    // set PD3/INT1 as input
       SET_PD3;   // set PD3/INT1 as output,high level,avoid triggering
       MCUCR |= 0b11110011;  // set PD3/INT1 as low level active
       GICR  |= 0b10000000;  // enable global interrupt
       SEI();       // enable external interrupt
      }
      /*--------------------------------------------------------------------
      程序名称:
      程序功能:
      注意事项:
      提示说明:
      输    入:
      返    回:
      --------------------------------------------------------------------*/
      void main(void)
      {
       DISP_DDR  = 0xFF;
       DISP_PORT = 0x00;
       int1_init();
       asm("sleep");   // set mcu as sleep modle
       while(1);
      } 




本文关键字:暂无联系方式AVR单片机单片机-工控设备 - AVR单片机