본문 바로가기
코스웨어/16년 스마트컨트롤러

20160316_정일모_업무일지_인터렙트

by 알 수 없는 사용자 2016. 3. 17.
728x90
반응형

인 터 렙 트

 

 

 

 

 

 

데이터동기방법
1) 폴링(polling): 마이크로프로세서가 사용 가능 한지 여부를 계속관찰


2) 인터럽트(interrupt): 주변 장치가 사용 가능 할 때, 마이크로 프로세서에게 통보
Event에따라 미리 정해진 ISR (Interrupt Service Routine)로분기

 

 

 

 

 

 

 

 

 

#include "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이되어 정지.

}

 

 

   

 

 

 

 

 

 

728x90