학습/ATmega128

외부 인터럽트 #1

juhyeon 2021. 9. 29. 00:13

구현 목표

  1. switch1을 누를때마다 LED가 ON과 OFF를 반복
  2. switch2를 누르면 switch1을 누른 횟수를 LED로 표현

외부 인터럽트 관련 레지스터

   - EIMSK (External Interrupt Mask Resister) 

       Interrupt0~7을 개별적으로 허용하는데 사용 

       SREG Resister의 Global Interrupt 허용비트 I비트가 1로 되어야 실제 허용 가능

   - EIFR (External Interrupt Flag Resister)

       Interrupt0~7에 신호가 입력되어 트리거 되었음을 표시

       자동으로 값 변화(직접 건드릴 필요 없음)

       강제로 0을 clear하려면 해당 비트에 1을 write

   - EICRA (External Interrupt Control Resister A)

       외부 인터럽트 INT0~3으로 입력되는 각각의 외부신호에 대한 trigger방법 결정

       0b(ab)(cd)(ef)(gh) 두 비트가 하나의 인터럽트를 담당하여 3가지 방법의 트리거 방법 결정

   - EICRB (External Interrupt Control Resister B)

       외부 인터럽트 INT4~7으로 입력되는 각각의 외부신호에 대한 trigger방법 결정

       0b(ab)(cd)(ef)(gh) 두 비트가 하나의 인터럽트를 담당하여 4가지 방법의 트리거 방법 결정

   - SREG

       I비트(7번 비트): Global Interrupt Enable

       #define 전처리기를 이용하여 C언어 함수로 구현됨 

       sei(): 외부 인터럽트 전체 허가

       cli(): 외부 인터럽트 전체 금지

* 오타 수정: 메인함수의 EICRB = 0x0A;에 대한 주석(상승에지에 트리거 된다. → 하강에지에 트리거 된다.)

'학습 > ATmega128' 카테고리의 다른 글

외부 인터럽트 #3  (0) 2021.09.30
외부 인터럽트 #2  (0) 2021.09.30
FND제어 연습 #2  (0) 2021.09.23
FND제어 연습 #1  (0) 2021.09.17
LED제어 연습  (0) 2021.09.11