pic nasıl programlanır etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
PİC PROGRAMLAMA-11
Capture modunda RC1 ve RC2 pinine gelen sinyale göre
degerlendirilir.Bunlardan herhangi birisine sinyal geldiginde TMR1 kaydecisi
içerigi CCPRxH;CCPRxL içerigine aktarılır ve bir kesme meydana gelir.İkinci bir
yakalama olayı meydana geldiginde o anki TMR1 degeri içerigi tekrardan aktarılır,eski
CCPRxH;CCPRxL nin eski degerleri silinmiş olur.
-Sinyalin her düşen kenarında (ccp_capture_fe)
-Sinyalin her yükselen kenarında (ccp_capture_re)
-Sinyalin her 4 yükselen kenarından sonra (ccp_capture_div_4)
-Sinyalin her 16 yükselen kenarından sonra (ccp_capture_div_16)
Gelelim kod kısmına;
#include <main.h>
int i=0;
#int_ccp1//CCP1 KESMESİ
void yak() {i++;//i degeri birer birer arttırılıyor
output_b(i);//i degişkeni b portuna gönderiliyor
if(i==16)//i degişkeni 16 ya eşit ise
{i=15;//i yi 15 yap
output_b(i);//i degişkenini b portuna gönder
}}
#int_ccp2//CCP' KESMESİ
void sondur(){i--;//i degişkenin bir azalt
output_b(i);//i degişkenini b portuna gönder
if(i==0)//ii degişjenini kontrol et
{i=1;//i ye 1 degerini ata
output_b(i);//i degişkenini b portuna gönder
}}
void main()
{setup_ccp1(ccp_capture_re);//CCP1 kesmesi ayarlaması
setup_ccp2(ccp_capture_re);//CCP2 kesmesi ayarları
enable_interrupts(int_ccp1);//ccp1 kesmesi aktif ettik
enable_interrupts(int_ccp2);//ccp2 kesmesini aktif yaptık
enable_interrupts(global);//aktif yapılan kesmelere izin verdik
set_tris_b(0*00);//b pinlerinin çıkış oldugu ifade edildi
set_tris_c(0xff);//c pinlerinin giriş olacagı ifade edildi
output_b(0*00);//b çıkışımızı sıfırladık
ccp_1_high=0*00;ccp_1_low=0*00;//CCP1 kaydedicimizin içerigini sıfırladık
ccp_2_high=0*00;ccp_2_low=0*00;//CCP2 kaydedicimizin içerigini sıfırladık
while(TRUE)
{
//TODO: User Code
}
}
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ü
}
PİC PROGRAMLAMA-9
Merhaba arkadaşlar.Bugünkü dersimizde lcd ile kayan yazı yazmayı ögrenecegiz.Şekilde görüldügü gibi devremizi oluşturalım.
Ve kod kısmına geçelim :
Merhaba arkadaşlar.Bugünkü dersimizde lcd ile kayan yazı yazmayı ögrenecegiz.Şekilde görüldügü gibi devremizi oluşturalım.
#include <main.h>
#define use_portb_lcd true
#include<lcd.c>
int sayi,i;
void main()
{
while(TRUE)
{
for(i=0;i<40;i++)//40 karekterlik döngü
{
lcd_gotoxy(1,1);//imlece 1.satır 1. stüna getirir
lcd_send_byte(0,0x1c);//karekteri sola kaydırır
printf(lcd_putc,"http://elektro-blogger.blogspot.com.tr/");//ekrana yazırılacak yazı
delay_ms(250);
}
}
}
Not:lcd_send_byte(0,0x18) komutu ise lcd ekranında yazımızı saga kaydırmanıza yarar