Bu uygulamada timer1 kesmesi kullanıldı. Timer1 başlangıç değeri 0 ve bitiş değeri 15624 olarak ayarlanarak 1 sn'de bir programın kesme alt programına giderek buradaki ledin durumunu değiştirmesi sağlandı.
NOT: Bu uygulamadaki kesme işlemi Proteus'ta çalışmadı. Bu nedenle fiziksel Arduino kartında deneme yapıldı ve çalıştı.
void setup()
{
pinMode(9, OUTPUT);
cli(); //tüm kesmeler durduruldu
TCCR1A = 0; //TCCR1A register 0'lanıyor
TCCR1B = 0; //TCCR1B register 0'lanıyor
TCNT1 = 0; //timer1 başlangıç değeri sıfırlandı
OCR1A = 15624; //timer1 bitiş/karşılaştırma değeri belirlendi
TCCR1B |= (1 << WGM12); //CTC(Clear Timer on Compare Match) mod açıldı
TCCR1B |= (1 << CS12) | (1 << CS10); //prescalar değeri 1024 yapıldı
TIMSK1 |= (1 << OCIE1A); //timer1 karşılaştırma kesmesi aktif edildi
sei(); //tüm kesmelere izin verildi
}
void loop()
{
}
ISR(TIMER1_COMPA_vect)
{
digitalWrite(9, !digitalRead(9));
OCR1A = 15624; //timer1 bitiş/karşılaştırma değeri tekrar belirlendi.
}
_______________________________________________________________________________________________________________________________________________________
0 comments:
Yorum Gönder