22.06.2011
MİKRODENETLEYİCİLER
(MICROCONTROLLER)
_______________________________________________________________________________________________
Mikrodenetleyiciler hakkında bilgiler içeren kitabımın
bir bölümünü buraya tıklayarak indirebilirsiniz.
_______________________________________________________________________________________________

_______________________________________________________________________________________________
Mikroişlemci (Mİ, MP)
Verilen komutlara göre matematiksel işlemleri yapan entegredir. Yüzlerce çeşidi vardır. Çok yüksek hızlarda (GHz) çalışabilir. Bilgisayar, telefon santrali, robot, otomasyon sistemleri ve uzay araçlarında kullanılır.
Mikroişlemcileri programlamak, devreye bağlamak için ileri elektronik ve bilgisayar programlama dili/dilleri bilmek gerekir.
Ledleri, röleleri, tristörü, triyakı, optokuplörü vb. mikroişlemcili sistemlerle kontrol etmek pahalı bir yoldur.
_______________________________________________________________________________________________
Mikrodenetleyici (MD, MC)
Hız olarak mikroişlemciden çok düşüktür. Ancak MD’nin içinde bellek birimi, port birimi gibi düzenekler de mevcuttur.
Özet olarak Mİ’yi zeka düzeyi çok yüksek bir beyin olarak düşünebiliriz. MD ise orta zekalı bir beyin ve el, ayak, göz, kulaktan oluşan bir sistemdir.
Mİ’ye buton ve ledi doğrudan bağlayamayız. Ara yongalar (chip, entegre, tümleşik devre) gerekir. Ama MD’ye buton, anahtar, sensör, led, transistör, triyak gibi elemanlar direkt olarak bağlanabilir.
_______________________________________________________________________________________________
PIC'i programlamak için:
- Assembly
- BASIC
- JAL
- C
dilleri kullanılabilir.
Assembly dili karasabana, BASIC dili traktör pulluğuna, C ise tam otomatik pulluklu traktöre benzetilebilir.
Lise ve MYO öğrencilerinin en çabuk öğrendiği dil BASIC'dir. BASIC dilinin komutlarıyla elektrik, elektronikle ilgili her türlü cihazın üretimi yapılabilir.
BASIC dilinin piyasada değişik firmalar / kişiler tarafından üretilmiş 4-5 farklı türü vardır. Her bir dil arasında bir kaç komut farklı biçimde ifade edilir. Örneğin bekletme komutu WAITMS ve PAUSE olarak yazılabilmektedir.
Bu dokümanda anlatılan PIC SIMULATOR IDE yazılımının kullandığı (anladığı) bekletme komutu WAITMS'dir. Eğer bekletme mikrosaniye cinsinden olacaksa komut WAITUS olarak yazılır.
PIC BASIC PRO dilinde ise bekleme komutu PAUSE ve PAUSEUS'tur.
Uygun görülen / tercih edilen dille yazılan program PIC'e yükleneceği zaman MAKİNE DİLİ'ne çevrilir. Yani *.BAS olan dosya *.HEX biçimine çevrilir.
_______________________________________________________________________________________________
PIC SIMULATOR IDE
ve
PROTEUS / ISIS
YAZILIMLARI İLE PIC BASIC DİLİNİN KOMUTLARINI KULLANARAK MİKRODENETLEYİCİLERİ PROGRAMLAMAK
_______________________________________________________________________________________________
PIC SIMULATOR IDE'Yİ İNDİRMEK İÇİN LİNK
http://hotfile.com/dl/120428852/bd162a9/00PIC_SIM_IDE.rar.html
_______________________________________________________________________________________________
PROTEUS YAZILIMININ 6.9 YA DA 7.7 SÜRÜMÜNÜ GOOGLE.COM SİTESİNDEN ARATARAK TEMİN EDEBİLİRSİNİZ.
_______________________________________________________________________________________________
MİKRODENETLEYİCİ İLE ÇALIŞAN TEMEL DEVRELERİ BİLGSAYARINIZA İNDİREBİLMEK İÇİN BURAYA TIKLAYINIZ (22.06.2011)
_______________________________________________________________________________________________
PIC (perihaberal interface controller, çevre birimlerini denetleyen arayüz)
PIC ile:
- Her türlü otomatik kumanda devresi kontrol edilebilir.
- PLC cihazının yaptığı her iş 20’de 1 fiyata yapılabilir.
- Ledli kayan yazı panoları hazırlanabilir.
- Ledli, 220 V lambalı ışık oyunları hazırlanabilir.
- DC/AC motorlar, step (adım) motorlar kontrol edilebilir.
- Her türlü alarm (hırsız, yangın) devresi tasarlanabilir.
- Uzaktan kumandalı devreler yapılabilir.
- Isı, ışık, ses, nem, basınç, ağırlık ölçme devreleri yapılabilir.
_______________________________________________________________________________________________
PIC’in çalıştırılması için:
- 1 adet 220 V giriş / 6, 8, 12 V çıkışlı, 4-5 W güçlü bir trafo
- 1 adet 0,5-1 A köprü diyot
- 1 adet 470-1000 mikrofarat / 16 V kondansatör
- 1 adet 7805 regülatör entegresi
- 1 adet 100-330 nanofaratlık kondansatör
- 1 adet 4 – 20 MHz x-tall (kristal) ya da basit R-C osilatör
- 2 adet 22 pF kondansatör (x-tall için)
- 1 adet 3,3-10 K arası sabit direnç (MCLR ucuna besleme verebilmek için)
yeterlidir. Bu elemanlar PIC’in iş görür hale gelmesini sağlar.
Bilgisayar ortamında BASIC dilinin komutları kullanılarak yazılan program HEX kodlarına çevrilir. Yani, insanın anladığı komutlar entegrenin anladığı makine diline çevrilir.
_______________________________________________________________________________________________
MİKRODENETLEYİCİLERİ TEMEL VE ORTA DÜZEYDE ÖĞRENMEK İÇİN YAPILMASI GEREKEN DENEYLER
Assembler diliyle sistem tasarlamak eziyettir. O nedenle BASIC ya da C diliyle çalışılmalıdır.
Aşağıda verilen deneyler PIC SIMULATOR IDE (PSI) yazılımının BASIC COMPILER adlı editörüyle yazılacak ve simülasyonları (benzetim) yine PSI ile yapılacaktır.



