SAYFA 1
Ö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ı
1.2 Program Kodu
OSC1/CLKIN 16
RB0/INT 6 RB1 7 RB2 8 RB3 9 RB4 10 RB5 11 RB6 12 RB7 13 RA0 17 RA1 18 RA2 1 RA3 2 RA4/T0CKI 3 OSC2/CLKOUT
15
4 MCLR
U1
PIC16F84A
1 2
X1
CRYSTAL 10k
22p 22p
270R
Ö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 3
Ö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ı
3.2 Program Kodu
OSC1/CLKIN 16
RB0/INT 6 RB1 7 RB2 8 RB3 9 RB4 10 RB5 11 RB6 12 RB7 13 RA0 17 RA1 18 RA2 1 RA3 2 RA4/T0CKI 3 OSC2/CLKOUT
15
4 MCLR
U1
PIC16F84A
1 2
X1
CRYSTAL 10k
22p 22p
270R
SAYFA 5
Ö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ı
OSC1/CLKIN 16
RB0/INT 6 RB1 7 RB2 8 RB3 9 RB4 10 RB5 11 RB6 12 RB7 13 RA0 17 RA1 18 RA2 1 RA3 2 RA4/T0CKI 3 OSC2/CLKOUT
15
4 MCLR
U1
PIC16F84A
1 2
X1
CRYSTAL 10k
22p 22p
270R 10k
4.2 Program Kodu