
// 타이머0 오버플로우 인터럽트 1msec
// X-TAL클럭 / TCCR0분주비 / TCNT0타이머값 = 주파수, 역수를 취하면 시간 //16000000Hz/128/125=1000Hz, (256-125)=131
TCCR0=5; TCNT0=131; TIMSK=1;
// 타이머0 오버플로우 인터럽트 5msec //16000000Hz/1024/78=200.32Hz, (256-78)=178
TCCR0=7; TCNT0=178; TIMSK=1;
// 타이머0 오버플로우 인터럽트 10msec //16000000Hz/1024/156=100.16Hz, (256-156)=100
TCCR0=7; TCNT0=100; TIMSK=1;
1msec는 분주비 128을 사용해서 정확한 1msec를 만들었지만
8비트 타이머로는 더 긴 시간을 만들 수 없으므로
오차가 있더라도 1024를 사용 했습니다.
8비트 타이머0로 만들 수 있는 시간 범위는 여기까지이며
더 긴 50msec 와 100msec는
타이머 인터럽트 함수 내에서 사용자 변수로 처리 하면 됩니다.
int count=0;
ISR(TIMER0_OVF_vect){ // 타이머0 오버플로우 인터럽트 1msec
// interrupt count++; if(count==50){ count=0; } // 50msec } ISR(TIMER0_OVF_vect){ // 타이머0 오버플로우 인터럽트 1msec // interrupt [TIM0_OVF] void timer0_ovf_isr(void){ // 코드비젼용 count++; if(count==100){ count=0; } // 100msec } 5msec와 10msec도 사용자 변수인 count로 만들 수 있습니다. // 타이머1 오버플로우 인터럽트 1msec // X-TAL클럭 / TCCR1B분주비 / TCNT1타이머값 = 주파수, 역수를 취하면 시간 // 클럭 / 분주비 / 타이머값 = 타이머 인터럽트 주파수, 역수를 취하면 시간 //16000000Hz/64/250=1000Hz,(65536-250)=65286 TCCR1B=3; TCNT1=65286; TIMSK=4; // 타이머1 오버플로우 인터럽트 5msec //16000000Hz/64/1250=200Hz,(65536-1250)=64286 TCCR1B=3; TCNT1=64286; TIMSK=4; // 타이머1 오버플로우 인터럽트 10msec //16000000Hz/64/2500=100Hz,(65536-2500)=63036 TCCR1B=3; TCNT1=63036; TIMSK=4; // 타이머1 오버플로우 인터럽트 50msec //16000000Hz/64/12500=20Hz,(65536-12500)=53036 TCCR1B=3; TCNT1=53036; TIMSK=4; // 타이머1 오버플로우 인터럽트 100msec //16000000Hz/64/25000=10Hz,(65536-25000)=40536 TCCR1B=3; TCNT1=40536; TIMSK=4;