Deney 1: PIC16F84A adlı mikrodenetleyicinin B port’unun 0. bit’ine (PORTB.0) ledi yakan programı BASIC dilinin komutlarıyla PIC SIMULATOR IDE (PSI) programını kullanarak yazınız. Yazılan programı makine diline çeviriniz (derleyiniz, compile) ve benzetimini PSI ile yapınız.

1. YÖNTEM
TRISB = %00000000 'PIC’in B port’unu çıkış olarak ayarla
BASLA:
PORTB=%00000001
END
Not: PORTB’yi çıkış olarak ayarlama işleminde BINARY (İKİLİ) sayı kullanılmıştır.
Yukarıdaki programın makine dilindeki karşılığı:
:100000008A110A120528000009008316860183124E
:08001000013086000A280B28CC
:02400E00FD3F74
:00000001FF
----------------------------------------------------------------------------------------------
2. YÖNTEM
TRISB = 0 'PIC’in B port’unu çıkış olarak ayarla
BASLA:
PORTB=%00000001
END
Not: PORTB’yi çıkış olarak ayarlama işleminde DESIMAL (ONLU) sayı kullanılmıştır.
* END komutu programın bittiğini belirtir.
----------------------------------------------------------------------------------------------
3. YÖNTEM
TRISB = 0x00 'PIC’in B port’unu çıkış olarak ayarla
BASLA:
PORTB=%00000001
END
Not: PORTB’yi çıkış olarak ayarlama işleminde HEXADECIMAL (ONALTILI) sayı kullanılmıştır.
----------------------------------------------------------------------------------------------
4. YÖNTEM
TRISB = %00000000 'PIC’in B port’unu çıkış olarak ayarla
BASLA:
PORTB.0 = 1
END
Not: PORTB’nin sadece 0. bit’ine lojik 1 (5 V) yollanmıştır.
_______________________________________________________________________________________________
Deney 2: PIC16F84A adlı mikrodenetleyicinin B port’unun 0. (PORTB.0) ve 1. bit’ine (PORTB.1) ledleri yakan programı BASIC dilinin komutlarıyla PIC SIMULATOR IDE (PSI) programını kullanarak yazınız. Yazılan programı makine diline çeviriniz (derleyiniz, compile) ve benzetimini PSI ile yapınız.
TRISB = %00000000 'PIC’in B port’unu çıkış olarak ayarla
BASLA:
PORTB=%00000011
END
Yukarıdaki programın makine dilindeki karşılığı:
:100000008A110A120528000009008316860183124E
:08001000033086000A280B28CA
:02400E00FD3F74
:00000001FF
_______________________________________________________________________________________________
Deney 3: PIC16F84A adlı mikrodenetleyicinin B port’unun 8 pin’ine bağlanan 8 ledi yakan programı BASIC dilinin komutlarıyla PIC SIMULATOR IDE (PSI) programını kullanarak yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
TRISB = %00000000 'PIC’in B port’unu çıkış olarak ayarla
BASLA:
PORTB=%11111111
END
_______________________________________________________________________________________________
Deney 4: PIC16F84A’nın PORTB.0’ına bağlı ledi yakan, bir süre sonra söndüren (turn-off tipi zamanlayıcı) programı BASIC dilinin komutlarıyla PSI programını kullanarak yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
TRISB = %00000000 'PIC’in B port’unu çıkış olarak ayarla
BASLA:
PORTB = %00000001
WAITMS 1 'Ledi bir süre yanık tut
PORTB = %00000000
END
Not: WAITMS değeri 1 – 255 arası olabilir. Gecikme süresi milisaniye (ms) cinsindendir. WAITMS yerine WAITUS yazılırsa gecikme süresi mikrosaniye cinsinden olur.
PSI ile simülasyon yaparken gecikme değerini WAITUS (1-100) ya da WAITMS 1-5 arası bir değer gireriz. Eğer yazdığımız programı PIC’e yükleyeceksek WAITMS değerini 50-100-200 gibi bir değer girebiliriz.
_______________________________________________________________________________________________
Deney 5: PIC16F84A’nın PORTB.0’ına bağlı ledi bir süre sonra yakan (turn-on tipi zamanlayıcı) programı BASIC dilinin komutlarıyla PSI programını kullanarak yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
TRISB = %00000000 'PIC’in B port’unu çıkış olarak ayarla
BASLA:
WAITMS 2 'Bir süre bekle
PORTB = %00000001
END
_______________________________________________________________________________________________
Deney 6: PIC16F84A’nın PORTB.0’ına bağlı ledi sürekli olarak yakıp söndüren (flaşör) programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
1. YÖNTEM
TRISB = %00000000 'PIC’in B port’unu çıkış olarak ayarla
BASLA:
PORTB = %00000001
WAITMS 1
PORTB = %00000000
WAITMS 1
GOTO BASLA 'BASLA adlı etikete git, dallan, döngü yap.
END
Hatırlatma: GOTO .... komutu istenilen satıra / etikete gidilmesini sağlar.
2. YÖNTEM
TRISB = %00000000 'PIC’in B port’unu çıkış olarak ayarla
BASLA:
PORTB.0 = 1
WAITMS 1
PORTB.0 = 0
WAITMS 1
GOTO BASLA 'BASLA adlı etikete git (dallan, döngü yap).
END
_______________________________________________________________________________________________
Deney 7: PIC16F84A’nın PORTB.0’ına ve PORTB.1’ine bağlı iki ledi sürekli olarak yakıp söndüren (flip-flop) programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
1. YÖNTEM
TRISB = %00000000
BASLA:
PORTB = %00000001
WAITMS 1
PORTB = %00000010
WAITMS 1
GOTO BASLA
END
_______________________________________________________________________________________________
Deney 8: PIC16F84A’nın B port’unun 3 bit'ine bağlı 3 ledi sırayla yakan (üç kanal yürüyen ışık) programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
TRISB = %00000000
BASLA:
PORTB = %00000001
WAITMS 1
PORTB = %00000010
WAITMS 1
PORTB = %00000100
WAITMS 1
GOTO BASLA
END
_______________________________________________________________________________________________
Deney 9: PIC16F84A’nın A port’unun 0. bit’ine bağlı butona basıldığında B port’unun 0. bitine bağlı ledi yakan programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
TRISA = %11111111
TRISB = %00000000
BASLA:
IF PORTA.0 = 0 Then
PORTB = %00000001
ELSE
GOTO BASLA
ENDIF
END
Not: IF … THEN … ELSE … ENDIF komutları PIC’e bağlı butondaki bilgiyi (datayı) okumada kullanılır. Uygulamada buton yerine sınır anahtarı, toggle (iki yollu) anahtar, ışık / sıcaklık / ses / titreşim vb. sensörler de bağlanabilir.
Deney 10: PIC16F84A’nın A port’unun 0. bit’ine bağlı butona basıldığında B port’unun 0. bitine bağlı ledi yakan, butona basılmadığında ise B port’unun 1. bitine bağlı ledi yakan programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
TRISA = %11111111
TRISB = %00000000
BASLA:
IF PORTA.0 = 0 Then
PORTB = %00000001
ELSE
PORTB = %00000010
GOTO BASLA
ENDIF
END
Deney 11: PIC16F84A’nın A port’unun 0. ve 1. bit’lerine bağlı butonlara basıldığında B port’unun 0. bitine bağlı ledi yakan, butona basılmadığında ise ledi söndüren programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
TRISA = %11111111
TRISB = %00000000
basla:
If PORTA.0 = 0 AND PORTA.1 = 0 Then
PORTB = %00000001
Else
PORTB = %00000000
Endif
Goto basla
End
Deney 12: PIC16F84A’nın A port’unun 0. ve 1. bit’lerine bağlı butonlardan herhangi birine ya da ikisine basıldığında B port’unun 0. bitine bağlı ledi yakan, iki butona da basılmadığında ise ledi söndüren programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
TRISA = %11111111
TRISB = %00000000
basla:
If PORTA.0 = 0 OR PORTA.1 = 0 Then
PORTB = %00000001
Else
PORTB = %00000000
Endif
Goto basla
End
* OR komutu lojik VEYA işlemini yapar. Yani iki girişten biri ya da ikisi "1" veya "0" olunca çıkış bilgisi oluşur.
Deney 13: PIC16F84A’nın A port’unun 0. bit’ine bağlı butona basıldığında B port’unun 0. bit’ine bağlı ledi yakan, A port’unun 1. bit’ine bağlı butona basıldığında ise ledi söndüren programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
TRISA = %11111111
TRISB = %00000000
basla:
IF PORTA.0 = 0 THEN
PORTB.0 = 1
ENDIF
IF PORTA.1 = 0 THEN
PORTB.0 = 0
ENDIF
GOTO BASLA
END
Deney 14: PIC16F84A’nın B port’unun 0. bit’ine bağlı ledi 5 kez yakıp söndüren programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
TRISB = %00000000
DIM SAYAC AS BYTE
basla:
FOR SAYAC = 1 TO 5
PORTB.0 = 1
WAITMS 1
PORTB.0 = 0
WAITMS 1
NEXT SAYAC
END
* DIM ..... AS BYTE komutu ...... adı verilen bir register'in 8 bit (1 byte) büyüklükte bilgi saklayabilmesini sağlar.
Eğer komutta BYTE yerine WORD yazılırsa 2 byte (16 bit) büyüklüğünde bilgi saklayan bir register (kayıtçı) elde edilir.
Deney 15: PIC16F84A’nın B port’unun 0. bit’ine bağlı ledi 5 kez yakıp söndüren, daha sonra 3-5 saniye bekleyen ardından B port’una bağlı 8 ledi 4 kez yakıp söndüren, bu işi sürekli tekrar eden programı BASIC dilinin komutlarıyla PSI aracılığıyla yazınız. Yazılan programı makine diline çeviriniz ve benzetimini PSI ile yapınız.
TRISB = %00000000
DIM SAYAC AS BYTE
basla:
FOR SAYAC = 1 TO 5
PORTB.0 = 1
WAITMS 1
PORTB.0 = 0
WAITMS 1
NEXT SAYAC
WAITMS 5
FOR SAYAC = 1 TO 4
PORTB = %11111111
WAITMS 1
PORTB = %00000000
WAITMS 1
NEXT SAYAC
GOTO BASLA
END
Not: DIM SAYAC AS BYTE komutu 8 bit’lik bir register’in (kaydedicinin, kayıtçının) adının SAYAC olmasını sağlar.
Deney 16: PIC16F84A’nın B port’una bağlı 8 ledi sırayla çalıştıran programı yazınız.
TRISB = %00000000
basla:
PORTB = %00000001
WAITMS 1
PORTB = %00000010
WAITMS 1
PORTB = %00000100
WAITMS 1
PORTB = %00001000
WAITMS 1
PORTB = %00010000
WAITMS 1
PORTB = %00100000
WAITMS 1
PORTB = %01000000
WAITMS 1
PORTB = %10000000
WAITMS 1
GOTO BASLA
END
Deney 17: PIC16F84A’nın B port’una bağlı 8 ledi ikişer ikişer çalıştıran programı yazınız.
TRISB = %00000000
basla:
PORTB = %00000011
WAITMS 1
PORTB = %00001100
WAITMS 1
PORTB = %00110000
WAITMS 1
PORTB = %11000000
WAITMS 1
GOTO BASLA
END
Deney 18: PIC16F84A’nın A ve B port’larına bağlı 13 ledi yakıp söndüren programı yazınız.
TRISA = %00000000
TRISB = %00000000
basla:
PORTA = %11111111
PORTB = %11111111
WAITMS 1
PORTA = %00000000
PORTB = %00000000
WAITMS 1
GOTO BASLA
END
Not: 16F84'ün A port'u çıkış yapıldığında RA4 adlı pin ile +5 V'luk besleme arasına 1-2,2 K'lık bir direnç bağlanmalıdır. Bu yapılmaz ise RA4 adlı pin'de lojik 1, lojik 0 bilgileri oluşmaz.
Deney 19: PIC16F84A’nın A port’unun pin’lerine bağlı bir butona basıldığında B port’unun aynı sayılı pin’ine bağlı ledi yakan programı yazınız.
TRISA = %11111111
TRISB = %00000000
DIM OKU AS BYTE '8 bit’lik register’i OKU olarak adlandır.
BASLA:
OKU = PORTA
PORTB = OKU
GOTO BASLA
END
* Pin: Bağlantı noktasıdır. 16F84'te 13 pin vardır.
* Port: Belli sayıda pin içeren birim. 16F84'te 2 adet port vardır. PORTA'da 5 pin, PORTB'de 8 pin bulunur.
Yani 16F84 ile 13 alıcı çalıştırılabilir.
Deney 20: PIC16F84A’nın B port’una bağlı step (adım) motoru sürekli olarak sola döndüren programı yazınız.
TRISB = %00000000
BASLA:
PORTB = %00000001
WAITMS 1
PORTB = %00000010
WAITMS 1
PORTB = %00000100
WAITMS 1
PORTB = %00001000
WAITMS 1
GOTO BASLA
END
Not: Bu program PIC’e yüklenir. B port’unun 4 pin’ine 1-10 K’lık dirençler üzerinden 4 adet BD135 transistörün beyz ucu bağlanır. Transistörlerin kolektör uçlarına ise 5 kablolu step motorun her bir bobini bağlanır. Devre enerjilendiğinde step motor sürekli olarak 5-10 derecelik adımlarla belirli bir hızda dönmeye başlar. Dönme hızını değiştirmek için WAITMS ..... değeri değiştirilir.
Deney 21: PIC16F84A’nın B port’una bağlı step (adım) motoru sürekli olarak sağa döndüren programı yazınız.
TRISB = %00000000
BASLA:
PORTB = %00001000
WAITMS 1
PORTB = %00000100
WAITMS 1
PORTB = %00000010
WAITMS 1
PORTB = %00000001
WAITMS 1
GOTO BASLA
END

