Kesmelerde temel amaç o anki program akışını durdurup kesmeyi oluşturan duruma özgü kodları çalıştırmak ve kodların çalışması bittikten sonra program akışını kalınan yerden devam ettirmektir. PIC18F4585’te kesmeleri oluşturmak için 2 vektör adresi kullanırız. Bu vektör adresleri mikroişlemcide interrupt geldiği zaman çalıştırılacak kodların bulunduğu bir bölüme referans verir. Bu vektör adreslerinden biri low_vector(düşük öncelikli interruptlar) diğeri ise high_vector(yüksek öncelikli interruptlar)’dür. Low_vector 0x18 adresini, High_vector ise 0x08 adresini gösterir. Programda bu kısımlar aşağıdaki şekilde kodlanır;
#pragma code high_vector=0x08 void high_interrupts (void) { _asm GOTO high_ints _endasm } #pragma code
Aynı şekilde düşük öncelikli interruptlar için low_vector=0x18 yazılır. Ayrıca _asm _endasm arasında kalan kısıma assembly koduyla referans verilir. Goto komutuyla high_ints denen bir bölgeye gidilir. Bu bölge aşağıdaki şekilde kodlanır;
#pragma interrupt high_ints void high_ints (void) { //Kesme geldiginde calisacak kodlar }
high_ints veya high_interrupts yerinde kendiniz de isimler belirleyip yazabilirsiniz.
Bir kesmenin oluşup oluşmadığı nasıl anlaşılır? Bunun için ilgili birimle alakalı flag‘in 1 ya da 0 olma durumuna bakılır. C18’de bir çok modüle ait register bulunur. Bu register’ların bazıları interruptların enable/disable durumunu ayarlamak için, bazıları interrupt oluştuğunda anlayabilmek için, bazıları kendi modülüne ait işlemleri gerçekleştirmek için kullanılır.