CCS C DE 16F877 İÇİN TİMER1 TAŞTIĞINI NBASIO KONTROL E

Başlatan aydertunca, 15 Mayıs 2009, 21:40:14

aydertunca

SLM . ARAKADAŞLAR...CCS C DE 16F877 İLE BİR FREKANSMETRE YAPMAM İSTİYORUM...0 İLE 3KHZ ARASINDAKİ KARE DALGANIN FREKANSLARINI ÖLÇSÜN İSTİYORUM...FAKAT..76HZ VE ALTINDA TİMER TAŞYIR YAZILIMIMA GÖRE ...CCP2 VE TİMER1 KULLANIYORUM...CCP2 DEN PALSLERİ ALIP HESAPLATIYORUM..TİMER1 TAŞTIĞINDA HANGİ KOMUTLA KONTROL EDİLİYOR VE TİMER1 BAYRAĞI TEKRAR NASIL ESKİ HALİNE GETİRİLİYOR BUNU BİLMİYORU...TİMER1İN TAŞTIĞI ANI BİLMEM LAZIM...NASIL YAPABİLİR....YARDIMLARINI BEKLİYORUM..

ferdem

Sorunuzun cevabı katalogun 54. sayfasında. Timer1 overflow kesmesi için  genel kesmeler açık(GIE), peripheral kesmeler açık(PEIE) ve timer1 interrupt(TMR1IE) seçeneğinin açık olması gerekiyor(bu bitlerin lojik bir olması gerekiyor). Bunları CCS C nin hazır fonksiyonlarıyla yapmak mümkün olabilir ancak kendi bildirimimizi yapmak daha kesin bir yol, kodumuzun baş kısmında:
#byte INTCON=0x0B
#bit TMR1IE=0x8C.0 //PIE1 registerinin 0. biti
#bit TMR1IF=0x0C.0 //PIR1 registerinin 0. biti


satırlarıyla "register" ve "bit" adreslerini tanıtalım. Sonra mainin içinde:

INTCON=0b11000000;
TMR1IE=1;

yazarak kesmeyi kuralım. Kesme geldiğinde çalışacak alt rutini de mainin dışında bir yere ekleyelim:
#INT_TIMER1
void timer1_tasti(){
TMR1IF=0;
//islemler
}

Gözden kaçırdığım bir şey olmadıysa çalışması lazım, kolay gelsin.