Arama butonu
Bu konudaki kullanıcılar: 1 misafir, 1 mobil kullanıcı
4
Cevap
1872
Tıklama
0
Öne Çıkarma
interrupt
M
19 yıl (57 mesaj)
Çavuş
Konu Sahibi

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...



E
19 yıl (617 mesaj)
Yüzbaşı

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


Bu mesaja 1 cevap geldi.
L
19 yıl (2316 mesaj)
Binbaşı

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 >

K
19 yıl (1341 mesaj)
Binbaşı

//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 >
Bu mesaja 1 cevap geldi.
S
19 yıl (197 mesaj)
Teğmen

#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 >

DH Mobil uygulaması ile devam edin. Mobil tarayıcınız ile mümkün olanların yanı sıra, birçok yeni ve faydalı özelliğe erişin. Gizle ve güncelleme çıkana kadar tekrar gösterme.