마이컴 타이머 or 카운터
타이머/카운터
-본인이 생각한 타이머는 셋팅한 시간에 따라 전원이 ON/OFF 되는 것으로 알았습니다 하지만 마이컴에서는 원하는 시간을 프로그램적으로 만들어 주는 것 일반적으로 전자시계 또한 카운터는 외부이벤트나 펄스의 숫자 등을 카운팅 하는데 사용하는
것으로 시간 및 펄스폭의 계측, 주기적인 인터럽트 등을 발생하는 데도 사용하게 되고 이것을 가지고 개발자들은 제품을 설계한다는 것을 알았습니다
(즉 타이머.카운터는 내부 I/O click이나 외부의 크리스털을 소스로 사용하고 사용자가 필요로 하는 주기를 설정하여 일정한 주기로 발생하는 임의의 작업을 할수 있습니다. 타이머.카운터는 입력으로 들어오는 펄스를 셈하는 장치라고 할수 있다)
타이머/카운터의 구조
-일반적인 타이머/카운터는 클록 펄스를 입력신호로 받는 연속적인 2분주 플립플롭으로 구성됩니다. 클록은 철 번째 플립플롭에 인가되며 클록 주파수를 2로 나눈니다. 첫 번째 플립플롭의 출력은 두 번째 플립플롭의 클록 입력으로 사용되며 이 플립플롭도 2로나누어집니다. 각각 연속적인 단계는 입력 클록에 대하여 2n의 입력 클록으로 나누어집니다.
마지막 단계의 출력은 오버플로우가 발생하였음을 나타내는 것입니다.
(즉 타이머: MCU의 내부클럭(clki/o > 분주기 /clkt)을 이용하여 일정시간 간격의 펄스를 만들어 내거나 일정시간 경과 후에 인터럽트를 발생시키는 기능을 의미, 내부클럭(빨름/분주가능 :범위 내에서 clock선택 가능) - 동기모드
카운터: 외부 핀(TOSC1, TOSC2, T1, T2, T3)을 통해서 입력되는 펄스를 계수(Edge Detector)하여 Event, Counter로 동작하는 것을 의미(펄스: 사건, 카운터 값: 사건의 발생 횟수) 외부클럭(느림/분주 불가능: 외부 clock그대로 사용) -비동기 모드)
이렇게 타이머와 카운터는 입력 받는 소스가 다르면서 원리적인 차이가 있으나, 그 사용과 목적이 같은 이유로 통칭의 개념으로 사용합니다.
타이머/카운터 응용분야
1.시간 간격을 갖는 펄스를 발생시키는 응용분야
2.주기적으로 일정시간 간격으로 어떤 일을 수행하는 등의 동작을 동기화 할 때
3.외부에서 발생되는 펄스의 시간간격이나 펄스의 수를 계측 할 때
4.외부에서 입력되는 펄스보다 작은 간격을 갖는 주기적인 펄스를 만들어 두 가지
상태(ON/OFF)의 시간을 측정
5.사건의 계수(event counting)기능은 외부 사건의 발생 횟수를 계수할 때
6.직렬 포트에 대해 데이터 전송률을 결정할 때 사용
머신사이클
머신 사이클은 CPU가 가장 기본적인 동작을 수행하는 한 주기를 말한다. AT89S52의 경우 1머신 사이클은 외부 클락주파수의 1/12 주파수로 설정되어 있으므로 22.118Mhz의 클락을 사용하는 경우에 머신 사이클의 동작 주파수는 다음과 같이 계산된다.
80C51 시퀀스
타이머/카운터의 특수기능 레지스터타이머0과 타이머1은 기본적으로 16비트 타이머로서 각각 4가지의 동작 모드를 가지고 있다. 이들 모드 중에서 모드 0~2는 타이머 0과 타이머1에서 동일하게 동작하고, 모드3은 타이머0과 타이머 1이 서로 다른 기능을 수행한다. 타이머/카운터 동작은 2개의 타이머/카운터 제어 레지스터(TCON, TMOD)의 설정에 의해 결정된다
타이머/카운터 동작모드
- 타이머/카운터의 동작모드는 네가지가 있으며, 이들 모드는 TNOD의 M0, M1비트에 의해 설정된다. 4개의 동작 모드 중 0-2모드는 타이머/카운터 0 과 1에서 동일한 동작을 하지만, 모드3은 각각 별도로 동작한다. 두 개의 타이머를 구분하기
위하여 ‘X’를 사용한다. 타이머 동작 시 타이머/카운터 레지스터(THx : TLx) 값은 언제든지 읽거나 쓸 수 있다. THx, 는
타이머 TH1, TH0를 의미한다. 다음에 각 모드별로 설명한다.
모드 0
-타이머 모드0은 13비트 타이머로 동작한다. THx, TLx 레지스터의 총 16비트 중 13비트만 사용이 가능하므로 THx, TLx에
설정 가능한 값의 범위는 0h ~ 0x1FFF가 된다. 설정된 값은 1 머신 사이클마다 1씩 증가하다가 최대인 0x1FFF에 도달하
면 그 다음머신 사이클에서 0x0000으로 초기화 되고 동시에 인터럽트가 발생해서 지정한 시간이 되었음을 알린다
모드 0의 시간설정
- 타이머를 사용하기 위해서는 먼저 원하는 시간을 THx, TLx에 설정하여야 한다 원하는 시간을 계산하는 방법은 다음과 같다. THx, TLx에 설정한 값은 1 머신 사이클 즉, 0.5425usec 마다 1씩 증가한다. 만약에 THx, TLx에 최대값인 0x1FFF를 지정하였다면 1 머신 사이클이 지난 다음 즉, 0.5425usec 후에 THx, TLx=0000이 될 것이다. 이때 오버플로우가 생기고 동시에 타이머 인터럽트가 발생할 것이다. 한 단계만 더 생각하면, THx, TLx=1FFE과 같이 지정하였다면 2 머신 사이클 후에 인터럽트가 발생할 것이다
이것을 공식화 하면 만약 N 머신 사이클 후에 인터럽트를 발생시키고 싶다 면 설정값은 1FFFh – N + 1
THx, TLx에 시간을 입력하는 방법
설정값을 계산하였다면 프로그램에서는 이 값을 THx와 TLx에 나누어 서 넣으면 된다. 그런데 모드 0의 경우에 여기에서 주의해야할 사항이 있다. 위에서도 말했듯이 모드 0 는 TH0, TL0의 13Bit만을 사용하므로 사용하지 않는 3Bit에 값을 대입하지 않도록 해야 한다는 점이다. 사용하지 않아야 할 곳은 TL0의 상위 3Bit이다
댓글