티스토리 뷰
타이머 모드(TMOD) 의 GATE 제어하기
타이머 모드를 설정하는 TMOD 레지스터에 GATE 비트가 있습니다. 이 GATE 비트를 1 로 설정하면 타이머의 동작을 일시 정지시킬수 있습니다. 앞의 강좌 '타이머 인터럽트 0 사용하기' 에서 TMOD 값을 0x09 (GATE=1, 모드 1) 로 설정해서 동작하는 것을 살펴보겠습니다. 프로그램을 실행하고 LED 가 이동하는 동안 외부 인터럽트 0 (INT0) 버튼을 누르면 타이머가 정지해서 LED 의 이동이 멈춥니다. 이 버튼을 놓으면 다시 타이머가 동작하고 LED 가 이동하는 것을 볼수 있습니다. GATE 제어를 사용하면 외부 인터럽트 기능을 사용할 수 없습니다. #include typedef unsigned char byte; byte led, cnt; void T0_int() interrupt 1 { TR0=0; cnt++; if(cnt == 10) { led = (led << 1) | 0x01; if(led == 0xff) led = 0xfe; P1 = led; cnt = 0; } TH0=0xb1; TL0=0xe0; TR0=1; } void main() { TMOD=0x09; TH0=0xb1; TL0=0xe0; PT0=1; ET0=1; EA=1; cnt = 0; led = 0xfe; P1 = led; TR0=1; while(1); }
'C언어' 카테고리의 다른 글
타이머 1 을 이용하여 보레이트(Baud rate) 만들기 (0) | 2021.08.24 |
---|---|
직렬 통신에 관계된 레지스터 (0) | 2021.08.22 |
외부 인터럽트 1 과 타이머 인터럽트 1 함께 사용하기 (0) | 2021.08.18 |
SND 와 LED 함께 동작시키기 (타이머 0 인터럽트 사용) (0) | 2021.08.16 |
타이머 인터럽트 0 사용하기 (모드 1 사용) (0) | 2021.08.14 |
댓글