avatar_Adem AYDIN

RB0/INT Kesmesi {Çözüldü}

Başlatan Adem AYDIN, 03 Haziran 2017, 19:55:23

fatih88

#15

DISABLE                     'YENİ KESME OLUŞMASIN
INT:                        'INT FONKSİYONU
GIE=0                       'INTERUPLAR KAPALI
hSerIn 30,a,[WAIT("abc"),VERI] '50MS DATA GELMEZ İSE ATLA YA GİT
RCIF=0
TEMP=RCREG                  'TAMPON TEMİZLEME DEĞİŞKENİ
a:
GIE=1                       'BÜTÜN KESMELER AÇIK
Resume                      'KESME OLUŞTUGU YERE DÖN
enable                      'YENİ YESMELERİ AÇ

bu basıcte bir seri alma kesmesi blogu ccs c de ise
#int_ext
void Rb0_Kesmesi()
{
output_toggle(pin_b1);
delay_ms(500);
}

iki süslü parantez arası istediğin işlemleri yazacağın kod kısmı
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Adem AYDIN

Tekrar çok teşekkür ederim, hem yeniyim hemde fazla deneyimim yok, her yaptığım uygulamayı, pic basicde böyle ccs c'de nasıl diye bakarak gidiyorum, buda benim çok fazla soru sormama sebep oluyor :-) sizleride yoruyorum, her şey için teşekkürler.
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

fatih88

sorun değil c dilini iyi öğrenmeye bak  :D iyi geceler
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Adem AYDIN

Yeni Sorumla tekrar geldim,  :)

Programda if komutunu kullanmaz isem kesmeden çıkmıyor sürekli pin_a1'i toogle yapıyor sebebini anlamadım?
/* Bu Program Butona Basıldığında Kesme Yapar (Yaptığı İşleme Ara Verir) ve Kaldığı Yerden Devam Eder */

#include <16F628A.h>          //İşlemci 16F628A
#fuses INTRC_IO,NOWDT,NOMCLR  //Dahili Osilatör Seçildi, WDT Kapalı ve MCLR Kapalı
#byte porta=5                 //PORTA Tanımlaması Yapıldı
#byte portb=6                 //PORTB Tanımlaması Yapıldı
#use fast_io(a)               //Giriş - Çıkış Belirtimi set_tris_a İle Yapılacak
#use fast_io(b)               //Giriş - Çıkış Belirtimi set_tris_b İle Yapılacak
#use delay(clock=4000000)     //Delay Komutunu Kullanabilmek İçin Clock Frekansı Ayarlandı

#int_rb                       //RB4, RB5, RB6 ve RB7 Kesmesi
void RB4_RB7_kesmesi()        //RB4, RB5, RB6 ve RB7'deki Değişiklik Kesmesi
{
if(input(pin_b7)==1)          //PORTB.7=1 İse
{
output_toggle(pin_a1);        //PORTA.1'in Durumunu Değiştir
delay_ms(81);                 //81 ms Bekle
}
}

void main()                   //Ana Program
{
set_tris_a(0x00);             //PORTA'nın Tamamını Çıkış Yap
set_tris_b(0xF0);             //PORTB de RB4, RB5, RB6 ve RB7'yi Giriş Yap
porta=0;                      //PORTA'yı Sıfırla
portb=0;                      //PORTB'yi Sıfırla

enable_interrupts(INT_RB);    //RB4, RB5, RB6 ve RB7 Kesmesini Aktif Yapar
enable_interrupts(GLOBAL);    //Aktif Edilen Kesme/Kesmelere İzin Ver

while(81)                     //Sonsuz Döngü
{
output_toggle(pin_a0);        //PORTA.0'ın Durumunu Değiştir
delay_ms(18);                 //18 ms Bekle
}
}
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

fatih88

Programda pek bir sorun görünmüyor ama
# byte port a ve portb yazma na gerek yok bide butona basılınca hıgholuyor değil mi yani pull down yaptın bağlantıyı değilmi
#int_rb
Void kesme ()
{
    if (input (pin_b7))output_toggle(pin_a1);
    if (input (pin_b6))output_toggle (pin_a0);
}
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Adem AYDIN

Butona basınca low oluyor, byte port belirtmek gereksiz mi? Tam olarak ne iş yaptığını anlayamadım.
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

Adem AYDIN

Önceki mesajımda (#18. İleti) dosyalar var simülasyon ve kodlar içerisinde bakabilirsin.
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

fatih88

Fast_io (a) dedin yeterli
Eğer low oluyorsa butona basınca şunları yaz
if (input (pin_b7)==0)output_toogle (pin_a0); veya
if (!input (pin_b7))output_togglr (pin_a0)
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

fatih88

bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Adem AYDIN

Kesme içinde if'siz yani şartsız yapmasını istiyorum bu şekilde yapamaz mıyım? If'siz yaptığımda, program kesmeye gittiğinde bir daha çıkmıyor?
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

Adem AYDIN

#25
Butona basınca high veya low olarak değiştirebilirim, o sorun değil, kesmenin içerisinde şartsız led yakmak istediğimde program sürekli orada kalıyor, hem low hem high olarak denedim yine aynı kesmede kalıyor.
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

fatih88

Bakınız mecbur if kullanacaksınız neden tek interrupt içinde 4 adet bacak kontrol edeceksiniz başka yolu yok veya ben bilmiyorum senin hatan butonları yanlış okuman sen basılınca 0 olacak diyorsun komutta 1 olduğum da kesme olsun diyorsun zaten basılmadığı zaman buton 1 durumunda senin devre interrupt dan hiç çıkmayacaktır koşulu yanlış kuruyorsun
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Adem AYDIN

O konuda haklısınız onu yanlış yazmışım yani sürekli değiştirdiğim için bende şaşırdım. :)
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

fatih88

O zaman datasheet te bakarak rb kesmesinin edge kısmını ayarlamak gerekir oda intcon2 de olup yanlışım yoksa 0. Biti olmalı
Onuda şu şekil yapacan
#byte intcon2=22f (regester adresini attım kafadan doğrusunu sen yaz)
#bit rbip=intcon2.0
Rbip=0 veya 1 seçerek edgeni ayarlayacaksın
bilgi paylaştıkça çoğalır!!

www.fayelektronik.com

Adem AYDIN

Teşekkür ederim, tüm dediklerinizi dikkate alıp bu şekilde yapacağım yarın görüşürüz, hayırlı sabahlar. :)
ALLAH 'ın Dini Galip Gelmesi İçin (Malınızla ve Canınızla) Çalışın.

Powered by EzPortal