임베디드 시스템-타이머 / 카운터
ㅏ timer시간 간격을 측정하는 데 사용되는 특수 유형의 시계입니다. 경과 시간을 측정하기 위해 0부터 위로 카운트하는 타이머를 종종stopwatch. 지정된 시간 간격부터 카운트 다운하고 시간 지연을 생성하는 데 사용되는 장치입니다. 예를 들어 모래 시계는 타이머입니다.
ㅏ counter클럭 신호와 관련하여 특정 이벤트 또는 프로세스가 발생한 횟수를 저장 (때로는 표시)하는 장치입니다. 마이크로 컨트롤러 외부에서 발생하는 이벤트를 계산하는 데 사용됩니다. 전자 제품에서 카운터는 플립 플롭과 같은 레지스터 유형 회로를 사용하여 매우 쉽게 구현할 수 있습니다.
타이머와 카운터의 차이점
타이머와 카운터를 구별하는 포인트는 다음과 같습니다.
시간제 노동자 | 카운터 |
---|---|
레지스터는 모든 기계주기에 대해 증가합니다. | 레지스터는 외부 입력 핀 (T0, T1)에 해당하는 1에서 0으로의 전환을 고려하여 증가합니다. |
최대 카운트 속도는 오실레이터 주파수의 1/12입니다. | 최대 카운트 속도는 오실레이터 주파수의 1/24입니다. |
타이머는 내부 클록의 주파수를 사용하고 지연을 생성합니다. | 카운터는 외부 신호를 사용하여 펄스를 계산합니다. |
8051의 타이머 및 관련 레지스터
8051에는 타이머 0과 타이머 1의 두 가지 타이머가 있습니다. 이들은 타이머 또는 이벤트 카운터로 사용할 수 있습니다. Timer 0과 Timer 1은 모두 16 비트입니다. 8051은 8 비트 아키텍처를 따르기 때문에 각 16 비트는 하위 바이트와 상위 바이트의 두 개의 개별 레지스터로 액세스됩니다.
타이머 0 레지스터
Timer 0의 16 비트 레지스터는 하위 및 상위 바이트로 액세스됩니다. 하위 바이트 레지스터를 TL0 (타이머 0 하위 바이트)이라고하고 상위 바이트 레지스터를 TH0 (타이머 0 상위 바이트)이라고합니다. 이 레지스터는 다른 레지스터처럼 액세스 할 수 있습니다. 예를 들어, 지침MOV TL0, #4H 값을 Timer # 0의 하위 바이트로 이동합니다.
타이머 1 레지스터
Timer 1의 16 비트 레지스터는 하위 및 상위 바이트로 액세스됩니다. 하위 바이트 레지스터를 TL1 (타이머 1 하위 바이트)이라고하고 상위 바이트 레지스터를 TH1 (타이머 1 상위 바이트)이라고합니다. 이 레지스터는 다른 레지스터처럼 액세스 할 수 있습니다. 예를 들어, 지침MOV TL1, #4H 값을 Timer 1의 하위 바이트로 이동합니다.
TMOD (타이머 모드) 레지스터
Timer 0과 Timer 1은 모두 동일한 레지스터를 사용하여 다양한 타이머 작동 모드를 설정합니다. 타이머 0에 대해 하위 4 비트를, 타이머에 대해 상위 4 비트를 따로 설정하는 8 비트 레지스터입니다. 각각의 경우 하위 2 비트는 미리 타이머 모드를 설정하는 데 사용되고 상위 2 비트는 위치를 지정하는 데 사용됩니다.
Gate − 설정시 INT (0,1)이 높은 경우에만 타이머가 실행됩니다.
C/T − 카운터 / 타이머 선택 비트.
M1 − 모드 비트 1
M0 − 모드 비트 0.
문
모든 타이머에는 시작 및 중지 수단이 있습니다. 일부 타이머는 소프트웨어로, 일부는 하드웨어로, 일부는 소프트웨어 및 하드웨어 제어를 모두 가지고 있습니다. 8051 타이머에는 소프트웨어 및 하드웨어 컨트롤이 모두 있습니다. 타이머의 시작 및 중지는 명령을 사용하여 소프트웨어에 의해 제어됩니다.SETB TR1 과 CLR TR1 타이머 1의 경우 SETB TR0 과 CLR TR0 타이머 0.
SETB 명령어는이를 시작하는 데 사용되며 CLR 명령어에 의해 중지됩니다. 이러한 명령어는 TMOD 레지스터에서 GATE = 0 인 동안 타이머를 시작하고 중지합니다. 타이머는 TMOD 레지스터에서 GATE = 1로 만들어 외부 소스에 의해 시작 및 중지 될 수 있습니다.
C / T (시계 / 타이머)
TMOD 레지스터의이 비트는 타이머가 delay generator 또는 event manager. C / T = 0이면 타이머 지연 생성을위한 타이머로 사용됩니다. 시간 지연을 생성하는 클럭 소스는 8051의 크리스탈 주파수입니다. C / T = 0이면 8051에 부착 된 크리스탈 주파수는 8051 타이머가 일정한 간격으로 틱하는 속도도 결정합니다.
타이머 주파수는 항상 8051에 부착 된 크리스털 주파수의 1/12입니다. 다양한 8051 기반 시스템의 XTAL 주파수는 10MHz ~ 40MHz이지만 일반적으로 XTAL 주파수는 11.0592MHz로 작업합니다. 이는 8051.XTAL = 11.0592의 직렬 통신을위한 전송 속도로 인해 8051 시스템이 오류없이 PC와 통신 할 수 있기 때문입니다.
M1 / M2
M1 | M2 | 방법 |
---|---|---|
0 | 0 | 13 비트 타이머 모드. |
0 | 1 | 16 비트 타이머 모드. |
1 | 0 | 8 비트 자동 재 장전 모드. |
1 | 1 | 유출 모드. |
타이머의 다른 모드
모드 0 (13 비트 타이머 모드)
모드 0의 타이머 1과 타이머 0은 모두 8 비트 카운터로 작동합니다 (32로 나누기 프리스케일러 사용). 타이머 레지스터는 TH1의 8 비트와 TL1의 하위 5 비트로 구성된 13 비트 레지스터로 구성됩니다. TL1의 상위 3 비트는 확정되지 않으며 무시해야합니다. 실행 플래그 (TR1)를 설정해도 레지스터는 지워지지 않습니다. 타이머 인터럽트 플래그 TF1은 카운트가 모두 1에서 모두 0으로 롤오버 될 때 설정됩니다. 모드 0 작동은 타이머 1과 동일합니다.
모드 1 (16 비트 타이머 모드)
타이머 모드 "1"은 16 비트 타이머이며 일반적으로 사용되는 모드입니다. 16 비트가 모두 사용된다는 점을 제외하고는 13 비트 모드와 동일한 방식으로 작동합니다. TLx는 0부터 최대 255까지 증가합니다. 값 255에 도달하면 TLx는 0으로 재설정되고 THx는 1 씩 증가합니다. 완전한 16 비트 타이머이므로 타이머는 최대 65536 개의 고유 값을 포함 할 수 있습니다. 65,536 번의 기계 사이클 후에 다시 0으로 오버 플로우됩니다.
모드 2 (8 비트 자동 다시로드)
두 타이머 레지스터 모두 자동 재로드 기능이있는 8 비트 카운터 (TL1 및 TL0)로 구성됩니다. TL1 (TL0)의 오버플로는 TF1 (TF0)을 설정하고 소프트웨어에 의해 미리 설정된 Th1 (TH0)의 내용으로 TL1 (TL0)을 다시로드합니다. 다시로드하면 TH1 (TH0)이 변경되지 않습니다.
자동 새로 고침 모드의 장점은 타이머가 항상 200에서 255 사이의 값을 포함하도록 할 수 있다는 것입니다. 모드 0 또는 1을 사용하는 경우 코드를 확인하여 오버플로를 확인해야하며이 경우에는 타이머를 200으로 재설정하십시오.이 경우 귀중한 명령이 값을 확인하거나 다시로드됩니다. 모드 2에서는 마이크로 컨트롤러가이를 처리합니다. 모드 2에서 타이머를 구성한 후에는 타이머가 오버플로되었는지 확인하는 것에 대해 걱정할 필요가 없으며 마이크로 컨트롤러 하드웨어가 모든 작업을 수행하므로 값 재설정에 대해 걱정할 필요가 없습니다. 자동 다시로드 모드는 공통 전송 속도를 설정하는 데 사용됩니다.
모드 3 (분할 타이머 모드)
타이머 모드 "3"은 split-timer mode. 타이머 0이 모드 3에 놓이면 두 개의 개별 8 비트 타이머가됩니다. 타이머 0은 TL0이고 타이머 1은 TH0입니다. 두 타이머는 모두 0에서 255까지 계산되며 오버플로의 경우 다시 0으로 재설정됩니다. 타이머 1의 모든 비트는 이제 TH0에 연결됩니다.
타이머 0이 분할 모드에있을 때, 실시간 타이머 1 (즉, TH1 및 TL1)은 모드 0, 1 또는 2에서 설정할 수 있지만이를 수행하는 비트가 이제 TH0에 연결되어 있으므로 시작 / 중지 할 수 없습니다. 실제 타이머 1은 기계주기마다 증가합니다.
타이머 초기화
타이머 모드를 결정합니다. 지속적으로 실행되고 외부 핀과 독립적 인 16 비트 타이머를 고려하십시오.
TMOD SFR을 초기화하십시오. TMOD의 최하위 4 비트를 사용하고 Timer 0을 고려합니다. 타이머가 외부 핀과 독립적이되기를 원하므로 2 비트 GATE 0 및 C / T 0을 0으로 유지합니다. 16 비트 모드는 타이머 모드 1이므로 T0M1을 지우고 T0M0을 설정합니다. 실제로 켜야하는 유일한 비트는 TMOD의 비트 0입니다. 이제 다음 명령을 실행하십시오-
MOV TMOD,#01h
이제 타이머 0은 16 비트 타이머 모드이지만 타이머는 실행되지 않습니다. 실행 모드에서 타이머를 시작하려면 다음 명령을 실행하여 TR0 비트를 설정하십시오.
SETB TR0
이제 타이머 0은 즉시 계산을 시작하고 기계 사이클마다 한 번씩 증가합니다.
타이머 읽기
16 비트 타이머는 두 가지 방법으로 읽을 수 있습니다. 타이머의 실제 값을 16 비트 숫자로 읽거나 타이머가 오버플로 된시기를 감지합니다.
타이머 오버플로 감지
타이머가 가장 높은 값에서 0으로 오버플로되면 마이크로 컨트롤러는 TCON 레지스터에서 TFx 비트를 자동으로 설정합니다. 따라서 타이머의 정확한 값을 확인하는 대신 TFx 비트를 확인할 수 있습니다. TF0이 설정되면 Timer 0이 오버플로 된 것입니다. TF1이 설정되어 있으면 타이머 1이 오버플로 된 것입니다.