Deney 22: PIC16F84A’nın B port’una bağlı step (adım) motoru gövde üzerinde yazılı ilerleme derecesinin yarısı hızında sürekli olarak sola döndüren programı yazınız.
TRISB = %00000000
BASLA:
PORTB = %00000001
WAITMS 1
PORTB = %00000011
WAITMS 1
PORTB = %00000010
WAITMS 1
PORTB = %00000110
WAITMS 1
PORTB = %00000100
WAITMS 1
PORTB = %00001100
WAITMS 1
PORTB = %00001000
WAITMS 1
PORTB = %00001001
WAITMS 1
GOTO BASLA
END
Not: Bu programda iki bobine aynı anda DC verilmiş olan satırlarda rotor iki bobin arasında durur. Bu sayede dönüş yavaşlar.
Deney 23: PIC16F84A’nın B port’una bağlı step (adım) motoru belirli derecede sola döndüren programı yazınız.
TRISB = %00000000
DIM SAYAC AS BYTE
BASLA:
FOR SAYAC = 1 TO 5
PORTB = %00000001
WAITMS 1
PORTB = %00000010
WAITMS 1
PORTB = %00000100
WAITMS 1
PORTB = %00001000
WAITMS 1
NEXT SAYAC
END
Not: FOR SAYAC = 1 TO 5 komutunda “5” ifadesi 1 ile 255 arası olabilir.
Eğer DIM SAYAC AS BYTE komutu DIM SAYAC AS WORD biçiminde yazılırsa “5” ifadesinin yerine 1 ile 65535 arası bir değer yazılabilir. Yani step motoru istenilen derecede sola döndürmek mümkündür.
Deney 24: PIC16F84A’nın A port’unun 0. pin’ine bağlı butona belirli bir süre içinde kaç kez basıldığını B port’unda gösteren programı yazınız.
TRISA = %11111111
TRISB = %00000000
Dim sayac As Byte
basla:
Count PORTA.0, 10, sayac
PORTA = sayac
PORTB = sayac
End
Not: COUNT komutu bir butona kaç kez basıldığını sayar. Örneğin bir yolcu teknesi 50 kişilik olsun. Yolcuların geçtiği turnikeye bağlanan sınır anahtarından giden bilgi sayısı 50 olduğunda gemiye giriş kapıları kapatılabilir.
Ya da bir kutuya 6 konserve konduğunda yürüyen bandı ilerleten programda COUNT komutu kullanılabilir.
Deney 25: PIC16F84A’nın A port’unun 0. pin’ine bağlı butona belirli bir süre içinde 3 kez basıldığı taktirde B port’una bağlı tüm ledleri yakan programı yazınız.
TRISA = %11111111
TRISB = %00000000
Dim sayac As Byte
basla:
Count PORTA.0, 5, sayac
If sayac = %00000011 Then
PORTB = %11111111
Else
Goto basla
Endif
End
Deney 26: PIC16F84A’nın PORTA.0 ucuna bağlanan butona basıldığında PORTB.0’a bağlı ledi yakan, PORTA.1 ucuna bağlı butona basıldığında ise ledi söndüren programı yazınız.
1. YÖNTEM
TRISA = %11111111
TRISB = %00000000
basla:
If PORTA.0 = 1 Then
PORTB.0 = 1
Endif
If PORTA.1 = 1 Then
PORTB.0 = 0
Endif
Goto basla
End
2. YÖNTEM
TRISA = %11111111
TRISB = %00000000
Symbol start = PORTA.0
Symbol stop = PORTA.1
Symbol led = PORTB.0
basla:
If start = 1 Then
led = 1
Endif
If stop = 1 Then
led = 0
Endif
Goto basla
End
Not: SYMBOL komutuyla buton ve alıcılara istenilen “ad” verilebilir.
Deney 27: PIC16F84A’nın PORTA.0, PORTA.1, PORTA.2 numaralı uçlarına bağlı butonların herhangi birine bağlı butona basıldığında PORTB.0’a bağlı ledi yakan programı yazınız.
TRISA = %11111111
TRISB = %00000000
basla:
If PORTA.0 = 1 OR PORTA.1 = 1 OR PORTA.2 = 1 Then
PORTB.0 = 1
Else
PORTB.0 = 0
Endif
Goto basla
End
Not: Bu devre hırsız alarmı olabilir. Kapı ve pencerelere gizlenen butonlardan gelen bilgilere göre PORTB.0’a bağlanan led yakılabilir, buzer (bazır) çalıştırılabilir. Transistör ve röle üzerinden sisteme eklenecek siren çalıştırılabilir.
Deney 28: PIC’in B port’undan elde edilen binary sayının birer birer artırılmasını sağlayan programı yazınız.
TRISB = %00000000
basla:
PORTB = %00000000
topla:
PORTB = PORTB + 1
PORTB = PORTB
WaitMs 1
Goto topla
End
Deney 29: PIC’in B port’undan elde edilen binary sayının ikişer ikişer artırılmasını sağlayan programı yazınız.
TRISB = %00000000
basla:
PORTB = %00000000
topla:
PORTB = PORTB + 2
PORTB = PORTB
WaitMs 1
Goto topla
End
Deney 30: PIC’in B port’undan elde edilen binary sayının birer birer azaltılmasını sağlayan programı yazınız.
TRISB = %00000000
BASLA:
PORTB = %11111111
CIKAR:
PORTB = PORTB - 1
PORTB = PORTB
WaitMs 1
Goto CIKAR
End
Deney 31: PIC’in B port’undan elde edilen binary sayının ikişer ikişer azaltılmasını sağlayan programı yazınız.
TRISB = %00000000
BASLA:
PORTB = %11111111
CIKAR:
PORTB = PORTB - 2
PORTB = PORTB
WaitMs 1
Goto CIKAR
End
Deney 32: PIC’in B port’undan elde edilen sayının belirli bir değere (örneğin 7’ye yani %0000111’e) ulaştıktan sonra sıfır olmasını sağlayan programı yazınız.
TRISB = %00000000
Dim sayac As Byte
ilkdeger:
PORTB = %00000000
basla:
sayac = sayac + 1
PORTB = sayac
If PORTB = %00000111 Then
PORTB = %00000000
Else
Goto basla
Endif
sayac = %00000000
Goto ilkdeger
End
Deney 33: PIC’in B port’undan elde edilen sayının 1-9 arasında olmasını sağlayan programı yazınız. Yani B port’unda %00000001 ile %00001001 arasındaki sayılar görülsün. Başka bir deyişle 1 – 2 – 3 – 4 – 5 – 6 – 7 – 8 – 9 sayıları üretilsin.
TRISB = %00000000
Dim sayac As Byte
ilkdeger:
PORTB = %00000001
basla:
sayac = sayac + 1
PORTB = sayac
WaitMs 1
If PORTB = %00001010 Then
PORTB = %00000000
Else
Goto basla
Endif
sayac = %00000000
Goto ilkdeger
End
Deney 34: PIC’in PORTB.0 ucuna bağlı ledin TOGGLE komutuyla yakılıp söndürülmesini sağlayan programı yazınız.
TRISB = %00000000
PORTB.0 = 0
BASLA:
WAITMS 1
TOGGLE PORTB.0
GOTO BASLA
END
Deney 35: PIC’in PORTB.0 ucuna bağlı ledin PORTA.0 bağlı butona basıldığında yakılıp söndürülmesini sağlayan programı yazınız.
TRISA = %11111111
TRISB = %00000000
Symbol BUTON = PORTA.0
Symbol LED = PORTB.0
LED = 0
basla:
WaitUs 5
If BUTON = 1 Then
Toggle LED
Else
LED = 0
Endif
Goto basla
End
Deney 36: PIC’in PORTA.0’ına bağlı butona basılıyken B port’unda binary %00000111, basılı değilken %1111111 sayısını üreten programı yazınız.
TRISA = %11111111
TRISB = %00000000
Symbol buton = PORTA.0 'PORTA.0’ın adı BUTON yapılmıştır.
basla:
If buton = 1 Then
PORTB = %00000111
Else
PORTB = %11111111
Endif
Goto basla
End
Deney 37: PIC’in B port’undaki bilgi sürekli olarak 2 ile çarpılsın. B port’u %10000000 olunca başa dönülsün. Programı yazınız.
TRISB = %00000000
basla:
PORTB = %00000000
carp:
PORTB = %00000001
carp1:
PORTB = PORTB * 2
PORTB = PORTB
If PORTB = %10000000 Then
Goto carp
Else
Goto carp1
Endif
End
Deney 38: PIC’in A port’unun pin’lerine bağlı butonların durumuna göre B port’unun çıkışlarının değişmesine ilişkin örnek program.
TRISB = %00000000
TRISA = %11111111
basla:
PORTB = %00000000
While PORTA.0 = 1
PORTB = %10101010
Wend
While PORTA.1 = 1
PORTB = %10101010
Wend
While PORTA.2 = 1
PORTB = %00001111
Wend
Goto basla
End
Deney 39: PIC’in B port’una bağlı katodu ortak (common cathode) ledli display’de rakam oluşturma
TRISB = %00000000
basla:
PORTB = %00111111 '0 oluşur
WaitMs 1
PORTB = %00000110 '1 oluşur
WaitMs 1
PORTB = %01011011 '2 oluşur
WaitMs 1
PORTB = %01001111 '3 oluşur
WaitMs 1
PORTB = %01100110 '4 oluşur
WaitMs 1
PORTB = %01101101 '5 oluşur
WaitMs 1
Goto basla
End

