8051 타이머 예제

타이머 0은 그림과 같이 16비트 너비입니다. 이것은 2 8 비트 레지스터 TL0 및 TL1로 액세스 할 수 있습니다. 타이머 1도 마찬가지입니다. 8051 타이머와 카운터는 동일한 단위이지만,이 튜토리얼에서는, 우리는 토론을 단순화하기 위해 타이머 단위만 논의할 것이다. 도 1은, 기본 8051 타이머 유닛을 나타낸다. 레지스터 TCON 및 TMOD는 타이머 작업에 영향을 미칩니다. 클럭 주파수는 12로 나누어 타이머 단위에서 사용됩니다. 따라서 11.0592MHz 외부 크리스탈을 사용하는 경우 타이머는 921KHz의 주파수를 사용합니다. 따라서 타이머는 매 (1/921Khz) = 1.085μ 초마다 증가합니다.

TCON 레지스터는 비트가 타이머 작업을 직접 제어하는 레지스터 중 하나입니다. 이 레지스터의 4 비트만 이 용도로 사용되며 나머지는 인터럽트 제어에 사용됩니다. 이 예제 프로그램은 타이머/카운터 0을 16비트 타이머로 구성하는 방법을 보여 주며, 이 프로그램에서는 타이머/카운터 0을 구성하는 방법을 보여 주며, 타이머/카운터 0을 구성하는 방법을 보여 주며, 타이머/카운터 0을 16비트 타이머로 구성하는 방법을 보여 주며, 타이머/카운터 0을 인터럽트 서비스 루틴(ISR)은 타이머가 오버플로될 때마다 호출됩니다(0xFFFF에서 0x00000으로 이동). ISR에서 오버플로_카운트 변수 증분. Mode-1의 타이머는 0000에서 FFFFH까지 카운트할 수 있는 16비트 타이머로 사용할 수 있으므로 광범위한 지연을 생성할 수 있습니다. 필요한 지연에 대한 타이머 값을 타이머 카운트 레지스터 TH 및 TL에 로드해야 합니다. 레지스터에 값을 로드한 후 타이머를 시작해야 합니다. 이제 타이머가 카운트 업을 시작하고 최대 값(0xffff)에 도달하면 오버플로 플래그를 0으로 설정합니다. 이 때 타이머 값을 다시 로드해야 하며 오버플로 플래그도 지워야 합니다.

타이머 T0은 사실상 16비트 레지스터이므로 저장할 수 있는 가장 큰 값은 65535입니다. 이 값을 초과하는 경우 타이머가 자동으로 지워지고 0부터 계산이 시작됩니다. 이 조건을 오버플로라고 합니다. 두 레지스터 TMOD 및 TCON은 이 타이머에 밀접하게 연결되어 작업을 제어합니다. 이제 인터럽트를 향해 오고, 인터럽트 😛 정말, 우리는 인터럽트 때문에 인터럽트 호출합니다. 프로그래밍 코드에는 백그라운드에서 실행하고 표시 할 때 나타나야하는 많은 것들이 있습니다. 여기서 인터럽트 편리합니다. 인터럽트는 일종의 백그라운드에서 계속 실행되는 백그라운드 코드이며 주 코드는 앞에서 계속 실행되지만 인터럽트 조건이 가득 차면 주 프로그램을 중단하고 정의된 기능을 실행합니다. 타이머 인터럽트에 대 한, 내가 할 것 이다 내가 2 초 마다 후 내 LED를 깜박이 고 가정 2 초 동안 타이머를 시작 하 고이 타이머를 완료 하면 인터럽트를 생성 합니다. 따라서 2 초마다 이 방법으로 LED가 깜박입니다. 그래서, 타이머 인터럽트 8051 마이크로 컨트롤러로 시작하고 우리가이 작업을 수행하는 방법을 볼 수 있습니다.

이 레지스터에는 타이머 2의 작동을 제어하는 비트가 포함되어 있습니다. TF2 비트는 타이머 2 오버플로에 자동으로 설정됩니다. 다음 오버플로를 감지하려면 이 비트를 프로그램 내에서 지워야 합니다. 비트 RCLK 및 TCLK가 설정된 경우 오버플로는 TF2 비트에 영향을 주지 않습니다. EXF2 비트는 캡처 또는 재로드가 T2EX 핀의 음수 전환으로 인해 발생할 때 자동으로 설정됩니다. T2CON 레지스터의 DCEN 비트가 설정되지 않는 한 인터럽트(활성화된 경우)를 생성합니다. EXF2 비트는 프로그램 내에서 지워야 합니다. RCLK는 직렬 포트의 수신 클럭으로 사용할 타이머를 결정하는 클럭 비트를 수신합니다: MODE 1은 16비트 모드임을 제외하면 MODE 0과 유사합니다. 이 모드에서 THx 및 TLx는 모두 8 비트 타이머역할을 합니다.

TLx는 최대 255개까지 계산한 다음 00및 증가 THx로 1로 재설정합니다. 이것은 전체 16 비트 타이머이기 때문에 타이머가 오버플로되기 전에 최대 2 ^16 즉 65536 기계 주기를 얻을 수 있습니다.