티스토리 뷰
인터럽트에 관계된 레지스터
인터럽트(가로채기)는 외부 또는 내부 요청으로 현재 진행되고 있는 프로그램을 중단하고 인터럽트에 의한 서비스 프로그램을 실행하는 것을 말합니다. 함수호출(CALL) 과 다른 점은 함수호출은 프로그램 어디에서 발생하는가 그 시점이 명시가 되어 있지만 인터럽트는 인터럽트를 받아들일 수 있도록 설정한 후에 어느 시점에서 발생한다는 것을 모르는 경우가 많습니다. AT89S52 의 인터럽트 종류는 6 가지가 있습니다. 1. 외부 인터럽트 0 2. 타이머/카운터 인터럽트 0 3. 외부 인터럽트 1 4. 타이머/카운터 인터럽트 1 5. 시리얼 인터럽트 6. 타이머/카운터 인터럽트 2 아래 표는 AT89S52 의 SFR 영역을 나타낸 것입니다. 이중 (외부) 인터럽트에 관계된 레지스터에 대해서 알아보겠습니다. IE(Interrupt Enable) - 0A8h IP(Interrupt Priority) - 0B8h TCON(Timer CONtrol) - 88h 먼저 IE 레지스터를 보면 아래 그림과 같습니다. 이중에서 최상위 비트 EA 는 전체 인터럽트를 허용/마스크 하는 기능을 합니다. 즉 I 비트가 1 로 셋 되어 있어야 전체 인터럽트가 가능해 집니다. IE 레지스터의 하위 6 비트는 외부 인터럽트 0, 타이머/카운터 0, 외부 인터럽트 1, 타이머/카운터 1, 시리얼 인터럽트, 타이머/카운터 2 의 각각을 허용/마스크 하는 비트입니다. 외부 인터럽트 0 을 가능하게 하려면 EX0(또는 IE.0) 비트를 1 로 셋 시켜야합니다. 외부인터럽트 1 을 가능하게 하려면 EX1(또는 IE.2) 비트를 1 로 셋 시켜야합니다. IP 레지스터는 인터럽트의 우선순위를 설정하는 레지스터입니다. 특별한 설정이 없으면 외부 인터럽트 0 가 우선순위가 제일 높고 그 다음이 타이머/카운터 0 ... 순서가 됩니다. 인터럽트의 우선순위는 2 레벨로 되어 있습니다. IP 레지스터의 각 비트를 1 로하면 높은 레벨이 되고, 0 으로 하면 낮은 레벨이 됩니다. 인터럽트중에 다른 인터럽트가 발생하는 다중 인터럽트는 우선순위 레벨이 높은 인터럽트만 받아들입니다. TCON 레지스터의 하위 4 비트는 외부 인터럽트에 관계된 비트들 입니다. 최 하위의 IT0 (Interrupt type 0) 는 외부 인터럽트 0 의 입력형태를 결정하는 비트입니다. IT0 가 1 이 되면 외부 인터럽트 0 는 입력 신호의 하강 모서리(에지)에서 인터럽트를 발생시킵니다. IT0 가 0 이면 입력신호가 L(낮은) 레벨에서 인터럽트를 발생시킵니다. IE0 는 인터럽트 요구 플래그로서 인터럽트가 들어 왔다는 것을 알리는 신호입니다. 이 플래그가 1 되려면 외부 인터럽트는 에지트리거 모드로 설정이 되어 있어야 합니다.
'C언어' 카테고리의 다른 글
타이머/카운터 (에 관계된 레지스터) (0) | 2021.08.12 |
---|---|
외부 인터럽트 0 사용하기 (0) | 2021.08.09 |
SND 에 숫자 표시하기 어드레스와 데이터 표시 (0) | 2021.08.07 |
SND 에 숫자 표시하기 (0) | 2021.08.06 |
코드 메모리를 LCD 에 표시하기 (헥사파일 설명) (0) | 2021.08.05 |