이제 코드를 보게 되면
======================================================================
#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 |