Deney 40: PIC’in B port’una bağlı 8 ledi farklı biçimlerde çalıştırma (ışık oyunları)
TRISB = %00000000
DIM SAYAC AS BYTE
basla:
FOR SAYAC = 1 TO 5
PORTB = %00000001
WAITMS 1
PORTB = %00000010
WAITMS 1
PORTB = %00000100
WAITMS 1
PORTB = %00001000
WAITMS 1
PORTB = %00010000
WAITMS 1
PORTB = %00100000
WAITMS 1
PORTB = %01000000
WAITMS 1
PORTB = %10000000
WAITMS 1
NEXT SAYAC
FOR SAYAC = 1 TO 5
PORTB = %00000011
WAITMS 1
PORTB = %00001100
WAITMS 1
PORTB = %00110000
WAITMS 1
PORTB = %11000000
WAITMS 1
NEXT SAYAC
FOR SAYAC = 1 TO 5
PORTB = %10000001
WAITMS 1
PORTB = %01000010
WAITMS 1
PORTB = %00100100
WAITMS 1
PORTB = %00011000
WAITMS 1
NEXT SAYAC
FOR SAYAC = 1 TO 5
PORTB = %00001111
WAITMS 1
PORTB = %11110000
WAITMS 1
NEXT SAYAC
FOR SAYAC = 1 TO 5
PORTB = %10101010
WAITMS 1
PORTB = %01010101
WAITMS 1
NEXT SAYAC
Goto basla
End
Deney 41: 16F877A adlı PIC’in A, B, C, D, E port'larına bağlı 34 ledi yakıp söndüren program
TRISA = %00000000
TRISB = %00000000
TRISC = %00000000
TRISD = %00000000
TRISE = %00000000
basla:
PORTA = %11111111
PORTB = %11111111
PORTC = %11111111
PORTD = %11111111
PORTE = %11111111
WaitMs 1
PORTA = %00000000
PORTB = %00000000
PORTC = %00000000
PORTD = %00000000
PORTE = %00000000
WaitMs 1
Goto basla
End

