Temrin1: PIC in PORTB çıkışlarından RB5 e bağlı LED i devamlı olarak 2 sn. aralıklarla yakıp söndüren programı yapınız. En başta PORTB yi temizlemeyi unutmayınız. Devre Şeması: İşlem Basamakları 1. Devreyi kurunuz. (Besleme, Clock, Reset ve istenilen elemanlar) 2. MikroC derleyici programını ayarlarını yaparak çalıştırınız. 3. Yapacağınız işe uygun program kodlarını MikroC editör programında yazınız ve kaydediniz. 4. Yazdığınız programı derleyerek ( Build ).hex uzantılı dosyayı oluşturunuz. 5. Programlayıcı kartınızı bilgisayarın uygun USB girişine bağlayınız. 6. PIC entegresini uygun şekilde programlayıcı karta yerleştiriniz. 7. Programlayıcı yazılımını çalıştırınız. (MicroPro26) 8. File > Load komutu ile ***.hex dosyasınınn bulunduğu dizinden dosyayı bulup yükleyiniz. 9. Gerekli sigorta ayarlarının düzgün yapıldığından emin olunuz. 10. Program komutu ile yazdığınız programı PIC içersindeki program belleğine atınız. 11. Devreye enerji verip doğru çalışıp çalışmadığını kontrol ediniz. 22
Program Kodları void main() trisb=0; portb=0; while(1) portb.b5=1; delay_ms(1000); portb.b5=0; delay_ms(1000); KOD void main().. trisb=0; PROGRAM KODLARININ ANLAMLARI AÇIKLAMA Program her zaman ana fonksiyon olan void main() fonksiyonu ile başlar ve bundan sonraki 2 süslü parantez arasına kodlar yazılır. Bu kısım tüm programlarda sabittir. Araya yazılacak her kod dan sonra noktalı virgül kullanılması unutulmamalıdır. PIC in hangi bacağının giriş hangi bacağının çıkış olacağı programın başında ayarlanmalıdır. Bu ayar PORTA için TRISA ile, PORTB için TRISB ile ayarlanır. Bizim kullandığımız PIC te RA0, RA1, RA2, RA3 VE RA4 olmak üzere PORTA bacakları, RB0, RB1, RB2, RB3, RB4, RB5, RB6, RB7 olmak üzere PORTB bacakları vardır. TRISB=0; komutu ile 8 bitlik TRISB nin içeriği 00000000 olur. En soldaki bitten sağa doğru sırayla RB7, RB6, RB5, RB4, RB3, RB2, RB1, RB0 bacaklarının ne olacağı buradan belirlenir. 0 olması çıkış olması 1 olması giriş olması demektir. 23
Bacakların giriş çıkış durumunu ayarlama örnek Örneğin RB0, RB1 ve RB2 nin giriş, PORTB nin diğer bacakları ile PORTA nın tüm portlarının çıkış olmasını istiyorsak TRISA ve TRISB şu şekilde ayarlanmalıdır. TRISA=0b00000000; (0b00000000=0x00) TRISB=0b00000111; (0b00000111=0x07) TRISB=0; demek TRISB = 00000000 demektir. TRISB=0x00; demek TRISB = 00000000 demektir. TRISB=0b00000000; demek TRISB = 00000000 demektir. TRISB=0xF1; demek TRISB = 11110001 demektir. TRISB.b1=0; demek TRISB nin sadece 1 nolu bitini (sağdan 2. Bit) 0 yap diğer bitler aynen kalsın demektir. Bu işlem RB1 bacağının çıkış olarak ayarlanmasını sağlar. 0x.. şeklinde hex sistemde yazı yazılır. 2 basamaklı, 8 bit yazılması gerekir 0b.. şeklinde binary sistemde yazılır. 8 bit yazılması gerekir. portb=0; while(1) PORTB ye bağlı bacaklara 0 bilgisi gönderir. Yani bu bacaklar toprağa bağlanmış gibi olur. Bizim devremizde çıkışlara LED bağlı olduğundan LED ler sönük konuma geçer. Biz buna çıkış portunu temizleme diyoruz. Eğer bunu yapmazsak daha önceden aklında kalan bilgiye göre ilk çalıştırmada LED lerin bazıları yanar bazıları söner. Bu komut sonsuz döngü oluşturur. 2 süslü parantez içindeki komutları durmadan sonsuza kadar işler. portb.b5=1; delay_ms(1000); PORTB nin 5 nolu bitini 1 yapar. Yani RB5 nolu bacağı 1 yapar. Yani bu bacağa +5V gider. Bu sayede bu bacağa bağlı LED yanar. (Daha önceden PORTB nin tüm bacaklarını 0 yaptığımız için sadece RB5=1 olur.) Program buraya geldiğinde 1000 msn=1 sn bekler. Eğer bu komut olmasaydı çok hızlı bir işlemle 1 mikrosaniye 24
portb.b5=0; aralıklarla LED i yak LED i söndür komutları olmuş olurdu. Bu durumda LED devamlı yanık kalırdı. PORTB nin 5 nolu bitini 0 yapar. Yani RB5 nolu bacağı 0 yapar. Yani bu bacağı toprağa bağlamış oluruz. Bu sayede bu bacağa bağlı LED söner. ÇIKIŞLARA BİLGİ GÖNDEREREK LEDLERİ YAKIP SÖNDÜRME PORTB ye bağlı LED lerin tamamını yakmak için PORTB ye bağlı LED lerden yüksek değerli 4 bit yansın, düşük değerli 4 bit sönsün istenirse PORTB ye bağlı LED ler yüksek değerli bitten düşük değerli bite doğru yansın, sönsün şeklinde gitsin istenirse PORTB nin 3. bitine (RB3 e) bağlı LED yansın istenirse PORTB nin 6. bitine (RB6 ya) bağlı LED sönsün istenirse PORTB=1; PORTB=0xFF; PORTB=0b11111111; PORTB=0xF0; PORTB=0b11110000; PORTB=0xAA; PORTB=0b10101010; PORTB.b3=1; PORTB.b6=0; 25
Program Kodlarının Açıklaması KOD Kodun Anlamı Program Anlamı void main() Ana fonksiyon trisb=0; portb=0; while(1) Özel Kaydedicilerden TRIS in tüm bitlerini 0 yapar. PORTB ye ait tüm pinlere 0 gönderir. (RB7 RB0) Bu komuttan sonraki iki süslü parantez arasını sonsuza kadar tekrar eder. PORTB yi çıkış olarak ayarlar. PORTB yi temizler. LED lerin devamlı yanıp sönmesini sağlar. portb.b4=1; PORTB nin 4. pinine (RB4) 1 bilgisi gönderir. RB4 e bağlı LED i yakar. portb.b5=1; PORTB nin 5. pinine (RB5) 1 bilgisi gönderir. RB5 e bağlı LED i yakar. delay_ms(1000); Program akışı 1 sn. bekler. Program akışı 1 sn. bekler. portb.b4=0; PORTB nin 5. pinine (RB4) 0 bilgisi gönderir. RB4 e bağlı LED i söndürür. portb.b5=0; PORTB nin 5. pinine (RB5) 1 bilgisi gönderir. RB5 e bağlı LED i söndürür. delay_ms(1000); Program akışı 1 sn. bekler. Program akışı 1 sn. bekler. 26
ASSEMBLY PROGRAM KODLARI ;16F84 İÇİN LED YAKMA PROGRAMI LIST P=16F84 INCLUDE "P16F84.INC" CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC HAZIRLIK BSF STATUS,5 ;BANK1 E GEÇ CLRF TRISB ;PortB nin tüm uçlarını ÇIKIŞ olarak ayarla BCF STATUS,5 ;BANK0 A GEÇ CLRF PORTB ;PORTB Yİ TEMİZLE (LEDleri söndür) BASLA BSF PORTB,4 ;RB4 portuna bağlı LED i yak. BSF PORTB,5 ;RB5 portuna bağlı LED i yak. END ;Programı durdur. ADRES MAKİNE KODU MAKİNE KODU ASSEMBLY ANLAMI (hex) (bin) KOMUT 0000 1683 01 0110 1000 0011 BSF STATUS,5 0001 0186 00 0001 1000 0110 CLRF TRISB 0002 1283 01 0010 1000 0011 BCF STATUS,5 0003 0186 00 0001 1000 0110 CLRF PORTB 0004 1606 01 0110 0000 0110 BSF PORTB,4 0005 1686 01 0110 1000 0110 BSF PORTB,5 END 27
Temrin: Tüm LED leri yakan program. 28