Posted by : Unknown
13 Temmuz 2015 Pazartesi
PİC PORGRAMLA-10
Merhaba
arkadaşlar.Bügünkü dersimizde Timer0 kesmesi ne demek onu anlatmaya
çalışacagım.Diyelim ki güzel bir film izliyorsunuz.Filmin en heyecanlı yerinde
telefonunuz çaldı.Filminizi durdurup telefonunuza bakarsınız.Ardından
kaldıgınız yerden filminizi izlemeye devam edersiniz.Kesme olayıda aynen bu
mantık üzeine çalışmaktadır. Kesme sinyali geldigi anda ana program çalışmayı
bırakıp kesme de yapılacak olan işlemlere gidiyor ve onları icra
ediyor.Ardından tekrardan ana programa geri dönüyor.16F877 ait kesme örnekleri;
1)RB0
kesmesi
2)RB4-RB7
pinlerindeki degişiklik kesmesi
3)Timer0
birimi taşma kesmesi
4)Timer1
birimi taşma kesmesi
5)Timer2
birimi taşma kesmesi
6)A/D
çevirimi yapıldıgında meydana gelen kesme
7)CCP1
modulu kesmesi
8)CCP2 modulu
kesmesi
9)Paralel
porttan veri geldiginde oluşan kesme
10)Seri
porttan veri geldiginde oluşan kesme
setup_timer_0(RTCC_EXT_H_TO_L | RTCC_DIV_2);
// Timer0 ayarları yapılıyor.
//RTCC_EXT_H_TO_L=+5
volttan 0 volta düşünce olacak
//RTCC_EXT_L_TO_H=0
volttan +5 volta çıkınca olacak olan kesme
//RTCC_INTERNAL=Denetleyicinin
çalışma frekansı olacak
//RTCC_DIV_2=bölme
oranın ifade eder(2,4,8,16,32...256 olarak yazılabilir)
set_timer0(254); // TMR0 değeri belirleniyor
enable_interrupts(INT_timer0); // int_timer0
kesmesini aktif yapar
enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver
Gelelim kod kısmına;
#include
<16f877.h>
int sayi=0;
#int_timer0 // Timer0 kesmesi
void timer0_kesme () // Kesme fonksiyonu ismi
{
set_timer0(254); // TMR0 değeri belirleniyor
sayi++; // sayi değeri 1 arttrılıyor
output_b(sayi); // sayi değeri B portuna gönderiliyor
}
void main (
)
{
setup_psp(PSP_DISABLED);
setup_spi(SPI_SS_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_a(0x10); // RA4 pini giriş
set_tris_b(0x00); // B portu komple çıkış
output_b(0x00); // B portu çıkışı ilk anda sıfırlanıyor
setup_timer_0(RTCC_EXT_H_TO_L | RTCC_DIV_2);
// Timer0 ayarları yapılıyor
set_timer0(254); // TMR0 değeri belirleniyor
enable_interrupts(INT_timer0); // int_timer0
kesmesini aktif yapar
enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver
while(true); // Sonsuz döngü
}
Benzer Konular :
- Ana Sayfaya Dön »
- ccs c ile pic programlama , pic ile kontrol , pic ile lcd kontrolü , pic ile led kontrol , pic ile otomasyon , pic nasıl programlanır , pic programlama »
- PIC PROGRAMALAMA DERSLERI 10