专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

ATmega16L-----外部中断0,1中断嵌套

作者:佚名   来源:本站原创   点击数:  更新时间:2011年06月19日   【字体:
/***************************************

  取自周兴华《AVR单片机C语言高级程序设计》

  进入INT1中断的时候,再开启全局中断,

  这时候INT0中断触发,可以形成中断嵌套

  ***************************************/

  #include<iom16v.h>

  #include<macros.h>

  #define uchar unsigned char

  #define uint unsigned int

  uint shu;

  /***************************************

  delay

  ****************************************/

  void delay_ms(uint k)

  {

  uint i,j;

  for(i=0;i<k;i++)

  for(j=0;j<570;j++);

  }

  /****************************************

  main

  ****************************************/

  void main(void)

  {

  DDRB=0xff;

  PORTB=0XFF;

  PORTD=0XFF;

  DDRD=0XF3; //将PD2,PD3设置为输入 即INT0,INT1

  MCUCR=0X0A; //INT1,INT0 设置为下降沿触发

  GICR=0XC0; //使能INT1,INT0 中断

  SREG=0X80; //使能总中断

  while(1)

  {

  PORTB=0X00;

  delay_ms(100);

  PORTB=0XFF;

  delay_ms(100);

  }

  }

  /*****************************************

  INT0 ISR

  *****************************************/

  #pragma interrupt_handler int0_isr:2

  void int0_isr(void)

  {

  for(shu=0;shu<5;shu++)

  {

  PORTB|= BIT(1);

  delay_ms(60);

  PORTB&=~BIT(1);

  delay_ms(60);

  }

  }

  /***************************************

  INT1 ISR

  ***************************************/

  #pragma interrupt_handler int1_isr:3

  void int1_isr(void)

  {

  SREG=0X80; //使能全局中断

  for(shu=0;shu<10;shu++)

  {

  PORTD|=BIT(7);

  delay_ms(100);

  PORTD&=~BIT(7);

  delay_ms(100);

  }

  } 
关闭窗口

相关文章