Şimdi Ara

interrupt

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
5
Cevap
0
Favori
1.793
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • arkadaşlar merhaba,
    167877 ve CCS pic C kullanarak basit bir interrupt uygulama örneği verebilir misiniz.örneğin led yanıyor fakat rb0 daki butona basınca led sönecek.bu uygulamayı interrupt ile yapabilir miyiz.teşekkürler...



  • interrupr (kesme) komutu ile yapılaması ve pic c kullanılması şartmı Asemmbly da yapılsa olmazmı
    birde bu bahsettiğin enteger hangi firmanın acaba sorabilirmiyim 16F877 entegresimi demek istedin yoksaa farklı bi entegremi iyi calısmalar
  • View -> Valid Interrupts -> (işlemciyi seç)

    Ordaki liste o işlemci için kullanabileceğin kesme çeşitleri. RB0 kesmesi için EXT kelimesi kullanılıyor.

    Misal EXT için #INT_EXT direktifi kullanacaksın, bunun ardından kesme fonksiyonunu yazacaksın.

    Bu direktif en azından benim kullandığım derleyici versiyonunda fonksiyonla aynı satırda olunca hata veriyor. Sende de aynı şey olursa fonksiyonu direktifin bir alt satırına yaz.

    Kesme yönetimi için ben direkt registerleri kontrol ediyorum. Ama enable_interrupts(...), disable_interrupts(...) gibi fonksiyonlarla da yapabilirsin. Help dosyasına bak.



    < Bu mesaj bu kişi tarafından değiştirildi Liu Kang -- 9 Temmuz 2007; 17:31:45 >
  • //RB0/INT harici kesme uygulaması
    //12.02.2007
    //yazan = klutch
    #if defined (__PCM__)
    #include <16F628A.h>
    #use delay(clock=4000000)
    #fuses NOWDT,PUT,NOLVP,NOBROWNOUT,MCLR,INTRC_IO,NOPROTECT
    #endif

    #byte STATUS = 0x03
    #byte OPTION = 0x81
    #byte INTCON = 0x0B

    #INT_EXT // kesme geldiğinde program akısı
    void RB_isr() // buradan devam eder
    {
    bas:
    output_a(1); // 1 degeri a portuna gönderilir.
    bit_clear(INTCON,1); // RB0/INT harici kesme bayrağı
    delay_ms(100); // tekrar kullanılmak için sıfırlanır
    // butona basılmak için beklenir
    if(input(PIN_B0)==0) // kesme sinyali var mı yok mu?
    {
    goto bas; // var ise bas a dön işlemkeri tekrar uygula
    } // yok ise kesmeyi bitir
    } // kaldığın yerden devam et

    void main()
    {
    set_tris_b(1); // RB0/INT ucu giriş yapılır
    enable_interrupts(INT_EXT); // RB0 harici kesmesi aktif yapılır
    enable_interrupts(GLOBAL); // kesmelere izin verilir
    bit_clear(OPTION,6); // kesme düşen kenarda olussun

    tekrar: // pice ilk enerji verildiğinde
    output_a(1); // 1-2-4-8 olarak 1 sn aralıkla
    delay_ms(1000); // saymaya baslar
    output_a(2); // bu değerler portaya çıkış olarak verilir
    delay_ms(1000);
    output_a(4);
    delay_ms(1000);
    output_a(8);
    delay_ms(1000);
    goto tekrar;
    }



    < Bu mesaj bu kişi tarafından değiştirildi klutch -- 16 Nisan 2008; 13:37:44 >




  • #include <16F877A.h>
    #fuses HS,NOWDT,NOPROTECT,NOLVP
    #use delay(clock=20000000)
    #use rs232(baud=19200,xmit=PIN_C6,rcv=PIN_C7)
    #org 0x1F00,0x1FFF {}
    #use fast_io(B)
    #opt 9
    #byte PORTB = 0x06
    #bit SW = PORTB.0
    #bit LED = PORTB.1



    #INT_RB /* RB Change ISR */

    void isr() {
    LED = 0;
    clear_interrupt(INT_RB); /* Clear RBIF */
    }

    void main()

    {
    set_tris_b(253); /* Only RB1 is output */
    port_b_pullups(TRUE); /* Internal pull-ups activated */
    enable_interrupts(INT_RB); /* Enable interrupts */
    enable_interrupts(GLOBAL);
    while(TRUE)
    {
    LED=1;
    }
    }



    < Bu mesaj bu kişi tarafından değiştirildi sallamax -- 12 Temmuz 2007; 10:43:41 >
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.