본문 바로가기

AVR

외부 인터럽트를 이용한 LED 켜고 끄기(실습)

이제 코드를 보게 되면

======================================================================
#include<avr/io.h>
#include<avr/delay.h>
#include<avr/signal.h>

typedef unsigned char byte;

void delay_2s()
{
 byte i;
 for(i = 0; i < 200; i++)
 {
  _delay_ms(10);
 }
}

SIGNAL(SIG_INTERRUPT4)
{
 byte j;

 for(j = 0; j < 3; j++)
 {
  PORTD = 0X00;
  delay_2s();
  PORTD = 0X03;
  delay_2s();
  PORTD = 0X0c;
  delay_2s();
  PORTD = 0X30;
  delay_2s();
  PORTD = 0Xc0;
  delay_2s();

 }
}

SIGNAL(SIG_INTERRUPT5)
{
 byte j;

 for(j = 0; j < 3; j++)
 {
  PORTD = 0X00;
  delay_2s();
  PORTD = 0Xff;
  delay_2s();
 }
}

SIGNAL(SIG_INTERRUPT6)
{
 byte j;

 for(j = 0; j < 3; j++)
 {
  PORTD = 0X00;
  delay_2s();
  PORTD = 0X03;
  delay_2s();
  PORTD = 0X0f;
  delay_2s();
  PORTD = 0X3f;
  delay_2s();
  PORTD = 0Xff;
  delay_2s();

 }
}
SIGNAL(SIG_INTERRUPT7)
{
 byte j;

 for(j = 0; j < 3; j++)
 {
  PORTD = 0X00;
  delay_2s();
  PORTD = 0X03;
  delay_2s();
  PORTD = 0X30;
  delay_2s();
  PORTD = 0X0c;
  delay_2s();
  PORTD = 0Xc0;
  delay_2s();

 }
}

int main(void)
{
 byte led = 0xef;

 DDRE = 0X00;
 PORTE = 0XF0;
 DDRD = 0XFF;
 PORTD = led;

 EIMSK = 0XF0; // 외부 인터럽트를 사용할 포트 설정
 EICRB = 0XAA;
// 10으로 하강에지 일 때 인터럽트가 요구
 SREG |= 0X80;
// 인터럽트를 사용 하겠다고 설정

 while(1)
 {
  PORTD = led;
  led = (led << 1);
  if(led == 0x00)
  {
   led = 0xef;
  }
  delay_2s();
 }

}
======================================================================


여기에서 SIGNAL이라는 함수명으로 되어 있는 함수의 인자 값을 보게 되면

SIG_INTERRUPT4, SIG_INTERRUPT5, SIG_INTERRUPT6, SIG_INTERRUPT7

이라고 적혀 있는데 이것은
AVR 라이브러리를 보게 되면


이렇게 나와 있어서 인자 값으로 사용하였다고 생각 했다.

인터럽트 부분은 이렇게 간단하게 알아 보았지만

아직 많은 것을 더 해봐야 될 것 같다는 생각이 들었다.

'AVR' 카테고리의 다른 글

TEXT LCD 제어 실습  (0) 2009.07.17
TEXT LCD 제어 이론  (0) 2009.07.17
외부 인터럽트를 이용한 LED 켜고 끄기(이론)  (0) 2009.07.03
버튼 입력 받아 LED 켜고 끄기  (0) 2009.07.02
LED 켜기  (0) 2009.07.02