Deney 42: 16F84A'nın A port'unun 0. bit'ine bağlı butona her basışta B port'unun 0. bit'ine bağlı ledin durumunu değiştiren program
TRISA = %00000001
TRISB = %00000000
Symbol buton = PORTA.0 'PORTA.0'a bağlanan kontrol elemanının
(giriş biriminin) adı butondur.
Dim durum As Bit
'Durum adlı register bit cinsinden bilgi saklamak üzere ayarlanmıştır.
PORTA = 0
'PORTA içeriği sıfırlanmıştır.
PORTB = 0
'PORTB içeriği sıfırlanmıştır.
basla:
If buton = 0 Then
WaitMs 200
'Buton kontaklarındaki titreşim nedeniyle oluşan
sinyallerin zararının önlenmesini sağlayan gecikme
PORTB.0 = 1
durum = 0
Else
Goto basla
Endif
butondur:
If buton = 0 Then
WaitMs 200
durum = 1
PORTB.0 = 0
Else
Goto butondur
Endif
Goto basla
End
Devrenin simülasyonu en iyi biçimde PROTEUS/ISIS ile yapılabilir.
Eğer simülasyon PIC SIMULATOR ile yapılacaksa WAITMS 200 değeri WAITUS 1 ya da WAITMS 1 yapılmalıdır. Eğer WAITMS 200 değeri kullanılırsa çok uzun süre beklemek gerekir.

