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

ATmega16L-外部中斷1例程

作者:佚名   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2011年06月21日   【字體:
/***************************************
//取自周興華的《AVR單片機(jī)C語言高級程序設(shè)計(jì)》

程序現(xiàn)象:PB口上的8個(gè)燈一直同時(shí)閃爍。
當(dāng)按下接在PD7的一個(gè)按鍵時(shí), 接在PD3的一個(gè)小燈開始閃爍
PD3對應(yīng)于INT1. 閃了十次之后,PB上的燈繼續(xù)閃
本例子應(yīng)用了中斷。   
***************************************/

#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;
 
 DDRD=0XF7;  //INT1設(shè)為輸入
 PORTD=0XFF; 
 
 MCUCR=0X08; //INT1設(shè)置為下降沿觸發(fā)
 GICR=0X80;  //使能INT1中斷
 SREG=0X80;  //使能總中斷
 
 while(1)
 {
   PORTB=0X00;
   delay_ms(100);
   PORTB=0XFF;
   delay_ms(100);
 }
}

/***************************************
                ISR
***************************************/
#pragma interrupt_handler int1_isr:3
void int1_isr(void)
{
  for(shu=0;shu<10;shu++)
  {
   PORTD|=BIT(7);
   delay_ms(100);
   PORTD&=~BIT(7);
   delay_ms(100);
  }
}

關(guān)閉窗口

相關(guān)文章