20160315_업무일지_정우민_인터럽트(FND실습)
인터럽트(FND실습)
#include "main.h" // main.h 헤더파일
volatile unsigned int uiState;
int main(void)
{
volatile unsigned int uiLoop;
volatile unsigned int uiCnt;
uiCnt=0;
Init ();
uiState = 1;
while(1)
{
PORTA=((uiCnt/10)<<4)|(uiCnt%10);
for(uiLoop=0 ; uiLoop<60000 ; uiLoop++);
if(1==uiState)
{
++uiCnt;
}
if(uiCnt>99)
{
uiCnt=0;
}
}
return 0;
}
void Init(void)
{
Port_Init();
INT_Init();
}
void Port_Init(void) // 포트A
{
DDRA=0xff;
PORTA=0x00;
}
void INT_Init(void) // 인터럽트 설정 함수.
{
EICRA=(3<<ISC0) | (3<<ISC1); //ISC0은 INT0을 의미,OR이용해서 다른 인터럽트도 사용.
EIMSK=(1<<INT0) | (1<<INT1);
SREG=SREG | (1<<7); // sei(); 랑 같다
}
void __vector_1 (void) //인터럽트1.
{
volatile unsigned int uiLoop;
for(uiLoop = 0; uiLoop<60000; ++uiLoop);
uiState = 1; //인터럽트 발생시 uiState가 1이되어 다시 카운트 시작
}
void __vector_2 (void) //인터럽트2
{
volatile unsigned int uiLoop;
for(uiLoop = 0; uiLoop<60000; ++uiLoop);
uiState = 0; //인터럽트 발생시 uiState가 0이되어 정지.
}