專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

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

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2011年06月19日   【字體:
/***************************************

  取自周興華《AVR單片機(jī)C語言高級(jí)程序設(shè)計(jì)》

  進(jìn)入INT1中斷的時(shí)候,再開啟全局中斷,

  這時(shí)候INT0中斷觸發(fā),可以形成中斷嵌套

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

  #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設(shè)置為輸入 即INT0,INT1

  MCUCR=0X0A; //INT1,INT0 設(shè)置為下降沿觸發(fā)

  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);

  }

  } 
關(guān)閉窗口

相關(guān)文章