타이머/카운터 (에 관계된 레지스터) 타이머/카운터는 시간측정 또는 이벤트를 카운트 하는 기능입니다. 타이머는 내부 시스템 클럭(크리스탈)을 카운트해서 일정 시간을 측정하고, 카운터는 외부 이벤트를 카운트 할 수 있습니다. 베타키트를 중심으로 타이머 사용법을 설명합니다. 타이머에 관계된 레지스터는 TCON(Timer CONtrol) - 88h TMOD(Timer MODe) - 89h TCON 레지스터를 보면 하위 4 비트는 외부 인터럽트에 관계된 비트이고, 상위 4 비트는 타이머에 관계된 비트입니다. TR0, TR1 은 타이머 0 와 타이머 1 을 시작/정지 시키는 비트입니다. 즉, 타이머 0 을 동작시키려면 TR0 에 1 을 입력하면 되고, TR0 에 0 을 입력하면 타이머 0 은 정지합니다. TF0,..
외부 인터럽트 0 과 1 함께 사용하기 인터럽트가 발생하려면, 전체 인터럽트가 인에이블(가능) 되어 있고 각각의 인터럽트가 인에이블 되어 있어야 합니다. 전체 인터럽트를 인에이블 시키려면 SREG 의 최상위 비트 (I 비트) 가 1 로 되어 있어야 하고, 외부 인터럽트 0 가 인에이블 되려면 GICR 레지스터의 INT1 비트가 1 로 되어 있어야 합니다. 또한 인터럽트 타입을 결정해 주어야 하는데, 하강 에지에서 인터럽트를 받을려면 MCUCR 레지스터의 하위 두 비트가(ISC11, ISC10) 1 과 0 으로 되어있어야 합니다. 다음 프로그램은 포트 B 에 연결된 LED 를 하나씩 (왼쪽으로) 이동시키는 프로그램으로, 인터럽트 0 가 발생하면 LED 8 개를 3 번 깜빡이고 나서, 다시 정상적인 동작 (..
외부 인터럽트 0 사용하기 외부 인터럽트 0 를 이용한 프로그램을 작성합니다. main() 함수에서 인터럽트 설정을 하고 LED 를 오른쪽으로 이동시키는 프로그램을 작성하여 동작시킵니다. 외부 인터럽트 0 신호가 입력되면 전체LED 를 3 번 ON/OFF 시키도록 하겠습니다. 인터럽트 서비스 루틴이 종료되면 다시 main() 함수로 돌아가서 LED 를 이동시키는 프로그램입니다. #include typedef unsigned char byte; void delay(int dly) { int k; while(dly--) for(k=0; k