Mikroişlemcilerde Kesme (Interrupt) Nedir?
Mikroişlemcilerde kesme kavramı, olaylara hızlı tepki ve verimlilik için temel bir mekanizmadır. İşleyişi ve kod örneği anlatılıyor.
common.author: common.anonymous24 common.views
chat.question 1
chat.user
microislemcilerde interrup konusunu anlat
AI Asistan
Tabii! Microişlemcilerde "interrupt" yani kesme konusu, oldukça önemli ve temel bir kavramdır. Sana bunu sade ve anlaşılır bir şekilde anlatayım.
**Interrupt Nedir?**
Interrupt, işlemcinin şu anda yaptığı işi durdurup, öncelikli ve belirli bir görevi yerine getirmesi için başka bir işlemi geçici olarak devralmasıdır. Yani, işlemci, anlık olarak önemli bir olay veya talep geldiğinde, onun üzerine odaklanmak için mevcut işlemini durdurur ve kesme servis rutinine (interrupt handler) yönelir.
**Neden Kullanılır?**
- **Acil durumlar:** Dış dünya ile iletişim kurarken, örneğin bir klavye tuşuna basıldığında veya bir sensörden veri geldiğinde, işlemcinin hemen bu olaya cevap vermesi gerekir.
- **Verimlilik:** İşlemci sürekli olarak tüm olayları takip etmek yerine, kesmeler sayesinde sadece önemli olaylar gerçekleştiğinde müdahale eder.
**Interrupt İşleyişi Nasıl Olur?**
1. Bir olay veya harici cihaz, işlemciye "benimle ilgilen" sinyali gönderir.
2. İşlemci, şu anki işlemini durdurur ve kesme vektörüne (interrupt vector) gider. Bu, kesmenin hangi olay olduğunu belirten adresi gösterir.
3. İşlemci, kesme rutinine (ISR: Interrupt Service Routine) atlar ve ilgili işlemi yapar.
4. İşlem tamamlandıktan sonra, işlemci önceki duruma geri döner ve kaldığı yerden devam eder.
**Kısaca:**
- Kesme, işlemciye dış veya iç olaylardan haberdar olmak ve hızlıca cevap vermek için kullanılan bir mekanizmadır.
- Bu sayede, sistem daha verimli ve hızlı çalışır.
İşte böyle! Eğer daha detaylı veya belli bir konuya odaklanmak istersen, memnuniyetle yardımcı olurum.
chat.question 2
chat.user
Kod örneği ver
AI Asistan
Elbette! Size temel bir mikroişlemci veya mikrodenetleyici ortamında kesme (interrupt) nasıl kullanılır, ona dair basit bir örnek göstereyim. Bu örnekte, genellikle kullanılan C dilinde, bir butona basıldığında bir kesme oluştuğunu varsayıyoruz.
**Not:** Bu örnek, çok temel ve genel bir yapıdır. Gerçek donanım ve mikrodenetleyiciye göre detaylar değişebilir. Ama mantık hep aynıdır: kesme fonksiyonunun tanımlanması, kesme vektörüne atanması ve olay gerçekleştiğinde bu fonksiyonun çağrılması.
---
### Basit Bir Interrupt Örneği (Genel Yapı)
```c
#include
#include
// ISR (Interrupt Service Routine): Kesme gerçekleştiğinde çağrılır
ISR(INT0_vect) {
// Burada kesme gerçekleştiğinde yapılacak işlemi yazıyoruz
PORTB ^= (1 << PB0); // PB0 pinini toggle et (örneğin LED yanıp sönmesi)
}
int main(void) {
// Portları ayarla (örneğin PB0 çıkış pini)
DDRB |= (1 << DDB0);
// INT0 kesmesini etkinleştir
EIMSK |= (1 << INT0);
// Kesme tetikleme ayarları (örneğin, düşen kenar)
EICRA |= (1 << ISC01); // Düşen kenar tetikleme
EICRA &= ~(1 << ISC00);
// Global kesme enable
sei();
while(1) {
// Ana döngü, burada başka işler yapılabilir
}
return 0;
}
```
---
### Açıklamalar:
- **ISR(INT0_vect):** Bu fonksiyon, dış kesme 0 tetiklendiğinde çağrılır.
- **EIMSK:** Kesme maskesi, hangi kesmelerin aktif olacağını belirler.
- **EICRA:** Kesme tetikleme koşulunu ayarlar (düşen kenar, yükselen kenar, vb.).
- **sei():** Global kesme etkinleştirme komutudur.
- **PORTB ^= (1 << PB0):** Bir LED veya çıkış pinini değiştirmek için kullanılır.
---
### Özetle:
Bu kodda, bir butona basıldığında (dış kesme tetiklenir), LED yanıp sönmeye başlar veya başka bir işlem yapılır. Böylece, mikroişlemci bu olaylara anında tepki verebilir.
İstersen, daha farklı veya daha detaylı bir örnek hazırlayabilirim!
