專注電子技術學習與研究
當前位置:單片機教程網(wǎng) >> MCU設計實例 >> 瀏覽文章

atmege16外部中斷程序

作者:韓冰   來源:本站原創(chuàng)   點擊數(shù):  更新時間:2013年11月29日   【字體:

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

功能:演示ATMEGA16的3個外部中斷程序

編輯環(huán)境:ICCAVR

 

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

 

#include<iom16v.h>

#include<macros.h>

 

#define uint unsigned int

#define uchar unsigned char

 

#define beep_0 (PORTD&=~(1<<PD7))

#define beep_1 (PORTD|=(1<<PD7))

//蜂鳴器響

uint count;

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

三個外部中斷聲明,注意中斷向量號

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

#pragma interrupt_handler Exint0:2

#pragma interrupt_handler Exint1:3

#pragma interrupt_handler Exint2:19

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

系統(tǒng)延時函數(shù)

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

void delay(uint ms)

{

  uint i,j;

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

           {

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

           }

}

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

端口初始化每個外部中斷端口是固定的

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

void port_init()

{

 DDRA=0XFF;

 PORTA=0XFF;

 DDRB&=(0<<PB2);//INT2

 PORTB|=(1<<PB2);

 DDRD&=(0<<PD2);//INT0

 PORTD|=(1<<PD2);

 DDRD&=(0<<PD3);//INT1

 PORTD|=(1<<PD3);

}

 

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

外部中斷初始化

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

void INT_init()

{

 SREG=0X80;//打開全局中斷

 GICR|=(1<<INT0)|(1<<INT1)|(1<<INT2);//三個中斷使能

 MCUCR=(1<<ISC11)|(0<<ISC10)|(1<<ISC01)|(0<<ISC00);//INT0,INT1下降沿觸發(fā)

 MCUCSR=(0<<ISC2);//INT2下降沿觸發(fā)中斷

 

}

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

流水燈函數(shù)

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

void LED_1()

{

  uchar i;

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

   {

    PORTA=~BIT(i);

          delay(200);

   }

}

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

LED_2函數(shù)

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

void LED_2()

{

  PORTA=0X0F;

  delay(500);

  PORTA=0XF0;

  delay(500);

}

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

LED_3函數(shù)

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

void LED_3()

{

  PORTA=0X81;

  delay(500);

  PORTA=0X7E;

  delay(500);

}

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

外中斷0函數(shù)

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

void Exint0()

{

 LED_2();

}

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

外中斷1函數(shù)

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

void Exint1()

{

  LED_3();

}

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

外中斷2函數(shù)

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

void Exint2()

{

 DDRD=(1<<PD7);

 for(count=0;count<4;count++)

  {

   beep_0;delay(200);

         beep_1;delay(200);

  }

}

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

主函數(shù)

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

void main()

{

 port_init();//端口初始化

 INT_init();//中斷初始化

 while(1)// 當非0值時執(zhí)行下面函數(shù)

  {

    LED_1();//流水燈函數(shù)

  }

}
 

關閉窗口

相關文章