레지스터 이름은 타이머마다, AVR에서 AVR까지 다양합니다! 먼저 사용 하 고 있는 AVR의 데이터 시트를 살펴보십시오. 타이머는 업 카운터로 실현됩니다. 다음은 기본 타이머 하드웨어다이어그램입니다. 당황하지 말고 아래 레지스터를 설명하겠습니다. Arduino 시작 코드(inin(inin), 배선.c)는 AVR의 모든 타이머를 미리 구성합니다. TIMER1은 프리 스케일러 /64와 모드 1 (8 비트 위상 올바른 PWM)로 설정됩니다. 출력 비교 레지스터는 클럭 틱 수가 기록된 후 인터럽트를 생성하는 데 사용할 수 있습니다. TCNT1과 영구적으로 비교됩니다. 두 일치 가 모두 일치하면 비교 일치 인터럽트가 트리거됩니다.
인터럽트 사이의 시간이 매번 같아야 하는 경우 CTC 비트를 설정해야 합니다(TCCR1B). 16비트 레지스터입니다(레지스터 섹션의 시작 부분에 있는 참고 참조). TIFR은 타이머를 제어하고 사용하는 데 실제로 필요하지 않습니다. TIMSK에서 활성화 비트에 해당하는 타이머 인터럽트 플래그를 보유합니다. 인터럽트를 사용하지 않으면 코드에서 TIFR을 확인하여 인터럽트 발생 여부를 억제하고 인터럽트 플래그를 지울 수 있습니다. 인터럽트 플래그를 지우는 작업은 일반적으로 논리적 1을 작성하여 수행됩니다(데이터시트 참조). 다음 포스트에서는 TIMER2에 동일한 개념을 적용하는 방법을 배웁니다. 그것은, 다시 한 번, 8 비트 타이머입니다. 따라서 모든 TIMER2 레지스터는 TIMER0과 유사합니다.
그 후, 우리는 흥미로운 부분으로 이동, 비교에 명확한 타이머 (CTC) 모드! OCIE0은 타이머0에 대한 출력 비교 일치 인터럽트 사용입니다. 타이머 값이 비교 값(CTC 모드)과 일치하는 경우 알림을 받을 때 사용됩니다. TOIE0은 타이머0에 대한 타이머 오버플로 인터럽트 사용입니다. 타이머가 오버플로될 때마다 알림을 받을 때 사용됩니다. 나는 모든 타이머가 가지고있는 “간단한”타이머 모드를 설명합니다. 일부 A벌은 여기에 설명 된 것보다 더 많은 모드를 지원하는 특별한 타이머를 가지고 있지만, 그들은 또한 처리하기가 조금 더 어렵다, 이것은 초보자의 사이트이기 때문에, 나는 여기에 그들을 설명하지 않습니다. atmega8에서 인터럽트 방법으로 timer1을 사용하여 2 분 지연을 생성 할 수있는 방법. 덧붙여 코드비전은 “짧은 주소 지정” 레지스터에서만 16비트 SFR 액세스를 수행합니다.
안녕하세요 미스터 맥스,이 tuto에 대한 대단히 감사합니다,그것은 이제까지 내가 하나의 질문이 가장 간단한 방법으로 설명된다 : 타이머1 코드에서 타이머를 재설정하지 않은 반면 타이머0당신은 타이머에 대한 특정성이 있습니까?또는 개선 된 코드는 당신이 하자 감사합니다 작은 예에 대해 설명합니다: 타이머가 10ms마다 int를 발사하기를 원합니다. 8MHz에서 80,000 클럭 사이클, 그래서 우리는 프리 스케일러가 필요합니다 (16 비트 범위 중). 이 예제에서 타이머를 재설정할 필요가 없습니다. 응용 프로그램에 따라 다릅니다. 그래서 기본적으로,이 튜토리얼에서, 우리는 우리가 이전에서 했던 모든 것을 할 것입니다. TIMER0 자습서에서는 CPU 주파수에서 실행되는 타이머를 생성했습니다. 그런 다음 프리스케일러를 포함하도록 코드를 수정하고 인터럽트를 포함하도록 코드를 다시 수정했습니다. 타이머 0은 8 비트 타이머입니다. 기본적으로 0에서 2 ^8 255까지 셀 수 있습니다. 타이머 0의 작동은 간단합니다.
TCNT0 레지스터는 타이머 카운트를 보유하며 모든 타이머 “틱”에 증분됩니다. 타이머가 켜져 있으면 0에서 255로 바뀌고 오버플로합니다. 이렇게 하면 타이머 오버플로 플래그(TOV)가 설정됩니다. 타이머/카운터 인터럽트 플래그 레지스터(TIFR)에는 TOV및 OVF가 필요한 두 가지 기본 플래그가 있습니다. 다른 비트는 타이머 인터럽트에 해당하며, 다른 자습서에서 살펴볼 것입니다. 반전되지 않은 PWM은 타이머가 업카운트되고 OCR1 값에 도달할 때 출력 비교 핀이 지워진다는 것을 의미합니다. 타이머가 TOP 값에 도달하면 다운카운트로 전환되고 타이머 값이 OCR1 값과 일치하면 출력 비교 핀이 설정됩니다. TEMP는 하드웨어 레지스터이며 소프트웨어 쓰기가 아닙니다.
즉, 메모리 맵에 없기 때문에 컴파일러가 액세스할 수 없습니다. 하드웨어만 쓸 수 있으며 이러한 방식으로 작동하도록 설계되었습니다.