MİKRODENETLEYİCİLER ÖRNEK PROGRAMLAR Bülent ÖZBEK
Örnek Program -1- B Portuna bağlı LED leri Yakma Bu programda PIC16F84 mikrodenetleyicisinin B portuna bağlı 8 adet LED in yanması sağlanacaktır. Bunu için programda önce B portunun bütün bitleri çıkış olarak tanımlanmalıdır. Bu da TRISB kaydedicisinin bütün bitleri 0 yapılarak gerçekleştirilir. Bu işlemden sonra B portunun tüm bitlerine 1 gönderilerek LED lerin yanması sağlanır. B portunun çıkış olarak tanımlanması için kullanılan TRISB kaydedicisinin dosta kaydedicileri alanındaki BANK1 kısmında olduğu unutulmamalıdır. Bu sebeple TRISB kullanılmadan önce BANK1 e geçilmelidir. Bunun sağlanabilmesi için ise STATUS kaydedicisindeki RP0 biti 1 yapılmalıdır. Sonrasında PORTB kaydedicisi kullanılacaktır. PORTB kaydedicisi de BANK0 da olduğundan RP0 biti 0 yapılarak BANK0 a geçilir. Devrede 4Mhz kristal kullanılacaktır. Bu sebeple konfigürasyon bitleri tanımlaması _XT_OSC olmalıdır. Diğer konfigürasyon bitleri Kod koruma kapalı, WDT (watchdog timer) kapalı be başlangıç zamanlayıcısı açık olarak seçilmiştir. 1.1 Devre Şeması X1 1 2 CRYSTAL 16 15 4 U1 OSC1/CLKIN RA0 OSC2/CLKOUT RA1 RA2 MCLR RA3 RA4/T0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 17 18 1 2 3 6 7 8 9 10 11 12 13 270R PIC16F84A 1.2 Program Kodu SAYFA 1
Örnek Program -2- B Portuna bağlı LED leri Yakıp Söndürme Bu programda Örnek Program-1- deki devre kullanılacaktır. LED leri yakmak için PORTB nin tüm bitlerine 1, söndürmek için ise 0 gönderilmelidir. Ancak mikrodenetleyicinin çalışma hızında bu işlem yapılırsa LED lerin yanıp söndüğü görülemeyecektir. Çünkü bu kadar hızlı değişen olaylara insan gözü tepki verememektedir. Bu durumun düzeltilmesi için LED lerin her yanmasından ve sönmesinden sonra bir süre beklemek gerekmektedir. Bunu sağlamak için programda zaman gecikmesi sağlayan bir altprogram kullanılmıştır. 2.1 Program Kodu SAYFA 2
Örnek Program -3- B Portuna bağlı LED leri Sağdan Sola ve Soldan Sağa Kaydırma Bu programda da Örnek Program-1- deki devre kullanılacaktır. Bu programda aynı anda sadece bir adet LED yanacak ve belirli zaman aralıklarıyla yanan LED değiştirilecektir. Örneğin ilk LED in yanması için RB0 ucuna lojik 1 gönderilmelidir. Bunun için PORTB kaydedicisine ooooooo1 verisi yazılır. Sonrasında ya ikinci LED in yanması için 00000010 gönderilir ve bu işlem sonrasında benzer şekilde devam eder ya da aynı işlem döndürme emirleri ile yapılabilir. Bu programda döndürme emirleri kullanılacaktır. Önce PORTB ye ooooooo1 verisi yazılacak ve sola doğru döndürülmeye başlanacaktır. Son LED e gelindiğinde yani veri 10000000 olduğunda ise bu sefer veri sağa döndürülecektir. Benzer şekilde veri 00000001 olunca tekrar sola döndürme işlemi başlayacaktır. Bu durumda ilk LED e ve son LED e gelindiği kontrol edilmelidir. Bunun için sola doğru gidilirken her döndürme işlemi sonrasında RB7 nin 1 olup olmadığı kontrol edilecek, 1 ise sağa döndürme işlemine geçilecektir. Benzer şekilde, sağa doğru gidilirken her döndürme işlemi sonrasında RB0 ın 1 olup olmadığı kontrol edilecek, 1 ise sola döndürme işlemine geçilecektir. 3.1 Devre Şeması X1 1 2 CRYSTAL 16 15 4 U1 OSC1/CLKIN RA0 OSC2/CLKOUT RA1 RA2 MCLR RA3 RA4/T0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 17 18 1 2 3 6 7 8 9 10 11 12 13 270R PIC16F84A 3.2 Program Kodu SAYFA 3
SAYFA 4
Örnek Program -4- Buton Kontrolü Bu programda RA0 ucuna bağlı butona basıldığında B Portuna bağlı LED leri yanması bırakıldığında ise sönmesi sağlanacaktır. Bu şekilde benzer buton uygulamaları yapılabilir. Burada B Portuna LED lerin bağlanacağı için çıkış, RA0 ucunun ise buton bağlanacağı için giriş olarak tanımlanması gerektiği unutulmamalıdır. Program yazılırken butonun donanımsal bağlantısına da dikkat edilmelidir. Buradaki devrede butona basılmamışsa RA0 ucuna lojik 1, basılmışsa lojik 0 gitmektedir. Buna göre önce butona basıldığının anlaşılması için buton testi sıfır mı? Basıldıktan sonra bırakıldığının anlaşılması için bir mi? Şeklinde yapılmıştır. 4.1 Devre Şeması X1 1 2 CRYSTAL 16 15 4 U1 OSC1/CLKIN RA0 OSC2/CLKOUT RA1 RA2 MCLR RA3 RA4/T0CKI RB0/INT RB1 RB2 RB3 RB4 RB5 RB6 RB7 17 18 1 2 3 6 7 8 9 10 11 12 13 270R PIC16F84A SAYFA 5
4.2 Program Kodu SAYFA 6