16f877a Üzerinde Kesmeler

Başlatan macemi, 10 Eylül 2007, 17:06:02

macemi

Merhaba Arkadaşlar,

Aranızda daha yeni sayılırım. Mikrodenetleyicili sistemler ile daha yeni yeni tanıştım. C ve C++'a dair (bilgisayar üzerinde) yeterince uygulma deneyiyimim var. Ancak sanırım PIC'e dair donanım bilgimi arttırmam lazım. :) Yapmak istediğim şey RB4,RB5,RB6,RB7 uçarlarına butonlar bağlayıp buradan gelecek darbeler ile kesmeler oluşturmak ve bunlar sayesinde global değişkenlerin değerlerini arttırmak.MikroC ile çalışıyorum. Her ne yaptıysam bir türlü başarılı olamadım. Ya kesme devreye giriyor ve bir daha kesmeden çıkılamıyor. Yada kendi kendine kesme çalışıyor. :)  MikroC altında yazdığım kodlardan birisi aşağıda. Burada deneme amaçlı olarak LCD ye bir karakter yazdırıyorum. Amacım kesme geldiğinde bu karakterin değişmesi. Yardımcı olabiliseniz sevinirim.

/***************************************************/

#include <built_in.h>

char data = 'A';

void interrupt(void)
{
    ++data;
    INTCON.RBIF = 0;
}

int main(void)
{
    PORTD = 0;
    TRISD = 0xFF;

    INTCON.GIE = 1;
    INTCON.RBIE = 1;
    
    Lcd_Config(&PORTD,2,3,0,7,6,5,4);
    Lcd_Cmd(LCD_CURSOR_OFF);

    for (;;){
          Lcd_Chr_CP(data);
          Delay_ms(1000);
          Lcd_Cmd(LCD_CLEAR);
    }
    
    return 0;
}

Ziya

kesme içerisinde portb yi okut. yeni durum oluşsun.

bouns süresini ve butona basıp çekme süresini aşman için de en az 100 ms kadar bir gecikme uygulaman gerekir.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey

macemi

Alıntı yapılan: "Ziya"kesme içerisinde portb yi okut. yeni durum oluşsun.

bouns süresini ve butona basıp çekme süresini aşman için de en az 100 ms kadar bir gecikme uygulaman gerekir.

Dediklerinizin kısmen faydası oldu teşekkür ederim. Ancak bir sorun daha var. İlk aşamada kendiliğinden bir kesme oluşuyor ve data global değişkeni 'B' oluyor. Data sonra butona her basmamda değerler ikişer ikişer artıyor : 'D' , 'F' gibi. Sanırım hem bastıgımda hem çekerken kesme oluşuyor. Bayrak tutarak buna geçici bir çözüm buldum ancak. Teker teker artmasını isterim tabiki :)

Teşekkürler , iyi çalışmalar.

Ziya

portb yi kesmeyi etkinleştirmeden okut ki ilk durum oluşsun. Butona bastığında kesmeye gider. yeni durumu port b yi okutarak oluşturdun. Butonu bırakınca yine durum değişmesi algılanır ve kesmeye gide. Kesmede bir index tanımla. index = 0 iken istediklerini yapsın. sonra indexi 1 yap (boolean tanımlaman yeterli) kesmeden çık. Butonu bırakınca tekrar kesmeye gidecek. İndex 1 ise hiçbir şey yapma, sadece indexi 0 yap, port b yi oku ve kesmeden çık. İşini görecektir.
Bu günden sonra hiç kimse sarayda, divanda, meclislerde ve seyranda Türk dilinden başka dil kullanmaya. (13 Mayıs 1277) Karamanoğlu Mehmet Bey