Bu uygulamada timer1 kesmesi kullanıldı. Timer1 başlangıç değeri 49900 olarak ayarlandı. Timer1 16 bitlik olduğu için 65535 e kadar sayma olacak. Formülde bu iki sayıyı yerine koyduğumuzda yaklaşık 1 sn yapıyor. Yani program her 1 sn de bir kesmeye gittiğinde led in durumunu değiştirecek.
void setup()
{
Serial.begin(9600);
pinMode(9, OUTPUT);
cli(); //tüm kesmeler durduruldu
TCCR1A = 0; //TCCR1A register 0'lanıyor
TCCR1B = 0; //TCCR1B register 0'lanıyor
TCCR1B |= (1 << CS12) | (1 << CS10); //prescalar değeri 1024 yapıldı
TCNT1 = 49900; //timer1 başlangıç değeri belirlendi
TIMSK1 |= (1 << TOIE1); //Overflow kesmesi aktif edildi
sei(); //tüm kesmelere izin verildi
}
void loop()
{
Serial.println(TCNT1);
}
ISR(TIMER1_OVF_vect)
{
digitalWrite(9, !digitalRead(9));
TCNT1 = 49900; //timer1 başlangıç değeri tekrar belirlendi
}
_________________________________________________________________________________________________________________________________________________________
0 comments:
Yorum Gönder