BASIC dilinde yazılmış olan programın makine dilindeki karşılığı (derleme ile elde edilen kodlar)
Bu kodlar buradan kopyalanıp NOT DEFTERİ programında DOSYAADI.HEX olarak kaydedilip sonra uygun bir yükleyiciyle PIC'e aktarılırsa devre çalışır.
:100000008A110A12052800000900831601308500B4
:10001000860183128501860105181528C8308C00D9
:100020008D012B200614181018281F3083050C286A
:100030001F30830505182328C8308C008D012B2024
:100040001814061026281F3083051A281F30830530
:100050000C2829282A288C08031936283D208C03CF
:10006000000000000000000000002B288D0803198C
:1000700008003D208D038C032B280C309100910B40
:100080003F280000000012308E008E0B4C284E20BE
:100090004E200000000008004E2045280D30900042
:0800A000900B5028000008003D
:02400E00F13F80
:00000001FF
_______________________________________________________________________________________________
Deney 43: 0 - 99 yukarı sayıcı (up counter)
TRISA = %00000000
TRISB = %00000000
Dim sayac As Byte
basla:
PORTA = %00000011
sayac = %00000000
PORTB = %00000000
basla1:
sayac = sayac + 1
PORTB = sayac
WaitMs 100
If sayac = %00001001 Then 'sayacın degeri 9 olunca
buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
sayac = sayac + 6
Endif
If sayac = %00011001 Then 'sayacın degeri 19 olunca
buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
sayac = sayac + 6
Endif
If sayac = %00101001 Then 'sayacın degeri 29 olunca
buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
sayac = sayac + 6
Endif
If sayac = %00111001 Then 'sayacın degeri 39 olunca
buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
sayac = sayac + 6
Endif
If sayac = %01001001 Then 'sayacın degeri 49
olunca buna 6 ekleme yap. Bu sayede A, B, C, D, E, F
gorunmez
sayac = sayac + 6
Endif
If sayac = %01011001 Then
'sayacın ...
sayac = sayac + 6
Endif
If sayac = %01101001 Then
'sayacın ...
sayac = sayac + 6
Endif
If sayac = %01111001 Then
'sayacın ...
sayac = sayac + 6
Endif
If sayac = %10001001 Then
'sayacın ...
sayac = sayac + 6
Endif
If sayac = %10011001 Then
'sayacın ...
sayac = sayac + 6
Endif
If PORTB = %10011001 Then
'PORTB nin değeri 99 olunca sayacı sıfırla
sayac = %00000000
PORTB = %00000000
WaitMs 100
Endif
Goto basla1
End

