안녕하세요. 배운것도 없이 뭐좀 해보려는 쪼랩대학생입니다.

제가 이번에 AVR로 인터럽트를 써서 뭔가를 만드려고 하는데요..

변수가 애를 먹여서 부탁드릴까 합니다 ㅠ

아래과정을 거쳐서 다시 메인 함수로 돌아가게 해놨는데요..

저 a값이 문제입니다..ㅠ

켜지는 Led가 이동하게 만들어 놓은 녀석인데..자꾸 초기화가 실행되는지 불은 확실히 들어오는데 다른 녀석들도 미세하게 깜빡이네요.

인터럽트 전체에 while(1)을 씌우면 그런 현상이 없구요.

ATMega128을 사용중인데..

인터럽트를 빠져나오면 다시 초기 선언부 부터 실행하나요? 제가 알기론 인터럽트를 멈춘 순간부터 다시 실행걸로 아는데...

아무리 고쳐보아도 답이 잘안나오네요 ㅠ

문법상에 오류는 없는데...

부탁드립니다!

#include <avr/io.h>
#include <avr/interrupt.h>

#define LCD_EN (*(volatile unsigned char *)0x8000)
#define LCD_WRITE (*(volatile unsigned char *)0x8002)
#define LINE1 0x00                                  // LCD_DISPLAY_LINE1
#define LINE2 0x40        

unsigned char a = 0x01;

(중략)

SIGNAL(SIG_UART0_RECV)
{
(중략)
if(rxd_data < k)
{
if(a<0x80)
{
a<<=1;
delay_ms(5);
}
else
{
}
}else if(rxd_data > k)
{
if(a>0x01)
{
a>>=1;
delay_ms(5);
}
else
{
}
}
else
{
}



PORTB = a;
                delay_ms(100);
}

(중략)
int main(void)
{
(중략)
while(1)
        {
(중략)
}
}