* Display'e uygulanan 5 V'un tümünün ledlere düşmemesi için 47 - 330 ohm'luk ön dirençler kullanılmalıdır.
* PIC'ın B port'una bağlanan 2 adet 74LS47 lojik entegresi binary bilgileri desimal'e dönüştürür. Başka bir deyişle bu entegre anodu ortak display'lerde desimal sayıları oluşturur.
* Eğer 74LS48 kullanılırsa display'leri katodu ortak modelden
seçmek gereklidir.
_______________________________________________________________________________________________
Deney 43: 0 - 99 yukarı sayıcı (up counter)
* Bu sayıcıda göstergelerde 12 rakamı görülünce RA.2'ye bağlı transistör röleyi belirli bir süre çalıştırmaktadır.

TRISA = %00000000
TRISB = %00000000
Dim sayac As Word
basla:
PORTA = %00000011
sayac = %00000000
PORTB = %00000000
basla1:
sayac = sayac + 1
PORTB = sayac
WaitMs 100
If sayac = %00001001 Then
sayac = sayac + 6 'sayacın degeri 9 olunca buna 6 ekleme yap. Bu sayede A, B, C,
D, E, F gorunmez
Endif
'--------------------------------------------------------------------------
If PORTB = %00010010 Then
PORTA.2 = 1
WaitMs 1000
PORTA.2 = 0
Endif
' PORTB'DE 0001 (1) 0010 (2) YANİ 12
DESİMAL DEĞERİ GÖRÜLÜNCE
' PORTA'NIN 2. BIT'İNE BAĞLI LEDİ YA DA RÖLEYİ ÇALIŞTIRAN BÖLÜM
'--------------------------------------------------------------------------
If sayac = %00011001 Then
sayac = sayac + 6
'sayacın degeri 19 olunca buna 6
ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif
If sayac = %00101001 Then
sayac = sayac + 6 'sayacın degeri 29 olunca buna 6
ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif
If sayac = %00111001 Then
sayac = sayac + 6 'sayacın degeri 39 olunca buna 6
ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif
If sayac = %01001001 Then
sayac = sayac + 6 'sayacın degeri 49 olunca buna 6
ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif
If sayac = %01011001 Then
sayac = sayac + 6 'sayacın degeri 59 olunca buna 6
ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif
If sayac = %01101001 Then
sayac = sayac + 6 'sayacın degeri 69 olunca
buna 6 ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif
If sayac = %01111001 Then
sayac = sayac + 6 'sayacın degeri 79 olunca buna 6
ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif
If sayac = %10001001 Then
sayac = sayac + 6 'sayacın degeri 89 olunca buna 6
ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif
If sayac = %10011001 Then
sayac = sayac + 6 'sayacın degeri 99 olunca buna 6
ekleme yap. Bu sayede A, B, C, D, E, F gorunmez
Endif
If PORTB = %10011001 Then
'PORTB nin değeri 99 olunca
sayacı sıfırla
sayac = %00000000
PORTB = %00000000
WaitMs 100
Endif
Goto basla1
End
Not: Deneyin basic ile hex kodlarını, Proteus ISIS 7.7 SP 2 ile çizilmiş devresini buraya tıklayarak indirebilirsiniz.
Devre, Proteus'un eski sürümleri ile çalışmaz. Yazılımı Google.com ile aratarak bir çok siteden temin edebilirsiniz. Yazılımın orjinali yüksek bir bedele sunulmaktadır. Demo sürümler ücretsizdir. Korsan sürümünü dağıtmak yasal olarak suçtur o nedenle tarafımızdan yazılım istemeyiniz.
_______________________________________________________________________________________________
* 2011 yılı itibariyle mikrodenetleyicileri öğrenmeyen, öğrenmek istemeyen elektrik, elektronik, mekatronik alanındaki kişiler (öğrenci, teknik eleman, öğretmen, mühendis) mesleki anlamda çok kayıptadır. Çünkü MD'lerin girmediği sistem yoktur.
Sadece sayısal (dijital) elektroniği bilmem bana yeter demek yanlıştır.
_______________________________________________________________________________________________
Assembler diliyle sistem tasarlamak eziyettir. O nedenle BASIC ya da C diliyle çalışılmalıdır.
_______________________________________________________________________________________________
Devamı yakında...
22.06.2011 - KKTC