tla

ri.

co
m

T.C.
MİLLÎ EĞİTİM BAKANLIĞI

no

MEGEP

.e
em
de

rs

(MESLEKİ EĞİTİM VE ÖĞRETİM SİSTEMİNİN
GÜÇLENDİRİLMESİ PROJESİ)

ELEKTRİK ELEKTRONİK TEKNOLOJİSİ

w

w

w

MİKRODENETLEYİCİ İLE ANALOG
İŞLEMLER

ANKARA 2007

co
m
ri.

tla

Milli Eğitim Bakanlığı tarafından geliştirilen modüller;

Talim ve Terbiye Kurulu Başkanlığının 02.06.2006 tarih ve 269 sayılı Kararı ile
onaylanan, Mesleki ve Teknik Eğitim Okul ve Kurumlarında kademeli olarak
yaygınlaştırılan 42 alan ve 192 dala ait çerçeve öğretim programlarında
amaçlanan mesleki yeterlikleri kazandırmaya yönelik geliştirilmiş öğretim
materyalleridir (Ders Notlarıdır).

Modüller, bireylere mesleki yeterlik kazandırmak ve bireysel öğrenmeye
rehberlik etmek amacıyla öğrenme materyali olarak hazırlanmış, denenmek ve
geliştirilmek üzere Mesleki ve Teknik Eğitim Okul ve Kurumlarında
uygulanmaya başlanmıştır.

.e
em
de

rs

no

Modüller teknolojik gelişmelere paralel olarak, amaçlanan yeterliği
kazandırmak koşulu ile eğitim öğretim sırasında geliştirilebilir ve yapılması
önerilen değişiklikler Bakanlıkta ilgili birime bildirilir.

Örgün ve yaygın eğitim kurumları, işletmeler ve kendi kendine mesleki yeterlik
kazanmak isteyen bireyler modüllere internet üzerinden ulaşabilirler.

Basılmış modüller, eğitim kurumlarında öğrencilere ücretsiz olarak dağıtılır.

Modüller hiçbir şekilde ticari amaçla kullanılamaz ve ücret karşılığında
satılamaz.

w

w

w

İÇİNDEKİLER

w

w

w

.e
em
de

rs

no

tla

ri.

co
m

AÇIKLAMALAR .............................................................................................................. iii
GİRİŞ ..................................................................................................................................1
ÖĞRENME FAALİYETİ–1.................................................................................................3
1. ANALOG VERİ ..............................................................................................................3
1.1. Genel Bilgiler............................................................................................................3
1.2. Dijital Analog Çeviriciler ..........................................................................................4
1.2.1. Ağırlık Dirençli DAC Devresi ............................................................................4
1.2.2. R -2R Merdiven Tipi DAC Devresi ....................................................................5
1.3. Analog Dijital Çeviriciler ..........................................................................................6
1.4. PIC ile DAC Uygulama Devreleri .............................................................................7
1.4.1. Ağırlık Direnç ile DAC Uygulama Devresi ........................................................7
1.4.2. PWM Metodu ile DAC Uygulama Devresi.........................................................9
1.5. PIC ile ADC Uygulama Devresi ..............................................................................10
UYGULAMA FAALİYETİ...........................................................................................14
ÖLÇME VE DEĞERLENDİRME .................................................................................15
ÖĞRENME FAALİYETİ–2...............................................................................................16
2. ANALOG UYGULAMA DEVRELERİ.........................................................................16
2.1. Pic 16f877 Entegresinin Özellikleri .........................................................................16
2.2. A / D Çevirici Uygulama Devresi ............................................................................19
2.2.1. Devrenin Malzemeleri......................................................................................21
2.2.2. Devrenin Şeması ..............................................................................................22
2.2.3. Devrenin ASM Programı..................................................................................22
2.2.4. Akış Diyagramı................................................................................................23
2.3. DC Motor Yön ve Hız Kontrol Devresi ...................................................................25
2.3.1. Devrenin Malzemeleri......................................................................................30
2.3.2. Devrenin Şeması ..............................................................................................31
2.3.3. Akış Diyagramı................................................................................................32
2.3.4. Devrenin ASM Programı..................................................................................33
2.4. Isıtıcı ve Fan Kontrollü Uygulama Devresi ..............................................................35
2.4.1. Devrenin Malzemeleri......................................................................................36
2.4.2. Devrenin Şeması ..............................................................................................36
2.4.3. Akış Diyagramı................................................................................................37
UYGULAMA FAALİYETİ...........................................................................................46
ÖLÇME VE DEĞERLENDİRME .................................................................................47
ÖĞRENME FAALİYETİ–3...............................................................................................48
3. PIC BASIC PRO İLE PROGRAMLAMA......................................................................48
3.1. Programlama Kuralları ............................................................................................48
3.1.1. Karşılaştırma Operatörleri ................................................................................49
3.2. Karar Verme ve Döngü İşlemleri.............................................................................51
3.2.1. GOTO Komutu ................................................................................................51
3.2.2. IF… THEN Komutu.........................................................................................52
3.2.3.BRANCH Komutu ............................................................................................52
3.2.4. FOR…NEXT Komutu ....................................................................................53
3.2.5. WHILE… WEND Komutu ..............................................................................53
3.3. PBP Komutları........................................................................................................53
i

w

w

w

.e
em
de

rs

no

tla

ri.

co
m

3.3.1. PAUSE Komutu...............................................................................................53
3.3.2. PAUSEUS Komutu ..........................................................................................54
3.3.3. GOSUB… RETURN Komutu..........................................................................54
3.4. Örnek Programlar....................................................................................................54
3.4.1. LED Flaşör Devresi..........................................................................................54
3.4.2. Sayıcı Uygulama Devresi .................................................................................55
3.4.3. Karaşimşek Uygulama Devresi.........................................................................55
3.4.4. LCD Uygulama Devresi ...................................................................................56
3.5. Pıc Basıc Pro Programının Kullanımı ......................................................................58
3.5.1. BAS Dosyasının Oluşturulması ........................................................................58
3.5.2. BAS Dosyanın Derlenmesi...............................................................................58
UYGULAMA FAALİYETİ...........................................................................................60
ÖLÇME VE DEĞERLENDİRME .................................................................................61
ÖĞRENME FAALİYETİ–4...............................................................................................62
4. PIC BASIC İLE UYGULAMA DEVRELERİ ................................................................62
4.1. Voltmetre Uygulama Devresi ..................................................................................62
4.1.1. Devrenin Malzemeleri......................................................................................63
4.1.2. Devrenin Şeması ..............................................................................................64
4.1.3. Devrenin Asm Programı...................................................................................64
4.1.4. Akış Diyagramı................................................................................................66
4.2. DC Motor Devir Ayar Uygulama Devresi................................................................67
4.2.1. Devrenin Malzemeleri......................................................................................67
4.2.2. Devrenin Şeması ..............................................................................................67
4.2.3. Akış Diyagramı................................................................................................68
4.2.4. Devrenin Asm Programı...................................................................................69
4.3. Çizgi Takip Eden Robot Uygulama Devresi ............................................................71
4.3.1. Algılama Sistemi..............................................................................................71
4.3.2. Karşılaştırma Sistemi: ......................................................................................73
4.3.3. Kullanılan Malzemeler .....................................................................................74
4.3.4. Devrenin Şeması ..............................................................................................74
4.3.5. Akış Diyagramı................................................................................................75
4.3.6. Asm Programı ..................................................................................................75
UYGULAMA FAALİYETİ...........................................................................................77
ÖLÇME VE DEĞERLENDİRME .................................................................................78
MODÜL DEĞERLENDİRME...........................................................................................79
CEVAP ANAHTARLARI .................................................................................................82
ÖNERİLEN KAYNAKLAR ..............................................................................................88
KAYNAKÇA ....................................................................................................................89

ii

AÇIKLAMALAR
AÇIKLAMALAR

SÜRE
ÖN KOŞUL

no

tla

YETERLİK

co
m

MODÜLÜN TANIMI

523EO0022
Elektrik Elektronik Teknolojisi
Otomasyon Sistemleri
Mikrodenetleyici ile Analog İşlemler
Analog
işlemler
için
mikrodenetleyicinin
programlaması ve çalıştırılması ile bilgi ve becerilerin
kazandırıldığı öğrenme materyalidir.
40/32
Mikrodenetleyici ile Dijital İşlemler modülünü
tamamlamış olmak.
Mikrodenetleyici ile analog işlemleri yapmak
Genel Amaç
Bu modül ile gerekli ortam sağlandığında dijital ve
analog işlem için gerekli mikrodenetleyiciyi ve çevre
elemanlarını seçebileceksiniz. Mikrodenetleyici için gerekli
programı yaparak devreyi hatasız olarak kurabileceksiniz.

ri.

KOD
ALAN
DAL/MESLEK
MODÜLÜN ADI

2. PIC 16F877 entegresinin özelliklerini ve 16F84
entegresine göre üstünlüklerini öğrenecek, 16F877 ‘nin
özelliklerinden
yararlanarak
uygulama
devreleri
kurabileceksiniz.

.e
em
de

MODÜLÜN AMACI

rs

Amaçlar
1. Analog ve dijital veri kavramını öğrenecek. Analog–dijital
ve dijital-analog çevirme işlemini kavrayacak ve
mikrodenetleyici ile yapabileceksiniz.

3. PICBasic Pro ile program yazımını öğrenecek ve Picbasic
Pro ile çok kısa programlar yazacabileceksiniz.

4. Çeşitli uygulama devreleri kuracaksınız, PicBasic Pro ile
programı mikrodenetleyiciye yükleyecek ve devreleri
çalıştırabileceksiniz.

w

EĞİTİM ÖĞRETİM
ORTAMLARI VE
DONANIMLARI

w

w

ÖLÇME VE
DEĞERLENDİRME

Mikrodenetleyici, mikrodenetleyici eğitim seti veya
programlama kartı, programlama yazılımı, haberleşme
bağlantı kablosu
Her faaliyet sonrasında o faliyetle ilgili değerlendirme
soruları ile kendi kendinizi değerlendireceksiniz.
Öğretmen modül sonunda size ölçme aracı (uygulama,
soru-cevap, test, çoktan seçmeli, doğru yanlış vb)uygulayarak
modül uygulamaları ile kazandığınız bilgi ve becerileri
ölçerek değerlendirecektir.

G

iii

.e
em
de

w

w

w

iv

ri.

tla

no

rs

co
m

GİRİŞ

co
m

GİRİŞ
Sevgili Öğrenci,

ri.

Günümüzde pek çok iş, yapısında mikroişlemci bulunan makineler ile gerçekleştirilir.
Mikroişlemci (CPU) ile kontrol edilen sistemlerde bunun dışında RAM, Bios, I/0 ünitesi gibi
ek birimlere ihtiyaç duyulur. Bu şekilde hem maliyet artar hem de işlemler zorlaşır. Bütün bu
olumsuzlukları ortadan kaldıran devre elemanı mikrodenetleyicidir. Pek çok firma
mikrodenetleyici üretmektedir, fakat Microchip firmasının PIC (Pripheral Interface
Controller -çevre birimlerini kontrol eden ünite) adını verdiği denetleyici uygulamalarda
geniş yer bulmaktadır.

no

tla

Bu modüldeki birkaç uygulamada PIC 16F84 kullanılmıştır. 16F84 entegresi analog
işlemler için sınırlı olduğundan dolayı çoğu uygulamada 16F877 entegresi tercih edilmiştir.
Modüldeki uygulamaları takip ederek analog devreler geliştirebilir ve programlayabilirsiniz.
Her uygulamada ayrı bir konu anlatılmaktadır. Uygulamalar basitten karmaşığa doğru
sıralanmış ve sizin anlayabileceğiniz sadelikte işlenmiştir.
Modülün amacı, programlama mantığını öğrenerek, elektronik devre uygulamalarını
mikrodenetleyiciyle çabuk, doğru ve kolayca çözme yeteneğini kazandırmaktır.

w

w

w

.e
em
de

rs

Bu modülün sonunda program yazabilecek, bu programa ait devreyi yapabilecek
ayrıca kendi program ve devrelerinizi üretme yeteneğine sahip olabileceksiniz.

1

.e
em
de

w

w

w

2

ri.

tla

no

rs

co
m

ÖĞRENME FAALİYETİ–1
ÖĞRENME FAALİYETİ–1

co
m

AMAÇ
Bu faaliyette verilen bilgiler doğrultusunda, analog ve dijital veri kavramını
öğreneceksiniz. Analog–dijital ve dijital-analog çevirme işlemini öğrenecek ve bu işlemleri
mikrodenetleyici ile yapabileceksiniz.

ri.

ARAŞTIRMA
Bu faaliyet öncesinde yapmanız gereken araştırmalar şunlardır:
Ø
Analog veriyi öğrenmelisiniz.

ADC ve DAC devre çeşitleri ile ilgili bilgi edinmelisiniz.

Ø

ADC

ve

DAC

işlemlerinde

mikrodenetleyicinin

kullanıldığını

no

araştırmalısınız.

niçin

tla

Ø

Araştırma işlemleri için Mikrodenetleyici ile Dijital İşlemler modülünü gözden
geçirebilir ve internet ortamından yararlanabilirsiniz.

.e
em
de

1.1. Genel Bilgiler

rs

1. ANALOG VERİ

Sıfırdan sonsuza kadar devamlı olarak değişim gösteren büyüklük analog büyüklük
olarak tanımlanır. Bilindiği gibi görülen ve duyulan büyüklüklerin tamamı, analog bilgi
tipindedir. Çünkü bu değerler sürekli değişmektedir.

w

w

w

Fiziksel bir büyüklük bilgi şekline dönüştürülürken, bilgiyi temsil eden işaret
doğrudan doğruya fiziksel büyüklüğün benzeri ise oluşan işaret analog işaret olarak
adlandırılır. Bu analog işaretlerin algılanması ve değerlendirilmesi, ancak insanoğlu
tarafından mümkünken, bilgisayarlar ve mikroişlemciler tarafından mümkün değildir. Dijital
sistemlerin dış dünya ile bağlantılarını sağlamak için; ölçülen fiziksel büyüklüklerin dijital
sistemin anlayabileceği sayısal değerlere dönüştürülmeleri gerekir. Analog bilgiyi sayısal
değerlere dönüştüren elemanlara analog dijital çevirici (ADC Analog Dijital Converter) adı
verilir.

3

co
m

Şekil 1.1: Sayısal bir sistemin blok diyagramı

tla

ri.

Dijital bir bilginin analog işaretlere çevirmesi için kullanılan elemanlara dijital analog
çevirici (DAC Dijital Analog Converter) adı verilir. Birçok elektronik cihaz sayısal sistemin
giriş ve çıkışına bağlanarak kullanılır. Bu cihazalar sayısal sistemlerde A/D ve D/A
dönüştürücüler ile birlikte kullanılabilir. Şekil 1.1’de bu sistemlerin blok diyagramı
gösterilmiştir.

no

1.2. Dijital Analog Çeviriciler

.e
em
de

rs

Dijital bilgi sinyalini, sayısal değerine orantılı olarak gerilim veya akıma dönüştüren
devrelere dijital analog çevirici denir. Bu gerilim veya akım, girişteki değerlere göre değişen
bir analog sinyaldir. Şekil 1.2’de 4 bit girişli DAC’ın blok diyagramı görülmektedir.

Şekil 1.2: DAC sistemin blok diyagramı

D/A çevirme işlemlerinde genellikle ağırlık dirençli DAC, R-2R merdiven tipi DAC
veya PWM (Pulse Width Modulation - Darbe genişlikli modülasyon) metodu kullanılır.

1.2.1. Ağırlık Dirençli DAC Devresi

w

w

w

Şekil 1.3’te D/A çeviricinin basit bir devresi görülmektedir. Devrede OP-AMP’
toplayıcı olarak kullanılmaktadır. D, C, B, A dijital girişlerin ağırlıklarının toplamı kadar
çıkışta gerilim elde edilir.

Çıkış gerilimi ,

Vçk = −

Rf
8R

Vref ( A + 2 B + 4C + 8D )

4

olarak bulunur.

ri.

co
m
1.2.2. R -2R Merdiven Tipi DAC Devresi

tla

Şekil 1.3: Ağırlık dirençli DAC devresi

Rf
16 R

Vref ( A + 2 B + 4C + 8 D)

w

w

w

.e
em
de

rs

Vçk =

no

Dijital bilginin analog bilgiye çevrilmesinde en fazla kullanılan yöntemdir. R- 2R
merdiven tipi devresi şekil 1.4’te gösterilmiştir. Çıkış gerilimi aşağıdaki gibi hesaplanır.

Şekil 1.4: R-2R DAC devresi

5

1.3. Analog Dijital Çeviriciler

ri.

co
m

Analog dijital çeviriciler analog giriş gerilimini alır ve belirli bir süre içinde analog
giriş değerini gösteren sayısal çıkış kodu üretir. Şekil 1.5’te analog dijital sistemin blok
diyagramı gösterilmiştir.

Şekil 1.5: ADC sistemin blok diyagramı

w

.e
em
de

rs

no

tla

Basınç, sıcaklık gibi fiziksel değişimi veya akım, gerilim gibi analog sinyalleri
mikrodenetleyici sistemlere direk uygulanmadığından A/D çeviriciler kullanılır. ADC
devrelerinin temeli karşılaştırıcıya dayanır. Karşılaştırıcı devresinde OP-AMP’ın
girişlerinden birine referans gerilimi diğerine ise giriş gerilimi uygulanır. Şekil 1.6’da OPAMP’lı karşılaştırıcı devresi görülmektedir.

Şekil 1.6: OP-AMP’la Yapılan Karşılaştırıcı Devresi

w

w

Şekil 1.6’daki devrede zener gerilimi referans gerilimini belirler. Referans gerilimi
OP-AMP’ın “+” girişidir. Giriş gerilimini potansiyometre 0-12V arasında değiştirir. Giriş
gerilimi OP-AMP’ın “-“ girişidir. Giriş gerilimi referans geriliminden büyük olursa çıkış -V
olur ve D3 LED’i yanar. Giriş gerilimi referans geriliminden küçük olursa çıkış +V olur ve
D2 LED’i yanar. İki gerilim eşit olursa çıkış 0V olur.
6

1.4. PIC ile DAC Uygulama Devreleri

co
m

Bu uygulamalarda kullanılan PIC 16F84’ün analog girişi bulunmadığından bu işlemler
DAC veya ADC devreleri yardımıyla yapılır. Şekil 1.1’ de bulunan blok diyagramda bu yapı
gösterilmiştir.

1.4.1. Ağırlık Direnç ile DAC Uygulama Devresi

.e
em
de

rs

no

tla

ri.

PIC ile yapılan uygulamada A portunun 0. bitine bağlı olan bir butona her basıldığında
çıkıştaki gerilimi artıran dijital analog çevirici uygulamasıdır. Dijital analog çevirici olarak
ağırlık dirençli DAC devresi kullanılmıştır. Şekil 1.7’de uygulama devresi gösterilmiştir.

Şekil 1.7: PIC 16F84 ile D/A uygulama devresi

Devrenin ASM Programı

;========DAC UYGULAMA PROGRAMI======S_2006=======

w

w

w

LIST P=16F84
INCLUDE "P16F84.INC"

SAYAC1 EQU H'0C'
SAYAC2 EQU H'0D'
SAYAC3 EQU H'0E'

;Gecikme alt programlarında kullanılan değişken
; Gecikme alt programlarında kullanılan değişken
; Gecikme alt programlarında kullanılan değişken

;Portları Ayarla……………………………………………………………
CLRF
PORTB
;PORTB yi temizle
BSF
STATUS,5
;BANK1 e geç
7

TRISB
H'FF'
TRISA
STATUS,5

;PORTB çıkış
;W <-- H'FF'
;PORTA
giriş
;BANK0 a geç

co
m

CLRF
MOVLW
MOVWF
BCF

; Start butonuna basılıncaya kadar bekle……………………………………
BUTON
BTFSC
PORTA,0
;PORTA nın 1.biti 0 mı?
GOTO
BUTON
;Hayır, tekrar test et

no

tla

ri.

;Değişkeni artır ve porta gönder……………………………………………..
MOVLW H’00’
;W ß H’00’
MOVWF ART
; ART =W
DON MOVF
ART,W
; Wß ART
ANDLW B’00001111’
; Portun düşük olan bitlerini sıfırla
MOVWF PORTB
; PORTB’ ye bilgiyi gönder
INCF
ART,F
;ART değişkeninin içeriğini bir artır
CALL
GECIKME
; GECIKME alt programını çağır
GOTO
BUTON
;Butonu kontrol et

H’FF’
SAYAC1

;W<--H’FF’'
;SAYAC1 <-- W

.e
em
de

MOVLW
MOVWF

rs

; gecikme alt programı…………………………………………………………
GECIKME

D1

MOVLW
MOVWF

H’FF’
SAYAC2

;W<--H’FF’
;SAYAC2 <-- W

D2

w

w

w

DECFSZ
SAYAC2,F
; Sayac2 bir azalt ve sıfır mı? kontrol et
GOTO
D2
; Hayır D3 e git
DECFSZ
SAYAC1,F
; Sayac1 bir azalt ve sıfır mı?
GOTO
D1
; Hayır D1 e git
RETURN
END
Devrede butona her basılışta PORTB’nin yüksek bitlerindeki dijital bilgi artırılır.
Portun çıkışına bağlanan DAC devresi ile PIC’ in çıkışındaki dijital bilgi analog sinyale
dönüştürülür.

8

1.4.2. PWM Metodu ile DAC Uygulama Devresi

co
m

PWM (Pulse Width Modulation) darbe genişlik modülasyonudur. PWM sinyali kare
dalga bir sinyaldir. Bu kare dalga sinyalin darbe genişliği artırılıp azaltılarak PWM sinyal
elde edilir. PWM yöntemi motor hız kontrolü, lambanın parlaklık ayarı gibi uygulamalarda
kullanılmaktadır. Darbelerin genişliği arttıkça motorun hızı veya lambanın parlaklığı artar,
darbelerin genişliği azaldıkça orantılı olarak azalır.
PWM sinyalin darbe genişliği çıkış geriliminin ortalama değeriyle doğru orantılıdır.

5V
→ 2,5V
2
5V
Darbe genişliği %25 ise çıkış gerilimi
→ 1,25V
4
3
Darbe genişliği %75 ise çıkış gerilimi 5V → 3,75V olur.
2

no

tla

ri.

Darbe genişliği %50 ise çıkış gerilimi

PWM sinyal kare dalga olduğundan çıkış sürekli “1” ve “0” olarak değiştirilir. Burada
önemli olan gecikme alt programının süresidir. Darbe genişliği %50 olursa tek gecikme alt
programı kullanılır. Diğer durumlarda ise iki gecikme alt programı kullanılır.

.e
em
de

rs

Gecikme döngüsünde sayaç h’FF’ kullanıldığında sayacın sıfırlanması için programın
256 kez çalıştırılması gerekir. Döngüde kullanılan sayacın alacağı değerler aşağıda
gösterilmiştir.
Ø

2.5V’luk çıkış için gerekli süre

256 X (%50) = 128 à h’80’ ( %50 darbe genişliği için gerekli süre)

Ø

1.25V’luk çıkış için gerekli süre

256 X (%25) = 64 à h’40’ (%25 darbe genişliği için gerekli süre)

Ø

1 V’luk çıkış için gerekli süre

256 X (%20) = 51.2= 51 à h’33’ ( %20 darbe genişliği için gerekli süre)

w

w

w

Aşağıda asm programı verilen devrede PortB bağlı olan 1. bit çıkışında 2V luk bir
gerilim üretilmektedir. Gerilim 2V olduğundan darbe genişliği %40 olmalıdır. Yani
kullanılan alt programların sayaçları h’66’ ve h’9A’ olmalıdır.

9

Devrenin ASM Programı

co
m

;========PWM UYGULAMA PROGRAMI======S_2006=======
LIST P=16F84
INCLUDE "P16F84.INC"
SAYAC1 EQU H'0C'
;Gecikme alt programlarında kullanılan değişken
SAYAC2 EQU H'0D'
; Gecikme alt programlarında kullanılan değişken

rs

H’66’
SAYAC1

;W<--H’66’'
;SAYAC1 <-- W

.e
em
de

GECIKME1
MOVLW
MOVWF

no

tla

ri.

;Portları Ayarla……………………………………………………………
CLRF
PORTB
;PORTB’yi temizle
BSF
STATUS,5
;BANK1’e geç
CLRF
TRISB
;PORTB çıkış
BCF
STATUS,5
;BANK0’a geç
; Programın başlangıcı……………………………………………………………
BASLA
BSF
PORTB, 1
;Çıkışı “1” yani 5V yap
CALL
GECIKME1
;Darbe genişliği %40 süresini bekle
BCF
PORTB,1
; Çıkışı “0” yani 0V yap
CALL
GECIKME2
; %60 süresince 0V olarak bekle
GOTO
BASLA
; BASLA etiketine git

D1

DECFSZ
GOTO
RETURN
GECIKME2
MOVLW
MOVWF

SAYAC1,F
D1

; Sayac1 bir azalt ve sıfır mı? Kontrol et
; Hayır D1’e git

H’9A’
SAYAC2

;W<--H’9A’
;SAYAC2 <-- W

SAYAC2,F
D2

; Sayac2 bir azalt ve sıfır mı? Kontrol et
; Hayır D2’e git

D2

w

DECFSZ
GOTO
RETURN
END

1.5. PIC ile ADC Uygulama Devresi

w

w

Analog bir sinyal genellikle bir sensör aracılığıyla sağlanır. Uygulamalarda analog
sinyal, gerilim bölücü direnç (potansiyometre) ile elde edildiğinde şekil 1.8’deki bağlantı
yapılır. Bu bağlantı ile PIC’e bağlı olan bir direncin değeri ölçülür. Ölçülen değer PORT’un
çıkışlarında binary olarak görülür.
10

co
m
ri.
tla

Şekil 1.8: PIC’e analog giriş bağlantısı

Ölçme işlemi aşağıdaki gibi yapılır.

PortA çıkış olarak yönlendirildikten sonra kondansatöre “0” bilgisi gönderilerek
deşarj edilir.

Kondansatörün deşarj süresinden sonra PortA giriş olarak yönlendirilir ve

.e
em
de

Ø

rs

Ø

no

A/D çevrim metodu ile yapılan ölçümde değeri bilinmeyen bir direncin, bir
kondansatörü V değerine ne kadar sürede şarj ettiği bulunur. Bunun için TMR0 sayıcısı şarj
süresini ölçmek için kullanılır. A/D çevrim metodunun bağlantısı şekil 1.9’da gösterilmiştir.

TMR0 sayıcısı çalıştırılır.

Ø

PortA’daki gerilim V değerine ulaştığında TMR0 sayıcısı okunur.

Ø

Şarj süresi direncin değeriyle doğru orantılıdır. Direnç büyüdükçe şarj süresi de

w

w

w

büyüyeceğinden TMR0 registeri içerisinde daha büyük bir sayı okunur.

11

co
m
ri.

tla

Şekil 1.9: A/D çevrim metodu bağlantısı

Devrenin ASM Programı

no

;========ADC UYGULAMA PROGRAMI======S_2006=======

w

w

w

.e
em
de

rs

LIST P=16F84
INCLUDE "P16F84.INC"
ORG
H’00’
GOTO
BASLA
ORG
H’04’
GOTO
KESME
;Portları Ayarla……………………………………………………………
CLRF
PORTB
;PORTB’yi temizle
BSF
STATUS,5
;BANK1’e geç
CLRF
TRISB
;PORTB çıkış
CLRF
TRISA
; PORTA çıkış
BCF
STATUS,5
;BANK0’a geç
MOVLW B’10100000’
;TMR0 registerini kur
MOVWF INTCON
BSF
STATUS,5
; BANK1’e geç
MOVLW B’11010001’
; TMR0 aktif, dâhili komut saykılı
MOVLW OPTION_REG
BCF
STATUS,5
;BANK0
BCF
PORTA,0
;Kondansatörü deşarj et
CLRF
TMR0
; TMR0 zamanlayıcı başlat
DON
BTFSS
TMR0,7
;deşarj bitti mi?
GOTO
DON
;Hayır bekle
BSF
STATUS,5
;BANK1
BSF
TRISA,0
; PORTA 0 giriş
BCF
STATUS,5
;BANK0
CLRF
TMR0
; TMR0 yeniden başlat
12

DON2
PORTA,0
DON2
TMR0,W
PORTB
INTCON,5

GOTO

DONGU

BCF
MOVLW
MOVWF

INTCON,5
H’AA’
PORTB

;0.bit “1” mi?
; Hayır geri dön
;Evet, TMR0’ı oku
; Kondansatör dolma süresi göster

co
m

BTFSS
GOTO
MOVF
MOVWF
BCF
DONGU
KESME

ri.

; TMR0 kesmesini iptal et

; TMR0 dolma süresini göster

BEKLE

tla

GOTO BEKLE
END

.e
em
de

GECIKME1
MOVLW
MOVWF

rs

no

; Programın başlangıcı……………………………………………………………
BASLA
BSF
PORTB, 1
;Çıkışı “1” yani 5V yap
CALL
GECIKME1
;Darbe genişliği %40 süresini bekle
BCF
PORTB,1
; Çıkışı “0” yani 0V yap
CALL
GECIKME2
; %60 süresince 0V olarak bekle
GOTO
BASLA
; BASLA etiketine git

H’66’
SAYAC1

;W<--H’66’'
;SAYAC1 <-- W

SAYAC1,F
D1

; Sayac1 bir azalt ve sıfır mı? kontrol et
; Hayır D1’e git

H’9A’
SAYAC2

;W<--H’9A’
;SAYAC2 <-- W

SAYAC2,F
D2

; Sayac2 bir azalt ve sıfır mı? kontrol et
; Hayır D2’e git

D1

DECFSZ
GOTO
RETURN

GECIKME2
MOVLW
MOVWF

w

w

w

D2

DECFSZ
GOTO
RETURN

END

13

İşlem Basamakları

Öneriler

Kurulacak sistem için ihtiyaçları Ø
(devre elemanlarını) tespit ediniz.

Mikrodenetleyici olarak PIC 16F84
kullanınız.

Ø

İhtiyacınızı
karşılayacak Ø
mikrodenetleyiciyi seçiniz.

Programı yazdıktan sonra MPLAB ile
deneyiniz.

Ø

Analog
veri
için
gerekli Ø
hesaplamaları yaparak ADC ve
DAC devrelerini seçiniz.

Ø

Sisteminin çalışması için gerekli
programı yazınız.
Ø

Programı
mikrodenetleyiciye
yüklerken
kullanılan
pic
programlayıcıya
uygun
yazılım
kullanınız.

Ø

Çevre elemanları
kurunuz.

ile

tla

mikrodenetleyiciye

Devreyi
Proteus
çalıştırarak deneyiniz.

devreyi

Ø

Kullandığınız devre elemanlarının
özelliklerini internetten araştırınız.

Devre için gerekli giriş elemanları
ve özelliklerini belirleyiniz.

Ø

Devre için gerekli çıkış elemanları
ve özelliklerini tespit ediniz.

Baskı devreyi, devre şemasını Proteus
–Isıs programından Ares programına
aktararak çıkarınız.

rs

Ø

Ø

.e
em
de
Ø

Devrenin baskı
çıkartınız.

Ø

Devre
elemanlarının
ve
mikrodenetleyicinin
montajını
yapınız.

şemasını

w

w

devre

programında

no

Ø

Programı
yükleyiniz.

ri.

Ø

Ø

w

co
m

UYGULAMA FAALİYETİ
UYGULAMA FAALİYETİ

14

Devrenin montajını yapmadan önce
breadboard
üzerinde
kurarak
deneyiniz.

ÖLÇME VE DEĞERLENDİRME
ÖLÇME VE DEĞERLENDİRME

co
m

A- OBJEKTİF TESTLER (ÖLÇME SORULARI)
Sayısal bir sistemin blok diyagramını çiziniz.

2)

Dijital analog çevirici devre çeşitlerini yazınız.

3)

PWM nedir? Nasıl elde edilir ? Açıklayınız.

4)

16F84 ile 12V’luk bir lambanın parlaklığını kontrol eden devreyi çiziniz.

5)

4. sorudaki devrenin asm programını yazınız.

.e
em
de

rs

no

tla

ri.

1)

DEĞERLENDİRME

Cevaplarınızı cevap anahtarı ile karşılaştırınız. Doğru cevap sayınızı belirleyerek
kendinizi değerlendiriniz. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt yaşadığınız
sorularla ilgili konuları faaliyete dönerek tekrar inceleyiniz.

w

w

w

Tüm sorulara doğru cevap verdiyseniz diğer faaliyete geçiniz.

15

ÖĞRENME FAALİYETİ–2
ÖĞRENME FAALİYETİ–2

co
m

AMAÇ

ri.

Bu faaliyette PIC 16F877 entegresinin özelliklerini ve 16F84 entegresine göre
üstünlüklerini öğreneceksiniz. 16F877 ‘nin özelliklerinden yararlanarak ADC, motor kontrol
ve ısı kontrol uygulama devrelerini kurabilecek, programı mikrodenetleyiciye
yükleyebilecek ve devreyi hatasız olarak kurup çalıştırabileceksiniz.

ARAŞTIRMA

tla

Bu faaliyet öncesinde yapmanız gereken araştırmalar şunlardır:
Ø
16F877 entegresinin analog dijital dönüştürme özelliğini araştırmalısınız.
LM 35 entegresinin çalışmasını öğrenmelisiniz.

Ø

DC motorun yapısını ve çalışmasını öğrenmelisiniz.

no

Ø

Araştırma işlemleri için Mikrodenetleyici ile Dijital İşlemler modülünü gözden
geçirebilir ve internet ortamından yararlanabilirsiniz.

rs

2. ANALOG UYGULAMA DEVRELERİ

.e
em
de

Günümüzde en çok kullanılan PIC'ler 16F84 ile 16F877’dir. Tasarımın ihtiyacını
giderecek bir çözüm için en uygun olan PIC seçilmelidir. Öğrenme faaliyeti 1’de bulunan
uygulamalar PIC 16F84 ile yapılmıştır. Bu entegrenin analog girişi bulunmadığından
uygulamalarda ADC ve DAC devrelerine ihtiyaç duyulmuştur. Ayrıca PIC 16F84’ ün toplam
13 giriş/ çıkış portu bulunduğundan yapılan çalışmalar sınırlı kalmıştır. 16F84’ün bu
dezavantajlarından dolayı 16F877 entegresi bundan sonraki uygulamalarda kullanılmıştır.

2.1. Pic 16f877 Entegresinin Özellikleri
PIC16F877, en popüler PIC işlemcisi olan 16F84’ten sonra kullanıcılara yeni ve
gelişmiş olanaklar sunmasıyla hemen göze çarpmaktadır. Program belleği FLASH ROM
olan F877’de, F84’te olduğu gibi elektriksel olarak silinip yazılmaktadır. PIC 16F877 ile
16F84 arasındaki farklar tablo 2.1’de verilmiştir.

w

w

w

16F877 mikrodenetleyicisi 4 veya 20 MHz osilatör ile çalışmaktadır. Bu sayede daha
hızlı bir sistemler kurulabilir. 5 adet giriş/çıkış portu (A, B, C, D, E) bulunmaktadır. A portu
6 I/O, B portu 8 I/O, C portu 8 I/O, D portu 8 I/O ve E portu 3 I/O sahiptir. Port sayısı fazla
olduğundan aynı anda LCD, klavye, motor gibi elemanlar çalıştırılabilir. 3 tane timer’ı
bulunur. Şekil 2.1’de PIC 16F877’nin bacak bağlantısı gösterilmiştir.

16

Paralel slave port
USART / SCI

co
m

ri.

tla

Seri çevresel arayüz

PIC16F877
PIC16F84
DC-20Mhz
DC-10 Mhz
8Kx14 word Flash ROM
1Kx14 word Flash ROM
256 byte
64 byte
368 x 8 byte
68 x 8 byte
33
13
Timer0, Timer1, Timer2
Timer0
8 kanal 10 bit
YOK
16 bit Capture
YOK
16 bit Compare
10 bit PWM çözünürlük
SPI (Master) ve
YOK
12C (Master / Slave)
modunda SPI portu
(senkron seri port)
8 bit, harici RD,WR ve CS YOK
kontrollu
9 bit adresli
YOK

no

ÖZELLİKLER
Çalışma hızı
Program Belleği
EEPROM Belleği
Kullanıcı RAM
Giriş / Çıkış port sayısı
Timer
A / D çevirici
Capture / Comp / PWM

Şekil 2.1: 16F877’nin bacak bağlantısı

w

w

w

.e
em
de

rs

Tablo 2.1: 16F877 ile 16F84 entegrelerinin karşılaştırılması

17

co
m
ri.
tla
no
Görevi

Osilatör clock girişi (kristal)
Osilatör kristal çıkış ucu
Resetleme girişi

.e
em
de

Pin Adı
OSC1/CLKIN
OSC2/CLKOUT
MCLR/Vpp
RA0/AN0
RA1/AN1
RA2/AN2/VREF
RA3/ AN3
RA4/TOCK1
RA5/SS/AN4

rs

Şekil 2.2: 16f877’nin minimum donanım bağlantısı

w

w

w

RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD

RC0/T1OSO/T1CK1
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL

Port A iki yönlü giriş/çıkış portudur.
Analog giriş olarak kullanılabilir

Bu pin TMR0 için clock girişi olarak da kullanılabilir.
SSP Slave seçme pini veya analog giriş/çıkış olabilir.
Dış kesme girişi olarak seçilir.
Port B iki yönlü giriş/çıkış portudur
Düşük akımla programlamada da kullanılabilir.
Kesme girişi olarak seçilebilir.
Kesme girişi olarak seçilebilir.
Kesme girişi olarak seçilebilir. Seri programlamada clock girişidir.
Kesme girişi olarak seçilebilir. Seri programlamada data pinidir.
Timer1 osc. girişi veya saat girişi olarak kullanılabilir.
Timer1 osc. girişi / Capture2 girişi/Compare2 çıkışı /PWM2 çıkışı
Timer1 osc girişi/ Capture 1 girişi/ Compare 1 çıkışı / PWM1
çıkışı
18

SPI ve I2 modunda, seri saat giriş/ çıkışı
SPA moda SPI giriş verisi veya I2 C moda I/O için kullanılır.
SPA moda SPI çıkış verisi için seçilebilir.
USART asenkron gönderme ya da senkron saat için kullanılır.
USART asenkron alma veya senkron veri için kullanılır.

co
m

RC4/SDI/SDA
RC5/SDO
RC6/TX/CX
RC7/RX/DT
RD0/ PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
RE0/RD/AN5
RE1/WR/AN6
RE2/CS/AN7
Vss
VDD

ri.

Port C iki yönlü giriş çıkış portudur.
PSP bitleridir.

no

tla

Analog giriş ya da PSP okuma kontrolü olarak kullanılabilir.
Analog giriş ya da PSP yazma kontrolü olarak da kullanılabilir.
Analog giriş ya da PSP seçim kontrolü için kullanılabilir.
Toprak
Pozitif kaynak
Tablo 2.2: 16F877’nin pinlerinin görevleri

rs

Tablo 2.2 ‘de 16F877 mikrodenetleyicisinin bacaklarının isimleri ve görevleri tek tek
anlatılmıştır.

2.2. A / D Çevirici Uygulama Devresi

.e
em
de

Daha önceden de bahsettiğimiz gibi analog bilgiyi dijital bilgiye dönüştürmek için
PIC16F84 kullanıldığında ek devrelere ihtiyaç duyulmaktadır. Bundan dolayı bu
uygulamada PIC 16F877 entegresi kullanılmaktadır.
16F877’de 8 tane 10 bitlik A/D çevirme kanalı bulunur. A / D kanalları için RA4 hariç
diğer A ve E portları kullanılır. A/D çevirme işlemi 4 adet kaydediciyle yapılmaktadır.
Aşağıda ilgili registerlar ve adresleri gösterilmiştir.
0x1E ; A / D sonuç kaydedicisi (high register)

ADRESL

0x9E ; A / D sonuç kaydedicisi (low register)

ADCON0

0x1F

w

ADRESH

ADON1

0x9F ; A / D kontrol kaydedicisi 1

ADCON0, 8 bitlik bir A/D kaydedicisidir ve tablo 2.3’te iç yapısı gösterilmiştir.

w

w

; A / D kontrol kaydedicisi 0

7
6
5
4
3
2
1
ADCS1 ADCS0 CHS2 CHS1 CHS0 GO/DONE Tablo 2.3 ADCON0 registerinin iç yapısı

19

0
ADON

Ø

ADCS1-ADCS0 : A/D dönüştürme clock sinyali seçme bitidir. Sinyal seçme
işlemi

ADCON1

registeri

ile birlikte

kullanılır.

ADCS2

(ADCON2

co
m

kaydedicisinin 6.biti), ADCS1 ADCS0 bit üçlüsü clock sinyali seçmek için
kullanılan bitlerdir. Tablo 2.4’te bitlerin durumu ve clok sinyalleri
gösterilmiştir.

Dönüştüme clock sinyali

tla

ri.

Fosc/2
Fosc/8
Fosc/32
FRC (Sinyal iç RC devresi tarafından sağlanır)
Fosc/4
Fosc/16
Fosc/64
FRC (Sinyal iç RC devresi tarafından sağlanır)

no

ADCON1 ADCON0
(ADCS2) (ADCS1-ADCS0)
0
00
0
01
0
10
0
11
1
00
1
01
1
10
1
11

Tablo 2.4: ADCON0 registerinin bit durumları

CHS2-CHS1-CHS0 bitleri analog giriş kanalı seçme bitleridir.

rs

Ø

.e
em
de

000 : Kanal 0 (AN0/RA0)
001 : Kanal 1 (AN1/RA1)
010 : Kanal 2 (AN2/RA2)
011 : Kanal 3 (AN3/RA3)
100 : Kanal 4 (AN4/RA5)
101 : Kanal 5 (AN5/RE0)
110 : Kanal 6 (AN6/RE1)
111 : Kanal 7 (AN7/RE2)

Ø

GO/DONE biti dönüştürme işlemi durum bitidir.

1 : A/D dönüştürme işlemi sırasında donanım tarafından aktive edilir. Sonra
tekrar resetlenir.
0 : A/D dönüştürme işlemi yapılmıyor.
ADON : A/D dönüştürücü modülü açma biti

1 : A/D modülü çalıştırıldı
0 : A/D modülü çalışmıyor

w

w

w

Ø

20

ADCON1, 8 bitlik bir A/D kaydedicisidir ve tablo 2.5’te bitleri görülmektedir.
6
-

5
-

4
-

3
PCFG3

2
PCFG2

1
PCFG1

Tablo 2.5: ADCON1 registerinin iç yapısı

Ø

0
PCFG0

co
m

7
ADFM

ADFM biti dönüştürme işlemi sonunda 10 bitlik sayının formatını belirler.1:

ri.

Sayı sağa kaydırılır ve düşük 8 biti ADRESL’de, üst 2 biti de ADRESH
registerinde tutulur. ADRESH registerinin üst 6 biti sıfırlanır. Normal A/D

tla

dönüşüm işlemlerinde ADFM=1 kullanılır.0: Sayı sola kaydırılır ve ADRESL
registerinin düşük 6 biti sıfırlanır. Sayı 10 bitlik olduğundan 6 biti sıfırlanır.

PCFG3 – PCFG0 bitleri A/D portlarının durumunu belirler. Bu bitler ile hangi

no

Ø

portların analog ve hangi portların sayısal giriş-çıkış için kullanılacaklarını
belirler ve analog portlarda kullanılacak referans gerilimleri seçeriz. En yaygın

rs

kullanılan tüm bitlerin 0 olmasıdır. Bu durumda 8 tane analog kanal seçilmiş

.e
em
de

olur ve her kanalın referans gerilimi VDD olarak ayarlanır.

2.2.1. Devrenin Malzemeleri

PİC 16F877 4 Mhz mikrodenetleyici

Ø

X1= 4Mhz kristal

Ø

C1 = C2 = 22pf

Ø

R1 = R2… R8 = 330Ω direnç

Ø

RV1= 1K potansiyometre

Ø

R9= 10K,

Ø

Buton

Ø

8 Adet LED Diyot

w

w

w

Ø

21

no

tla

ri.

co
m

2.2.2. Devrenin Şeması

rs

Şekil 2.3: Pic 16F877 ile A/D uygulama devresi

.e
em
de

2.2.3. Devrenin ASM Programı

;=====ANALOG DİJİTAL ÇEVİRİCİ UYGULAMA PROGRAMI=====S_2006====

w

w

w

LIST P=16F877
INCLUDE "P16F877.INC"

BCF
BCF
MOVLW
MOVWF
CLRF
CLRF

STATUS, 5
STATUS, 6
B'00100000'
INTCON
PORTA
PORTB

; STATUS 5. biti =0
; STATUS 6.biti=0 BANK 0 a geç
;TMR0 sayıcısını aktif yap

MOVLW
MOVWF

B'01000001'
ADCON0

;A/D çevirici modülü aktif
; Kanal 0 (RA0) aktif

BSF
STATUS, 5
BCF STATUS, 6

; Port A sıfırla
; Port B sıfırla

;STATUS 5. biti = 1
;STATUS 6. biti =0 BANK 1 e geç

22

B'10000111'
OPTION_REG
B'00000000'
ADCON1
B'00000001'
TRISA
TRISB
STATUS, 5
STATUS, 6

; Frekans bölme değeri TMR0
; Frekans bölme sayısı 1/256 dır.
;Sayıyı sola kaydır.
;Sayıyı ADRESH a yükle.
;Port A.0 = giriş

co
m

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
CLRF
BCF
BCF

; Port B çıkış
;BANK 0 a geç

.e
em
de

2.2.4. Akış Diyagramı

rs

END

no

tla

ri.

;================PROGRAM BAŞLANGICI======================
BASLA
BTFSS
INTCON, T0IF
;TMR0 sayıcının sayımı bitti mi?
GOTO
BASLA
; Hayır BASLA etiketine git
BCF
INTCON, T0IF
; Evet sayıcıyı yeniden kur
BSF
ADCON0, GO
; A/ D dönüşümünü başlat
DON
BTFSS
PIR1, ADIF
; A/D dönüşümü tamam mı?
GOTO
DON
; Hayır geri dön
MOVF
ADRESH,W
; Evet, ADRESH àW aktar
MOVWF
PORTB
; Aktarılan sayıyı çıkışa gönder
GOTO
BASLA
; BASLA etiketine geri dön

w

w

w

Programda ilk olarak PIC tanıtılır. TMR0 sayıcısı kurulur ve A/D dönüşüm için
ADCON0, ADCON1 registerleri ayarlanır. Devrede analog bilgi olarak 5V bir kaynak ile
potansiyometre kullanılmıştır. Potansiyometrenin değişimiyle kanal 0’ın (Port A 0.bit) giriş
gerilimi değişmektedir. Giriş gerilimi 10 bitlik dijital veriye dönüştürülür. Bu verinin en
yüksek bitleri ADRESH registerinde, kalan 2 biti ise ADRESL registerinde saklanır.
ADRESH registerindeki bilgi çıkışa aktarılarak girişteki analog bilginin çıkıştaki dijital
dizilimi görülür. Giriş gerilimi değiştirildikçe çıkıştaki dijital veri de değişmektedir.

23

co
m
ri.
tla
no
rs
.e
em
de

Tablo 2.6: A/D çevirici devresinin akış diyagramı

w

w

w

Programın başlangıcında TMR0 sayıcısı kontrol edilir. Bu sayıcı 1/256 frekans bölme
sayısı ile 00’dan FF’ye kadar sayar, FF sayısına ulaşıldığında INTCON registerinde T0IF
bayrağı “1” olur. T0IF 1 olduğunda A/D çevrime başlanır ve T0IF sıfırlanarak sayıcı yeniden
kurulur. A/D çevirimin bitip bitmediğini anlamak için de PIR1 registerinin ADIF bayrağı
kontrol edilir. ADIF “1” ise A/D çevrim bitmiştir.

24

co
m

6.bit 5.bit
ADIF

7.bit

PIR1, Kesmeleri kontrol etmek için kullanılan özel bir registerdir. Bu registerin 6. biti
ile A/D dönüşümünün bitip bitmediği kontrol edilir.

ri.

5.bit 4.bit 3.bit 2.bit
T0IE
T0IF

tla

INTCON, registerinin 5. biti ile TMR0 registeri aktif hale getirilir. 2. biti ile de
sayıcıda taşma olup olmadığı kontrol edilir.

2.3. DC Motor Yön ve Hız Kontrol Devresi

Ø

no

DC motorlar uçlarına uygulanan DC gerilim ile çalışır. Genellikle besleme gerilimi
motor gövdesinde yazar. Uygulanan gerilimin değeri değiştirilerek motorun hızı ve kutupları
değiştirilerek motorun yönü ayarlanır.
DC motorun yön kontrolünde;

.e
em
de

rs

Şekil 2.4’te motorun yön kontrolü gösterilmiştir. DC motorların yönü anahtarlama ile
değiştirilir. Şekil 2.5’te motorun yön kontrolünün bağlantı şeması gösterilmiştir.

Motor gerilimi

S1

S2

M

S3

S1

S4 S3

Motor gerilimi

S2 S1

M

S4

(b) Saat yönünde

S3

w

Motor gerilimi

S2

M

S4

(c) Saat yönünün tersi

Şekil 2.4. Motorun yön kontrolü

w

w

(a) Boşta

Motor gerilimi

25

S2

S1
S3

M

S4
(d) Tutma

M

TR4

TR3

ri.

Şekil 2.5: Motorun yön kontrol devre bağlantı şeması

co
m

TR2

TR1

tla

Şekil 2.4.a’da motor boştadır. Devrede tüm anahtarlar açık olduğundan motor besleme
gerilimi almaz.

Şekil 2.4.b’de S1 ve S4 anahtarları kapalı konumdadır. Bu durumda motor saat
yönünde döner.

no

Şekil 2.4.c’de S2 ve S3 anahtarları kapalı olduğundan motor saatin tersi yönünde
döner.

DC motorun hız kontrolünde;

.e
em
de

Ø

rs

Şekil 2.4.d’de S2 ve S4 anahtarları kapalı konumdadır. Bu durumda motor her iki
yönden şase potansiyeli aldığından motor durur. Bu durum çalışan motoru bulunduğu
konumda tutmak için kullanılır.

DC motorun hız kontrolünde iki yöntem kullanılır. Birincisi gerilim kontrolü, ikincisi
ise faz kontrolüdür. Gerilim kontrolü şekil 2.6’da gösterildiği gibi mikrodenetleyiciye ihtiyaç
duyulmadan ayarlı bir güç kaynağı ile yapılmaktadır.

M

Şekil 2.6: Motorun ayarlı güç kaynağı ile hız kontrolü

w

w

w

İkinci yöntemde PWM sinyal kullanılır. Öğrenme Faaliyeti-1’de PWM sinyalinin
oluşturulmasını PIC 16F84 ile yapmıştık. Bu uygulama devresinde 16F877 entegresi
kullanılacaktır. Çünkü bu mikrodenetleyicinin CCP1 (RC1) ve CCP2 (RC2) bacakları PWM
çıkış üretir. Üretilen PWM sinyalin peryodu sabit fakat darbe genişliği değişebilen bir kare
dalga sinyaldir. Şekil 2.7’de kare dalga sinyal gösterilmiştir.

26

co
m

Darbe
Genişliği

Şekil 2.7: PWM sinyali

.e
em
de

rs

no

tla

ri.

PWM sinyalinin MARK zamanı 10 bitdir. CCPR1L registeri ile CCP1CON
registerinin CCPxX: CCPxY bitleri zaman ayarı yapılır. CCPR1L registerinin 8 biti,
CCP1CON registerinin de 4 ve 5. bitleri alt 2 biti saklar. PWM sinyalinin çalışması için
CCP1CON registerinin 2 ve 3 nu.lı bitleri lojik “1” olmalıdır. Mikrodenetleyicinin PWM
blok diyagramı şekil 2.8’de gösterilmiştir.

Şekil 2.8: Mikrokonrolörün ürettiği PWM sinyalin blok diyagramı

Ø

CCP1 (Capture/Compare/PWM Register 1)

w

w

w

CCP1 registeri 2 adet registerden oluşur. CCP1L ve CCP1H olmak üzere 10 bitlik bir
registerdir.

27

CCP1CON

CCPxM3 - CCPxM0 : CCPx çalışma modu seçme bitleri

0
CCPxM0

co
m

7
6
5
4
3
2
1
- CCPxX CCPxY CCPxM3 CCPxM2 CCPxM1
CCPxX - CCPxY :PWM sinyal oluşturmak için kullanılır.

Ø

no

tla

ri.

0000 : CCP modülleri pasif
0100 : Capture mod, tetikleme tüm düşen kenarlarda
0101 : Capture mod, tetikleme tüm yükselen kenarlarda
0110 : Capture mod, tetikleme her 4. yükselen kenarda
0111 : Capture mod, tetikleme her 16. yükselen kenarda
1000 : Compare mod,eşitlenme durumunda karşılaştırıcı çıkışı 1 (CCPxIF :1)
1001 : Compare mod, eşitlenme durumunda karşılaştırıcı çıkışı 0 (CCPxIF :0)
1010 : Compare mod
1011 : Compare mod
11xx : PWM mod
TIMER2

rs

o T2CON REGISTER (Timer2 Kontrol Registeri Adres : 12h)

.e
em
de

7
6
5
4
3
2
1
0
-- TOUTPS3 TOUTPS2 TOUTPS1 TOUTOS0 TMR2ON T2CKPS1 T2CKPS0
TOUTPS3:TOUTPS2:TOUTPS1:TOUTPS0 : Timer2 çıkışı postscale oranı seçme bitleri

w

0000 : 1/1 postscale oranı
0001 : 1/2
0010 : 1/3
0011 : 1/4
0100 : 1/5
.
.
.
.
.
.
1111 : 1/16 postscale oranı

w

w

TMR2ON : Timer2 aktif etme biti
1 : Timer2 aktif
0 : Timer2 pasif
T2CKPS1:T2CKPS0: Timer2 clock sinyali girişi prescaler oranı seçme bitleri
00 : 1/1 prescaler oranı
28

Ø

PIC 16F877 Denetleyici ile PWM Sinyalinin Üretilmesi

co
m

01 : 1/4 prescaler oranı
1x : 1/16 prescaler oranı

tla

ri.

PWM çalışma moduna geçebilmek için aşağıdaki aşamalar takip edilerek Capture
Compare PWM(CCP) modülü düzenlenir.

PWM periyodu PR2 registerine yazılarak başlanır.

PWM darbe genişliği CCPR1L register ve CCP1CON 5. ve 4. bitlerine
yazılır.

CCP1 pini TRISC 2. biti temizlenerek çıkış yapılır.

Timer2 (TMR2) prescale değeri girilir ve TMR2’nin T2CON biti set
edilerek TMR2’nin çalışması sağlanır.

PWM operasyonu için CCP1 modülü ayarlanır.
Darbe Genişlik Modülasyon (PWM) madunda,CCPx pini 10 bit kadar kararlı PWM çıkışı
üretir.
PWM Periyodunun ve Darbe Genişlik Süresinin Hesaplanması

no

Ø

Kare dalga sinyalin darbe genişliği (duty saykılı) azalırsa ortalama gerilim azalır ve
motorun hızı düşer. Sinyalin darbe genişliği artarsa motorun hızı artar.

.e
em
de

rs

PWM sinyalinin peryodu ve darbe genişliği Timer2, PR2, T2CON, CCPR1 ve
CCP1CON registerleri ile ayarlanır. Peryot, PR2 registerine bir sayı yükleyerek ve saat kat
sayısını 1, 4 veya 16 seçerek ayarlanır. Peryodun hesabı aşağıdaki gibidir.
PWM Peryod = (PR2+1) * 4*Tosc* TMR2 prescale değeri (saat kat sayısı)

w

w

w

Burada, Tosc mikrokontrolörün saat peryodu 4Mhz için Tosc = 1/ 4= 0.25 μs dir.
Peryot 1ms olduğunda PR2 registerine 249 sayısı yüklenmeli ve saat kat sayısı da 4
olmalıdır.
T= (249+1)*4*0.25*4 = 1000μs = 1ms
PWM darbe genişliği = (CCPR1L:CCPxX:CCPxY])* Tosc * TMR2 prescale değeri
TMR2 PR2’ye eşit olduktan sonraki artış üç durum ortaya çıkarır:

TMR2 temizlenir.

CCP1 pini set edilir. PWM duty saykıl=0% ise, CCP1 pini set edilmez.


PWM duty saykılı CCPR1’den CCPR1H’a saklanır.
TMR2, darbe genişliğine eşit oluncaya kadar CCPR1L’de lojik1 bilgisi görülür.
TMR2 içeriği darbe genişliğine eşit olduğunda seviye lojik 0’a düşer TMR2 içeriği
sıfırlanmadan PR2’ye eşit oluncaya kadar çalışmaya devam eder. Böylece şekil 2.9’da
gösterildiği gibi bir periyotluk süre tamamlanmış olur. Burada;

29

co
m
ri.
tla

no

Şekil 2.9: Mikrokontrolörün ürettiği PWM sinyali

2.3.1. Devrenin Malzemeleri

PİC 16F877 4 Mhz mikrodenetleyici

Ø

X1= 4Mhz kristal

Ø

C1 = C2 = 22pf

Ø

R1=R2=R3=R4= 10K, R5=R6=R7=1K

Ø

DC motor, Buton

Ø

RV1= 1K potansiyometre

Ø

Q1=Q2= BD 135

Ø

Q3=Q4= BD140, Q5= BC237

w

w

w

.e
em
de

rs

Ø

30

.e
em
de

rs

no

tla

ri.

co
m

2.3.2. Devrenin Şeması

w

w

w

Şekil 2.10: DC Motor hız ve yön kontrol devresi

31

2.3.3. Akış Diyagramı

co
m

BASLA

PORT_KUR

ANALOG_

ri.

PWM_KUR

GO = “1”

tla

H
ADIF =
“1” mi?

no

E
PWM darbe üret

DUR
basılı mı?

rs

H

PWM_KUR

ANALOG_KUR

TMR2, CCP1L
temizle

A/D çevrimi
başlat

Bank 1 e geç
PR2 = 255

Kanal 0 aktif
Bank 1 e geç

Bank 0 a geç
TMR2 aktif

Sayıyı sola
kaydır

T2CON ve
CCP1CON kur

Bank 0 a geç

BANK 0

RETURN

RETURN

RETURN

.e
em
de

E
DUR

GERI
basılı mı?

E

GERI

w

w

w

ILERI
basılı mı?

H

PORT_KUR

BANK 1 e geç
PORTA.0 = giriş

PORT B ve C
çıkış

E
ILERI

Tablo 2.7: Motor hız ve yön kontrol devresinin akış diyagramı

32

2.3.4. Devrenin ASM Programı

co
m

;====MOTOR HIZ VE YÖN KONTROL UYGULAMA PROGRAMI=====S_2006====
LIST P=16F877
INCLUDE "P16F877.INC"
PORT_KUR
ANALOG_KUR
PWM_KUR
ADCON0,GO

;PORT_KUR alt programına git
;ANALOG_KUR alt programına git
;PWM_KUR alt programına git
; A/D çevrimi başlat

BTFSS
GOTO
MOVF
MOVWF

PIR1,ADIF
DON
ADRESH,W
CCPR1L

;A/D çevrim bitti mi?
;Hayır geri dön
;Evet sayıyı W’ye aktar
; PWM darbeyi üret

BTFSS
CALL
BTFSS
CALL

PORTD,0
DUR
PORTD,1
GERI

; DUR butonuna basılı mı?
;evet DUR alt programına git
; GERI butonuna basılı mı?
;evet GERI alt programına git

ri.

CALL
CALL
CALL
BSF

tla

DON

no

TUS_ARA

.e
em
de

rs

BTFSS PORTD,2
; ILERI butonuna basılı mı?
CALL ILERI
;evet ILERI alt programına git
GOTO TUS_ARA
;Hayır tuş ara
PORT_KUR;===================================================
BSF
STATUS,5
;Bank 1’e geç
MOVLW
H'01'
MOVWF
TRISA
;PortA 0.bit giriş
CLRF
TRISB
;PortB çıkış
CLRF
TRISC
;PortC çıkış
MOVLW
H'FF'
MOVWF
TRISD
;PortD giriş
BCF
STATUS,5
;Bank 0’a geç
RETURN
ANALOG_KUR;=================================================

w

w

w

MOVLW
B'10000001'
;A/D çevrimi aktif
MOVWF
ADCON0
; Kanal 0 aktif
BSF
STATUS,5
;Bank 1’e geç
MOVLW
B'00001110'
; Sayıyı sola kaydır
MOVWF
ADCON1
;ADRESH’a yükle
BCF
STATUS,5
;Bank 0’a geç
RETURN
PWM_KUR;=====================================================
33

.e
em
de

rs

no

tla

ri.

co
m

CLRF
TMR2
;TMR2 temizle
CLRF
CCPR1L
;CCPR1L temizle
BSF
STATUS,5
;Bank 1 e geç
MOVLW
D'255'
;PR2 registerine 255 sayısını yükle
MOVWF
PR2
; Peryod=1638.4μs
BCF
STATUS,5
;Bank 0 a geç
MOVLW
B'00001100'
; Pst=1:1 TMR2=ON Pre=1:16
MOVWF
T2CON
;T2CON registerini kur
MOVLW
B'00001100'
; CCP1XY=0 CCP1M=1100(PWM)
MOVWF
CCP1CON
;CCP1CON registerini kur
RETURN
DUR;==========================================================
BSF
PORTB,0
;PortB.0 = “1”
BSF
PORTB,1
,PortB.1= “1”
RETURN
GERI;===========================================================
BCF
PORTB,0
;PortB.0= “0”
BSF
PORTB,1
;PortB.1= “1”
RETURN
ILERI;===========================================================
BSF
PORTB,0
;PortB.0=”1”
BCF
PORTB,1
,PortB.1=”0”
RETURN
END

Devrede RV1 potansiyometresi motorun hızını ayarlamaktadır. RV1 analog girişe
bağlandığından, potansiyometredeki değişim dijital bilgiye dönüştürülür ve bu değer PWM
darbe için CCP1L registerine yüklenir. Bu değer arttıkça PWM darbenin genişliği artar,
azaldıkça da azalır. Böylece motorun hızı ayarlanır. Bu sinyal üretildikten sonra motor
çalışmaya başlamaz.

Motorun yönü “ILERI”, “GERI” ve “DUR” butonları ile kontrol edilir. ILERI
butonuna basıldığında PortB’nin 0. biti “lojik 1”, 1. biti ise “lojik 0” olur. Bu durumda Q1
ve Q4 transistörleri iletime geçer, motor saat yönünde döner.

w

GERI butonuna basıldığında PortB’nin 0. biti “lojik 0”, 1. biti ise “lojik1” olur. Bu
durumda Q2 ve Q3 transistörleri iletime geçer, motor saatin tersi yönünde döner.

w

w

DUR butonuna basıldığında PortB’nin 0. ve 1. biti “lojik 1” olur. Bu durumda motor
boşta kalır ve durur.

34

2.4. Isıtıcı ve Fan Kontrollü Uygulama Devresi

Ø

Her 1 oC değişimde 10mV değişim faktörü

Ø

-55 +150 oC çalışma aralığı

Ø

Uzaktan kontrol uygulamalar için uygunluk

Ø

4-30 volt çalışma gerilimi

Ø

60 mikroamperden az kaynak akımı harcanımı.

ri.

Doğrudan ayarlı santigrat derece

.e
em
de

rs

no

tla

Ø

co
m

A/D dönüştürücü için gerekli analog giriş için LM 35 ısı sensörü kullanılmıştır. LM 35
çıkışında sıcaklığa bağlı olarak değişen doğrusal bir gerilim üreten sensördür. Bu gerilim
10mV/C olarak değişir. Yani sıcaklığın arttığı her derece için gerilim 10mV artar. LM 35
entegresinin özellikleri aşağıda sıralanmıştır.

Şekil 2.11: LM 35 entegresinin katalog bilgileri

w

w

w

LM 35 ısı sensöründen (Şekil 2.11) gelen analog sinyaller A/D dönüştürücü tarafından
dijital sinyallere dönüştürülerek mikrodenetleyici tarafından işlenen bilgi haline getirilir.
İşlenen bu sinyaller çıkış birimi olan LCD’ye sıcaklık değeri olarak yazdırılır. Bu değer daha
evvel belirlenmiş olan sıcaklık aralığı (20ºC - 30ºC oda sıcaklığı) ile karşılaştırılır sıcaklık
değeri belirlenen sıcaklık değerlerinin altında ise mikrodenetleyicinin Port C’nin 3 numaralı
portuna bağlı olan ısıtıcı çalışır. Sıcaklık değeri bu aralık değerinin üstüne çıktığında Port
C’nin 4 numaralı portuna bağlı olan fan çalışır. LCD ekranının ilk satırında “OLCULEN
SICAKLIK” yazısı bulunmakta ikinci satırında ise LM 35 ile ölçülen sıcaklık değeri yer
almaktadır.

35

Ø

X1= 4Mhz kristal

Ø

C1 = C2 = 22pf

Ø

R1= 10K, R2=R3=R5=1K, R4=3.9K

Ø

Fan, Isıtıcı

Ø

RV1= 1K potansiyometre

Ø

Q1=Q2= BC237

Ø

LM 35 Isı Sensörü , 741 OP-AMP

Ø

2x16 LCD, 5V Röle

ri.

PİC 16F877 4 Mhz mikrodenetleyici

tla

Ø

co
m

2.4.1. Devrenin Malzemeleri

Şekil 2.12. Isıtıcı ve fan kontrol devresi

w

w

w

.e
em
de

rs

no

2.4.2. Devrenin Şeması

36

2.4.3. Akış Diyagramı
BASLA

co
m

DONUSUM
Değişkenleri
tanımla
Değişkenleri
temizle

PORT_KUR
LCD_AYAR
H

ANALOG
OKUMA

tla

Bank 1e geç
Analog Bilgi Oku

ri.

SAYI>
100 mü?

E

Bank 0 a geç
SAYI =Analog bilg

no

SOL_K= SOL_K+1

DONUSUM

ADRESH
.0= 0 mı?

H

rs

E

.e
em
de

H

SAYI>
100 mü?

E

EK1

ORTA_K=
ORTA_K+1

E

ADRESH
.1= 0 mı?

W=SAYI
SAG_K=W

H

EK2

RETURN

w

w

w

KARSILASTIR

MESAJ1
MESAJ2

Tablo 2.8: Isıtıcı ve fan kontrol devresinin akış diyagramı

37

2.4.4. Devrenin ASM Programı

co
m

;======ISITICI VE FAN KONTROL DEVRESİ ASM PROGRAMI=====S_2006=====
LIST P=16F877
INCLUDE "P16F877.INC"
RS
RW
EN

PORTB,0
PORTB,1
PORTB,2

SOL_K
ORTA_K
SAG_K
SAYI

EQU
EQU
EQU
EQU

H'10'
H'11'
H'12'
H'13'

tla
no

EQU H'14'
EQU H'20'
EQU H'21'
EQU H'22'
EQU H'23'
EQU H'24'
EQU H'25'
EQU H'0A'
EQU H'0B'
EQU H'0C'
EQU H'0D'
EQU H'0E'

.e
em
de

rs

TEMP
TEMP1
TEMP2
DEG
SAYAC1
SAYAC2
Y1
Y2
Y3
D1
D2
D3

ri.

#DEFINE
#DEFINE
#DEFINE

w

w

w

BASLA;==========================================================
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
CLRF
CLRF

H'03'
Y1
H'00'
Y2
H'00'
Y3
H'02'
D1
H'00'
D2
H'00'
D3
STATUS
PORTB

;Y1= 3
;Y2=0
;Y3=0
;D1=2
;D2=0
;D3=0
;STATUS temizle
;PORTB temizle

38

PORTD
PORTC
PORT_KUR
LCD_AYAR

;PORTD temizle
;PORTC temizle
; Portları ayarla
;LCD yi ayarla

ANALOG_OKUMA
STATUS,5
ADRESL, W
STATUS,5
SAYI
DONUSUM
ADRESH,0
EK1
ADRESH,1
EK2
KARSILASTIR
MESAJ1
MESAJ2

; Analog girişi kontrol et
;Bank1 e geç
; Analog bilgiyi oku
;Bank 0 a geç
;Analog giriş bilgisini SAYI ya ata
; Okunan bilgiyi BCD’ye çevir
; 9.bit “0” mı?
; Hayır, 9.biti ekle
; 10. bit “0” mı?
;Hayır, 10. biti ekle
; Karşılaştır alt programına git
; LCD’ye yazı yaz
;LCD’ye sıcaklığı yaz

tla

no

CALL
BSF
MOVF
BCF
MOVWF
CALL
BTFSC
CALL
BTFSC
CALL
CALL
CALL
CALL
GOTO DONGU

ri.

DONGU

co
m

CLRF
CLRF
CALL
CALL

STATUS, 5
H'80'
ADCON1
TRISB
TRISD
TRISC
STATUS, 5
H'41'
ADCON0

.e
em
de

BSF
MOVLW
MOVWF
CLRF
CLRF
CLRF
BCF
MOVLW
MOVWF
RETURN

rs

PORT_KUR;======================================================
;Bank 1
; Sayı sağa kaydırılır.

;B portu çıkış
;D portu çıkış
;C portu çıkış
;Bank 0
;AN0 aktif
; A/D çevrim aktif

ANALOG_OKUMA;=================================================
BSF

ADCON0,GO

; A/D çevrime başla

BTFSS
GOTO
RETURN

PIR1, ADIF
DON

;A/D çevrim bitti mi?
Hayır geri dön

w

w

w

DON

DONUSUM;======================================================
CLRF
SOL_K
; Sol karakteri sil
CLRF
ORTA_K
;Orta karakteri sil
CLRF
SAG_K
;Sağ karakteri sil
39

SOL
H'64'
SAYI,W
STATUS,C
SOL2

; W à D’100’
; W = SAYI- W
; Sayı 100’ den büyük mü?
; Evet SOL2 ye git

MOVLW
SUBWF
BTFSC
GOTO

H'0A'
SAYI,W
STATUS,C
ORTA2

; W à D’10’
; W= SAYI - W
; Sayı 10’dan büyük mü?
; Evet ORTA2’ye git

MOVF
MOVWF
RETURN

SAYI,W
SAG_K

; W = SAYI
; W yi sağ karaktere aktar

INCF
MOVWF
GOTO

SOL_K,F
SAYI
SOL

; Sol karakteri bir artır
; W’yi SAYI değişkenine aktar
;SOL etiketine geri dön

INCF
MOVWF
GOTO

ORTA_K,F
SAYI
ORTA

co
m

MOVLW
SUBWF
BTFSC
GOTO

ri.

ORTA

no

; Orta karakteri bir artır
; W’yi SAYI değişkenine aktar
; ORTA etiketine geri dön

rs

ORTA2

tla

SOL2

EK1;===========================================================
H'06'
SAG_K,F
H'0A'
SAG_K,W
STATUS,C
EKLE2
SAG_K
ORTA_K

MOVLW
ADDWF
MOVLW
SUBWF
BTFSS
GOTO
MOVWF
INCF

H'05'
ORTA_K,F
H'0A'
ORTA_K,W
STATUS,C
EKLE3
ORTA_K
SOL_K

; Orta karaktere D’5’ ekle
; Orta karakter 10’dan büyük mü?

MOVLW
ADDWF
RETURN

H'02'
SOL_K

; Sol karaktere D’2’ sayısını ekle

.e
em
de

MOVLW
ADDWF
MOVLW
SUBWF
BTFSS
GOTO
MOVWF
INCF

; ADRESH 0. biti “1” ise
; Sayıya 256 eklenir.
;Sağ karaktere D’6’ ekle
; Sağ karakter 10’dan büyük mü?

; Hayır EKLE2’ye git
; Orta karakteri bir artır

w

w

w

EKLE2

;Sol karakteri bir artır

EKLE3

40

EK2;===========================================================

MOVLW
ADDWF
MOVLW
SUBWF
BTFSS
GOTO
MOVWF
INCF

H'01'
ORTA_K,F
H'0A'
ORTA_K,W
STATUS,C
EKLE5
ORTA_K
SOL_K

MOVLW
ADDWF
RETURN

H'05'
SOL_K

; ADRESH 1. biti “1” ise
; Sayıya 512 ilave edilir
; Sağ karaktere D’2’ eklenir
; Sayı 10’dan büyük mü?

;Hayır EKLE4 değişkenine git
;Orta karakteri bir artır

EKLE4

;Orta karaktere D’1’ sayısını ilave et

tla

; Orta karakter 10’dan büyük mü?

no

;Hayır EKLE5 değişkenine git
;Sol karakteri bir artır

;Sol karaktere D’5’sayısını ilave et

.e
em
de

rs

EKLE5

co
m

H'02'
SAG_K,F
H'0A'
SAG_K,W
STATUS,C
EKLE4
SAG_K
ORTA_K

ri.

MOVLW
ADDWF
MOVLW
SUBWF
BTFSS
GOTO
MOVWF
INCF

LCD_AYAR;======================================================

w

CLRF
CALL
MOVLW
CALL
CALL
MOVLW
CALL
MOVLW
CALL
RETURN

PORTB
GECIKME1
H'38'
LCD_YAZ
LCD_SIL
H'0C'
LCD_YAZ
H'06'
LCD_YAZ

;PortB temizle
;LCD nin açılması için bekle
; 8 bit , çift satır aktif
;LCD sil
, ;LCD on
; Kursör- 1 artan mod

w

w

LCD_YAZ;=======================================================
MOVWF
CALL
BCF
BCF
BSF
MOVF

;TEMP ß W
;BF bitini test et
; RW à 0 Yaz
; RS à 0 Komut
;Eß1
;W ß TEMP

TEMP
BF_TEST
RW
RS
EN
TEMP, W
41

PORTD
EN

; LCD’ye gönder
;Eß1

co
m

MOVWF
BCF
RETURN

LCD_SIL;========================================================
MOVLW
CALL

H'01'
LCD_YAZ

;Ekranı temizle, kursör- 1. satır 1.

sütunda

ri.

RETURN

BF_TEST;========================================================

no

tla

;BANK 1
; W ß ‘FF’
; PORT D giriş
; BANK 0
; RS à 0 Komut
; RW à 1 Oku
;Eß1
; Wß PORT D
;Eß0
;TEMP1 ß W
;BF’yi kontrol et “0” mı?
;Hayır tekrar test et
; RW à 0 Yaz
;BANK 1
; PORT D çıkış

rs

STATUS,5
H'FF'
TRISD
STATUS, 5
RS
RW
EN
PORTD, W
EN
TEMP1
TEMP1,7
BF_TEST
RW
STATUS, 5
H'00'
TRISD
STATUS, 5

.e
em
de

BSF
MOVLW
MOVWF
BCF
BCF
BSF
BSF
MOVF
BCF
MOVWF
BTFSC
GOTO
BCF
BSF
MOVLW
MOVWF
BCF
RETURN

; BANK 0

w

w

w

LCD_YAZ 2;=====================================================
MOVWF
CALL
BCF
BSF
BSF
MOVF
MOVWF
BCF
RETURN

TEMP2
BF_TEST
RW
RS
EN
TEMP2, W
PORTD
EN

;TEMP2 ß W
;BF yi kontrol et
; RW à 0 Yaz
; RS à 1 Veri
;Eß1
;W ß TEMP2
; LCD ye gönder
;Eß0

MESAJ1;=========================================================
MOVLW

H'80'

; 1. satırın 1.sütun aktif
42

CALL
MOVLW

LCD_YAZ
0

M1
; DEG =0
; Mesajı al

co
m

DEG
MESAJ_VERI
H'FF'
STATUS, Z
MESAJ_SON
LCD_YAZ2
DEG, W
1
M1

ri.

;Mesajın sonu geldi mi?
; Evet geri dön
; Hayır LCD’ye karakter gönder
; W ß DEG
; W = W +1
; M1 etiketine git

tla

MOVWF
CALL
ANDLW
BTFSC
GOTO
CALL
MOVF
ADDLW
GOTO
MESAJ_SON
RETURN

MESAJ2;========================================================

no

; 2. satırın 1. sütunu aktif

;Wß0
; W= SOL_K -W
; SONUÇ “0 “ mı?
;Hayır SOL_YAZ etiketine git

.e
em
de

SOL_BOS

H'C0'
LCD_YAZ
H'0F'
SOL_K,F
D'0'
SOL_K,W
STATUS,Z
SOL_YAZ

rs

MOVLW
CALL
MOVLW
ANDWF
MOVLW
SUBWF
BTFSS
GOTO
MOVLW
MOVWF
GOTO

H'20'
SOL_K
GIT1

;Wß 20
; SOL_K ß W
; GIT1

MOVLW
ADDWF
CALL

H'30'
SOL_K,W
LCD_YAZ2

; Sol karaktere h’30’ ekle
; LCD’ye gönder

MOVLW
ADDWF
CALL
MOVLW
CALL
MOVLW
ADDWF
CALL
MOVLW
CALL
MOVLW
CALL
MOVLW

H'30';
ORTA_K,W
LCD_YAZ2
H'2C'
LCD_YAZ2
H'30'
SAG_K,W
LCD_YAZ2
''
LCD_YAZ2
B'11011111'
LCD_YAZ2
'C'

;Orta karaktere h’30’ ekle

SOL_YAZ

w

w

w

GIT1

; LCD’ye gönder
; LCD’ye “,” karakterini gönder
; Sağ karaktere h’30’ ekle
; LCD’ye gönder
; LCD’ye “ º ” karakterini gönder

; LCD’ye “C “ yaz
43

MOVLW
MOVWF

D'60'
SAYAC1

MOVLW
MOVWF

D'50'
SAYAC2

DECFSZ
GOTO
DECFSZ
GOTO
RETURN

SAYAC2,F
A2
SAYAC1,F
A1

co
m

CALL
LCD_YAZ2
RETURN
GECIKME1;======================================================

A1

tla

ri.

A2

KARSILASTIR;====================================================

no

; Sıcaklığın yüksek sınırını kontrol et
;Sayının rakamları tek tek kontrol edilir
; Sol karakter üst sınıra eşit mi?
; Evet K1'e git

rs

Y1,W
SOL_K,W
STATUS,Z
K1
STATUS,C
KK
SOGUT

; Sıcaklık fazla ise Fanı çalıştır

.e
em
de

MOVF
SUBWF
BTFSC
GOTO
BTFSS
GOTO
CALL
RETURN
K1

MOVF
SUBWF
BTFSC
GOTO
BTFSS
GOTO
CALL
RETURN

Y2,W
ORTA_K,W
STATUS,Z
K2
STATUS,C
KK
SOGUT

;Orta karakter ile refaransı
; karşılaştır
; İki sayı birbirine eşit mi?
; Evet K2’e git

MOVF
SUBWF
BTFSS
GOTO
CALL
RETURN

Y3,W
SAG_K,W
STATUS,C
KK
SOGUT

;Orta karakter ile refaransı
; karşılaştır
; İki sayı birbirine eşit mi?

MOVF
SUBWF
BTFSC
GOTO

D1,W
SOL_K,W
STATUS,Z
K3

; Sıcaklığın düşük sınırını kontrol et
;Sayının rakamları tek tek kontrol edilir
; Sol karakter alt sınıra eşit mi?
; Evet K3 etiketine git

; Sıcaklık fazla ise Fanı çalıştır

w

w

w

K2

; Sıcaklık fazla ise Fanı çalıştır

KK

44

BTFSS
CALL
RETURN

STATUS,C
ISIT

; Sıcaklık düşük ise ısıtıcıyı çalıştır

MOVF
SUBWF
BTFSC
GOTO
BTFSS
CALL
RETURN

D2,W
ORTA_K,W
STATUS,Z
K4
STATUS,C
ISIT

; Sıcaklık düşük ise ısıtıcıyı çalıştır

ri.

co
m

K3

K4

no

tla

MOVF
D3,W
SUBWF
SAG_K,W
BTFSS
STATUS,C
CALL
ISIT
; Sıcaklık düşük ise ısıtıcıyı çalıştır
RETURN
ISIT;============================================================

w

w

w

.e
em
de

rs

BSF
PORTC,1
; Isıtıcıyı çalıştır
RETURN
SOGUT;==========================================================
BSF
PORTC,2
; Fanı çalıştır
RETURN
MESAJ_VERI;=====================================================
ADDWF
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
RETLW
MOVF
RETURN
END

PCL ,1
'O'
'L'
'C'
'U'
'L'
'E'
'N'
''
'S'
'I'
'C'
'A'
'K'
'L'
'I'
'K'
0
PCL,W

; PCL = PCL + W ile veriyi adresle

; İstenilen karakteri W registerine al

45

UYGULAMA FAALİYETİ
UYGULAMA FAALİYETİ

İşlem Basamakları

Öneriler

Kurulacak Sistem için ihtiyaçları (

Ø

devre elemanlarını ) tespit ediniz.
İhtiyacınızı

programlarından biri ile (Proteus,

karşılayacak

mikrodenetleyiciyi seçiniz.
Ø

Analog veri için gerekli hesaplamaları

seçiniz.

Programı

çalışması

için

Ø

mikrodenetleyiciye

Çevre elemanları ile devreyi kurunuz.

w

w

Programı

yüklerken

programlayıcıya

w

Ø

Programı yazdıktan sonra derleyici

derleyiniz.

gerekli

.e
em
de

yükleyiniz.

Ø

program ile (MPLAB, IcProg vs.)

programı yazınız.
Ø

kullanınız.

no

Sisteminin

Mikrodenetleyici olarak PIC 16F877

rs

Ø

MultiSim vs.) çalıştırarak deneyiniz.
Ø

yaparak ADC ve DAC devrelerini

ri.

Ø

Devreyi devre tasarım ve simülasyon

tla

Ø

co
m

Öğrenme Faaliyeti-2 de anlatılan DC Motor Hız ve Yön Kontrol Devresini
gerçekleştiriniz.

46

kullanınız.

mikrodenetleyiciye
kullanılan
uygun

Pic
yazılım

ÖLÇME VE DEĞERLENDİRME
ÖLÇME VE DEĞERLENDİRME

co
m

A- OBJEKTİF TESTLER (ÖLÇME SORULARI)
1)

PIC 16F84 ile 16F877 mikrodenetleyicileri arasındaki farkları yazınız.

2)

16F877 mikrodenetleyicisinin çalışması için gerekli minimum donanım bağlantısını
çiziniz.

A/D çevrim için kullanılan registerlerin isimlerini ve görevlerini yazınız.

4)

PIC 16F877’nin A/D çevrim özelliğinin kullanılabilmesi için gerekli olan program

ri.

3)

tla

parçasını yazınız.

PWM sinyal üretmek için kullanılan registerlerin isimlerini ve görevlerini yazınız.

6)

PWM sinyal üretmek için gerekli olan program parçasını yazınız.

.e
em
de

rs

no

5)

DEĞERLENDİRME

Cevaplarınızı cevap anahtarı ile karşılaştırınız. Doğru cevap sayınızı belirleyerek
kendinizi değerlendiriniz. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt yaşadığınız
sorularla ilgili konuları faaliyete dönerek tekrar inceleyiniz.

w

w

w

Tüm sorulara doğru cevap verdiyseniz diğer faaliyete geçiniz.

47

AMAÇ

ÖĞRENME FAALİYETİ–3

co
m

ÖĞRENME FAALİYETİ–3

Bu faaliyette PIC Basic Pro ile program yazımını öğrenecek ve Picbasic Pro ile çok
kısa programlar yazabileceksiniz.

ARAŞTIRMA

ARAŞTIRMA

ri.

Bu faaliyet öncesinde yapmanız gereken araştırmalar şunlardır:
Ø
Picbasic ile Pic C arasındaki farkları araştırınız.
Picbasic programlama dilinin komutlarını araştırınız.

Ø

Picbasic Pro derleyicisinin özelliklerini ve kullanımını araştırınız.

tla

Ø

Araştırma işlemleri için İnternet ortamından yararlanabilirsiniz.

no

3. PIC BASIC PRO İLE PROGRAMLAMA

rs

Assembly diliyle yazılan program uzadıkça hem karmaşıklaşır hem de zorlaşır.
Bundan dolayı alternatif programlama dilleri geliştirilmiştir. Bu programlar basic ve C
tabanlı olmak üzere ikiye ayrılır. Basic tabanlı olan program “PicBasic Pro”, C tabanlı olan
da “Pic C” programlarıdır.

.e
em
de

PicBasic PIC mikrodenetleyicileri programlamak için Micro Engineering Labs firması
tarafından geliştirilen Qbasic programlama diline benzeyen kod geliştirme aracıdır. PIC
mikroassembler ile sayfalarca kod yazmaktansa, üst seviyeli derleyicilerle (Picbasic, pic C)
çalışmak, programcıya hem zaman kazandıracak hem de programı sadeleştirecektir. Picbasic
Pro ile LCD sürme , A/D çevirimi, PWM üretme gibi zor olan işleri zahmetsizce yürütmeyi
sağlamaktadır.

3.1. Programlama Kuralları
Ø

Etiketlerden sonra mutlaka (: ) iki nokta üst üste kullanılmalıdır.

Ø

Değişkenler VAR sözcüğü ile tanımlanır. Değişkenler “bit”, “byte” ve “word”

w

w

w

tipinde olabilir. Değişkene istediğimiz ismi verebiliriz.

Ø

Sabitler CON sözcüğü ile tanımlanır. Sabite programda başka değer atanmaz.

Ø

Stringler “ “ tırnak arasına yazılır.

Ø

Sabitler, desimal (100), binary (%101), heksadesimal ($100) olarak kullanılır.

Ø

Açıklama satırı REM veya (‘ ) tek tırnak ile başlar.

48

Ø

Birden fazla komutu aynı satırda kullanılırken araya (: ) iki nokta üst üste
konur.
Portlar PORTA= %10001111 , PortA= $8F şeklinde tanımlanır.

Ø

Pinler, PORTB.1= 1 şeklinde tanımlanır.

Ø

A portunun tüm bacakları çıkış ise à TRISA = %00000000 tanımlanır.

Ø

B portunun tüm bacakları giriş ise à TRISB = %11111111 tanımlanır.

Ø

C portunun tek sayılı bacaklarını giriş, çift sayılı bacaklarını çıkış yapmak için

ri.

à TRISC = %1010101010 şeklinde tanımlanır.

co
m

Ø

A portunun 0 nu.lı bitini çıkış yapmak için à TRISA.0 = 0 şeklinde tanımlanır.

Ø

Ek dosya yüklemek için INCLUDE komutu à INCLUDE “modedefs.bas”

tla

Ø

şeklinde tanımlanır.

no

3.1.1. Karşılaştırma Operatörleri

Karşılaştırma operatörleri IF…THEN ifadesiyle beraber kullanılır.

.e
em
de

rs

Karşılaştırma Operatörleri
= veya ==
<> veya !=
<
>
<=
>=

Açıklama
Eşittir
Eşit değil
Küçük
Büyük
Küçük eşit
Büyük eşit

Örnek:

‘ Sayac 6 sayısından büyükse son etiketine git.

w

w

w

İf sayac > 6 then son

49

3.1.2. Aritmetik Operatörler
Açıklama
Toplama
Çıkarma
Çarpma
Çarpmanın üst 16 bitini elde etme
Çarpmanın ortadaki 16 bitini elde etme
Bölme
Sola Kaydırma
Sağa Kaydırma
Bit AND’leme
Bit OR’lama
Bit NOT’lama

no

‘ Y değişkenini 2 bit sola kaydır ve X değişkenine ata
‘ X değişkenini 10’a böl ve X değişkenine ata

.e
em
de

rs

Örnek:
X = Y << 2
X = X / 10
ABS
Sayının mutlak değerini alır.
X = ABS Y
SQR
Sayının karakökünü alır.
X = SQR Y

tla

ri.

co
m

Aritmetik Operatör
+
*
**
*/
/
<<
>>
&
|
~

MAX – MIN

İki sayıdan büyük veya küçük olanını bulmak için kullanılır.
X = Y MAX 100 ‘Y değişkeni ile 100 değişkeni arasından büyük olanı X’e ata
X= Y MIN 10
‘Y değişkeni ile 10 değişkeni arasından küçük olanı X’e ata

COS

w

w

w

Raydan cinsinden verilen bir açının kosinüsünü bulur. Elde edilen sonuç 8 bittir. 0 –
359 º olarak bilinen açıların karşılığı , 0-255 arasında binary sayılarla gösterilir. Örneğin 90º
= 64, 180º = 128’dir.
Sonuç = (Derece/360)*256 à Formülü ile hesaplanır.

50

SIN
Raydan cinsinden verilen bir açının sinüsünü bulur. Elde edilen sonuç 8 bittir.
DCD

co
m

8 veya 16 bitlik binary bir sayı üzerine istenilen bir bitin değerini “1” yapar. Diğer
bitlerin değeri “0” olur.
X= DCD 5
‘ X değişkenine 00001000 sayısını yerleştirir.
DIG

ri.

Desimal bir sayının istenilen bir bitini elde etmeye yarar.
X= 593
X1= X DIG 0
‘ X1 içeriği “5” olur.
NCD

tla

Binary bir sayının içerisindeki en soldaki “1”in sırası kaç ise bu sayıyı elde eder. Eğer
hiçbir dijit “1” değilse sonuç “0” dır.
X = NCD %10001001
‘ X değişkenine 7 sayısı atanır.
REV

rs

no

Binary bir sayının içerisinde belirtilen bir bitten sağa doğru tüm bitlerin tersini alır.
Bitlerin numaralandırılması 1 den başlar.
X = %01100100
Y = X REV 4
‘ Y = %01101011 olarak atanır.

3.2. Karar Verme ve Döngü İşlemleri

.e
em
de

3.2.1. GOTO Komutu

Koşulsuz dallanma komutudur. GOTO komutundan sonra etiket yazılır ve program
etiketin bulunduğu konumdan devam eder.

Kullanımı:

w

w

w

..
GOTO devam
.
.
devam:

51

‘devam etiketine git.

3.2.2. IF… THEN Komutu

co
m

Koşullu dallanma komutudur. IF… THEN karşılaştırılan ifadelerin doğru ya da yanlış
olduğunu değerlendirerek, farklı işlemleri gerçekleştirmek için kullanılır. IF komutundan
sonra “şart” yazılır, şart doğruysa THEN komutundan sonraki işlem gerçekleştirilir, yanlışsa
bir alt satıra geçilir.
Kullanımı:
IF

şart

THEN Etiket (İşlem)

ri.

IF…THEN kullanımının dışında ELSE ve ENDIF komutlarıyla grup halinde
çalışması da kullanılabilir.
Kullanımı:
şart

THEN

tla

IF

İşlemler…..

no

ELSE
İşlemler……
ENDIF

rs

Örnek:

.e
em
de

IF….THEN komutunun kullanıldığı bir örnek programdır. PortA.0’ıncı portuna bağlı
olan bir butona basıldığında PortB.1’inci portundaki LED’i yakan programdır.
‘Program1.bas
‘PIC : 16F84
TRISA.0=1
TRISB = %00000000

‘PortA 0.biti giriş
‘PortB çıkış

PORTB = 0

‘LED’i söndür

IF PORTA.0 = 0 THEN PORTB.1 = 1

‘ Butona basılı ise LED’i

DON:
yak

GOTO DON
END

‘Butona basılı değilse DON etiketine git

w

3.2.3.BRANCH Komutu

w

w

Atanan değişkene bağlı olarak belirlenen etiketlerden birine dallanmayı sağlar. Eğer
değişken “0” ise program ilk etikete allanır, “1” ise ikinci etikete dallanır. BRANCH
komutuyla en fazla 256 etiket yazılabilir.

52

Kullanımı:
BRANCH değişken , [ Etiket0, Etiket1, Etiket2….]

co
m

3.2.4. FOR…NEXT Komutu

Döngü düzenleme komutudur. FOR…NEXT arasına yazılan program parçasını
istenilen sayıda tekrar etmek için kullanılır.
Kullanımı:

tla

ri.

FOR Sayaç = Başlangıç TO Bitiş
.
Komutlar
.
NEXT
Herhangi bir değişiklik yapılmazsa döngü her döndüğünde sayaç “1” artar. Adım
miktarını değiştirmek için STEP komutu kullanılır. STEP komutundan sonra belirlenen
sayıya göre döngünün dönüş adımı belirlenir.
Kullanımı:

rs

no

FOR Sayaç = Başlangıç TO Bitiş STEP Adım
.
Komutlar
.
NEXT

3.2.5. WHILE… WEND Komutu

.e
em
de

Şart doğru olduğu sürece WHILE…WEND arasındaki işlemler çalıştırılır. Şart yanlış ise
WEND komutundan sonraki satırdan program devam eder.
Kullanımı:

WHILE şart
İşlemler……….
WEND

3.3. PBP Komutları
3.3.1. PAUSE Komutu

w

w

w

Programı belirlenen süre miktarınca durdurmak için kullanılır. PAUSE komutundan
sonra yazılan değişken kadar “milisaniye” bekler. Maximum bekleme süresi 16 bitlik bir
değişken olduğundan 65535 ms’dir.

53

Kullanımı:
PAUSE Süre
‘500 ms’lik gecikme yap

co
m

PAUSE 500

3.3.2. PAUSEUS Komutu

Programı mikrosaniye süresince durdurur. Maximum bekleme süresi 65535 μs’dir.
Kullanımı:
PAUSEUS Süre

‘500 μs’lik gecikme yap

ri.

PAUSEUS 500

tla

3.3.3. GOSUB… RETURN Komutu

Kesme

Kesme:

.e
em
de

…….
…….
RETURN

rs

GOSUB
…….
…….

no

Alt programlara dallanmak için kullanılır. Alt program RETURN komutunu görünceye
kadar çalışmasına devam eder. RETURN komutundan sonra program kaldığı yerden devam
eder.
Kullanımı:
GOSUB Etiket

3.4. Örnek Programlar
3.4.1. LED Flaşör Devresi

PortB nin 3. bitine bağlı olan LED’i 1sn aralıklarla yakıp söndüren uygulama
devresidir. Bu devrede hem 16F84 hem de 16F877 entegresini kullanabilirsiniz.
‘Sure değişkenine 1000 sayısını ata

TRISB.3 = 0

‘ PortB nin 3. bitini çıkış yap

w

Sure CON 1000

w

w

DON:

PORTB.3 = 1

‘LED’i yak

PAUSE Sure

‘1sn bekle

PORTB.3 = 0

‘LED’i söndür

PAUSE Sure

‘1sn bekle
54

GOTO DON

‘DON etiketine git

3.4.2. Sayıcı Uygulama Devresi

co
m

END

16F877 entegresinin D portuna bağlı olan 8 LED ile 0 – 255 arası binary sayıcı
uygulama programıdır.
‘SAYAC değişkenini tanımla

TRISD = %00000000

‘PORTD tüm portları çıkış

PORTD = %00000000

‘PORTD’yi temizle

tla

DON:

ri.

SAYAC VAR BYTE

‘ 0 dan 255’e kadar dön

PORTD = SAYAC

‘ SAYAC değişkenini çıkışa aktar

PAUSE 500

‘500ms bekle

no

FOR SAYAC = 0 TO 255

NEXT

‘ SAYAC 255 değilse geri don

END

‘DON etiketine git

rs

GOTO DON

.e
em
de

3.4.3. Karaşimşek Uygulama Devresi

16F877’nin B portuna bağlı olan tüm LED’leri sırasıyla sağa ve sola kaydıran
programdır.
SAYAC VAR BYTE

‘SAYAC değişkenini tanımla

TRISB = %00000000

‘PORTB çıkış

PORTB = %00000000

‘PORTB tüm LED’leri sönük

SAYAC = %00000001

‘ SAYAC değişkenine “1” sayısını yükle

SAG:

PORTB = SAYAC

w

w

w

PAUSE 500

SAYAC = SAYAC << 1
IF SAYAC.7 = 1 THEN SOL
GOTO SAG

SOL:
PORTB = SAYAC
55

PAUSE 500
SAYAC = SAYAC >> 1

co
m

IF SAYAC.0 = 1 THEN SAG
GOTO SOL
END

3.4.4. LCD Uygulama Devresi

“# “ işareti kullanılarak LCD’ye veri gönderilirse bu sayının ASCII karşılığı
LCD’ye yazdırılır.

tla

Ø

ri.

LCD’ye veri göndermek için LCDOUT komutu kullanılır.

Bir LCD’ye veri göndermeden önce en az 0.5 sn beklemek gerekir.

Ø

LCD’ye komut göndermek için $FE kullanılır.

Ø

LCD’ye yazı yazmak için “ “ kullanılır.

no

Ø

Ekranı siler.

$FE, 2

Kursörü satır başına alır.

Kursörü görünmez hale getirir.

.e
em
de

$FE, $0C

Görevi

rs

Komut
$FE, 1

$FE, $0E

Kursörü altçizgi biçimine alır.

$FE, $0F

Kursörü yanıp/söner yapar.

$FE, $10

Kursörü bir karakter sola alır.

$FE, $14

Kursörü bir karakter sağa alır.

$FE, $C0

Kursörü ikinci satırın başına alır.
Tablo 3.1: LCD Komutları

w

LCD’ler 8 bitlik ve 4 bitlik veri yolu ile mikrodenetleyiciye bağlanabilir. (Ayrıntılı
bilgi için Mikrodenetleyiciler ile Dijital Uygulamalar modülünü inceleyiniz.) LCDOUT
komutu yalnızca LCD’ye veri yazmak için kullanılacaksa R/W bacağı toprağa bağlanır.

w

w

LCD’nin bağlantı ayarlarını değiştirmek için DEFINE komutu kullanılır. Bu
tanımlama programın başında yapılır. Aşağıdaki tanımlamalarda koyu renkli kısımlar
değiştirilemez, açık renkli olan kısımlar ise programcı tarafından değiştirilebilir.

56

PORTB

Ø DEFINE LCD_DBIT

4

‘LCD data portunu belirler.
‘4 bitlik veri yolu kullanıldığında data

co
m

Ø DEFINE LCD_DREG

‘bitlerin başlangıcını belirler.( 0 veya 4 )
PORTB

‘RS’nin bağlanacağı portu belirler.

Ø DEFINE LCD_RSBIT

1

‘RS’nin bağlanacağı portun bitini belirler

Ø DEFINE LCD_EREG

PORTB

‘E’nin bağlancağı portu belirler.

Ø DEFINE LCD_EBIT

0

‘E’nin bağlanacağı portun bitini belirler.

Ø DEFINE LCD_RWREG

PORTB

‘RW’nin bağlanacağı portu belirler.

Ø DEFINE LCD_RWBIT

2

Ø DEFINE LCD_BITS

4

‘LCD veri yolu 4 bit veya 8 bit.

Ø DEFINE LCD_LINES

2

‘LCD satır sayısını belirler.

ri.

Ø DEFINE LCD_RSREG

tla

‘RW’nin bağlanacağı portun bitini belirler

‘Komut gecikme süresi μs cinsinden.

Ø DEFINE LCD_DATAUS

‘Veri gecikme süresi μs cinsinden.

50

no

Ø DEFINE LCD_COMMANDUS 2000

rs

LCD ekranının ilk satırına “ELEKTRONIK”, ikinci satırına da “

.e
em
de

DEFINE LCD_DREG PORTD
EML” yazan program aşağıda verilmiştir.PortD
DEFINE LCD_DBIT
4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 1
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT
0
DEFINE LCD_BITS
8
DEFINE LCD_LINES 2
TRISD = %00000000
TRISB = %00000000

‘LCD

data portunu = ERKAN AVCI

‘4 bitlik veri yolu kullanıldığında data
‘RS = PORTB
‘RS = PORTB.1
‘E = PORTB
‘E = PORTB.0
‘LCD veri yolu 8 bit.
‘LCD satır sayısı = 2

w

w

w

DON:

LCDOUT $FE,1
PAUSE 500
LCDOUT “ELEKTRONIK”

‘LCD ekranını temizle
‘500ms bekle
‘1. satıra ELEKTRONIK yaz

PAUSE 500
LCDOUT $FE, $C0
LCDOUT “ERKAN AVCI EML”
PAUSE 100
GOTO DON
END

‘500ms bekle
‘Kursörü 2. satırın başına al
‘2. satıra veriyi yaz
‘100ms bekle
‘DON etiketine git

57

3.5. Pıc Basıc Pro Programının Kullanımı

co
m

PBP uygulaması 3 aşamada gerçekleştirilir.
Ø

BAS uzantılı program dosyası oluşturulur.

Ø

BAS dosyası PicBasic Pro ile derlenerek HEX dosyasına dönüştürülür.

Ø

HEX dosyası PIC’e yüklenir. (Mikrodenetleyiciler ile Dijital İşlemler modülünü

ri.

inceleyiniz.)

3.5.1. BAS Dosyasının Oluşturulması

.e
em
de

rs

no

tla

PicBasic Pro derleyici komutlarını yazıp “.BAS” uzantılı bir dosya oluşturmak için bir
metin editörü kullanılır. Metin editörü olarak EDIT, NOTEPAD veya MPLAB programları
kullanılabilir. Bu modüldeki uygulamalarda NOTEPAD programı kullanılmıştır. Kodlar
yazıldıktan sonra DOSYA_ADI.BAS olarak kaydedilir. Burada dikkat edilmesi gereken
konu dosyanın PBP klasörüne kaydedilmesidir. Şekil 3.1’de hem EDIT hem de NOTEPAD
ile yazılmış program örneği görülmektedir.

Şekil 3.1. EDIT ve NOTEPAD ekranı

w

3.5.2. BAS Dosyanın Derlenmesi

w

w

Mikro Engineering Labs tarafından geliştirilen PicBasic Pro derleyici normal olarak
DOS ortamında çalışacak biçimde hazırlanmıştır. Programın derlenmesi için DOS ortamında
PBP klasörüne gidilir (C:\PBP ).

Derleme yapmak için C:\PBP> komut satırında PBP Dosya adı yazılır. Eğer
programda hata yoksa hem ASM hem de HEX dosyası oluşturulacaktır.
58

C:\PBP> PBP

–P16F877

co
m

PBP komutundan sonra direk dosya ismi yazılırsa derleyici PIC 16F84’e göre işlem
yapacaktır. 16F84 dışında bir mikrodenetleyici kullanılıyorsa aşağıdaki komut satırı ile
derleme yapılır.
LCDX

tla

ri.

-P à İfadesinden sonra mikrodenetleyicinin adı yazılır.
LCDX à Derlenecek dosyanın adı.

w

w

w

.e
em
de

rs

no

Şekil 3.2: Derleme yapıldıktan sonraki DOS ekranı

59

İşlem Basamakları

Öneriler

Ø

İhtiyacınızı
karşılayacak
mikrodenetleyiciyi seçiniz.

Ø

Analog veri için gerekli hesaplamaları
yapınız.

Ø

Sisteminin çalışması
programı yazınız.

Ø

Programı
yükleyiniz.

için

gerekli

Ø

Mikrodenetleyici olarak PIC 16F84
veya PIC 16F877 kullanınız.

Ø

Programı yazdıktan sonra PBP ile
derleyiniz.

Ø

Programı
mikrodenetleyiciye
yüklerken
kullanılan
pic
programlayıcıya
uygun
yazılım
kullanınız.

Ø

Devreyi
Proteus
çalıştırarak deneyiniz.

mikrodenetleyiciye

Çevre elemanları ile devreyi kurunuz.

Ø

Devre için gerekli giriş elemanları ve
özelliklerini belirleyiniz.

Ø

Devre için gerekli çıkış elemanları ve
özelliklerini tespit ediniz.

Ø

Devrenin
çıkartınız.

Ø

Baskı devreyi, devre şemasını Proteus
–Isıs programından Arese programına
aktrarak çıkarınız.

rs

Kullandığınız devre elemanlarının
özelliklerini internetten araştırınız.

devre

şemasını

.e
em
de

baskı

Ø

Devre
elemanlarının
ve
Ø
mikrodenetleyicinin
montajını
yapınız.

w

w

w

Ø

programında

no

Ø

ri.

Kurulacak sistem için ihtiyaçları (
devre elemanlarını ) tespit ediniz.

tla

Ø

co
m

UYGULAMAFAALİYETİ
FAALİYETİ
UYGULAMA

60

Devrenin montajını yapmadan önce
bredboard üzerinde kurarak deneyiniz.

A- OBJEKTİF TESTLER (ÖLÇME SORULARI)
1)

co
m

ÖLÇME VE DEĞERLENDİRME
ÖLÇME VE DEĞERLENDİRME

PBP ile trafik lambası simülasyon programını yazınız. Devrede kırmızı, sarı ve yeşil
olmak üzere 3 LED bulunacaktır. Kırmızı ve yeşil LED’ler 1sn., sarı LED ise 100 ms

2)

ri.

yanık kalacaktır. İstediğiniz mikrodenetleyiciyi kullanabilirsiniz.

LCD gösterge 0’dan 255’e kadar sayan sayıcı devresini tasarlayınız. LCD ekranın ilk

tla

satırında “SAYI” yazı yazdırılacak, ikinci satırında ise sayının değeri gösterilecektir.
Sayıcı 1sn aralıkla sayacaktır.

PIC 16F84 ile yürüyen ışık devresini tasarlayınız. PortB’ye bağlı olan LED’ler artarak

no

3)

yanacak, tüm LED’ler 1sn. yanık kaldıktan sonra program baştan başlayacaktır.

rs

PBP ile derleme işleminin nasıl yapıldığını anlatınız.

.e
em
de

4)

DEĞERLENDİRME

Cevaplarınızı cevap anahtarı ile karşılaştırınız. Doğru cevap sayınızı belirleyerek
kendinizi değerlendiriniz. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt yaşadığınız
sorularla ilgili konuları faaliyete dönerek tekrar inceleyiniz.

w

w

w

Tüm sorulara doğru cevap verdiyseniz diğer faaliyete geçiniz.

61

ÖĞRENME FAALİYETİ–4
ÖĞRENME FAALİYETİ–4

co
m

AMAÇ
Bu faaliyette PicBasic Pro ile ADC özelliğinden yararlanarak voltmetre uygulaması,
DC motor devir kontrolü ve iz takip eden robot uygulama devrelerini kurabilecek, programı
mikrodenetleyiciye yükleyebilecek ve devreyi hatasız olarak kurup çalıştırabileceksiniz.

ri.

ARAŞTIRMA

tla

Bu faaliyet öncesinde yapmanız gereken öncelikli araştırmalar şunlardır:
Ø
PBP ile yapılan termometre ve nem ölçer uygulama devrelerini araştırınız.
Araştırma işlemleri için İnternet ortamından yararlanabilirsiniz.

no

4. PIC BASIC İLE UYGULAMA DEVRELERİ
4.1. Voltmetre Uygulama Devresi

.e
em
de

rs

2. öğrenme faaliyetinde de anlattığımız gibi PIC 16F877 entegresi 10 bitlik 8 adet
analog girişe sahiptir. PicBasic ile analog girişleri kontrol etmek için ADCIN komutu
kullanılır.
Kullanımı:
ADCIN kanal, değişken
ADCIN komutu belirlenen kanaldan okuma yapar ve sonucu belirtilen değişkene aktarır.
ADCIN komutunun kullanılabilmesi için aşağıdaki işlemler yapılır.
Ø
İstenilen bacakların giriş yapılması gerekir. Bunun için TRIS registeri kullanılır.
Ø

İstenilen bacakların analog giriş için kullanılması için ADCON1 registeri

kullanılır.

ADCON1’in 7. biti ile sonucun sağa ya da sola hizalı olması belirlenir.

Ø

8 bitlik bir

w

Ø

w

w

Ø

A/D çevrimde sonuç sola hizalı olmalı ve ADCON1.7 = 0

yapılmalıdır.

10 bitlik bir A/D çevrimde sonuç sağa hizalı olmalı ve ADCON1.7 = 1
yapılmalıdır.

62

Ø

ADCIN ile yapılan okumada sayısal veriye dönüştürme işlemlerinde DEFINE
ile tanımlamalar yapılmalıdır.
DEFINE ADC_BITS

Ø

DEFINE ADC_CLOCK

8

‘A/D çevrim çözünürlüğü (8 /10 bit)

co
m

Ø

3

‘Saat kaynağını ayarlar. (RC

= 3)
Ø

DEFINE ADC_SAMPLEUS 50

‘Örnekleme sayısıdır. Birimi μs dir.

ri.

4.1.1. Devrenin Malzemeleri
PİC 16F877 4 Mhz mikrodenetleyici

Ø

C1 = C2 = 22pf , X1= 4Mhz kristal

Ø

R1= 10K, RV1= RV2 = 1K potansiyometre

Ø

2x16 LCD, Buton

no

tla

Ø

rs

Analog giriş olarak AN0 kanalı kullanılmıştır. Okunan analog bilgi sayı değişkenine
aktarılmaktadır. Sayı değişkeni word tipinde tanımlandığından 16 bittir. Sayı değişkenin
yüksek bitlerine ADRESH değişkeni aktarılır, düşük bitlerine ise ADRESL değişkeni
aktarılır. Programda sağa kaymalı okuma yapıldığından okunan analog bilginin yüksek
bitleri ADRESH’da, analog bilginin düşük bitleri ADRESL’de kaydedilir.

.e
em
de

Analog bilgiden dijital bilgiye dönüştürülen bilgi SAYI değişkeninde saklanır. 10
bitlik okuma yapıldığından 5V (Ölçülen max gerilimdir.) maksimum değeri dijital olarak
1024 dijital bilgisine karşılık gelir. Örneğin 2.5V için dijital bilgi 2.5*1024/5 = 512 sayısına
denk gelir.

Okunan dijital bilgi direk olarak LCD’ye gönderilmez. İlk olarak gerilime
dönüştürülür. Bunun için dijital bilgi 5/1024 sayısı ile çarpılır. (5 gerilimin max değeridir.)
PIC Basic'te, bölme işleminden sonra virgülden sonraki sayılar doğrudan atılır.Yani floating
point ya da yuvarlama olayı yoktur.Yaptığımız analog-dijital çeviricide virgülden sonraki
rakam değerlerini kaybetmemek, hassasiyeti artırmak için okunan dijital bilgi 100 değeri ile
çarpılır.

w

w

w

Elde edilen gerilim SAYI değişkeninde saklanır. Bu bilgi LCD’ye direk
gönderilemediğinden sayının her dijiti ayrı bir karaktere aktarılır.

63

.e
em
de

rs

no

tla

ri.

co
m

4.1.2. Devrenin Şeması

Şekil 4.1: Voltmetre uygulama devresi

4.1.3. Devrenin Asm Programı

w

w

w

‘=================================================================
DEFINE LCD_DREG PORTD
‘LCD data portu = PortD
DEFINE LCD_DBIT 0
‘data bitlerin başlangıcı = 0
DEFINE LCD_RSREG PORTB
‘RS = PortB
DEFINE LCD_RSBIT 0
‘RS = PortB.0
DEFINE LCD_EREG PORTB
‘E = PortB
DEFINE LCD_EBIT 2
‘E = PortB.2
DEFINE LCD_LINES 2
‘2 satır aktif
DEFINE LCD_BITS 8
‘8 bitlik veri yolu
DEFINE ADC_BITS 10
‘A/D çevrim 10 bit
DEFINE ADC_CLOCK 3
‘RC = 3
DEFINE ADC_SAMPLEUS 50
‘Örnekleme sayısı = 50μs
TRISA = %11111111
TRISD = %00000000
TRISB = %00000000

‘PortA giriş
‘PortD çıkış
‘PortB çıkış
64

‘ SAYI değişkenini Word olarak tanımla
‘SOL_K değişkenini tanımla
‘ORTA_K değişkenini tanımla
‘SAG_K değişkenini tanımla
‘LSB değişkenini tanımla

co
m

SAYI VAR WORD
SOL_K VAR BYTE
ORTA_K VAR BYTE
SAG_K VAR BYTE
LSB
VAR BYTE
LSB = 5000/1024
ADCON1.7 = 1
ADCON0 = $41
PAUSE 500

‘Sağa kaydırmalı olarak A/D yap
‘A/D çevrim aktif, Kanal 0 seçili
‘500ms bekle

ADCON0.2=1

‘GO = 1 yap yani A/D çevrime başla

ri.

ADC_OKU:
DON:

‘Ekranı temizle
‘Sayının 2. dijitini sol karaktere aktar
‘Sayının 2. dijitini orta karaktere aktar
‘Sayının 2. dijitini sağ karaktere aktar

rs

LCDOUT $FE, 1
SOL_K= SAYI DIG 2
ORTA_K= SAYI DIG 1
SAG_K= SAYI DIG 0

no

tla

PAUSE 5
‘5msn bekle
IF ADCON0.2=1 THEN GOTO DON ‘ A/D çevrim bitmediyse DON’e git
SAYI.HIGHBYTE = ADRESH
‘ SAYI’nın yüksek 8 biti = ADRESH
SAYI.LOWBYTE=ADRESL
‘ SAYI’nın düşük 8 biti = ADRESL
SAYI = SAYI*LSB/10
‘Okunan dijital bilgi Volt olarak

w

w

w

.e
em
de

LCDOUT $FE,2
‘Kursörü 1. satırın başına al
LCDOUT "OLCULEN GERILIM" ‘Ekrana tırnak içindekini yaz
LCDOUT $FE,$C3
‘Kursörü 2.satırın 3. sütununa al
LCDOUT #SOL_K, ".",#ORTA_K, #SAG_K, "V"
‘Ekrana sol, orta ve sağ karakteri yaz
PAUSE 100
‘100 ms bekle
GOTO ADC_OKU
‘Geri dön
END

65

co
m

4.1.4. Akış Diyagramı

BASLA

Tanımlamaları
yap

no

ADCON1.7=1
ADCON= $41

tla

Değişkenleri
tanımla

ri.

Port B, D çıkış
Port A giriş

rs

ADCON0.2=1

E

.e
em
de

GO=
1mi?

H

Dijital bilgiyi
sayıya dönüşt.

Ekranı temizle
Ve yazı yaz

w

w

w

İkinci satıra
geç sayı yaz

100ms bekle

Tablo 4.1: Voltmetre uygulama devresi akış diyagramı

66

4.2. DC Motor Devir Ayar Uygulama Devresi

PIC 16F84 4 Mhz mikrodenetleyici

Ø

C1 = C2 = 22pf , X1= 4Mhz kristal

Ø

R1= R2 = R3 = R4 = R5 = R6 = R8 = R9 = 1K

Ø

R7 = 10K, Q1 = BC237, Q2 = BD135, 12V DC Motor

Ø

2x16 LCD, Buton

ri.

Ø

co
m

4.2.1. Devrenin Malzemeleri

w

w

w

.e
em
de

rs

no

tla

4.2.2. Devrenin Şeması

Şekil 4.2: Motor devir ayar uygulama devresi

67

4.2.3. Akış Diyagramı
ART

TEMIZLE

Bekle

Bekle

Sayı =Sayı+1

Sayı =0, Sayı1=0

co
m

BASLA

Değişken tanımla
PORTB..0 =0

ri.

Tanımlamaları yap

SAYI=0, SAYI1=0
LCD temizle

RETURN

Ekrana yazdır

RETURN

tla

Ekrana yazdır

BASLA

no

LCD “MOTOR DEVIR
SAYI” yazısını yaz

Motoru çalıştır

E
ART

rs

Art
basılı ?

.e
em
de

H
E

Azal
basılı ?

H

Reed
basılı?

E
Bekle

AZAL1

H

E

Temiz
basılı ?

H

Sayı>=1
mi?
E
Sayı =Sayı-1

TEMIZLE

Ekrana yazdır

H

E

w

w

w

Basla
basılı ?

Motoru durdur

BASLA
RETURN

H

Tablo 4.2: Motor devir ayar uygulama devresi akış diyagramı

68

4.2.4. Devrenin Asm Programı

co
m

Devrenin programı Picbasic programı ile yapılmıştır.

SAYI=0
SAYI1=0
LCDOUT
LCDOUT
LCDOUT

$FE, 1
"MOTOR SARIM SAYI:",#SAYI1
$FE,
$C0,
#SAYI

‘LCD’nin ekranını sil

.e
em
de

BAS:

‘SAYI değişkenini tanımla
‘SAYI1 değişkenini tanımla
‘100 ms’lik gecikme LCD’nin açılmasını bekle

no

VAR BYTE
VAR BYTE
PAUSE
100

rs

SAYI
SAYI1

tla

ri.

‘=================================================================
DEFINE LCD_DREG PORTA
‘LCD data portu = PortA
DEFINE LCD_DBIT 0
‘data bitlerin başlangıcı = 0
DEFINE LCD_RSREG PORTA
‘RS = PortA
DEFINE LCD_RSBIT 0
‘RS = PortA.0
DEFINE LCD_EREG PORTB
‘E = PortB
DEFINE LCD_EBIT 3
‘E = PortB.3
DEFINE LCD_LINES 2
‘2 satır aktif
DEFINE LCD_BITS 4
‘4 bitlik veri yolu

IF PORTB.7=0 THEN GOSUB ART
‘ART butonu basılı mı?
IF PORTB.6=0 THEN GOSUB AZAL1
‘AZAL butonu basılı mı?
IF PORTB.5=0 THEN GOSUB BASLA
‘BASLA butonu basılı mı?
IF PORTB.4=0 THEN GOSUB TEMIZLE
‘TEMIZLE basılı mı?
GOTO BAS
‘Hiçbir butona basılı değil BAS etiketine geri dön

w

ART: ‘=============================================================
PAUSE
50
’50 ms bekle
SAYI = SAYI+1
‘ SAYI değişkenini bir arttır.
SAYI1 = SAYI
‘SAYI1’e aktar
LCDOUT $FE,1
‘LCD’ye yazdır
LCDOUT "MOTOR SARIM SAYI:",
#SAYI1
LCDOUT $FE,
$C0,
#SAYI
RETURN

w

w

AZAL1: ‘===========================================================
PAUSE
50
IF SAYI<=0 THEN GOTO CIK1
‘Sayı 0’a eşitse geri dön
SAYI=
SAYI-1
‘değilse sayıyı azalt
SAYI1=
SAYI
69

LCDOUT
LCDOUT
LCDOUT

$FE, 1
‘Ekrana yazdır
"MOTOR SARIM SAYI:", #SAYI1
$FE, $C0, #SAYI

co
m

CIK1:
RETURN

tla

ri.

TEMIZLE: ‘=========================================================
PAUSE
50
SAYI1=
0
‘Değişkenleri sıfırla
SAYI=
0
LCDOUT $FE, 1
‘Ekrana yazdır
LCDOUT "MOTOR SARIM SAYI:", #SAYI1
LCDOUT $FE,
$C0,
#SAYI
RETURN
BASLA: ‘==========================================================

rs

no

PORTB.1=1
‘Motoru çalıştır
IF PORTB.0=1 THEN GOTO BASLA
‘Motor bir tur attı mı?
PAUSE 50
‘Evet 50ms bekle
IF SAYI>=1 THEN GOTO DEVAM
‘Sayı 0 dan büyük mü?
PORTB.1=0
‘Hayır motoru durdur
RETURN
‘Alt programdan çık

.e
em
de

DEVAM:
SAYI= SAYI-1
LCDOUT $FE,1
LCDOUT "MOTOR SARIM SAYI:",#SAYI1
LCDOUT $FE,$C0,#SAYI
GOTO BASLA
END

‘Evet sayı 0 dan büyük
‘Sayıyı azalt
‘Ekranı temizle
‘Ekrana yazdır
‘BASLA etiketine geri dön

‘============================================================

Devrede 4 tane buton kullanılmıştır. ART butonu devir sayısını artırmak için
kullanılır. Devre ilk çalıştırıldığında LCD’nin ilk satırında “MOTOR DEVIR SAYISI” ve
ikinci satırında da devir sayısı bulunur.

w

w

w

AZALT butonu devir sayısı azaltılır. TEMIZLE butonu ile de devir sayısı resetlenir.
Devir sayısı ayarlandıktan sonra BASLA butonuna basıldığında motor çalışmaya başlar.
Motorun attığı her tur reed röle ile belirlenir. Motorun her turunda reed röle kapanır ve
motorun devir sayısı 1 azalır. Bu LCD ekranında da gözlenebilir. Devir sayısı 0’a indiğinde
motor durmaktadır. Uygulama devresinde reed rölenin yerine bir buton kullanılmıştır.

70

4.3. Çizgi Takip Eden Robot Uygulama Devresi

tla

ri.

co
m

Hızla gelişen günümüz teknolojisi ile beraber birçok alanda insan gücüne olan ihtiyaç
azalmıştır. Akıllı cihazların geliştirilmesiyle insan gücünün yerini robotlar almıştır. Robotlar
sanayinin tüm alanlarına ve hatta günlük yaşantımıza girmiştir. Çizgi takip eden robot şekil
4.3’te gösterildiği gibi siyah çizgiyi takip etmektedir. Robot sistemi, algılama, karşılaştırma,
kontrol ve hareket sisteminden oluşur (Şekil 4.4).

Çizgi sensörü

no

Şekil 4.3. Çizgi takip eden robot hattı

PIC16F84

DA motor

.e
em
de

4.3.1. Algılama Sistemi

rs

Şekil 4.4: Robot sisteminin blok diyagramı

Algılama sistemi çizgi sensöründen oluşur. Çizgi sensörü bir kızıl ötesi LED ve bir
foto transistörden oluşur. Çizgi sensörü olarak CNY 70 entegresi de kullanılabilir. CNY 70
entegresi şekil 4.5’te gösterildiği gibi bir fototransistör ve kızıl ötesi LED’den oluşur.

w

Şekil 4.5: CNY 70 entegresinin iç yapısı

w

w

Algılama sisteminde kızıl ötesi LED, zemine sürekli ışık tutar. Işık yerden
fototransistöre yansır. Eğer ışık beyaz zeminden yansımış ise, fototransistör üzerine fazla ışık
düşer. Şekil 4.6’da gösterildiği gibi yansıma güçlü olur.

71

IR LED

Güçlü yansıma

Beyaz zemin

ri.

Şekil 4.6: Beyaz zeminde oluşan yansıma

co
m

Foto
TR

tla

Yansıma siyah zeminde gerçekleşirse, siyah renk ışık emdiği için daha az ışık yansır.
Şekil 4.7’de siyah zemindeki zayıf yansıma gösterilmiştir.
IR LED

Foto TR

no

Zayıf yansıma

rs

Siyah zemin

Şekil 4.7: Siyah zeminde oluşan yansıma

.e
em
de

Fototransistörler BJT’lerden farklı olarak beyz girişine sahip değildir. Bu transistörler
beyze ışık geldiğinde iletime geçer. Siyah zemindeki zayıf yansımadan dolayı transistör ya
iletime geçmez ya da çok küçük sızıntı akımı akıtır. Beyaz zeminde ise transistör güçlü
yansımadan dolayı iletime geçer. Bu durum şekil 4.8’de gösterilmiştir.

100uA

w

300uA
Beyaz zeminin
ışık yansıması

Şekil 4.8: Siyah ve beyaz zeminde transistörlerin durumu

w

w

Siyah zeminin
ışık yansıması

72

4.3.2. Karşılaştırma Sistemi:

co
m

Karşılaştırıcı olarak devrede OP-AMP kullanılmıştır. Algılama sisteminden elde
ettiğimiz beyaz ve siyah renkler arasındaki gerilim farkını PIC mikrodenetleyicinin
anlayacağı lojik ifadelere dönüştürmek gerekir. Şekil 4.9’da gösterildiği gibi algılama
devresine karşılaştırıcı devresi ilave edilir. OP-AMP olarak LM324 entegresi kullanılmıştır
ve OP-AMP’ın beslemesi +5V , 0V olarak yapılmalıdır yani simetrik besleme yapılmaz.

ri.

Siyah çizgide, yansıma az olduğundan fototransistör kesimde olur ve OP-AMP’ın (-)
girişine uygulanan gerilim (bu gerilim 5V’a eşittir), referans geriliminden daha büyük
olduğundan çıkış gerilim 0V’dur. PIC’in portuna uygulanan gerilim lojik 0 olur.

.e
em
de

rs

no

tla

Beyaz çizgide, yansıma fazla olduğundan fototransistör iletime geçer ve OP-AMP’ın
(-) girişine uygulanan gerilim (bu gerilim 0V’a eşittir), referans geriliminden küçük
olduğundan çıkış gerilim +5V’dur. PIC’in portuna uygulanan gerilim lojik 1 olur.

Şekil 4.9: Fototransistör ve IR LED’in karşılaştırıcıya bağlanması

Karar verme sisteminde, PIC 16F84 mikrodenetleyicisi kullanılmıştır. Sensörlerin
çizgide olma durumu aşağıda açıklanmıştır.
Ø
Sensör2 siyah çizgi üzerinde, sensör1 ve sensör2 beyaz zeminde ise çizgi
robotun tam ortasından geçer. Bu durumda her iki motorda ileri yönde hareket

eder.

w

Ø

w

w

Ø

Sensör1 siyah çizgi üzerinde ise soldaki motor duracak, sağdaki motor
çalışacaktır.

Sensör3 siyah çizgi üzerinde ise sağdaki motor duracak, soldaki motor
çalışacaktır. Hangi sensör siyah çizgi üzerinde ise o yöndeki motor durmalıdır
veya yavaşlamalıdır.

73

PİC 16F84 4 Mhz mikrodenetleyici

Ø

C1 = C2 = 22pf , X1= 4Mhz kristal

Ø

R1= R4 = R7 = 270Ω

Ø

R2= R5= R8= R13= 10K

Ø

R3= R6= R9= R10= R11= R12= 470Ω

Ø

Q1 = Q2= BD139, 12V DC Motor

Ø

RV1= 20K Potansiyometre

ri.

Ø

co
m

4.3.3. Kullanılan Malzemeler

w

w

w

.e
em
de

rs

no

tla

4.3.4. Devrenin Şeması

Şekil 4.10: Fototransistör ve IR LED’in karşılaştırıcıya bağlanması

74

SAG

BASLA

Çıkışı temizle
Sol motoru çalıştır
Tanımlamaları yap

E
SOL

tla

Sensör
1 aktif
?

ri.

RETURN

co
m

4.3.5. Akış Diyagramı

ILERI

H

ILERI

H

no

E
Sensör
2 aktif
?

Çıkışı temizle
İki motoru çalıştır

E

SAG

.e
em
de

Sensör
3 aktif
?

rs

RETURN

H

SOL

Çıkışı temizle
Sağ motoru çalıştır

RETURN

Tablo 4.3: Çizgi takip eden robot uygulama devresi akış diyagramı

w

4.3.6. Asm Programı

w

w

LIST
P=16F84A
INCLUDE “ P16F84.INC”
CLRF
PORTB
DON
CALL
PORT_KUR
BTFSS
PORTA,0

;PortB’yi temizle

;Sol sensörü test et
75

SOL
PORTA,1
ILERI
PORTA,2
SAG
DON

;Sol sensör aktif SOL alt programına git
;Orta sensörü test et
;Orta sensör aktif ILERI etiketine git
;Sağ sensörü test et
;Sağ sensör aktif SAG etiketine git

co
m

CALL
BTFSS
CALL
BTFSS
CALL
GOTO

tla

ri.

PORT_KUR;========================================================
BSF
STATUS,5
;Bank 1’e geç
CLRF
TRISB
; PortB çıkış
MOVLW h'FF'
MOVWF TRISA
;Port A giriş
BCF
STATUS,5
;Bank 0’a geç
RETURN

w

w

w

.e
em
de

rs

no

SOL;==============================================================
CLRF
PORTB
;Çıkışı temizle
BSF
PORTB,0
;Sağ motoru çalıştır
RETURN
;Geri dön
SAG;==============================================================
CLRF
PORTB
;Çıkışı temizle
BSF
PORTB,1
;Sol motoru çalıştır
RETURN
;Geri dön
ILERI;=============================================================
CLRF
PORTB
;Çıkışı temizle
MOVLW H’03’
;Her iki motoru da çalıştır
MOVWF PORTB
RETURN
;Geri dön
END

76

İşlem Basamakları

Ø
Ø

Programı
yükleyiniz.

Ø

Çevre elemanları ile devreyi kurunuz.

Ø

Devre için gerekli giriş elemanları ve
Ø
özelliklerini belirleyiniz.

Ø

Devre için gerekli çıkış elemanları ve
Ø
özelliklerini tespit ediniz.

Ø

Devrenin
çıkartınız.

Ø

Devre
elemanlarının
ve
mikrodenetleyicinin montajını yapınız.

mikrodenetleyiciye

Programı
mikrodenetleyiciye
yüklerken
kullanılan
pic
programlayıcıya
uygun
yazılım
kullanınız.
Devreyi
Proteus
çalıştırarak deneyiniz.

programında

Kullandığınız devre elemanlarının
özelliklerini internetten araştırınız.

Baskı devreyi, devre şemasını Proteus
–Isıs programından Arese programına
aktrarak çıkarınız.

rs

devre

şemasını

Ø

w

.e
em
de

baskı

w

w

Programı yazdıktan sonra PBP ile
derleyiniz.

no

Ø

Mikrodenetleyici olarak PIC 16F84
veya 16F877 kullanınız.

ri.

Ø

Kurulacak sistem için ihtiyaçları ( Ø
devre elemanlarını ) tespit ediniz.
İhtiyacınızı
karşılayacak Ø
mikrodenetleyiciyi seçiniz.
Sisteminin çalışması için gerekli Ø
programı yazınız.

tla

Ø

Öneriler

co
m

UYGULAMA FAALİYETİ
UYGULAMA FAALİYETİ

77

Devrenin montajını yapmadan önce
bredboard üzerinde kurarak deneyiniz.

A- OBJEKTİF TESTLER (ÖLÇME SORULARI)

co
m

ÖLÇME VE DEĞERLENDİRME
ÖLÇME VE DEĞERLENDİRME

1)

ADCIN komutunu ve kullanımını maddeler halinde açıklayınız.

2)

GOSUB ile GOTO komutları arasındaki farkı yazınız.

3)

PIC 16f877’nin D portuna 4 bitlik LCD bağlantısı yapılacaktır. RS bacağı E0’a, E

4)

ri.

bacağı E1’e bağlanacaktır. Bunun için gerekli tanımlamaları yapınız.

Çizgi takibi yapan robot uygulama devresinde sensörlerin beyaz ve siyah zemindeki

.e
em
de

DEĞERLENDİRME

rs

no

tla

yansımalarını açıklayınız.

Cevaplarınızı cevap anahtarı ile karşılaştırınız. Doğru cevap sayınızı belirleyerek
kendinizi değerlendiriniz. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt yaşadığınız
sorularla ilgili konuları faaliyete dönerek tekrar inceleyiniz.

w

w

w

Tüm sorulara doğru cevap verdiyseniz diğer faaliyete geçiniz.

78

MODÜL DEĞERLENDİRME
MODÜL DEĞERLENDİRME

co
m

Modül ile kazandığınız bilgi ve becerileri aşağıdaki soruları cevaplandırarak belirleyiniz.

A. ÖLÇME SORULARI

PIC 16F877’nin AN0 veya AN1 bacağındaki analog bilgiyi LCD ekranında
görüntüleyen programı yazınız.

2)

İstediniz bir mikrodenetleyiciyi kullanarak bir step motor kontrol devresini tasarlayıp
programını yazınız.

3)

ADC ve DAC devreleri niçin kullanılır? Açıklayınız.

4)

Picbasic programlama dili ile PWM sinyal üreten programı yazınız.

5)

Port B’ye bağlı olan 8 LED üzerinde bir LED’in yanışını sağa – sola kaydıran ve bu
işlemi devamlı yaptıran picbasic programı yazınız.

w

w

w

.e
em
de

rs

no

tla

ri.

1)

79

MODÜL YETERLİK ÖLÇME (PERFORMANS TESTİ)
DERECELEME ÖLÇEĞİ

Devreniz için doğru mikrodenetleyiciyi seçtiniz mi?

2

Devre için gerekli malzemeleri ayarladınız mı?

3

Programın akış diyagramını çıkardınız mı?

4

Programı aşama aşama yazdınız mı?

5

Programı ASM veya BAS olarak kaydettiniz mi?

6

Programı MPLAB ile kontrol ettiniz mi?

7

ASM veya BAS uzantılı programı HEX dosyasına çevirdiniz mi?

8

Devreyi PROTEUS programında çizdiniz mi?

9

Devrenin çalışıp çalışmadığını kontrol ettiniz mi?

10

Devrenin baskı devresini ARES programına aktararak çıkardınız
mı?

11

Programı PIC’e hatasız yüklediniz mi?

12

Breadbord üzerine devreyi kurdunuz mu?

13

Devreyi çalıştırdınız mı?

14

Baskı devresini çıkardınız mı?

15

Elemanları lehimleyip devreyi kurup çalıştırdınız mı?

no

rs

.e
em
de
w
w

tla

1

TOPLAM PUAN

w

ri.

co
m

Modülün Adı Mikrodenetleyici ile analog işlemler
Modül Eğitimini
Konu
Alanın:
Amaç
Adı ve Soyadı
AÇIKLAMA: Bu faaliyeti gerçekleştirirken aşağıdaki dereceleme ölçeğini bir
arkadaşınızın doldurmasını isteyiniz. Sadece ilgili alanı doldurunuz.
Aşağıda listelenen davranışların her birini öğrencide gözlemleyemediyseniz (0),
zayıf nitelikte gözlemlediyseniz (1), orta düzeyde gözlemlediyseniz (2) ve iyi nitelikte
gözlemlediyseniz (3) rakamının altındaki ilgili kutucuğa X işareti koyunuz.
DEĞER
ÖLÇEĞİ
Değerlendirme Ölçütleri
0 1 2 3

DÜŞÜNCELER

80

DEĞERLENDİRME

co
m

Arkadaşınız
derecelendirme
ölçeği
listesindeki
davranışları
sırasıyla
uygulayabilmelidir. Hangi davranıştan 0 ve 1 değer ölçeğini işaretlediyseniz o konuyla ilgili
faaliyeti tekrar etmelisiniz.

w

w

w

.e
em
de

rs

no

tla

ri.

Bütün davranışlar 3 değerinde ise modülü tamamladınız, tebrik ederiz. Öğretmeniniz
size çeşitli ölçme araçları uygulayacaktır. Öğretmeninizle iletişime geçiniz.

81

CEVAP ANAHTARLARI
CEVAP ANAHTARLARI

co
m

ÖĞRENME FAALİYETİ-1’İN CEVAP ANAHTARI

Ağırlık Dirençli DAC Devresi
R -2R Merdiven Tipi DAC Devresi

tla

2)

ri.

1)

w

.e
em
de

rs

4)

no

3) PWM ( Pulse Width Modülation) darbe genişlik modülasyonudur. PWM sinyali kare
dalga bir sinyaldir. Bu kare dalga sinyalin darbe genişliği artırılıp azaltılarak PWM sinyal
elde edilir.PWM sinyalin darbe genişliği çıkış geriliminin ortalama değeriyle doğru
orantılıdır.

5)

w

w

LIST P=16F84
INCLUDE "P16F84.INC"
SAYAC1 EQU H'0C'
;Gecikme alt programlarında kullanılan değişken
SAYAC2 EQU H'0D'
; Gecikme alt programlarında kullanılan değişken

82

co
m

;Portları Ayarla…………………………………………………………………………
CLRF
PORTA
;PORTB’yi temizle
BSF
STATUS,5
;BANK1’e geç
CLRF
TRISA
;PORTB çıkış
BCF
STATUS,5
;BANK0’a geç

ri.

; Programın başlangıcı……………………………………………………………
BASLA
BSF
PORTA, 0
;Çıkışı “1” yani 5V yap
CALL
GECIKME1
;Darbe genişliği %40 süresini bekle
BCF
PORTA,0
; Çıkışı “0” yani 0V yap
CALL
GECIKME2
; %60 süresince 0V olarak bekle
GOTO
BASLA
; BASLA etiketine git

H'66'
SAYAC1

DECFSZ
GOTO
RETURN

SAYAC1,F
D1

MOVLW
MOVWF

H'9A'
SAYAC2

; Sayac1 bir azalt ve sıfır mı? kontrol et
; Hayır D1’e git

rs

D1

;W<--H’66’'
;SAYAC1 <-- W

no

MOVLW
MOVWF

tla

GECIKME1

;W<--H’9A’
;SAYAC2 <-- W

.e
em
de

GECIKME2

D2

DECFSZ
GOTO
RETURN
END

SAYAC2,F
D2

; Sayac2 bir azalt ve sıfır mı? kontrol et
; Hayır D2’e git

ÖĞRENME FAALİYETİ-2 CEVAP ANAHTARI

1)

w

w

w

ÖZELLİKLER
Çalışma hızı
Program Belleği
EEPROM Belleği
Kullanıcı RAM
Giriş / Çıkış port sayısı
Timer
A / D çevirici
Capture / Comp / PWM

PIC16F877
DC-20Mhz
8Kx14 word Flash ROM
256 byte
368 x 8 byte
33
Timer0, Timer1, Timer2
8 kanal 10 bit
16 bit Capture
16 bit Compare
10 bit PWM çözünürlük
83

PIC16F84
DC-10 Mhz
1Kx14 word Flash ROM
64 byte
68 x 8 byte
13
Timer0
YOK
YOK

Paralel slave port
USART / SCI

SPI (Master) ve
YOK
12C (Master / Slave)
modunda SPI portu
(senkron seri port)
8 bit, harici RD,WR ve CS YOK
kontrollu
9 bit adresli
YOK

co
m

Seri çevresel arayüz

.e
em
de

rs

no

tla

ri.

2)

3) ADRESH , ADRESL ,ADCON0 ve ADCON1 registerleridir.

w

w

w

ADRESH ve ADRESL registerleri A/D çevrim sonucu dijital bilginin kaydedildiği
registerlerdir.
ADCON0 ve ADCON1 registerleri, kanal seçimi, A/D çevrimi aktifleştirme ve başlatma,
sağa ya da sola kaymalı kaydetme gibi işlemlerin yapıldığı registerlerdir.
4)
MOVLW B'01000001'
;A/D çevirici modülü aktif
MOVWF ADCON0
;Kanal 0 seçili
BSF
STATUS,5
MOVLW B'10000000'
;Sayıyı sağa kaydır.
MOVWF ADCON1
;Sayıyı ADRESL a yükle.
MOVLW
B'00000001'
;Port A.0 = giriş
MOVWF
TRISA
;AN0 kanalı aktif
BSF
STATUS,5
………………
………………
84

BSF

ADCON0, GO

;A/D çevrimi başlat

co
m

5) CCPR1L registeri ile CCP1CON registerinin CCPxX: CCPxY bitleri zaman ayarı yapılır.
CCPR1L registerinin 8 biti, CCP1CON registerinin de 4 ve 5. bitleri alt 2 biti saklar. PWM
sinyalinin çalışması için CCP1CON registerinin 2 ve 3 nu.lı bitleri lojik “1” olmalıdır.

6)

;TMR2 temizle
;CCPR1L temizle
;Bank 1’e geç
;PR2 registerine 255 sayısını yükle
; Peryot=1638.4μs
;Bank 0’a geç
; Pst=1:1 TMR2=ON Pre=1:16
;T2CON registerini kur
; CCP1XY=0 CCP1M=1100(PWM)
;CCP1CON registerini kur

tla

ri.

TMR2
CCPR1L
STATUS,5
D'255'
PR2
STATUS,5
B'00001100'
T2CON
B'00001100'
CCP1CON

no

CLRF
CLRF
BSF
MOVLW
MOVWF
BCF
MOVLW
MOVWF
MOVLW
MOVWF

ÖĞRENME FAALİYETİ-3 CEVAP ANAHTARI

‘PortB çıkış
‘Çıkışı temizle

.e
em
de

TRISB = %00000000
PORTB = %00000000
DON:
PORTB = $01
PAUSE 1000
PORTB = $02
PAUSE 100
PORTB= $04
PAUSE 1000
GOTO DON
END

rs

1) ‘=======TRAFIK LAMBASI UYGULAMA PROGRAMI==============

‘Kırmızı LEDi yak
‘1sn. bekle
‘Sarı LED’i yak
‘100ms bekle
‘Yeşil LED’i yak
‘1sn. bekle
‘Geri dön

2) ‘=======0-255 LCD SAYICI UYGULAMA PROGRAMI==============

w

w

w

DEFINE LCD_DREG PORTA
DEFINE LCD_DBIT
0
DEFINE LCD_RSREG PORTA
DEFINE LCD_RSBIT 4
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT
3
DEFINE LCD_BITS
4
DEFINE LCD_LINES 2

85

BAS:
SAYAC =0
SAY:
‘Ekranı temizle
‘Ekrana SAYI yaz

LCDOUT $FE,$C5
LCDOUT #SAYAC

‘2. satır 5. sütuna geç
‘Ekrana sayıyı yazdır

ri.

LCDOUT $FE,1
LCDOUT "SAYI"

co
m

SAYAC VAR BYTE

tla

SAYAC = SAYAC +1
‘Sayıyı 1 artır
IF SAYAC=255 THEN GOTO BAS
‘Sayı 255 ise sıfırla
PAUSE 1000
‘Değilse bekle
GOTO SAY
‘Geri dön
END

‘PortB çıkış
‘Çıkışı temizle

rs

SAYAC VAR BYTE
TRISB = %00000000
PORTB = %00000000
SAYAC = 1
PORTB = SAYAC
DON:
PAUSE 100
SAYAC = SAYAC*2+1
PORTB = SAYAC

no

3) ‘=======YÜRÜYEN IŞIK UYGULAMA PROGRAMI==============

.e
em
de

‘sayacı çıkışa aktar

‘100ms bekle
‘Artarak yürü
‘Çıkışa aktar

IF SAYAC=255 THEN GOTO SON

‘Tüm LED’ler yanıksa sona

GOTO DON

‘Değilse DON’a git

git

SON:

w

PAUSE 1000
SAYAC =1
PORTB =SAYAC
GOTO DON
END

4) Derleme yapmak için C:\PBP> komut satırında PBP Dosyaadı yazılır. Eğer programda
hata yoksa hem ASM hem de HEX dosyası oluşturulacaktır.
PBP komutundan sonra direk dosya ismi yazılırsa derleyici PIC 16F84’e göre işlem
yapacaktır. 16F84 dışında bir mikrodenetleyici kullanılıyorsa aşağıdaki komut satırı ile
derleme yapılır.

w

w

‘1sn bekle
‘Sayacı sıfırla
‘Çıkışa aktar
‘DON etiketine geri git

86

–P16F877

LCDX

-P à İfadesinden sonra mikrodenetleyicinin adı yazılır.
LCDX à Derlenecek dosyanın adı.

ÖĞRENME FAALİYETİ-4 CEVAP ANAHTARI

co
m

C:\PBP> PBP

1) ADCIN komutu belirlenen kanaldan okuma yapar ve sonucu belirtilen değişkene aktarır.

ri.

ADCIN komutunun kullanılabilmesi için aşağıdaki işlemler yapılır.

İstenilen bacakların giriş yapılması gerekir. Bunun için TRIS registeri kullanılır.

İstenilen bacakların analog giriş için kullanılması için ADCON1 registeri kullanılır.

ADCON1’in 7. biti ile sonucun sağa ya da sola hizalı olması belirlenir.

8 bitlik bir A/D çevrimde sonuç sola hizalı olmalı ve ADCON1.7 = 0 yapılmalıdır.

10 bitlik bir A/D çevrimde sonuç sağa hizalı olmalı ve ADCON1.7 = 1 yapılmalıdır

no

tla

2) GOTO ve GOSUB komutları dallanma için kullanılır. GOTO komutundan sonra yazılan
etikete dallanır ve program o etiketin bulunduğu yerden devam eder.

.e
em
de

rs

GOSUB komutundan sonra yazılan etikete gidilir ve program RETURN komutunu
görünceye kadar orada devam eder. RETURN komutundan sonra program eski bulunduğu
yerden devam eder. GOSUB alt program komutu olarak adlandırılır.
3)

DEFINE LCD_DREG PORTD
DEFINE LCD_DBIT
0
DEFINE LCD_RSREG PORTE
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTE
DEFINE LCD_EBIT
1
DEFINE LCD_BITS
4
DEFINE LCD_LINES 2

w

4) Siyah zeminde, yansıma az olduğundan fototransistör kesimde olur ve OP-AMP’ın (-)

w

w

girişine uygulanan gerilim (bu gerilim 5V’a eşittir), referans geriliminden daha büyük
olduğundan çıkış gerilim 0V’dur. PIC’in portuna uygulanan gerilim lojik 0 olur.
Beyaz zeminde, yansıma fazla olduğundan fototransistör iletime geçer ve OP-AMP’ın (-)
girişine uygulanan gerilim (bu gerilim 0V’a eşittir), referans geriliminden küçük olduğundan
çıkış gerilim +5V’dur. PIC’in portuna uygulanan gerilim lojik 1 olur.

87

ÖNERİLEN KAYNAKLAR
Transistör ve entegre katologları

Ø

Elektrik ve elektronik bilgi siteleri;

Ø

www.elektronikciler.com

Ø

www. eproje.com

Ø

www.picproje.com

w

w

w

.e
em
de

rs

no

tla

ri.

Ø

co
m

ÖNERİLEN KAYNAKLAR

88

KAYNAKÇA
KAYNAKÇA
ALTINBAŞAK Orhan, Mikrodenetleyiciler ve PIC Programlama, Altaş
Yayınevi, İstanbul, 2000.
Ø

DOĞAN Prof. Dr. IBRAHIM, Hamit I. MUSTAFA, PIC Programlama ve
İleri PIC Projeleri, Bileşim Yayınevi, İstanbul, 2004.

Ø

KARAKAŞ Hakan,

İleri PIC 16F84 Uygulamaları –1, Atlaş Yayınevi,

İstanbul, 2002.

ALTINBAŞAK Orhan, PicBasic Pro İle PIC Programlama, Altaş Yayınevi,

ri.

Ø

İstanbul, 2002.

DOĞAN Doc. Dr. IBRAHIM, PIC C İle Işık Projeleri, Bileşim Yayınevi,

tla

Ø

co
m

Ø

İstanbul, 2003.

BODUR Yaşar, Adım Adım PICmicro Programlama, İnfogate, İstanbul.

Ø

DINÇER Gökhan, Cihan GERÇEK, Aydın BODUR, PicBasic Pro İle

no

Ø

PICmicro Programlama, Infogate, İstanbul.

BEREKET Metin, Engin TEKİN, PIC 16F84 Uygulamaları, Mavi Kitaplar,
İzmir, 2005.

rs

Ø

TUĞAY Güçlü, Elektronik Hobi, Alfa Yayınevi, İstanbul, 2006.

Ø

YAKUT Sultan, Ders Notları, İstanbul, 2003.

Ø

www. elektronikhobi.com

Ø

www.antrak.org.tr / gazete

w

w

w

.e
em
de

Ø

89

tla

ri.

co
m

T.C.
MİLLÎ EĞİTİM BAKANLIĞI

no

MEGEP

.e
em
de

rs

(MESLEKİ EĞİTİM VE ÖĞRETİM SİSTEMİNİN
GÜÇLENDİRİLMESİ PROJESİ)

ELEKTRİK ELEKTRONİK TEKNOLOJİSİ

w

w

w

MİKRODENETLEYİCİ PROGRAMLAMA

ANKARA 2006

co
m
ri.

Milli Eğitim Bakanlığı tarafından geliştirilen modüller;

Talim ve Terbiye Kurulu Başkanlığının 02.06.2006 tarih ve 269 sayılı Kararı ile
onaylanan, Mesleki ve Teknik Eğitim Okul ve Kurumlarında kademeli olarak
yaygınlaştırılan 42 alan ve 192 dala ait çerçeve öğretim programlarında
amaçlanan mesleki yeterlikleri kazandırmaya yönelik geliştirilmiş öğretim
materyalleridir (Ders Notlarıdır).

Modüller, bireylere mesleki yeterlik kazandırmak ve bireysel öğrenmeye
rehberlik etmek amacıyla öğrenme materyali olarak hazırlanmış, denenmek ve
geliştirilmek üzere Mesleki ve Teknik Eğitim Okul ve Kurumlarında
uygulanmaya başlanmıştır.

Modüller teknolojik gelişmelere paralel olarak, amaçlanan yeterliği
kazandırmak koşulu ile eğitim öğretim sırasında geliştirilebilir ve yapılması
önerilen değişiklikler Bakanlıkta ilgili birime bildirilir.

Örgün ve yaygın eğitim kurumları, işletmeler ve kendi kendine mesleki yeterlik
kazanmak isteyen bireyler modüllere internet üzerinden ulaşabilirler.

Basılmış modüller, eğitim kurumlarında öğrencilere ücretsiz olarak dağıtılır.

Modüller hiçbir şekilde ticari amaçla kullanılamaz ve ücret karşılığında
satılamaz.

w

w

w

.e
em
de

rs

no

tla

İÇİNDEKİLER

w

w

w

.e
em
de

rs

no

tla

ri.

co
m

AÇIKLAMALAR ...................................................................................................................iii
GİRİŞ ....................................................................................................................................... 1
ÖĞRENME FAALİYETİ-1 ..................................................................................................... 3
1. MİKRODENETLEYİCİ PROGRAMI YAZMA................................................................. 3
1.1. Akış Diyagram Oluşturma ve Sembolleri ..................................................................... 3
1.2. Mikrodenetleyici Assembler Programı ve Yazım Kuralları ........................................ 4
1.2.1. Noktalı Virgül........................................................................................................ 5
1.2.2. Başlık ..................................................................................................................... 5
1.3. Mikrodenetleyici Komutları........................................................................................ 11
1.3.1. Byte Yönlendirmeli Komutlar ............................................................................. 12
1.3.2. Bit Yönlendirmeli Komutlar................................................................................ 22
1.3.3. Sabit İşleyen Komutlar ........................................................................................ 24
1.3.4. Kontrol Komutları ............................................................................................... 27
1.4. Sayı ve Karakterlerin Yazılışı ..................................................................................... 30
1.4.1. Heksadesimal Sayılar........................................................................................... 30
1.4.2. Binary Sayılar ...................................................................................................... 30
1.4.3. Desimal Sayılar.................................................................................................... 31
1.4.4. ASCII karakterler ................................................................................................ 31
1.5. Mikrodenetleyici İçin Gerekli Yazılımın Kullanımı................................................... 31
1.5.1. Programın Kurulması........................................................................................... 32
1.5.2. Menülerin Tanıtılması ......................................................................................... 34
1.5.3. Mikrodenetleyici ve Diğer Donanımların Seçilmesi ........................................... 34
1.6. Programlama Tekniği.................................................................................................. 35
1.6.1. Bank Değiştirme .................................................................................................. 36
1.6.2. Portların Giriş ve Çıkış Olarak Yönlendirilmesi ................................................. 38
1.6.3. Her Adım İçin Akış Diyagramı Çizme ................................................................ 38
1.6.4. Konfigürasyon Bitlerinin Yazılması.................................................................... 39
1.6.5. W Kayıtçısının Kullanımı.................................................................................... 40
1.6.6. Bitleri Test Ederek İşlem Yapma ........................................................................ 41
1.6.7. Sayaç Kullanarak Döngü Düzenlemek ................................................................ 42
1.6.8. Karşılaştırma Yaparak Döngü Düzenlemek ........................................................ 43
1.6.9. Status Kayıtçısı .................................................................................................... 44
1.6.10. Zaman Geciktirme Döngüleri ............................................................................ 46
1.6.11. Altprogramlar .................................................................................................... 51
1.6.12. Bit Kaydırma ..................................................................................................... 52
1.6.13. Mantıksal İşlemler ............................................................................................. 55
1.6.14. Aritmetik İşlemler.............................................................................................. 58
1.6.15. Çevrim Tabloları................................................................................................ 61
1.6.16. Kesmeler............................................................................................................ 65
1.6.17. Donanım Sayıcıları ............................................................................................ 72
UYGULAMA FAALİYETİ .............................................................................................. 91
ÖLÇME VE DEĞERLENDİRME .................................................................................... 92
ÖĞRENME FAALİYETİ-2 ................................................................................................... 94
2. MİKRODENETLEYİCİ KONTROL PROGRAMININ MAKİNE DİLİNE ÇEVRİLMESİ
................................................................................................................................................ 94
2.1. Programın Derlenmesi ................................................................................................ 95
i

w

w

w

.e
em
de

rs

no

tla

ri.

co
m

2.1.1. Derleme İşleminin Yapılması .............................................................................. 95
2.1.2. Derleme Sonucu Elde Edilen Dosyalar ............................................................... 97
UYGULAMA FAALİYETİ ............................................................................................ 104
ÖLÇME VE DEĞERLENDİRME .................................................................................. 105
MODÜL DEĞERLENDİRME ............................................................................................ 107
ÖNERİLEN KAYNAKLAR................................................................................................ 110
KAYNAKÇA ....................................................................................................................... 111

ii

AÇIKLAMALAR
AÇIKLAMALAR

ÖN KOŞUL

Genel Amaç
Bu modül ile “eğitim öğretim ortamları ve
donanınımları”nda belirtilen ortam sağlandığında , yapılacak
işleme göre gerekli teknikleri kullanarak mikrodenetleyici
programını hatasız yapabileceksiniz.
Amaçlar
¾ Kurulacak devre için mikrodenetleyici programlama
yazılımını eksiksiz olarak kullanabileceksiniz.

.e
em
de

MODÜLÜN AMACI

rs

no

YETERLİK

co
m

SÜRE

ri.

MODÜLÜN TANIMI

523EO0020
Elektrik Elektronik Teknolojisi
Mikrodenetleyiciler
Mikrodenetleyici Programlama
Mikrodenetleyici programının yazılması ve derlenmesi
ile ilgili bilgi ve becerilerin kazandırıldığı öğrenme
materyalidir.
40/32
Mikroişlemci ve mikrodenetleyiciler modülünü
tamamlamış olmak.
Mikrodenetleyici programının yazılması ve derlenmesi
ile ilgili yöntem ve teknikleri öğrenmek.

tla

KOD
ALAN
DAL/MESLEK
MODÜLÜN ADI

¾ Yapılan
mikrodenetleyici
(heksadesimal kodlara)
çevirebileceksiniz.

programını
makine
diline hatasız olarak

Atölye ortamı, mikrodenetleyici programlama kartı,
mikrodenetleyici
programlama
kartı
yazılımı,
mikrodenetleyici uygulama kartı, bilgisayar , AVOmetre,
aktif ve pasif devre elemanları, lehimleme malzemeleri, diğer
faydalı el ve güç araçları donanımları .

ÖLÇME VE
DEĞERLENDİRME

Her faaliyet sonrasında o faliyetle ilgili değerlendirme
soruları ile kendi kendinizi değerlendireceksiniz.
Öğretmen modül sonunda size ölçme aracı (uygulama,
soru-cevap)
uygulayarak
modül
uygulamaları
ile
kazandığınız bilgi ve becerileri ölçerek değerlendirecektir.

w

w

w

EĞİTİM ÖĞRETİM
ORTAMLARI VE
DONANIMLARI

iii

iv

.e
em
de

w

w

w

ri.

tla

no

rs

co
m

GİRİŞ

co
m

GİRİŞ
Sevgili Öğrenci,

ri.

Mikrodenetleyiciler günlük hayatta kullandığımız pek çok cihaz içerisine girmiş
durumdadır. Öyle ki, mikrodenetleyicileri otomobillerde, cep telefonlarında, kameralarda,
faks-modem cihazlarında, fotokopi, radyo, TV ve bazı oyuncaklar gibi sayılamayacak kadar
pek çok alanda kullanımını görmek mümkündür.

rs

no

tla

Mikrodenetleyici kullanımının bu kadar yaygın olmasının çok önemli nedenleri vardır.
Daha önce mikroişlemci kullanımı gereken yerlerde, ayrıca hafıza üniteleri (RAM, ROM) ve
giriş/çıkış arabirim devrelerine (I/O) ihtiyaç duyuluyordu. Bu da sistemin maaliyetini
yükselmesi , devrenin karmaşık olması ve fazla yer kaplaması, programlamanın zorluğu gibi
problemler oluşturuyordu. Fakat mikrodenetleyicilerle bu sorunlar ortadan kaldırıldı. Çünkü
fiyatları son derece makul olan bu entegreler, ayrıca hafıza üniteleri (RAM, ROM) ve
giriş/çıkış arabirim devrelerine (I/O) ihtiyaç duyulmadan istenilen tasarımın yapılabilmesine
imkân tanımaktadır. Bununla beraber programlanması da oldukça kolay ve programlama dili
olan assembly için de bir bedel gerekmemektedir. Ayrıca flash bellekleri sayesinde bir
denetleyicinin onlarca defa programlanabilip silinebilmesine imkân tanır. İşte bu gibi
özelliklerinden dolayı mikrodenetleyiciler pek çok alanda mikroişlemcilerin yerini almıştır.

w

w

w

.e
em
de

Günümüzde Texas ins. , NSC, Atmel ve Microchip gibi birçok firma mikrodenetleyici
üretmekte ve bunları donanım tasarımcılarının kullanımına sunmaktadır. Biz, bundan önceki
modüldeki olduğu gibi, bu modülde de Microchip firmasının ürettiği mikrodenetleyicileri
anlatacağız. Konular genelde bu firmanın ürettiği PIC16F84 mikrodenetleyicisi üzerinden
işlenecektir. Bu şekilde, modül sonunda artık siz de bir mikrodenetleyiciyi tanımış ve amaca
göre programınını yazabilme seviyesine çıkmış olacaksınız.

Bir PIC mikrodenetleyicisi programlayıcı ve deneme kartı

1

2

.e
em
de

w

w

w

ri.

tla

no

rs

co
m

AMAÇ

ÖĞRENME FAALİYETİ-1

Uygun ortam sağlandığında kurulacak devre için
eksiksiz olarak yapabileceksiniz.

co
m

ÖĞRENME FAALİYETİ-1

mikrodenetleyici programını

ri.

ARAŞTIRMA

Bu faaliyet öncesinde yapmanız gereken öncelikli araştırmalar şunlardır:

Mikrodenetleyici çeşitlerini (Microchip firmasının ürettiği PIC serisi )
araştırınız.

tla

¾

Mikrodenetleyici komutlarını araştırınız.

¾

Mikrodenetleyicilerin donanımsal farklılıklarını araştırınız.

no

¾

rs

Araştırma işlemleri için internet ortamı ve mesleki kitapların bulunduğu kütüphaneler
ile bu sektör üzerinde çalışan teknik elemanlardan faydalanabilirsiniz.

.e
em
de

1. MİKRODENETLEYİCİ PROGRAMI
YAZMA

w

Assembly dili bir mikrodenetleyiciden (bundan sonra sadece denetleyici veya PIC
olarak bahsedeceğiz) beklenen veya denetleyicinin yapması istenen işlemlerin belirli
kurallara uygun olarak yazılmış komutlar dizisidir. Assembly komutları İngilizcedeki
manalarının kısaltmalarından meydana gelmektedir. Bu komutlar genellikle bir komutun
yaptığı işi ifade eden İngilizce sözcüklerin baş harflerinden meydana gelmektedir. Örneğin
BTFSC Bit Test F Skip if Clear ( File kayıtçıdaki (kaydedici) bit’i test et ). Şimdi bir
denetleyicinin assembly programı yapmadan önce , çıkarılacak akış diyagramında kullanılan
sembolleri görelim.

1.1. Akış Diyagram Oluşturma ve Sembolleri

w

w

Assembler ile bir program yazmadan evvel, denetleyicinin hangi adımlarla programı
işleyeceğini planlamamız gerekmektedir. Bu planlama işlemi akış diyagramları ile yapılır.
Akış diyagramı işlenecek komutların sırasıdır. Uzun ve karmaşık programlarda, akış
diyagramları, hangi seviyeden programın ayrılacağını ve hangi komutları yerine getireceğini,
sonra tekrar nereye döneceğini göstermesi sebebiyle faydalıdır. Akış diyagramlarının
kendine has sembolleri de vardır. Şekil 1.1’de akış diyagramı sembolleri görülmektedir;

3

co
m

Başlangıç ve sonlandırıcı

İşlem

no

Alt program.

tla

Karar verme (sorgulama)

ri.

Hazırlık

Şekil 1.1: Akış diyagramı sembolleri

rs

Bu modül içerisindeki akış diyagramlarını inceleyiniz.

.e
em
de

1.2. Mikrodenetleyici Assembler Programı ve Yazım Kuralları
PIC assembly programlarının yazılabilmesi için kullanılan metin editörlerinden
Windows altında çalışan NOTPAD veya dos altında çalışan EDIT en uygun olanlarından bir
kaç tanesidir. Bunun dışında printer kontrol komutları içermeyen ve ASCII kodunda dosya
üretebilen herhangi bir editör de kullanılabilir. MPLAB kullanıldığında ayrıca editör
kullanmaya gerek yoktur. Çünkü MPLAB’ın içinde hem bir text editörü hem de MPASM
bulunmaktadır.

w

Bunun dışında PIC mikrodenetleyicisi için program yazmanın başka yolları da vardır.
Pic Basic Pro, C diliyle yazılmış programı PIC için derleyici programlar veya PLC
mantığıyla görsel olarak PIC programlayıcılar (PICBIT) ile de PIC denetleyicileri için
program yazılabilir. Fakat bu programlar da arka planda kendi ASM uzantılı kütüklerini
kullanırlar. Biz bu yüzden bütün bu programlara da temel teşkil eden assembly dilini
kullanacağız.

w

w

MPASM assembler programının yazılan komutları doğru olarak algılayıp PIC’in
anlayabileceği heksadesimal kodlara dönüştürülmesi, şu bilgilerin program içerisinde özel
formatta yazılması gerekir;
¾

Komutların hangi PIC için yazıldığı

¾

Programların bellekteki hangi adresten başlayacağı
4

Komutların ve etiketlerin neler olduğu

¾

Programın bitiş yeri

co
m

¾

Şimdi bir assembly programında bunların nasıl yazıldığına bakalım.

1.2.1. Noktalı Virgül

tla

ri.

Baş tarafına (;) konulan satır, assembler tarafından heksadesimal
kodlara
dönüştürülemez. Bu satırlar programın geliştirilmesi esnasında hatırlatıcı açıklamaların
yazılmasında kullanılır. Aşağıda örnekte CLRF ile başlayan satırda “portB’nin içini sıfırla
cümlesi, CLRF komutunun ne iş yaptığını açıklar. Programın bölümlerini birbirinden
ayırmak için (------- veya = = = = ) çizgileri kullanmak, programı görsel olarak daha okunur
hâle getirdiği gibi bu çizgiler arasına uyarılar ve açıklamalar da yazılabilir.

no

;==========bu satır derleyici tarafından dikkate alınmaz.======
CLRF PORTB
; portB’nin içini sıfırla.
;==========bu satır da derleyici tarafından dikkate alınmaz.=====

1.2.2. Başlık

rs

Programın başındaki bilgilere başlık bölümü denilir.

.e
em
de

;= = = = PROGRAM1. ASM = = = = = = = = = = = = = = = = = = = = = = = =
LIST P=16F84
;--------------------------------------------------------------------------------------------INCLUDE
“P16F84.INC”

Başlık bölümünde program dosyasının adı ve hazırlandığı tarih, istenirse hazırlayanın
adı ya da farklı bir ad yazılabilir. İlk satır, bir açıklama satırıdır ve assembler tarafından
derlenmez.

LIST P=16F84 satırı, programın hangi PIC için yazıldığını belirtir. LIST bir derleyici
bildirisidir. Yani derleyiciyi yönlendiren bir komuttur ve yegane kullanış amacı ve yeri
burasıdır.

w

w

w

Başlık bölümünde INCLUDE komutu da kullanılabilir. Bir program yazılırken tüm
kayıtçıları tek tek tanımlamak oldukça zordur. Bu yüzden include dosyası denilen bu
tanımların içinde bulunduğu ve assembler tarafından tanınan bir dosya kullanırız. Assembler
tarafından tanınması için program girişinde tanımlanır.
Örneğin PORTB, STATUS ve TRISB kayıtçılarını kullanan bir program yazdığınızı
varsayalım. Eğer programınızın başlık kısmında
INCLUDE

“P16F84.INC”

Şeklinde bir ifade kullanırsanız programınızda kayıtçıları kendiniz tanıtmak zorunda
kalmazsınız. Aksi hâlde aşağıdaki gibi bellek adreslerini kendiniz tanıtmalısınız.
5

h’06’
STATUS
TRISB

h’03’
h’86’

co
m

PORTB EQU

Aşağıda PIC16F84 mikrodenetleyicisi için, Microchip Technology, Inc. tarafından
hazırlanmış INC dosyasını görüyorsunuz. Burada kayıtçıların bellek adreslerinin ve kayıtçı
bitlerinin tek tek tanımlandığına dikkat ediniz.

; P16F84.INC Standard Header File, Version 2.00

Microchip Technology, Inc.

tla

NOLIST

ri.

LIST

; This header file defines configurations, registers, and other useful bits of

no

; information for the PIC16F84 microcontroller. These names are taken to match
; the data sheets as closely as possible.

rs

; Note that the processor must be selected before this file is

.e
em
de

; included. The processor may be selected the following ways:
;
;
;
;
;

1. Command line switch:
C:\ MPASM MYFILE.ASM /PIC16F84
2. LIST directive in the source file
LIST P=PIC16F84
3. Processor Type entry in the MPASM full-screen interface

w

;=================================================================
=========
;
;
Revision History
;
;=================================================================
=========

w

w

;Rev: Date:

Reason:

;2.00 07/24/96 Renamed to reflect the name change to PIC16F84.
;1.01 05/17/96 Corrected BADRAM map
;1.00 10/31/95 Initial Release
;=================================================================
=========
6

;
;

Verify Processor

co
m

;

;=================================================================
=========
IFNDEF __16F84
MESSG "Processor-header file mismatch. Verify selected processor."
ENDIF

ri.

;=================================================================
=========
;

Register Definitions

tla

;
;

;=================================================================
=========

H'0000'
H'0001'
H'0002'
H'0003'
H'0004'
H'0005'
H'0006'
H'0008'
H'0009'
H'000A'
H'000B'

rs

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

.e
em
de

INDF
TMR0
PCL
STATUS
FSR
PORTA
PORTB
EEDATA
EEADR
PCLATH
INTCON

no

W
EQU H'0000'
F
EQU H'0001'
;----- Register Files------------------------------------------------------

w

OPTION_REG
TRISA
TRISB
EECON1
EECON2

H'0081'
H'0085'
H'0086'
H'0088'
H'0089'

;----- STATUS Bits --------------------------------------------------------

w

w

EQU
EQU
EQU
EQU
EQU

IRP
RP1
RP0
NOT_TO
NOT_PD
Z
DC

EQU
EQU
EQU
EQU
EQU
EQU
EQU

H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
7

EQU H'0007'
EQU H'0006'
EQU H'0005'
EQU H'0004'
EQU H'0003'
EQU H'0002'
EQU H'0001'
EQU H'0000'

ri.

GIE
EEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF

co
m

C
EQU H'0000'
;----- INTCON Bits --------------------------------------------------------

H'0007'
H'0006'
H'0005'
H'0004'
H'0003'
H'0002'
H'0001'
H'0000'

no

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

rs

NOT_RBPU
INTEDG
T0CS
T0SE
PSA
PS2
PS1
PS0

tla

;----- OPTION Bits --------------------------------------------------------

.e
em
de

;----- EECON1 Bits -------------------------------------------------------EEIF
WRERR
WREN
WR
RD

EQU
EQU
EQU
EQU
EQU

H'0004'
H'0003'
H'0002'
H'0001'
H'0000'

w

w

w

;=================================================================
=========
;
;
RAM Definition
;
;=================================================================
=========

__MAXRAM H'CF'
__BADRAM H'07', H'50'-H'7F', H'87'
;=================================================================
=========
;
;
Configuration Bits
;
8

tla

ri.

co
m

;=================================================================
=========
_CP_ON
EQU H'000F'
_CP_OFF
EQU H'3FFF'
_PWRTE_ON
EQU H'3FF7'
_PWRTE_OFF
EQU H'3FFF'
_WDT_ON
EQU H'3FFF'
_WDT_OFF
EQU H'3FFB'
_LP_OSC
EQU H'3FFC'
_XT_OSC
EQU H'3FFD'
_HS_OSC
EQU H'3FFE'
_RC_OSC
EQU H'3FFF'
LIST

no

1.2.3. Sabitler

PIC assembly dilinde heksadesimal sayılar birer sabittir. Sabitler MOVLW ve bazı
mantıksal ve aritmetik işlem komutlarında kullanılırlar.

0 X 02

.e
em
de

START MOVLW

rs

Etiket
Komut
Sabit

1.2.4. Org Deyimi

ORG İngilizce’deki “origin’’ kelimesinden gelmektedir. ORG deyimi iki amaç için
kullanılır; program komutlarının hangi adresten itibaren başladığını ve PIC’in kesme alt
programının başlangıç adresini.
ORG

0 x 000

ORG

0 x 004

; ilk program komutunun bellek adresi
; h’004 adresi, PIC16F84 denetleyicisinin kesme alt programının
başlangıç adresi

w

1.2.5. Girintiler ve Program Bölümleri

w

w

Metin editörlerinde birbirinden farklı uzunlukta girintiler veren TAB özelliği vardır.
Bu özellikten yararlanarak assembly komutları üç kolona bölünerek yazılır. Bir assembly
programı temel olarak dört bölüme ayrılır. Bunlar: Başlık, atama, program ve sonuç
bölümleridir.

9

co
m
ri.
tla
no
rs
.e
em
de

Şekil 1.2: Girintiler ve program bölümlerinin görünüşü

w

w

w

Assembler, yukarıda Şekil 1.2’de belirtildiği gibi komutların üç kolona bölünerek
yazılmış olduğunu varsayar. Belirtilen kolona yazılmayan bir komut olduğunda ise bunu da
kabul eder. Ancak, heksadesimal kodlara dönüştürme esnasında bu tip hataları bir uyarı
olarak belirtir. Assembly komutları yazılırken kolonlar arasında verilen TAB’ların uzunluğu
önemli değildir. Boşluk tuşu ile verilen aralık da assembler tarafından TAB olarak algılanır.
PIC’ e yaptırılacak herhangi bir işlem için, özellikle uzun ve zor programlar yazmaya
başladıktan sonra yapılacak açıklamalar, bölümlere ayrılmış programların daha kullanışlı
olduğu görülür. Çünkü programlar bu şekilde yazıldığında daha sonraki geliştirmelere
açıktır. Aradan zaman geçse bile bir programı geliştirmek için tekrar ele aldığınızda,
program içerisine yazılan açıklamalar ihtiyacınız olan hatırlatmaları yapacaktır. Şimdi de bu
bölümleri görelim.
1.2.5.1. Başlık Bloğu

Programının başındaki bilgilere başlık bölümü denilir. Bu bölümü daha önce “başlık”
konusunda gördüğümüz için geçiyoruz.
10

1.2.5.2. Atama Bloğu

co
m

EQU deyimi PIC’in belleğindeki bir heksadesimal adresi belirlenen bir
etikete atamak için kullanılır. Aşağıda atama deyimine bir örnek gösterilmiştir.
Etiket
Atama deyimi
EQU

0 X 06

ri.

PORTB

tla

Heksadesimal adres
Heksadesimal sayıyı ifade eder
1.2.5.3. Program Bloğu

no

Programcının asembly komutları kullanarak işi yaptıracak programı yazdığı, içinde
altprogramlarında bulunabileceği ana bölümdür. Modül içindeki programları incelerek
program bloğunu bulmaya çalışınız.

rs

1.2.5.4. Sonlandırma Bloğu

.e
em
de

PIC 16F84’ün duraklama (halt) komutu yoktur. Programı belirli bir yerde duraklatmak
için bazen sonsuz döngü kullanılır.
DONGU

GOTO DONGU
END

Yukarıdaki sonsuz döngüde DONGU etiketine assembler otomatik olarak bir adres
verir. GOTO DONGU komutu ise program akışını devamlı olarak aynı adrese gönderir. Bu
durumda program belirlenen adreste duraklatılmış olur.

w

END deyimi ise program komutlarının sona erdiğini assemblere bildirir. Her program
sonunda END deyimi muhakkak kullanılmalıdır. Aksi hâlde program devam ederken dosya
sonunun belirtilmediğini gösteren bir hata mesajı verecektir.

1.3. Mikrodenetleyici Komutları

w

w

PIC16F84 denetleyicisinin toplam 35 tane komutu vardır. Diğer PIC serisinin başka
komutlarıda olmasına rağmen bu 35 komut temel teşkil ettiği için biz de bu komutları
göreceğiz. Bu komutların yazılış biçimini dört grupta toplayabiliriz .
¾

Byte-yönlendirmeli komutlar.

¾

Bit-yönlendirmeli komutlar.

¾

Sabit işleyen komutlar.

¾

Kontrol komutları.
11

ri.

tla

f = Dosya kayıtçısı (kaydedicisi) (File Register)
d = Gönderilen yer (destination) iki durum söz konusudur ;
d=0 ……..Hedef W kayıtçısıdır.
d=1 ……..Hedef dosya (F) kayıtçısıdır .
k = Sabit veya adres etiketi
b = Bit tanımlayıcı
b = Binary sayıları belirleyen harf (Örneğin b’00001111’ gibi)
d = Desimal sayıları belirleyen harf (Örneğin d ’16’ gibi)
h = Hexadesimal sayıları belirleyen harf (Örneğin h ’0A’ gibi)

co
m

Komutların yazılış biçimlerini açıklarken bazı tanımlama harfleri kullanacağız. Önce
bu harflerin anlamlarını verelim:

1.3.1. Byte Yönlendirmeli Komutlar

no

Bu grup komutlarda hedef kayıtçı W veya bir dosya kayıtçısı (f) olabilir. Kayıtçılar
arası veri transferleri ve işlemleri bu komutlarla gerçekleşir. Şimdi bu komutları görelim:

.e
em
de

rs

ADDWF
W ve f kayıtçılarını topla.
Dizim:
[etiket] ADDWF f,d
Operandlar:
0≤f≤127
d∈[0,1]
İşlem:
(W)+(f) → (hedef)
Etkilenen bayraklar:
C,DC,Z
Kodlama: 00 0111 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım:W kayıtçısının içeriğini f kayıtçısına ekler. Eğer d=0 ise, sonuç W kayıtçısının
içerisinde depolanır. d=1 ise sonuç f kayıtçısının içerisinde geri saklanır.
Hafıza alanı (Bayt): 1
Saat palsı:
1

Örnek:

ADDWF FSR, 0

w

w

w

Komuttan önce;
W = h’17’
FSR= h’C2’ olsun.
Komuttan sonra;
d=0 olduğundan sonucun W de olduğuna dikkat ediniz.
W = h’D9’
FSR= h’C2’ olur.

ANDWF
W’yi f ile mantıksal AND’le.
Dizim:
[etiket] ANDWF f,d
Operandlar: 0≤f≤127
d∈[0,1]
İşlem:
(W).AND.(f) → (hedef)
12

ri.

co
m

Etkilenen bayraklar: Z
Kodlama: 00 0101 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım:W kayıtçısını f kayıtçısı ile mantıksal AND’ler. AND mantığında girişlerden birinin
0 olması sonucu 0 yapacaktır.Sonucun 1 olması için tüm girişlerin 1 olması gerekir. Eğer
d=0 ise, sonuç W kayıtçısı içinde saklanır. Eğer d=1 ise, sonuç f kayıtçısı içinde geri
saklanır.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
ANDWF FSR, 1

rs

no

tla

Komuttan önce;
W = h’17’
FSR= h’C2’ olsun.
Komuttan sonra;
h’17’=b’0001 0111’
AND h’C2’=b’1100 0010’
b ‘0000 0010’=h’02’ ve ;
d=1 olduğundan sonucun f (burada FSR ) de olduğuna dikkat ediniz.
W = h’17’
FSR= h’02’

w

.e
em
de

CLRF
F kayıtçısını sil. ( Clear f )
Dizim:
[etiket] CLRF f
Operandlar:
0≤f≤127
İşlem:
00h → (f) 1 → Z
Etkilenen bayraklar:
Z
Kodlama: 00 0001 1fff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım:f kayıtçısının içeriği silinir ve Z biti kurulur.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
CLRF SAY

w

w

Komuttan önce;
SAY = h’5A’
Komuttan sonra;
SAY = h’00’
Z
=1
CLRW
W Kayıtçısını Sil.
Dizim:
[etiket] CLRW
Operandlar:
Yok
İşlem:
00h → (W) 1 → Z
13

co
m

Etkilenen bayraklar:
Z
Kodlama: 00 0001 0000 0011
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım:W kayıtçısı silinir. Z biti set edilir.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
CLRW

no

COMF
F kayıtçısını tümle ( tersini al ).
Dizim:
[etiket] COMF f,d
Operandlar: 0≤f≤127
d∈[0,1]

tla

ri.

Komuttan önce;
W = h’5A’
Komuttan sonra;
W = h’00’
Z=1

.e
em
de

rs

İşlem:
(f) → (hedef)
Etkilenen bayraklar:
Z
Kodlama: 00 1001 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım:F kayıtçısının içeriği tümlenmiştir. Eğer d=0 ise, sonuç W kayıtçısının içerisinde
depolanır, d=1 ise, sonuç f kayıtçısının içerisinde geri saklanır.
Hafıza alanı (Bayt): 1
Saat palsı:
1

Örnek:

COMF test,0

w

w

w

Komuttan önce;
test = h’13’ olsun.
Komuttan sonra;
d=0 olduğundan sonucun W’de olduğuna dikkat ediniz.
test = h’13’=b’0001 0011’
terslenirse; b’1110 1100’=h’EC’ ve
test = h’13’
W= h’EC’
DECF
f kayıtçısının değerini 1 azalt.
Dizim:
[etiket] DECF f,d
Operandlar:
0≤f≤127
d∈[0,1]
İşlem:
(f) – 1 → (hedef)
Etkilenen bayraklar:
Z
Kodlama: 00 0011 dfff ffff
14

olur.

tla

ri.

Komuttan önce;
SAY = h’01’
Z = 0 olsun.
Komuttan sonra;
d=1 olduğundan sonucun f (burada SAY) de olduğuna dikkat ediniz.

co
m

MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım: f kayıtçısının değerini 1 azaltır. Eğer d=0 ise, sonuç W kayıtçısının içerisinde
depolanır, d=1 ise, sonuç f kayıtçısının içerisinde geri saklanır.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
DECF SAY, 1

no

SAY = h’00’
Z=1

.e
em
de

rs

DECFSZ
f kayıtçısının değerini 1 azalt , sonuç 0 ise bir sonraki komuta atla.
Dizim:
[etiket] DECFSZ f,d
Operandlar:
0≤f≤127
d∈[0,1]
İşlem:
(f)–1→ (hedef); sonuç=0 ise atla
Etkilenen bayraklar:
Yok
Kodlama: 00 1011 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım: f kayıtçısının içeriği 1 azaltılır.
Aynı zamanda sorgulama
yapar. Kayıtçı içeriği 0 olursa program bir sonraki komuta atlar, değilse alttaki komut işlenir.
Eğer d=0 ise, sonuç W kayıtçısının içerisinde depolanır, d=1 ise,sonuç f kayıtçısının
içerisinde geri saklanır.
Hafıza alanı (Bayt): 1
Saat palsı: 1(2)
Sonuç 0’sa 2 saat palsı , değilse 1 saat palsı alır.Yani atlama olmadığı durumda uygulanması
1 , atlama durumunda 2 saat palsı alır.
DON
DECFSZ CNT,1
GOTO LOOP
DEVAM


programın devamı

Komuttan önce;
PC = Adres DON
Komuttan sonra;
CNT= CNT-1
Eğer CNT= 0
PC= {Adres DEVAM}
Eğer CNT≠0,

w

w

w

Örnek:

15

PC={Adres DON+1} yani GOTO komutunun olduğu satır işlenir.

tla

ri.

co
m

INCF
f kayıtçısının değerini 1 artır.
Dizim:
[etiket] INCF f,d
Operandlar:
0≤f≤127 d∈[0,1]
İşlem:
(f) + 1→ (hedef)
Etkilenen bayraklar:
Z
Kodlama: 00 1010 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım: f kayıtçısının değerini 1 artırır. Eğer d=0 ise, sonuç W kayıtçısının içerisinde
depolanır. d=1 ise,sonuç f kayıtçısının içerisinde geri saklanır.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
INCF CNT,1

.e
em
de

CNT= h’00’
Z= 1

rs

no

Komuttan önce;
CNT= h’FF’
Z =0
Komuttan sonra;
d=1 olduğundan sonucun f (burada CNT) de olduğuna dikkat ediniz. Ayrıca FF+1=00
olacağına da dikkat ediniz.

w

w

w

INCFSZ
f kayıtçısının değerini 1 artır, sonuç 0 ise bir sonraki komuta atla.
Dizim:
[etiket] INCFSZ f,d
Operandlar:
0≤f≤127 d∈[0,1]
İşlem:
(f)+1→(hedef),sonuç=0 ise atla
Etkilenen bayraklar:
Yok
Kodlama: 00 1111 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım: f kayıtçısının içeriği 1 arttırılır. Aynı zamanda sorgulama yapar. Kayıtçı içeriği 0
olursa program bir sonraki komuta atlar, değilse alttaki komut işlenir. Eğer d=0 ise, sonuç W
kayıtçısının içerisinde depolanır, d=1 ise, sonuç f kayıtçısının içerisinde geri saklanır.
Hafıza alanı (Bayt): 1
Saat palsı: 1(2)
Sonuç 0’sa 2 saat palsı, değilse 1 saat palsı alır. Yani atlama olmadığı durumda uygulanması
1 , atlama durumunda 2 saat palsı alır.
Örnek:
DON
DECFSZ CNT,1
GOTO LOOP
DEVAM


programın devamı

16

co
m

Komuttan önce;
PC = Adres DON
Komuttan sonra;
CNT = CNT+1
Eğer CNT= 0 ise,
PC= {Adres DEVAM}
Eğer CNT≠0 ise,
PC={Adres DON+1} Yani GOTO komutunun bulunduğu satır işleme sokulur.

.e
em
de

rs

no

tla

ri.

IORWF
f ile W kayıtçılarını mantıksal OR işlemine tabi tut.
Dizim:
[etiket] IORWF f,d
Operandlar:
0≤f≤127 d∈[0,1]
İşlem:
(W).OR.(f) → (W)
Etkilenen bayraklar:Z
Kodlama: 00 0100 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım: f ile W kayıtçılarını mantıksal OR işlemine tabi tutar. OR mantığında girişlerden
birinin 1 olması sonucu 1 yapacaktır. Sonucun 0 olması için tüm girişlerin 0 olması gerekir.
Eğer d=0 ise, sonuç W kayıtçısının içerisinde depolanır, d=1 ise, sonuç f kayıtçısının
içerisinde geri saklanır.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
IORWF
RESULT, 0
Komuttan önce;
RESULT = h’13’
W = h’91’
Komuttan sonra;
d=0 olduğundan sonucun W’de olduğuna dikkat ediniz.
h’13’=b’0001 0011’
OR h’93’=b’1001 0011’
b ‘1001 0011’=h’93’ ve ; RESULT = h’13’ W = h’93’
olur.

w

w

w

MOVF
F kayıtçı içeriğini hedefe taşı.
Dizim:
[etiket] MOVF f,d
Operandlar:
0≤f≤127 d∈[0,1]
İşlem:
(f) → (hedef)
Etkilenen bayraklar:
Z
Kodlama: 00 1000 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım: F kayıtçı içeriğini belirtilen hedefe taşınır. Eğer d=0 ise, f içeriği W kayıtçısına
taşınır. d=1 ise, f içeriği f kayıtçısına taşınır. d=1 durumu, status kayıtçısında Z bayrağını
etkileyeceğinden dolayı, bir file kayıtçısının içeriğinin 0 olup olmadığının testinde
kullanılabilir.
Hafıza alanı (Bayt): 1
17

co
m

Saat palsı:
1
Örnek:
MOVF FSR, 0
Komuttan sonra;
d=0 olduğundan sonucun W’de olduğuna dikkat ediniz.
W=FSR olur.

no

tla

ri.

MOVWF
W’nin içeriğini f kayıtçına taşı.
Dizim:
[etiket] MOVWF f
Operandlar:
0≤f≤127
İşlem:
(W)→ (f)
Etkilenen bayraklar:
Yok
Kodlama: 00 0000 1fff ffff
MSB tarafındaki 5 bit komut kodu , f ile belirtilen LSB tarafındaki 5 bit ise dosya adresini
(f kayıtçı adresi) tanımlar.
Tanım:W kayıtçısının içeriği f kayıtçısına taşınır.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
MOVWF OPTION

w

w

w

.e
em
de

rs

Komuttan önce;
OPTION = h’FF’
W = h’4F’
Komuttan sonra;
Bu komutta hedefin (d) belirtilmediğine dikkat ediniz.
OPTION = h’4F’
W = h’4F’
NOP
İşlem yok
Dizim:
[etiket] NOP
Operandlar:
Yok
İşlem:
Yok
Etkilenen bayraklar:
Yok
Kodlama:
00 0000 0xx0 0000
Tanım:
1 saat palsı zaman gecikmesi sağlar.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
NOP
1 saat palsı zaman gecikmesi sağlar.

RLF
f kayıtçısını elde biti (Carry) aracılığıyla sola döndür
Dizim:
[etiket] RLF f,d
Operandlar:
0≤f≤127 d∈ [0,1]
İşlem:
Aşağıdaki tanıma bakınız.
Etkilenen bayraklar:
C
Kodlama: 00 1101 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
18

co
m

Tanım: f kayıtçısının içeriği elde biti (C) içinden bir bit sola döndürülür. C biti f kayıtçısının
MSB bitini taşır. Eğer d=0 ise, sonuç W kayıtçısının içerisine yerleştirilir. Eğer d=1 ise,
sonuç f kayıtçısının içerisinde geri depolanır.
F kayıtçısı

C

tla

ri.

Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
RLF REG1,0
Komuttan önce;
REG1 = b’1110 0110’
C =0
Komuttan sonra;
REG1 = b’1110 0110’

W = b’1100 1100’

C = 1 olur.

.e
em
de

rs

no

RRF
f kayıtçısını elde biti (Carry) aracılığıyla sağa döndür
Dizim:
[etiket] RRF f,d
Operandlar:
0≤f≤127 d∈ [0,1]
İşlem:
Aşağıdaki tanıma bakınız.
Etkilenen bayraklar:
C
Kodlama: 00 1100 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım:f kayıtçısının içeriği elde biti (C) içinden bir bit sağa döndürülür. C biti f kayıtçısının
LSB bitini taşır. Eğer d=0 ise, sonuç W kayıtçısının içerisine yerleştirilir. Eğer d=1 ise,
sonuç f kayıtçısının içerisinde geri depolanır.
C

F kayıtçısı

w

Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
RRF REG1,0

w

w

Komuttan önce;
REG1 = b’1110 0110’
C =0
Komuttan sonra;
REG1 = b’1110 0110’
W = b’0111 0011’
C =0

19

no
rs

.e
em
de

Komuttan önce;
REG1 = 3
W=2
C=?
Z=?
Komuttan sonra;
REG1 = 1
W=2
C = 1, sonuç pozitif
Z=0

tla

ri.

co
m

SUBWF
F kayıtçısından W kayıtçısını çıkart.
Dizim:
[etiket] SUBWF f,d
Operandlar:
0≤f≤127 d∈[0,1]
İşlem:
(f) – (W) → (hedef)
Etkilenen bayraklar:
C,DC,Z
Kodlama: 00 0010 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım:W kayıtçısı f kayıtçısından çıkartılır. d=1 ise, sonuç f kayıtçısı içerisinde geri
saklanır.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek 1:
SUBWF REG1,1

w

w

w

Örnek 2: Komuttan önce;
REG1 = 2
W=2
C =?
Z=?
Komuttan sonra;
REG1 = 0
W=2
C = 1,sonuç sıfır
Z=1
Örnek 3: Komuttan önce;
REG1 = 1
W=2
C =?
Z=?
Komuttan sonra;
REG1 = FF
W=2
C = 0,sonuç negatif
Z=1

20

rs

no

tla

ri.

co
m

SWAPF
f’yi takas et
Dizim:
[etiket] SWAPF f,d
Operandlar:
0≤k≤255 d∈[0,1]
İşlem:
(f<3:0>)→(hedef<7:4>), (f<7:4>)→(hedef<3:0>)
Yani f kayıtçısının LSB tarafındaki 4 biti (1.Dijiti) ile MSB tarafındaki 4 biti (2.dijiti) yer
değiştirir. Eğer d=0 ise, sonuç W kayıtçısının içerisine yerleştirilir. Eğer d=1 ise, sonuç f
kayıtçısının içerisinde geri depolanır.
Etkilenen bayraklar:
Yok
Kodlama: 00 1110 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım:f kayıtçısının yüksek ve alçak baytları dönüştürülür. d=0 ise,sonuç W kayıtçısı içine
yerleştirilir. Eğer d=1 ise, sonuç f kayıtçısı içine yerleştirilir.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
SWAP F ISIK, 0
Komuttan önce;
ISIK = h’A5’ olsun .
Komuttan sonra;
ISIK = h’A5’
W = h’5A’olur.

w

.e
em
de

XORWF
f ile W’nin içeriğini mantıksal EXOR’la.
Dizim:
[etiket] XORWF f,d
Operandlar:
0≤k≤127 d∈[0,1]
İşlem:
(W) .XOR. (f) → (hedef)
Etkilenen bayraklar:
Z
Kodlama: 00 0110 dfff ffff
MSB tarafındaki 5 bit komut kodu , d biti hedef biti , f ile belirtilen LSB tarafındaki 5 bit
ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım:W kayıtçısının içeriği, f kayıtçısı ile mantıksal EXOR’lanır. EXOR mantığında aynı
bitlerde çıkış 0, farklı bitlerde çıkış 1 olur. Eğer d=0 ise, sonuç W kayıtçısı içinde depolanır,
d=1 ise sonuç f kayıtçısı içine geri yerleştirilir.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
XORWF REG , 1

w

w

Komuttan önce;
REG = h’AF
W = h’B5
Komuttan sonra;
h’AF’= b’1010 1111’
EXOR h’B5’= b’1011 0101’
b ‘0001 1010’=h’1A’ ve ;
REG = h’1A
W = h’B5
21

1.3.2. Bit Yönlendirmeli Komutlar

co
m

Bit Yönlendirmeli komutlarda dikkat edilirse hedef (d) belirtilmemiştir. Sonuç her
zaman f kayıtçısının içersindedir. Şimdi bu komutları görelim;

.e
em
de

Komuttan sonra;
h’C7’=b’ 1100 0111’

rs

Örnek:
BCF TEST,7
Komuttan önce;
TEST = h’C7’ olsun.

no

tla

ri.

BCF
F kayıtçısının belirtilen bitini sıfırla.
Dizim:
[etiket] BCF f,b
Operandlar:
0≤f≤127
İşlem:
0→ (f<b>)
Etkilenen bayraklar:
Yok
Kodlama: 01 00bb bfff ffff
MSB tarafındaki 4 bit komut kodu (opcode) , 3 tane b biti hedef biti belirler , f ile belirtilen
LSB tarafındaki 7 bit ise dosya adresini (f kayıtçı adresi) tanımlar.
Tanım:f içindeki ‘b.’ biti silinir.
Hafıza alanı (Bayt):
1
Saat palsı:
1

0 olur ve;
TEST = h’47’ olur.

w

w

w

BSF
F kayıtçısının belirtilen bitini kur (birle).
Dizim:
[etiket] BSF f,b
Operandlar:
0≤f≤127 0≤b≤7
İşlem:
1 → (f<b>)
Etkilenen bayraklar:
Yok
Kodlama: 01 01bb bfff ffff
MSB tarafındaki 4 bit komut kodu (opcode) , 3 tane b biti hedef biti belirler , f ile belirtilen
LSB tarafındaki 7 bit ise dosya adresini
(f kayıtçı adresi) tanımlar.
Tanım:f kayıtçısı içindeki ‘b.’ Bit 1’e kurulur.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
BSF TEST, 7
Komuttan önce;
TEST = h’0A’ olsun.
Komuttan sonra;
h’0A’=b’ 0000 1010’
1 olur ve;

TEST = h’1A’ olur
22

rs

no

tla

ri.

co
m

BTFSC
f kayıtçısının belirlenen biti 0 ise bundan sonraki komutu atla.
Dizim:
[etiket] BTFSC f,b
Operandlar:
0≤f≤127 0≤b≤7
İşlem:
F(<b>)=0 ise atla
Etkilenen bayraklar:
Yok
Kodlama: 01 01bb bfff ffff
MSB tarafındaki 4 bit komut kodu (opcode) , 3 tane b biti hedef biti belirler , f ile belirtilen
LSB tarafındaki 7 bit ise dosya adresini
(f kayıtçı adresi) tanımlar.
Tanım: f kayıtçısı içindeki ‘b.’ Bitin 0 olup olmadığı test edilir. Eğer ‘b.’ bit 0 ise, bu
komutun altındaki komut işlenmez bir sonraki komuta sapılır. Aksi durumda ise sıradaki
komut işlenir.
Hafıza alanı (Bayt): 1
Saat palsı:
1(2)
Test edilen bit 1 ise 1 saat palsı , 0 ise 2 saat palsı alır.
Örnek:BASLA BTFSC PORTB,1 ;B portunun 1.bitini test et.
GOTO BASLA
; 0 değilse bu satır işlenir, BASLA etiketine dallanır.
;Yani 0 olana kadar test etmeye devam edecek.
BSF PORTB,1
;0 ise bu satır işlenir ve B portunun 1. biti bu komut ile
;1 yapılır. Eğer bu pine bir led bağlı ise yanar.

w

w

w

.e
em
de

BTFSS
f kayıtçısının belirlenen biti 1 ise bundan sonraki komutu atla.
Dizim:
[etiket] BTFSS f,b
Operandlar:
0≤f≤127 0≤b≤127
İşlem:
Eğer (f<b>)=1 ise atla
Etkilenen bayraklar: Yok
Kodlama: 01 11bb bfff ffff
MSB tarafındaki 4 bit komut kodu (opcode) , 3 tane b biti hedef biti belirler , f ile belirtilen
LSB tarafındaki 7 bit ise dosya adresini
(f kayıtçı adresi) tanımlar.
Tanım: f kayıtçısı içindeki ‘b.’ Bitin 1 olup olmadığı test edilir. Eğer ‘b.’ bit 1 ise, bu
komutun altındaki komut işlenmez bir sonraki komuta sapılır. Aksi durumda ise sıradaki
komut işlenir.
Hafıza alanı (Bayt):
1
Saat palsı: 1(2)
Test edilen bit 0 ise 1 saat palsı , 1 ise 2 saat palsı alır.
Örnek: BASLA BTFSS PORTA,1 ;A portunun 1.bitini test et.
GOTO BASLA
;1 değilse bu satır işlenir, BASLA etiketine dallanır.
;Yani 1 olana kadar test etmeye devam edecek.
BSF PORTB,1 ;1 ise bu satır işlenir ve B portunun 1. biti bu komut ile 1
;yapılır. Eğer bu pine bir led bağlı ise yanar.

23

1.3.3. Sabit İşleyen Komutlar

tla

ri.

ANDLW
W ile birlikte 8 bitlik k sabitini mantıksal AND’le.
Dizim:
[etiket] ANDLW k
Operandlar:
0≤k≤255
İşlem:
(W).AND.(k) → (W)
Etkilenen bayraklar: Z
Kodlama: 11 1001 kkkk kkkk

co
m

Sabit yönlendirmeli komutlarda dikkat edilirse hedef (d) belirtilmemiştir. Sonuç her
zaman W kayıtçısının içersindedir. Ayrıca bu gruptaki komutların W dışındaki kayıtçılar ile
kullanılamadığına dikkat ediniz. Şimdi bu komutları görelim;

MSB tarafındaki 5 bit komut kodu , k ile belirtilen LSB tarafındaki 8 bit ise 1 baytlık
sabit değeri tanımlar. Burada hedef (d) in kodlanmadığına dikkat ediniz.

rs

h’5F’

.e
em
de

Hafıza alanı (Bayt): 1
Saat palsi:
1
Örnek:
ANDLW

no

Tanım:W kayıtçısının içeriği 8-bitlik sabit ‘k’ ile mantıksal AND’lenir. Sonuç,W
kayıtçısına geri konur.

Komuttan önce;
W = h’A3’
Komuttan sonra;
h’A3’= b’1010 0011’
AND h’5F’= b’0101 1111’
b ‘0000 0011’=h’03’ ve ;
W = h’03’ olur.

w

w

w

ADDLW
W ile birlikte 8 bitlik k sabitini topla.
Dizim:
[etiket] ADDLW k
Operandlar:
0≤k≤255
İşlem:
(W)+k → (W)
Etkilenen bayraklar:
C,DC,Z
Kodlama: 11 111x kkkk kkkk

MSB tarafındaki 5 bit komut kodu , k ile belirtilen LSB tarafındaki 8 bit ise 1 baytlık sabit
değeri tanımlar.Burada hedef (d) in kodlanmadığına dikkat edin.
Hafıza alanı (Bayt):
1
Saat palsi:
1
Örnek:
ADDLW h’15’
Komuttan önce;
W = h’10’
Komuttan sonra;
W = h’25’ olur.
24

tla

ri.

co
m

IORLW
W ile birlikte kapsayan OR yazımı
Dizim:
[etiket] IORLW k
Operandlar:
0≤k≤255
İşlem:
(W).OR.(k)→ (W)
Etkilenen bayraklar:
Z
Kodlama: 11 1000 kkkk kkkk
MSB tarafındaki 5 bit komut kodu , k ile belirtilen LSB tarafındaki 8 bit ise 1 baytlık sabit
değeri tanımlar. Burada hedef (d) in kodlanmadığına dikkat ediniz.
Tanım:W kayıtçısının içeriği 8-bitlik sabit ‘k’ ile OR’lanır. Sonuç, W kayıtçısına geri konur.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
IORLW h’35’

.e
em
de

rs

no

Komuttan önce;
W= h’9A’
Komuttan sonra;
h’9A’= b’1001 1010’
OR
h’35’= b’0011 0101’
b ‘1011 1111’=h’BF’ ve ;
W= h’BF’ ve Z=1 olur.
MOVLW
W kayıtçısına bir sayı/sabit yükle.
Dizim:
[etiket] MOVLW k
Operandlar:
0≤k≤255
İşlem:
k → (W)
Etkilenen bayraklar:
Yok
Kodlama: 11 00xx kkkk kkkk
MSB tarafındaki 5 bit komut kodu , k ile belirtilen LSB tarafındaki 8 bit ise 1 baytlık sabit
değeri tanımlar. Burada hedef (d) in kodlanmadığına dikkat ediniz.
Tanım: 8-bitlik sabit ‘k’, W kayıtçısına yüklenir.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
MOVLW h’5A’

w

Komuttan önce;
W= h’9A’ olsun ;
Komuttan sonra;
W= h’5A’ olur.

w

w

RETLW
Altprogramdan W’ye bir sayı/sabit yükle ve geri dön.
Dizim:
[etiket] RETLW k
Operandlar:
0≤k≤255
İşlem:
(k) → (W)
TOS → (PC)
Etkilenen bayraklar:
Yok
Kodlama: 11 01xx kkkk kkkk
MSB tarafındaki 5 bit komut kodu , k ile belirtilen LSB tarafındaki 8 bit ise 1 baytlık sabit
değeri tanımlar. Burada hedef (d) in kodlanmadığına dikkat ediniz.
25

ri.

co
m

Tanım:Altprogramdan W’ye bir k sayı/sabiti yükleyerek dönmek için kullanılır. Dönüş
TOS (yığının üstü- yani geri dönüş adresinin bulunduğu hafıza alanı) değerinin PC (program
sayıcı) ye aktarılmasıyla yapılır. Bu komut daha çok çevrim tablolarında kullanılır. İlerde
detaylı işlenecektir.
Hafıza alanı (Bayt):
1
Saat palsı:
2
Örnek:
RETLW h’3F’
Komuttan önce W’nin içeriği ne olursa olsun komuttan sonra W=h’3F’ yapılır ve
anaprograma geri dönülür.

w

w

w

.e
em
de

rs

no

tla

SUBLW
Bir k sayı/sabitten W’yi çıkart.
Dizim:
[etiket] SUBLW k
Operandlar:
0≤k≤255
İşlem:
k – (W) → (W)
Etkilenen bayraklar:
C,DC,Z
Kodlama: 11 110x kkkk kkkk
MSB tarafındaki 5 bit komut kodu , k ile belirtilen LSB tarafındaki 8 bit ise 1 baytlık sabit
değeri tanımlar. Burada hedef (d) in kodlanmadığına dikkat ediniz.
Tanım:W kayıtçısı (2’nin tümleyeni metodu ile) sekiz bitlik ‘k’ yazımından çıkartılır. Sonuç,
W kayıtçısı içerisine yerleştirilir.
Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek 1:
SUBLW h’02’
Komuttan önce;
W=1
C=?
Z=?
Komuttan sonra;
W=1
C = 1, sonuç pozitif
Z=0
Örnek 2:Komuttan önce;
W=2
C =?
Z=?
Komuttan sonra;
W=0
C = 1, sonuç sıfır
Z=1
Örnek 3:Komuttan önce;
W=3
C =?
Z=?
Komuttan sonra;
W = FF
26

ri.

XORLW
Bir k sayı/sabit ile W’yi mantıksal EXOR’la.
Dizim:
[etiket] XORLW k
Operandlar:
0≤k≤255
İşlem:
(W) .XOR. k → (W)
Etkilenen bayraklar:
Z
Kodlama: 11 1010 kkkk kkkk

co
m

C = 0, sonuç negatif
Z=1

tla

MSB tarafındaki 5 bit komut kodu , k ile belirtilen LSB tarafındaki 8 bit ise 1 baytlık
sabit değeri tanımlar. Burada hedef (d) in kodlanmadığına dikkat ediniz.

Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
XORLW h’AF’

.e
em
de

rs

Komuttan önce;
W = h’B5’ olsun.
Komuttan sonra;
h’AF’= b’1010 1111’
EXOR h’B5’= b’1011 0101’
b ‘0001 1010’=h’1A’ ve ;
W = h’1A’ olur.

no

Tanım:W kayıtçısının içeriği, sekiz bitlik ‘k’ yazımı ile mantıksal EXOR’lanır. EXOR
mantığında aynı bitlerde çıkış 0, farklı bitlerde çıkış 1 olur. Sonuç W kayıtçısı içine
yerleştirilir.

1.3.4. Kontrol Komutları

Kontrol komutları program akışını belirleyen komutlardır. Altprogram çağırma, şartsız
dallanma ve uyku moduna geçme gibi olaylar bu komutlarla gerçekleşir. Bu komutlarda
hedef genelde bir adres değeridir. Şimdi bu komutları görelim;

w

w

w

CALL
Altprogram çağır .
Dizim:
[etiket] CALL k
Operandlar:
0≤k≤2047
İşlem:
(PC)+1 → TOS,
PC: Program sayıcı (program counter)
TOS: Yığının üstü (Top Of Stack)
k → (PC<10:0>),
(PCLATH<4:3>)→(PC<12:11>)
Etkilenen bayraklar:
Yok
Kodlama: 10 0kkk kkkk kkkk
MSB tarafındaki 3 bit komut kodu , k ile belirtilen LSB tarafındaki 11 bit ise altprogram
başlangıç adresini tanımlar. Burada hedef (d) in kodlanmadığına dikkat ediniz.
27

tla

ri.

co
m

Tanım: Altprogramı çağırır. İlk olarak, geri-dönüş adresi (PC+1) yığına itilir. Onbir bitlik
altprogramın başlangıç adresi , PC bitleri <10:0> içerisine yüklenir. PC’ın üst bitleri
PC<12:11> , PCLATH’in <4:3> bitlerinden yüklenir. CALL mutlaka RETURN komutu ile
birlikte kullanılmalıdır. RETURN komutu ilerde anlatılacaktır.
Hafıza alanı (Bayt): 1
Saat palsı:
2
Örnek:
DON CALL SAYAC
DON’un bir etiket olduğuna aynı zamanda CALL komutunun şu anki adresini tuttuğuna
dikkat ediniz. SAYAC ise altprogramın başlangıç adresini tutan etikettir. Bu durumda ;
Komuttan önce;
PC = {Adres DON}
Komuttan sonra;
PC = {Adres SAYAC}
TOS = {Adres DON} olur.

1 →T0

.e
em
de

1 →PD
Etkilenen bayraklar:T0 ,PD

rs

no

CLRWDT
Bekçi köpeği zamanlayıcısını (Watchdog Timer) sil.
Dizim:
[etiket] CLRWDT
Operandlar:
Yok
İşlem:
00h → WDT
0 → WDT ön-ölçücüsü

Kodlama:

00

0000

0110

0100

Tanım: CLRWDT komutu, Watchdog Timer’ı reset eder. Bu komut aynı zamanda
WDT’nin ön bölücüsünün de resetlenmesine sebep olur. T0 ve PD durum bitleri de set edilir.
Bu bitlerin işlevleri için status kayıtçısı konusuna bakınız.

w

Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
CLRWDT

w

w

Komuttan önce;
WDT sayacı = ?
Komuttan sonra;
WDT sayacı = h’00’
WDT ön-bölücü değeri = 0
T0 =1
PD = 1
GOTO
Adres’e git
Dizim:
[etiket] GOTO k
Operandlar:
0≤k≤2047
28

tla

ri.

co
m

İşlem:
k → (PC<10:0>)
(PCLATH <4:3>)→ (PC<12:11>)
Etkilenen bayraklar:
Yok
Kodlama: 10 1kkk kkkk kkkk
Tanım: GOTO, koşulsuz bir sapma komutudur. K nın belirlediği 11-bit’lik adres PC
bitlerinin <10:0> içerisine yüklenir. PC’ın üst bitleri (PC<12:11>) , PCLATH<4:3>’ten
yüklenir ve oluşan adrese sapılır.
Hafıza alanı (Bayt): 1
Saat palsı:
2
Örnek:
GOTO SAYAC
Komuttan sonra;
PC = {Adres SAYAC} olur.

.e
em
de

rs

no

RETFIE
Kesme altprogramından geri dön.
Dizim:
[etiket] RETFIE
Operandlar:
Yok
İşlem:
TOS → (PC) ; 1 → GIE TOS da geri dönüş adresi bulunur.
Etkilenen bayraklar:
Yok
Kodlama:
00 0000 0000 1001
Tanım: Kesme altprogramından geri dönmek için kullanılır. Yığında (TOS) bulunan geri
dönüş adresi PC’ye yüklenir. INTCON kesme kayıtçısının GIE (Genel kesme yetkisi) biti set
edilir. Bu, iki döngülük bir komuttur.
Hafıza alanı (Bayt): 1
Saat palsı:
2

Örnek:

RETFIE

Komuttan sonra;
PC = TOS
GIE = 1

w

w

w

RETURN
Altprogramdan geri dön.
Dizim:
[etiket] RETURN
Operandlar:
Yok
İşlem:
TOS → (PC)
Etkilenen bayraklar:
Yok
Kodlama:
00 0000 0000 0000
Tanım: Altprogramdan geri dönmeyi sağlar. Yığında (TOS) bulunan geri dönüş adresi
PC’ye yüklenir. Bu, iki döngülük bir komuttur.
Hafıza alanı (Bayt): 1
Saat palsı:
2
Örnek:
RETURN
Komuttan sonra;
PC= TOS; yani PC’ye geri dönüş adresi yüklenir ve ana programa yüklenir.
29

co
m

SLEEP
Uyku (Standby) moduna gir.
Dizim:
[etiket] SLEEP
Operandlar:
Yok
İşlem:
00h → WDT
0 → WDT ön-bölücüsü

0110

0011

tla

0 → PD
Etkilenen bayraklar: TO , PD
Kodlama:
00 0000

ri.

1 → TO

rs

Hafıza alanı (Bayt): 1
Saat palsı:
1
Örnek:
SLEEP

no

Tanım: Güç yok durum biti PD (Power down) sıfırlanır. Süre aşımı TO (Time-out)
durum biti ise 1’e kurulur. Watchdog zamanlayıcısı ve ön-bölücüsü silinir. Osilatörün
durmasıyla işlemci SLEEP moduna girer. PIC bu durumda çok az güç harcar. Arada bir
kontrol gereken güvenlik işlerinde, ya da belirli sürelerde yapılacak işler bittiğinde PIC
uyuma moduna sokulur.

.e
em
de

1.4. Sayı ve Karakterlerin Yazılışı

PIC assembly komutlarında sayılar heksadesimal, binary veya desimal formda
kullanılabilir. Değişik kaynaklarda kullanılan sayı ve karakter gösteriliş biçimleriyle
karşılaştığınızda bunları okuyabilmeniz için aşağıda örnekler verilmiştir.

1.4.1. Heksadesimal Sayılar

Heksadesimal sayılar ‘0x’, ‘0’ veya ‘h” harfleriyle başlamalıdır. Örneğin, STATUS
kayıtçısına 03 adresini atamak için aşağıda gösterilen yazılış biçimleri kullanılabilir.

w

STATUS

EQU
EQU
EQU

0x03
03h
h ’03’

w

w

MOVLW komutu ile W kayıtçısı içerisine yüklenecek olan FF heksadesimal sabiti ise
aşağıdaki gibi yazılabilir;
MOVLW 0 x FF
veya
MOVLW h ‘ FF’
Biz hexadesimal formatı h ‘ xx’ şeklinde kullanacağız.

1.4.2. Binary Sayılar
Binary sayılar b harfi ile başlamalıdır. Örneğin 00001010 binary sayısını W kayıtçısı
içerisine yüklemek için aşağıdaki gibi yazılmalıdır.
MOVLW

b’00001010’
30

1.4.3. Desimal Sayılar

MOVLW

co
m

Desimal sayıların başına d harfi konularak tırnak içerisinde yazılırlar. Örneğin 15
desimal sayısı W kayıtçısı içerisine yüklemek için aşağıdaki gibi yazılmalıdır.
d ’15’

1.4.4. ASCII karakterler

RETLW
RETLW

ri.

Genellikle RETLW komutu ile birlikte kullanılan ASCII karakterler tırnak içerisine
alınarak aşağıdaki gibi yazılırlar.
‘A’
‘T’

tla

1.5. Mikrodenetleyici İçin Gerekli Yazılımın Kullanımı

Mikrodenetleyici programlamak için (Burada PIC16F84) yazılım ve donanım
ihtiyaçlarımız olacaktır. Yazılım olarak;
ASM uzantılı dosyamızı yazabilmek için bir metin editörü,

¾

ASM dosyamızı makine koduna (HEX dosyası) çevirecek derleyici program

¾

HEX dosyasını bir programlama kartına yükleyecek PIC programlayıcı yazılımı
ihtiyacı olacaktır.

rs

no

¾

w

w

w

.e
em
de

Metin editörü olarak Windows’un kendi NOTPAD programını veya MPLAP
içerisindeki kendi editörünü de kullanabilirsiniz. Resim 1.1’de MPLAP’nin ASM editör
arabirimini görüyorsunuz.

31

co
m
ri.
tla
no
rs
.e
em
de

Resim 1.1: MPLAP’nin ASM editör arabirimi

Donanım olarak ise IBM uyumlu bir bilgisayara ve kullandığımız mikrodenetleyiciyi
programlayabilecek programlayıcı karta ihtiyaç vardır. Bu kartın yapılması ve
programlayıcının nasıl kullanacağını “mikroişlemci ve mikrodenetleyiciler” modülünde
gördüğünüzden bu modülde bunlardan bahsetmeyeceğiz. Biz burada sadece derleme
(compiler) olayının nasıl yapıldığına değineceğiz.

1.5.1. Programın Kurulması

w

w

w

Microchip firmasının MPASM derleyicisi ile yazmış olduğumuz assembly
dosyalarımızı , mikrodenetleyiciye yüklemek üzere .HEX uzantılı dosyalara çevirebiliriz. Bu
programı Microchip firmasının internet sitesinden ücretsiz dağıttığı MPLAB programının
içinde bulabilirsiniz. Bu program yaklaşık 30MB’lık dosyadır. (MPLAB710.zip)

Gelen zip dosyasını açın ve içindeki Setup.exe dosyasını çalıştırarak yükleyin. Resim
1.2’de kurulumu görüyorsunuz.

32

co
m
ri.
tla
no
rs

Resim 1.2: MPLAB kurulumu

w

w

w

.e
em
de

Yükleme işlemi bittikten sonra, başlat menüsünden porgramlarım içinde MPASM
programını açtığınızda karşınıza Resim 1.3’deki pencere gelecek .

Resim 1.3: MPASM derleyici programı arayüzü

33

Şimdi de MPASM derleyicisinin ayarlarını görelim;

co
m

1.5.2. Menülerin Tanıtılması

“Source File Name ” ile derlenecek ASM uzantılı kaynak dosya seçilir. Bunun
için Browse tıklanarak kaynak dosya seçilir.

¾

“Radix” radyo düğmelerinden ‘’hexadecimal” seçilmelidir.

¾

“Warning level” , ikaz seviyesini ayarlayabileceğimiz bir ayar grubudur.
Programın hangi durumlarda ikaz vereceğini belirler.Tercihen ‘Warning and
errors’ seçilmelidir.

¾

“Hex Output”, derleme sonucunda oluşacak hex dosyasının çıkış formatını
belirler. Tercihen ‘INHX8M’ seçilmelidir.

¾

“Generated Files”, derleme sonucunda hangi dosyaların oluşturulacağını
belirler. Tercihen ‘Error File’ ve ‘List File’seçilmelidir. Bir problem durumunda
bu dosyalar incelenerek hatalar giderilebilir.

¾

“Macro expansions”, makro uzantılarının kabul edilip/edilmemesini belirleyen
bu ayarı tercihen default olmalıdır.

¾

“Processor”, ile kullanılacak mikrodenetleyici seçilir.

¾

“Tab size” , sekme uzunluğu değeri 8 seçilebilir.

¾

“Extra Option”, özel parametreler girmek için kullanılır. Örneğin buraya
/LTEST.LST yazarsanız derleme sonucunda HEX dosyası ile beraber
TEST.LST dosyasının da oluştuğunu görürsünüz.

.e
em
de

rs

no

tla

ri.

¾

1.5.3. Mikrodenetleyici ve Diğer Donanımların Seçilmesi

w

w

w

Mikrodenetleyiciler ile bir proje tasarlanırken seçilecek mikrodenetleyicinin seçimi
çok önemlidir. Mikrodenetleyicilerin komut sayıları, kullandıkları kayıtçılar, bellek değerleri
vs. birbirinden farklıdır. Bu yüzden öncelikle kullanılacak mikrodenetleyici seçilmelidir.
Bunun için mikrodenetleyicilerin katalogları incelenmelidir. Microchip firmasının sitesinde
üretilen tüm mikrodenetleyicilerin (PIC serisi) kataloglarına ulaşabilirsiniz. Biz bu modülde
daha çok PIC16F84 mikrodenetleyicisinin programlanmasını göreceğiz. Yalnız
Analog/dijital dönüşümü konusunda, PIC16F84 denetleyicisinin dâhilî ADC modülü
olmadığından, bunun için 16F877 denetleyicisini kullanacağız. Şekil 1.3 ve Şekil 1.4’te en
çok kullanılan denetleyicilerin bazı teknik verileri verilmiştir.

34

co
m
ri.
tla

.e
em
de

rs

no

Şekil 1.3: 18 pinli bazı denetleyicilerin teknik verileri

Şekil 1.4: 40 pinli bazı denetleyicilerin teknik verileri

w

Yapılacak işe, kullanılan denetleyicinin teknik özelliklerine göre kullanılacak diğer
donanımlar (ADC /DAC dönüştürücüler, LCD display, sensörler vs. ) seçilmelidir.

w

w

1.6. Programlama Tekniği
Program yazarken, 4 temel kural izlenmelidir.
¾

Yazılım hakkında daima açıklamalar yapılmalıdır. Yoksa kaçınılmaz olarak geri
dönüldüğünde, neyin, neden yapıldığını anlamak çok zor olur.

¾

Programlar için evrensel bir (Header) başlık kullanılmalıdır. Bu, iş yükünü
hafifletir, tutarlı bir format yaratır ve hatırlanması gereken değişken sayısını
azaltır.
35

Tüm alt rutinler tek bölgede toplanmalıdır. PIC’le çalışırken bu evrensel bölge,
her bellek sayfasının üstünde (00-FFh) olmalıdır.

¾

Yazılımın ne yapmasını gerektiğini hatırlamak için, bir akış diyagramı
çizilmelidir.

co
m

¾

1.6.1. Bank Değiştirme

no

STATUS,5 ; Bank 1 seçilir.
STATUS,5 ; Bank 0 seçilir.

w

w

w

.e
em
de

rs

BSF
BCF

tla

ri.

STATUS kayıtçısının 5. ve 6. bitleri (RP0,RP1) bank değiştirmek için kullanılır. Bank
değiştirme işlemi o banktaki kayıtçıları kullanabilmek için yapılır. Şekil 1.5’te PIC16F84
için Bank 0 ve Bank 1’de bulunan kayıtçılar ve bellekteki adresleri görülmektedir.
PIC16F84’ün sadece 2 bankı bulunduğundan bank seçimi sadece STATUS kayıtçısının 5.
biti ( RP0) ile yapılır.Yani 6. bitin değeri daima 0 olmalıdır. Zaten PIC enerjilendiği anda
power-On-Reset (POR) gerçekleşir ve bu iki bit 0 olur. Bu bitler aynı zamanda MCLR
ucundan yapılan hâricî reset ve WDT reseti durumunda da 0 olur. Bank geçişleri için
aşağıdaki komut ikilisi kullanılır (PIC16F84 için);

36

co
m
ri.
tla
no
rs
.e
em
de
w
w

w

Şekil 1.5: PIC 16F84 denetleyicisinin bank ve kayıtçı yapısı

37

1.6.2. Portların Giriş ve Çıkış Olarak Yönlendirilmesi

co
m

Portlara bağlı bulunan bir giriş/çıkış elemanını kullanabilmek için portların giriş/çıkış
olarak yönlendirilmesi gerekir. PIC16F84’de A portunu TRISA kayıtçısı, B portunu TRISB
kayıtçısı yönlendirir.

ri.

PortA/PortB’nin hangi bitleri giriş yapılacaksa TRISA/TRISB kayıtçılarının o bite
karşılık gelen bitleri ‘1’ yapılır. Aynı şekilde çıkış yapılacaksa TRISA/TRISB kayıtçılarının
o bite karşılık gelen bitleri ‘0’ yapılır.

no

PORTA
; PORTA’yı sıfırla.
STATUS, 5 ; Bank 1’e geç. Çünkü TRISA bank1’de.
h’0F’
; TRISA’ya yüklemek için değer hazırla.
TRISA
; TRISA’ya değeri yükle. TRISA<0:3> giriş, TRISA<4> çıkış için
;ayarlandı.
BCF STATUS, 5 ; Bank 0’e geç. Çünkü PORTA bank1’de ve I/O işlemleri; portlardan
gerçekleşir.

rs

CLRF
BSF
MOVLW
MOVWF

tla

Örnek 1: Port A’ nın ilk 4 bitini giriş 5.bitini çıkış olarak kuralım (PIC16F84’de A portu 5
bitlik bir porttur.)

.e
em
de

Örnek 2: PortA’nın tamamı giriş, Port B’nin tamamını çıkış olarak kuralım (PIC16F84’de
B portu 8 bitlik bir porttur.)
CLRF
BSF
CLRF

PORTB
; PORTB’yı sıfırla.
STATUS, RP0 ; Bank1’e geç.Çünkü TRISA ve TRISB bank1’de.
TRISB
; TRISB’ya değeri yükle.TRISB<0:7> ‘0’olacağından tüm bitler
; çıkış olarak kuruldu.
MOVLW h’FF’
; A portunun tamamı
MOVWF TRISA
; giriş olarak ayarlandı.
BCF
STATUS, 5 ; Bank 0’e geç. Çünkü PORTA ve PORTB bank 1’de ve I/O
işlemleri; portlardan gerçekleşir.

1.6.3. Her Adım İçin Akış Diyagramı Çizme

w

w

w

Akış diyagram oluşturma ve sembolleri konusunda akış diyagramları hakkında bilgi
verilmişti. Burada Port yönlendirmesine bir örnek olarak, PIC’e enerji verildiğinde
PORTB’nin 1.bitine bağlı ledi yakacak programın akış diyagramını ve her sembolde
işlenecek assembly komutları yazalım;

38

co
m

Başla
;=====yak.asm====

LIST=16F84

PortB’yi sil.

tla

PORTB

BSF

STATUS, RP0

no

Bank1’e geç.

CLRF

ri.

LIST P=16F84

CLRF TRISB

Bank 0’a geç.

BCF STATUS, 5

.e
em
de

rs

PORTB’yi çıkış olarak
yönlendir.

PORTB<1>=1 yap.

son

BSF PORTB,1
END

Akış diyagramı çizmenin amacı karmaşık ve/veya çok uzun programlar yazarken
işlem sırası oluşturup düşünme kolaylığı sağlamasıdır.

w

1.6.4. Konfigürasyon Bitlerinin Yazılması

w

w

Konfigürasyon bitleri, PIC’e gerilim uygulandığında PIC’in uyması gereken koşulları
belirlemede kullanılır. Bu bitler aşağıdaki koşulları belirlemede kullanılır:
¾

Osilatör tipini ,

¾

WDT’in aktif/pasif yapma,

¾

POR’i (Power-On-Reset) aktif/pasif yapma,

¾

Kod korumayı aktif/pasif yapma.

39

Bu konfigürasyon bitlerini program içerinde yazabileceğimiz
programlayıcının kendi programındaki “fuses” penceresinden de yapabiliriz.

PIC

Şimdi konfigürasyon bitlerini belirleyen tanımları görelim;

co
m

¾

gibi

tla

CONFIG ifadesinin yanındaki alt çizgi çift olmalıdır ‘___’.

Daha sonra yazılan ifadeler tek alt çizgili olmalıdır ‘_’.

Konfigürasyonlar arasında bir boşluk olmalıdır.

Boşluktan sonra & işareti kullanılmalıdır.

& işaretinden sonra ara vermeden konfigürasyon yazılır.

no

Aşağıdaki örneği inceleyiniz;

.e
em
de

¾

Konfigürasyon cümlesini yazarken şunlara dikkat etmeliyiz:

rs

¾

ri.

_CP_ ON / OFF
; kod koruma var/yok.
_WDT_ ON / OFF ; WDT aktif /pasif.
_ PWRT_ ON / OFF ; Power-On-Reset var/yok.
_RC_OSC
; RC osilatör kullanılıyor.
_LP_OSC
; Alçak güç (low power) osilatör kullanılıyor.
_XT_OSC
; Kristal osilatör kullanılıyor.
_HS_OSC
; Yüksek hızlı (High speed) osilatör kullanılıyor.

__CONFIG _CP_OFF & _WDT_ON &_ PWRT_ON & _RC_OSC
Bu ifadede ;
_CP_OFF
; kod koruma yok.
_WDT_ON
; WDT aktif
_ PWRT_ON
; Power-On-Reset var.
_RC_OSC
; RC osilatör kullanılıyor.

1.6.5. W Kayıtçısının Kullanımı

w

w

w

PIC16F84'ün RAM bellek alanında görülmeyen bir de W registeri vardır. W register
bir akümülatördür. W registerine direkt olarak ulaşmabiliriz. Ancak diğer registerlerin
içerisindeki verileri aktarırken erişmek mümkündür. Bir PIC'te gerçekleşen tüm aritmetik
işlemler ve atama işlemleri için W register kullanılmak zorunluluğu vardır. Örneğin iki
register içindeki veriler toplanmak istendiğinde, ilk olarak registerlerden birinin içeriği W
registere aktarılır (Şekil 1.6). Daha sonra da diğer registerin içerisindeki veri W registeri
içerisindekiyle toplanır. Bu registerin kullanım özellikleri yine programlama konusunda
detaylı olarak ele alınacaktır.

Port A

W
kayıtçısı

Port B

Şekil 1.6: W kayıtçısı kullanımı

40

1.6.6. Bitleri Test Ederek İşlem Yapma

co
m

Bir kayıtçı içerisindeki herhangi bir bit BTFSS veya BTFSC komutları ile test
edilebilir. “Mikrodenetleyici komutları” konusunda işlenen bu komutların işlevini kısaca
hatırlarsak ; BTFSS komutu belirtilen f kayıtçısındaki biti test eder, eğer 1 ise bir sonraki
komuta geçer.
BTFSC komutu ise belirtilen f kayıtçısındaki biti test eder , eğer 0 ise bir sonraki
komuta geçer.

ri.

Şimdi bir örnekle bu komutun kullanımını görelim;

Çözüm: Önce programın akış diyagramını çıkaralım;

no

Başla

tla

Örnek : A portunun 0.bitine bağlı olan bir butona basıldığında B portuna bağlı 8 ledi
yakacak programı yazalım.

PIC16F84’ü

rs

Tanıt.

.e
em
de

PortB’yi sil.

PORTA giriş
PORTB çıkış

w

PORTA<0>=1
mi?

Tekrar test et.
hayır

w

w

evet

PORTB’deki ledleri yak.

son
Şekil 1.7: Örnek progamın algoritması

41

Şimdi de programımızı yazalım;
;====led.asm======
LIST
P=16F84
INCLUDE “P16F84.INC”

co
m

tanımlamaların yapıldığı
bölüm

rs

no

tla

ri.

CLRF
PORTB
BSF
STATUS,5
A portu giriş, B portu çıkış olarak CLRF
TRISB
ayarlandı.
MOVLW h’FF’
MOVWF TRISA
BCF
STATUS,5
TEST_PORTA
BTFSS
PORTA,0
; PORTA<0>=1 mi?
GOTO
TEST_PORTA
; hayır.Tekrar test et.
MOVLW h’FF’
; evet. W=h’ff’ yükle.
MOVWF PORTB
; B portundaki tüm ledleri yak.
SON
PIC16F84’de duraklama komutu olmadığı
GOTO
SON
için burada yazılım ile sonsuz döngü
END
oluşturup PIC’i aldatıyoruz. RESET
olana kadar PIC sonsuz döngüde kalır.

1.6.7. Sayaç Kullanarak Döngü Düzenlemek

.e
em
de

Bazı işlemlerin önceden belirlenen sayıda tekrarlanması gerekebilir. Bu durumda
programcı tarafından belirlenen bir kayıtçı sayaç olarak kullanabilir. Sayaç şu şekilde
hazırlanır:
¾

Önce sayaç içerisine tekrar sayısını belirleyen sayı yüklenir.

¾

Her işlem tekrarında sayaç 1 azaltılır. (DECFSZ komutu kullanılır.)

¾

Sayaç 0 olduğunda program ya bitirilir ya da başka bir yere dallandırılır.

Şimdi de bu olayların akış diyagramını çizelim.

w

w

w

SAYAC=SAYAC-1

SAYAC=0
mı?

Akış diyagramının komut listesi;
TEKRAR
DECFSZ
SAYAC,F
GOTO
TEKRAR
BSF
PORTB,1

Tekrar test et.
hayır

evet
PORTB’nin 1.bitini 1 yap.
Şekil 1.8: DECFSZ komutu ile yapılan sayacın algoritması

42

co
m

Bilindiği gibi DECFSZ komutu , “kayıtçıdan 1 çıkart eğer sonuç 0 ise bir sonraki
komuta dallan” işlevini yapmaktadır. Detaylı bilgi için “mikrodenetleyici komutları ”
konusunda DECFSZ komutunu inceleyiniz.

“Zaman geciktirme döngüleri” konusunda sayaç kullanarak yapılan döngüleri
inceleyiniz.

1.6.8. Karşılaştırma Yaparak Döngü Düzenlemek

ri.

SUBLW, SUBWF, INCF, DECF komutları kullanılarak da sayaçlar düzenlenebilir.
Bu komutlar hakkında detaylı bilgi için “mikrodenetleyici komutları ” konusuna bakınız.
Sayaç şu şekilde hazırlanır:
Önce sayaç içerisi sıfırlanır.

¾

Her işlem tekrarında sayaç 1 arttırılır. (INCF komutu kullanılır.)

¾

Sayaç istenilen sayıya ulaştığında STATUS kayıtçısının Z biti BTFSS komutu

no

tla

¾

ile sorgulanarak program ya bitirilir yada başka bir yere dallandırılır.

.e
em
de

SAYAC=h’00’
CLRF
SAYAC

rs

Şimdi de bu olayların akış diyagramını çizelim.

SAYAC=SAYAC+1

W’e tekrar sayısını yükle.

Akış diyagramının asm kodları

TEKRAR
INCF
MOVLW
SUBWF
BTFSS
GOTO
BSF

w

w

w

W=SAYAC-W

hayır
STATUS<2>=0
mı?

Tekrar test et.

evet
PORTB’nin 1.bitini 1 yap.

Şekil 1.9: SUBWF komutu ile yapılan sayacın algoritması

43

SAYAC,F
d’tekrar sayısı’
SAYAC,W
STATUS,Z
TEKRAR
PORTB,1

co
m

Yukarıdaki program parçasında SAYAC değeri W’ye yüklenen ‘tekrar sayısına’
ulaştığında SUBWF SAYAC,W komut satırı icrasında STATUS kayıtçısının Z bayrağı 1
olacaktır, ve B portunun 1.biti 1 yapılarak buna bağlı led yanacaktır. Burada dikkat edilmesi
gereken konu, GOTO TEKRAR komut satırı, W’ye yüklenen d’tekrar sayısı’ndan 1 eksik
sayıda icra edilecektir.Yani MOVLW d’10’ yapıldıysa, GOTO TEKRAR komut satırı 9 defa
icra edilecektir.

1.6.9. Status Kayıtçısı

ri.

STATUS kayıtçısı ALU`nun aritmetik statüsünü, RESET statüsünü ve veri belleğinin
küme seçim bitlerini içermektedir.

no

tla

Herhangi bir kayıtla olduğu gibi, STATUS kaydı herhangi bir komut için hedef
olabilir. Eğer STATUS kaydı, Z, DC, veya C bitini etkileyen komutun hedefiyse, o zaman bu
üç bit üzerine yazma etkin değildir.Yani sadece okunabilir durumdadır. Bu bitler aygıtın
lojik durumuna göre uygun olarak kurulmuş veya silinmiştir. Daha ötesinde, TO ve PD
bitleri sadece okunabilir bitlerdir.

rs

Örneğin, CLRF STATUS komutu yukarı üç biti temizleyerek Z bitini kuracaktır. Bu
STATUS kaydından 000u uluu olarak çıkacaktır. (u=değişmeyen). STATUS kaydını
değiştirmek için yalnızca BCF, BSF, SWAPF ve MOVWF kullanılmaktadır. Çünkü bu
komutlar hiçbir statüs bitini etkilememektedir.

.e
em
de

STATUS kaydı, Z, DC ve C bitini etkileyen komutun hedefi olduğu durumlarda, bu üç
bitin üzerine yazma etkinsizdir.
Çıkartmalarda, C ve DC bitleri ödünç alan bitler olarak çalışmaktadır.

Aşağıda STATUS kayıtçısının her bir bitinin hangi durumlarda 1 ve 0 olacağı
gösterilmiştir;

w

Şekil 1.10: Status kaydı (O3h, 83h adresi)

w

w

R= Okunabilir Bit
W= Yazılabilir Bit
N= POR resetindeki değer.
-n=Bilinmez 1 ya da 0 olabilir.

44

Bit 7:

co
m

Örneğin 2.bit olan Z biti R/W-n ifadesiyle, hem okunabilir hem de yazılabilir bir bit
olduğunu, ayrıca güç reseti durumunda lojik seviyesi için bir şey söylenemeyeceği anlamını
taşır. Ama 3.bit in güç reseti durumundaki lojik değeri 1’dir.
IRP: Bank kümesi seçim biti (dolaylı adresleme için kullanılır) .
0: Bank 0,1 (h’00’-h’ff’)

16CXX,

16F8X

serisi

RP1:RPO: Bank seçim bitleri (doğrudan adresleme için kullanılır)
00:Bank 0
01:Bank 1
10:Bank 2
11:Bank 3

no

Bit 6-5:

kullanılmaktadır.

tla

IRP biti PIC16F87X serisinde
mikrodenetleyicilerde kullanılmaz.

ri.

1:Bank 2,3 (h’100’-h’1ff’)

rs

PIC16F84’te sadece bank 0 ve bank1 bulunduğu için bank seçimini sadece RP0 bitini
kullanarak yaparız. Her bir bank 128 bayttır.

w

w

w

.e
em
de

Bit 4:TO: Zaman aralığı biti (Time-out)
1= PIC’e enerji verildiğinde, CLRWDT komutuyla veya SLEEP’den güç
verme durumuna geçirildiğinde 1 olur.
0= WDT süre aşımı işlemi gerçekleşmiş ise 0 olur.
Bit 3:PD: Güç kesme biti (Power down).
1= PIC’e enerji verildiğinde veya CLRWDT komutu ile olur.
0= SLEEP komutunun yürütülmesi ile olur.
Bit 2 :Z: Sıfır Bit (zero).
1= Aritmetik veya mantıksal işlemin sonucu sıfırdır.
0= Aritmetik veya mantıksal işlemin sonucu sıfır değildir.
Bit 1:DC: Dijit elde (Digit Carry/Borrow) biti. (ADDWF ve ADDLW komutları için)
1= Alt 4 bitin (1.dijit) 4. bitinde taşma meydana geldiğinde olur.
0= Alt 4 bitin (1.dijit) 4. bitinde taşma meydana gelmediğinde olur.
Bit 0 :C: Elde (Digit Carry/Borrow) biti. (ADDWF ve ADDLW komutları için)
1= Meydana gelen sonucun en önemli bitinden (7.bit) taşma olursa 1 olur.
0= Meydana gelen sonucun en önemli bitinden (7.bit) taşma olmazsa 0 olur.
RRF, RLF komutların yürütülmesi sırasında , bu bit, kaynak kaydındaki düşük veya yüksek
değerlikli ( MSB veya LSB) biti ile yüklenmektedir.

45

1.6.10. Zaman Geciktirme Döngüleri

co
m

Bu konumuzda döngü gecikmelerinde geçen zamanın hesaplanmasını ve diğer
komutları öğreneceğiz. Bunun için öncelikle dâhilî komut saykılı kavramını bilmemiz
gerekir.

ri.

PIC16F84’e uygulanan 4 Mhz’lik osilatör sinyalinin 1 komutu icrası için 4 palsı
gerekir. Dolayısıyla PIC’in 1 komutu icra etmek için kullandığı frekans, dışarıdan uygulanan
sinyalin ¼ üne düşer ve 1 Mhz olur. İşte Fosc/4 değerindeki bu değere dâhilî komut saykılı
denir. 1Mhz’lik sinyalin dâhilî komut peryotu da 1µS olacaktır. Bazı komutların icrası ise 2
komut saykıllık zaman alır. Bu komutlar tablo 1.1’de verilmiştir

no

.e
em
de

BTFSS

rs

RETLW
RETFIE
INCFSZ
BTFSC

Komut saykılı
2
2
2
2
1 (Kayıtçı içindeki değer 0 değilse)
2 (Kayıtçı içindeki değer 0 ise)
2
2
1 (Kayıtçı içindeki değer 0 değilse)
2 (Kayıtçı içindeki değer 0 ise)
1 (Kayıtçı içindeki değer 0 değilse)
2 (Kayıtçı içindeki değer 0 ise)
1 (Kayıtçı içindeki değer 1 değilse)
2 (Kayıtçı içindeki değer 1 ise)

tla

Komut
GOTO
RETURN
CALL
PC’ye veri yazan komutlar
DECFSZ

Tablo 1.1: 2 komut saykılı çeken komutlar

Şimdi de tek döngü ile gecikme altprogramının akış diyagramını çizip programını
yazalım ve maksimum ne kadarlık bir zaman gecikmesi yaptığını hesaplayalım.
SAYAC=h’FF’=d’255’

w

w

w

SAYAC=SAYAC-1
SAYAC=0
mı?

hayır

Bu yol GOTO
komutu ile
icra edilir ve
254 defa
tekrarlanır.
Sonuçta 2x254
tane komut
saykılı çeker.

evet
RETURN
Şekil 1.11: Tek döngülük zaman gecikmesi algoritması

46

SAY

h’FF’
MOVWF
DECFSZ
GOTO
RETURN

;1 saykıl
SAYAC
;1 saykıl
SAYAC,F ;1x254+2 saykıl
SAY
;2x254 saykıl
;2 saykıl
TOPLAM: 766 komut saykılı.

co
m

GECIKME MOVLW

ri.

Yukarıdaki hesaplamada dikkat edilmesi gereken nokta DECFSZ komutunun
icrasıdır. SAYAC değeri ‘0’ olana kadar bu komut bir komut saykılı çekecektir. SAYAC
değeri ‘0’ olunca ise 2 komut saykılı çeker. SAYAC sıfır olana kadar 254 defa komut icra
edileceğinden toplamda bu komut (1x254+2=256) komut saykılı çekecektir.

tla

Aynı şekilde GOTO komutu icrası 2 saykıl alır (Tablo 1.1). Bu komut proram sonuna
kadar 254 defa icra edileceğinden toplam 2x254=508 komut saykılı çeker.

no

GECIKME alt programı sonunda ise toplan 766 komut saykılı süresi kadar bir
gecikme olur . Şimdi de bu kadar saykılın 4 Mhz kristal osilatör kullanan bir PICC16F84’de
ne kadar sürelik bir gecikme yaptığını bulalım.

rs

Osilatör frekansı 4Mhz ise , dâhilî komut frekansı F=Fosc/4 olduğundan 1 Mhz
olacaktır. O hâlde bir komut saykıl süresi ;
t=1/f=1/1Mhz= 1µS olacaktır.

.e
em
de

GECIKME altprogramının süresi ise 1µS x766 = 766µS = 0.766mS olacaktır. Bu süre
tek döngü ile yapılabilecek maksimum zaman gecikmesidir.

Uygulamalarda tek döngü ile yeteri kadar gecikme yapılamadığı için, en az iki döngü
yapmak gerekmektedir.

w

w

w

Aşağıda iki döngü ile yapılmış gecikme altprogramının akış diyagramı görülmektedir.

47

co
m

GECIKME
SAYAC1=h’FF’=d’255’

ri.

SAYAC2= h’FF’

hayır

no

SAYAC2=0
mı?

tla

SAYAC2=SAYAC2-1

rs

evet
SAYAC1=SAYAC1-1

.e
em
de

SAYAC1=0
mı?

hayır

evet

RETURN

Şekil 1.12:Çift döngülük zaman gecikmesi algoritması

w

Şimdi de GECİKME altprogramının assembly programını yazıp geçen zamanı
bulalım.

w

M

w

N

Şekil 1.13: Çift döngülük zaman gecikmesi assembly programı

48

co
m

Burada SAYAC1 değerine M, SAYAC2 değerine N dersek toplam saykıl sayısını
yaklaşık TSS=3MN+5M+4 kadar buluruz. Buradaki 4 değeri rahatlıkla ihmal edilebilir.
Hatta çok hassas bir zamandan bahsedilmiyorsa 5M değeri de ihmal edilebilir. Eğer M=N
alınırsa TSS=3M2
olarak sadeleştirebiliriz. Maksimum zaman gecikmesi yapmak için
sayaçlara d’225’ yüklenmiştir. Yani M=N=255’dir. Bu durumda toplam komut saykıl sayısı
yaklaşık olarak;
TSS=3x255x255+5x255+4=196.354 çıkar.
sadeleşmiş

formülü

kullanırsak;

ri.

Eğer

TSS=3M2=3x2552=195.075 çıkar.

rs

no

tla

Bu da 4 Mhz frekans için 196.35 mS = 0.196 saniye yaklaşık 0.2 saniye eder. Bu
değer 2 döngü ile yapabileceğimiz maksimum gecikme süresidir. Şimdide istenen bir
gecikme değeri için sayaçlara yüklenecek değerin nasıl bulunacağını görelim. Örneğin 2
döngülü bir gecikme ile 40mS’lik bir zaman gecikmesi yapmak için kayıtçılara hangi
değerleri yükleyeceğimizi bulalım.Kolaylık bakımından sayaç değerlerinin aynı sayı ile
yükleyelim.(PIC 16F84’in osc frekansı 4Mhz kabul edilecek.) Çözüm: 40mS=40000µS
yapar. Bu da dâhilî komut saykıl süresi 1µS olan bir PIC için TSS=40000yapar. TSS=3M2 ,
40000=3M2 ve M=√(4000/3=116 desimal değeri bulunur.
Eğer PIC’imizin osc frekansı 10Mhz olsaydı , ne değişirdi?

.e
em
de

Çok şey. Bu durumda; dâhilî komut saykılı f=Fosc/4=2,5 Mhz ve t= 1 / f =0.4 µS
olurdu. 40mS=40000µS olduğundan bu sürenin geçmesi için gereken saykıl sayısı
TSS=40000/0.4=100000
saykıl
gerekir.
TSS=3M2 ,
100000=3M2 ve M=√(100000/3=183 desimal değeri bulunur.
Bu bilgiler ışığında M’in bulunması için genel bir formül yazarsak;

bulunur. Burada; GS=Gecikme süresi(µS), süresi

w

w

w

Fosc=PIC’in osilatör frekansı (Mhz)

M=Sayaç değerini (desimal) ifade eder.

Yukarıdaki örnekleri bir bu formülle çözerek sonuçların aynı olduğunu görünüz.
Şimdi de 3 döngülü bir gecikme altprogramı yazalım. Fosc=4 Mhz için toplam 50.070.529
mikrosaniye ve yaklaşık 50 saniye eder.

49

co
m
ri.
tla

Şekil 1.14: Çift döngülük zaman gecikmesi assembly programı

no

Demek ki 3'lü döngü ile yeteri kadar zaman elde edebiliriz.

w

w

w

.e
em
de

rs

Eğer 4'lü bir döngü düzenlersek o zaman saatlerce sürecek bir zaman gecikmesi elde
etmek mümkün olur. Şimdi de bir tablo çizerek dörtlü bir döngü hâlinde ne olabileceğini
görelim.

Şekil 1.15. Çift döngülük zaman gecikmesi assembly programı

Sonuç olarak 12.767 bir gecikme elde edilir. Bu da 212 dakika ve yaklaşık 3.5 saatlik
bir gecikme olur. Bu yaklaşık 255 X50 saniye demektir, burada ilk 255 yerine decimal 100
girerseniz 100X50 saniye yani 5000 saniye elde edersiniz bu da 83 dakika eder. 1 girilirse
50 sn. 10 girilirse 8.3 dakika elde edilir. İlk 255 sayısı yerine 1’den 255'e kadar değişen
rakamlar girildiğinde 4’lü bir döngü için 50 sn.den 3.5 saate kadar uzanan bir zaman
50

gecikmesi elde edilir. Tek ve iki döndüdeki gibi istenirse 3’lü ve 4’lü döngülerde formülize
edilebilir. 5’li bir döngü hâlinde ise bu zaman bir ay (900 saat) civarındadır.

co
m

1.6.11. Altprogramlar

ri.

Program içerisinde defalarca tekrar edilmesi gereken komut dizilerini sürekli yazmak
yerine, bu komut dizilerini altprogramlar şeklinde yazarak hem bellek alanından tasarruf
edilmiş olur, hem de program sadelik kazanır. Altprogramlar ana programdan CALL komutu
ile çağrılır ve altprogramın çalışması bittikten sonra ana programa RETURN komutu ile
dönüş sağlanır.
Altprogramlar iki çeşittir:
CALL komutu ile çağrılan altprogramlar,

¾

Kesme altprogramları. Kesme altprogramları , “Kesme alt programlarının

tla

¾

no

düzenlenmesi” konusunda işlendiğinden burada işlenmemiştir.

Bir altprogramın çalışmasını şematik olarak şekil 1.16' daki gibi gösterebiliriz;

rs

Ana program

.e
em
de

CALL SAYAC

PC=>TOS (Yığın) ve
SAYAC adresi=>PC gerçekleşir.

w

w

w

SAYAC

Altprogram

TOS (Yığın) =>PC yapılarak
Ana programa dönülür.

RETURN
Şekil 1.16: Altprogram kurgusu

51

Yukarıdaki şekilde şunlar dikkatinizi çekmiş olmaldır:
CALL komutundan sonra altprogramın isimini yazarak altprogramı çağırırız.

co
m

¾

Burada altprogramımızın ismi SAYAC’tır.
¾

Altprogram çağrıldığında program sayıcı (PC) kayıtçısının içeriği (yani geri
dönüş adresi) yığına (TOS) itilir ve SAYAC altprogram adresi PC’ye yazılır.

Bu olay mikrodenetleyici tarafından otomatik olarak gerçekleşir. Böylece
¾

ri.

altprograma dallanma gerçekleşmiş olur.

Altprogramın çalıştırılması bittikten sonra RETURN komutu ile ana programa

tla

dönüş sağlanır. Çünkü RETURN komutu, daha önce yığına itilmiş geri dönüş
adresini PC’ye tekrar yükler.

Ayrıca altprogram içinde başka altprogramlar da çağrılabilir.

no

¾

1.6.12. Bit Kaydırma

rs

Sıradaki “Bit pozisyonlarını sola kaydırma” konumuzda led.asm programında bir
gecikme altprogramı kullanılmıştır. İnceleyiniz.

.e
em
de

1.6.12.1. Bit Pozisyonlarını Sola Kaydırma

Bit pozisyonlarını sola kaydırmak için RLF komutunu kullanırız. Bu komut belirlenen
bir kayıtçı içerisindeki bitleri her defasında 1 bit sola kaydırır. Detaylı bilgi için
mikrodenetleyici komutları konusunda RLF komutunu inceleyiniz.
Şimdi bu komutun kullanımına bir örnek verelim.

w

w

w

Örnek: PORTB’ye bağlı 8 led sırayla periyodik olarak yansın. Şöyle ki; PORTB<0>’dan
PORTB<7>’ya doğru tek bit sırayla yansın ve 7. bitten sonra işlem başa dönsün.

52

tanımlamaların yapıldığı
bölüm
B portu çıkış olarak
ayarlandı.

BASLA
STATUS,0
h’01’
PORTB

;Elde biti sıfırlandı.
;ilk değeri yükle ve
;B portundan çıkar.

tla

BCF
MOVLW
MOVWF
TEKRAR

;2.değer için bekle.
;sola kaydır
;C=1 mi?
;hayır.TEKRAR’a dallan.
;evet.BASLA’ya dallan.

no

GECIKME
PORTB,F
STATUS,0
TEKRAR
BASLA

Ana
Program

rs

CALL
RLF
BTFSS
GOTO
GOTO

co
m

P=16F84
“P16F84.INC”
EQU
h’0C’
EQU
h’0D’
CLRF
PORTB
BSF
STATUS,5
CLRF
TRISB
BCF
STATUS,5

ri.

;====led.asm======
LIST
INCLUDE
SAYAC1
SAYAC2

GECIKME

h’FF’

.e
em
de

MOVLW
MOVWF SAYAC1

DON1

MOVLW
MOVWF

h’FF’
SAYAC2

GECİKME altprogramı.

DON2

DECFSZ
GOTO
DECFSZ
GOTO
RETURN
END

SAYAC2,F
DON2
SAYAC1,F
DON1

w

1.6.12.2. Bit Pozisyonlarını Sağa Kaydırma

w

w

Bit pozisyonlarını sağa kaydırmak için RRF komutunu kullanırız. Bu komut belirlenen
bir kayıtçı içerisindeki bitleri her defasında 1 bit sağa kaydırır. Detaylı bilgi için
mikrodenetleyici komutları konusunda RRF komutunu inceleyiniz.
Şimdi bu komutun kullanımına bir örnek verelim.

Örnek: PORTB’ye bağlı 8 led kara şimşek düzeninde yansın. Yani PORTB<0>’dan
PORTB<7>’ya doğru tek bit sola doğru sırayla yansın ve 7. bitten sonra işlem sağa doğru
dönsün ve bu işlemler periyodik olarak tekrarlansın.
53

SAG
GECIKME
PORTB,F
PORTB,0
SAG
SOL

MOVLW
MOVWF

h’FF’
SAYAC1

;evet. Yeni değer için bekle.
; sağa kaydır.
; PORB<0>=1 mi?
;hayır.SAG’a dallan.
;evet.SOL’a dallan,

.e
em
de

rs

CALL
RRF
BTFSS
GOTO
GOTO

no

tla

ri.

co
m

;====karaşimşek.asm======
LIST
P=16F84
INCLUDE “P16F84.INC”
SAYAC1 EQU h’0C’
tanımlamaların yapıldığı
SAYAC2 EQU h’0D’
bölüm
CLRF
PORTB
BSF
STATUS,5
B portu çıkış olarak
CLRF
TRISB
ayarlandı.
BCF
STATUS,5
BCF
STATUS,0
;Elde biti sıfırlandı.
MOVLW h’01’
;ilk değeri yükle ve
MOVWF PORTB
;B portundan çıkar.
SOL
CALL
GECIKME ;Yeni değer için bekle.
RLF
PORTB,F ;sola kaydır
BTFSS
PORTB,7 ;PORB<7>=1 mi?
GOTO
SOL
;hayır.SOL’a dallan.

GECIKME
DON1

MOVLW h’FF’
MOVWF SAYAC2

GECİKME altprogramı.

DECFSZ
GOTO
DECFSZ
GOTO
RETURN
END

SAYAC2,F
DON2
SAYAC1,F
DON1

w

w

w

DON2

1.6.12.3. Bit Pozisyonlarını Tersleme

COMF komutu bir kayıtçı içerisindeki bitleri tersine çevirir (complement) . Detaylı
bilgi için mikrodenetleyici komutları konusunda COMF komutunu inceleyiniz. Bu komut,
2’li tümleme yöntemiyle çıkarma işlemi yaparken , bazı mantıksal devre çözümlerine ,ışık
şovları tasarlarken işimize yarayabilir.
Şimdi bu komutun kullanımına bir örnek verelim.
54

.e
em
de

rs

no

tla

ri.

co
m

Örnek: PORTB’ye bağlı 8 ledleri dönüşümlü olarak ilk önce ilk 4 bitindeki, sonrada son 4
bitindeki ledleri yakan programı yazalım.
;====TERSLE.asm======
LIST
P=16F84
INCLUDE
“P16F84.INC”
SAYAC1
EQU h’0C’
tanımlamaların yapıldığı
SAYAC2
EQU h’0D’
bölüm
CLRF PORTB
BSF STATUS,5
B portu çıkış olarak
CLRF TRISB
ayarlandı.
BCF
STATUS,5
MOVLW
h’0F’
;ilk değeri yükle ve
MOVWF
PORTB
;B portundan çıkar.
TERSLE
CALL GECIKME
;Yeni değer için bekle.
COMF PORTB,F
;PORTB’yi tersle.
GOTO TERSLE
; sağa kaydır.
GECIKME
MOVLW
h’FF’
MOVWF SAYAC1
DON1
MOVLW
h’FF’
MOVWF
SAYAC2
GECIKME altprogramı.
DON2
DECFSZ SAYAC2,F
GOTO
DON2
DECFSZ SAYAC1,F
GOTO
DON1
RETURN
END

1.6.13. Mantıksal İşlemler

w

w

w

Mantıksal işlem komutları bir kayıtçıdaki istenilen bitleri değiştirmek (maskelemek
veya kurmak), test etmek amacıyla kullanılırlar. Bu komutlar ANDLW, ANDWF, IORLW,
IORWF, XORLW, XORWF ve COMF komutlarıdır. Detaylı bilgi için mikrodenetleyici
komutları konusunda bu komutları inceleyiniz. Şimdi bu komutları görelim.

1.6.13.1. İstenen Bitleri Sıfırlamak
ANDLW komutu W kayıtçı içerisinde bulunan istenilen
(maskelemek) için kullanılır. Burada sonuç daima W kayıtçısındadır.

bitleri

sıfırlamak

Örneğin W kayıtçısındaki 3. ve 4. bitlerini diğer bitleri değiştirmeden sıfırlamak
(meskelemek) istiyoruz Bunun için kullanacağımız komut satırı;
55

h’E7’ ; olmalıdır.

co
m

ANDLW

Burada sabiti h’E7’ olarak kurduk. Çünkü;
W =b(xxxx xxxx)
AND h’E7’=b’1110 0111’
W=b’xxx0 0xxx’ olur.

ri.

Sonuçta W kayıtçısındaki 3. ve 4. bitlerini diğer bitleri değiştirmeden sıfırlamış
(meskelemek) olduk. Burada dikkat edilmesi gereken , maskelenecek bitler 0, diğer bitler 1
ile AND’lenecek şekilde sayı seçilmelidir (h’E7’).

tla

ANDWF komutu da maskelemek için kullanılabilir. Ancak bu komutta maskeleme
için kullanılan değer sabit bir sayıdan değil, bir dosya kayıtçısından (f) alınır ve sonuç değer
hedef (d) bitine göre W yada F kayıtçısındadır.
verilen hex.asm

rs

1.6.13.2. İstenen Bitleri Bire Çevirmek

no

“Çevrim tablolarının kullanım yerleri ve kullanımı” konusunda
programında da bu komutun kullanımını görebilirsiniz.

IORLW komutu W kayıtçı içerisinde bulunan istenilen bitleri 1 yapmak (kurmak)
için kullanılır. Burada sonuç daima W kayıtçısındadır.

.e
em
de

Örneğin W kayıtçısındaki 3. ve 4. bitlerini diğer bitleri değiştirmeden 1 yapmak
istiyoruz Bunun için kullanacağımız komut satırı;
IORLW

h’18’ ; olmalıdır.

Burada sabiti h’18’ olarak kurduk. Çünkü;
W =b(xxxx xxxx)
OR
h’18’=b’0001 1000’
W=b’xxx1 1xxx’ olur.

w

Sonuçta W kayıtçısındaki 3. ve 4. bitlerini diğer bitleri değiştirmeden sıfırlamış
(meskelemek) olduk. Burada dikkat edilmesi gereken , kurulacak bitler 1, diğer bitler 0 ile
OR’lanacak şekilde sayı seçilmelidir (h’18’).

w

w

IORWF komutu da maskelemek için kullanılabilir. Ancak bu komutta maskeleme için
kullanılan değer sabit bir sayıdan değil, bir dosya kayıtçısından (f) alınır ve sonuç değer
hedef (d) bitine göre W ya da F kayıtçısındadır.

56

1.6.13.3. İstenen Bitleri Terslemek
bitleri

terslemek için

co
m

XORLW komutu W kayıtçı içerisinde bulunan istenilen
kullanılır. Burada sonuç daima W kayıtçısındadır.

Örneğin W kayıtçısındaki değer h’4C’olsun. W’nin 3. ve 4. bitlerini diğer bitleri
değiştirmeden terslemek istiyoruz . Bunun için kullanacağımız komut satırı;
XORLW

h’18’ ; olmalıdır.

tla

ri.

Burada sabiti h’18’ olarak kurduk. Çünkü;
W = b‘0100 1100’
XOR
h’18’=b’0001 1000’
W= b’0101 0100’ olur.

no

Sonuçta W kayıtçısındaki 3. ve 4. bitlerini diğer bitleri değiştirmeden sıfırlamış
(meskelemek) olduk. Burada dikkat edilmesi gereken , terslenecek bitler 1, diğer bitler 0 ile
XOR’lanacak şekilde sayı seçilmelidir (h’18’).

rs

XORWF komutu da maskelemek için kullanılabilir. Ancak bu komutta maskeleme
için kullanılan değer sabit bir sayıdan değil, bir dosya kayıtçısından (f) alınır ve sonuç değer
hedef (d) bitine göre W ya da F kayıtçısındadır.
1.6.13.4. Bir Baytlık İki Veriyi Karşılaştırmak

.e
em
de

W kayıtçısının, bir baytlık sabit bir veriyle aynı olup olmadığını test etmek için
XORLW komutu kullanılabilir.Benzer şekilde W kayıtçısının, bir dosya kayıtçısı içeriği ile
aynı olup olmadığını test etmek için de XORWF komutu kullanılabilir. Eğer veriler eşit ise
STATUS kayıtçısındaki sıfır bayrağı (Z) 1 olur. İşte bu biti test ederek verilerin aynı olup
olmadığını kontrol edebiliriz.
Örneğin B portundaki değerin h’4C’ olup olmadığını test etmek için gereken
program parçasını yazalım. Bunun için kullanacağımız komut satırı;

w

w

w

MOVLW h’4C’
;W= h’4C’
TEST_PORTB
XORWF
PORTB,F ;PORTB=(PORTB XOR W)
BTFSS
STATUS,2 ; STATUS<2>=1 mi? (Z=1 mi?)
GOTO
TEST_PORTB; hayır.Tekrar test et.
DEVAM
;evet. Sonraki komutlar…
MOV …….
…….
…….

XORLW ve XORWF komutlarıyla sadece verilerin eşit olup olmadığı testini
yapabiliriz.
Bu işlem için istenirse SUBLW ve SUBWF komutları da kullanılabilir. Ayrıca bu iki
komutla , büyük / küçük mü? Testleride yapılabilir.
57

1.6.13.5. Bir Baytlık Veriyi Sıfır ile Karşılaştırmak

co
m

W kayıtçısının içeriğindeki 1 baytlık verinin ‘0’ olup olmadığını anlamak için , h’00’
sabit verisiyle OR’lanır. Bu işlem için IORLW komutu kullanılır.
Bir kayıtçının (f) içeriğindeki 1 baytlık verinin ‘0’ olup olmadığını anlamak için , önce
W kayıtçısına h’00’ sabit verisi yüklenir. Sonrada W ile F kayıtçıları OR’lanır. Bu işlem için
ise IORWF komutu kullanılır.

ri.

OR’lama sonucunda sonuç 0 ise STATUS’un 2.biti (Z) 1 , değilse 0 olacaktır. Bu biti
kontrol ederek programı yönlendirebiliriz.

DEVAM

IORLW
BTFSS
GOTO
…….

h’00’
;W=(W OR h’00’)
STATUS,Z ;Sonuç sıfır mı? (Z=1 mi?)
TEST_W ;hayır.Tekrar kontrol et.
;evet.Programın devamı…..

1.6.14. Aritmetik İşlemler

no

TEST_W

tla

Örneğin W kayıtçısının 0 olup olmadığını aşağıdaki gibi test edebiliriz;

.e
em
de

rs

PIC’ler bazı aritmetik işlemlerin yapılmasına da izin verirler. Biz bu modülde 8 ve 16
bitlik sayıların toplanması ve çıkarılmasını görüceğiz. Bunun için ADDLW, ADDWF,
SUBLW, SUBWF komutlarını kullanacağımızdan, “mikrodenetleyici komutları” konusunda
ilgili komutları incelemeniz yerinde olacaktır.
1.6.14.1. 8 Bit Toplama

8 bitlik ( 1 Bayt ) lik iki veri iki şekilde toplanabilir;
¾

W kayıtçısı ile sabit bir sayı toplanır, sonuç W kayıtçısındadır (ADDLW).

¾

W kayıtçısı ile dosya kayıtçısı (f) toplanır, sonuç hedef kayıtçısındadır

(ADDWF).

w

İki sayının toplamından elde edilen sonuç h’FF’den büyükse taşma olacağı için
STATUS kayıtçısındaki elde bayrağı (C) 1 olacaktır. Şimdi her iki toplamaya da örnekler
verelim.

w

w

Örnek: Önce W kayıtçısına h’25’ değerini yükleyip daha sonrada W ile
sabitini toplayan program parçasını yazınız. Elde bayrağının durumunu bulunuz.
MOVLW
ADDLW
C=0’da kalır.

h’25’
h’A3’

h’A3’

;W= h’25’
;W= h’25’+ h’A3’= h’C8’ olur. Taşma olmağından

58

co
m

Örnek: Önce W kayıtçısına h’7A’ değerini, TOPLAM kayıtçısına da h’DD’ yükleyip daha
sonrada W ile TOPLAM kayıtçılarını toplayan ve sonucu TOPLAM kayıtçısına kaydeden
program parçasını yazınız. Elde bayrağının durumunu bulunuz.

ri.

MOVLW
h’DD’
;W= h’DD’
MOVWF
TOPLAM ;TOPLAM= h’DD’
MOVLW
h’7A’
;W= h’7A’
ADDWF
TOPLAM,1 ;TOPLAM= h’DD’+ h’7A’= h’57’
Taşma olduğundan C=1 olur.Sonucun C bitinin dikkate alınmaması durumunda
yanlış olacağına dikkat ediniz.

tla

1.6.14.2. 16 Bit Toplama

Kayıtçılar 1 baytlık oldukları için, 16 bitlik (2 bayt) verilerin toplanması için 2 kayıtçı
kullanmak gerekecektir. 2 baytlık veri 0-65535 onlu sayıları ifade edebilecektir. Bu işlemi
yapmak için;
Toplanacak iki sayının önce alt (LSB) baytları yoplanır.

¾

Eğer alt baytların toplamından elde oluşursa üst baytlardan birine 1 eklenir.

¾

Üst baytlar toplanır.

rs

Bunu bir örnekte görelim;

no

¾

.e
em
de

Örnek: A= h’33A5’ ve B= h’8EDE’ sayılarını toplayan sonucu C adında bir kayıtçıya atan
program parçasını yazalım.
Çözüm: A= 33 A5
B= 8E
DE
AH AL
BH BL
şeklinde sayıları yüklemek için 4 kayıtçı
gerekiyor. Ayrıca sonucun bulunacağı kayıtçı da CH ve CL olarak 2 tane olmalıdır.

w

w

w

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
TOPLA MOVF
ADDWF
MOVWF
BTFSC
INCF
MOVF
ADDWF
MOVWF

h’A5’
AL
h’33’
AH
h’DE’
BL
h’8E’
BH
AL,0
BL,0
CL
STATUS,0
BH,1
AH,0
BH,0
CH

;W= h’A5’
;AL= h’A5’
; W= h’33’
; AH= h’33’
; W= h’DE’
; BL= h’DE’
; W= h’8E’
; BH= h’8E’
;W=AL

sayılar kayıtçılara yükleniyor.

;W=BL+W(AL)
;Sonucun düşük baytı
;C=0 mi?
;Hayır(C=1) BH’ı 1 arttır.
;Evet. W=AH
;W=BH+W(AH)
;Sonucun yüksek baytı.
59

1.6.14.3. 8 Bit Çıkarma

co
m

8 bitlik ( 1 Bayt ) lik iki veri iki şekilde çıkarılabilir;
¾

Sabit bir sayıdan W kayıtçısı çıkarılır, sonuç W kayıtçısındadır (SUBLW).

¾

Dosya kayıtçısı (f) içeriğinden W kayıtçısı çıkarılır , sonuç hedef
kayıtçısındadır (SUBWF).

¾

Çıkarma işlemi yapılırken çıkarılacak sayının tersi alınıp 1 eklenir (2’li

ri.

tümleyeni alınır). Daha sonra her iki sayı da toplanır. PIC bu olayı otomatik

olarak kendi yapar. Bu nedenle küçük sayıdan büyük sayı çıkarılırsa C=0

tla

(sonuç negatif) , büyük sayıdan küçük sayı çıkarılırsa veya sayılar eşit ise C=1
(sonuç pozitif) olur. Yalnız küçük sayıdan büyük sayı çıkarılırsa gerçek sonucu

no

bulmak için , sonucun 2’li tümleyeni alınmalıdır. Bu programcının
sorumluluğundadır. Şimdi her iki çıkarmaya da örnekler verelim;

h’25’
h’A3’

;W= h’25’
;W= h’A3’-h’25’ = h’7E’ olur.

.e
em
de

MOVLW
SUBLW

rs

Örnek: Önce W kayıtçısına h’25’ değerini yükleyip daha sonrada h’A3’sabitinden W’yi
çıkaran program parçasını yazınız. Elde bayrağının durumunu bulunuz.

h’A3’= b’1010 0011’
1010 0011
SUB h’25’= b’0010 0101’>>>2’li tümleyeni>> 1101 1011
1 0111 1110
W = h’7E’ ve C=1 Sonuç pozitif olur.

Örnek: Önce W kayıtçısına h’40’ değerini, FARK kayıtçısına da h’25’ yükleyip daha
sonrada FARK kayıtçısından W’yi çıkaran ve sonucu FARK kayıtçısına yazan program
parçasını yazınız. Elde bayrağının durumunu bulunuz.
h’40’
FARK
h’35’
FARK,1

;W= h’40’
;FARK= h’40’
;W= h’35’
;FARK= h’40’- h’35’= h’F5’ ;Yukarıdaki örnekteki
;gibi PIC 2’li tümleyen ile
;h’F0’sonucunu
buldu.
;(C=0 sonuç negatif).

w

w

w

MOVLW
MOVWF
MOVLW
SUBWF

60

1.6.14.4. 16 Bit Çıkarma

co
m

Kayıtçılar 1 baytlık oldukları için, 16 bitlik (2 bayt) verilerin çıkarılması için 2 kayıtçı
kullanmak gerekecektir. 2 baytlık veri 0-65535 onlu sayıları ifade edebilecektir. Bu işlemi
yapmak için;
¾

Çıkarılacak iki sayının önce alt (LSB) baytları birbirinden çıkarılır.

¾

Eğer alt baytların çıkarılmasından borç varsa (C=0) , üst baytlardan birisinden 1
çıkarılır.
Üst baytlar birbirinden çıkarılır.

ri.

¾

B= 8E

DE

no

Çözüm: A= 33 A5

tla

Bunu bir örnekte görelim;
Örnek: A= h’33A5’ ve B= h’8EDE’ sayılarını çıkaran (B-A) sonucu C adında bir kayıtçıya
atan program parçasını yazalım.

AH AL
BH BL
şeklinde sayıları yüklemek için 4 kayıtçı gerekiyor.
Ayrıca Sonucun bulunacağı kayıtçı da CH ve CL olarak 2 tane olmalıdır.
;W= h’A5’
;AL= h’A5’
; W= h’33’
; AH= h’33’
sayılar kayıtçılara yükleniyor.
; W= h’DE’
; BL= h’DE’
; W= h’8E’
; BH= h’8E’
;W=AL
;W=BL-W(AL)
;Sonucun düşük baytı
;C=1 mi?
;Hayır (C=0) BH’ı 1 Azalt.
;Evet. W=AH
;W=BH-W(AH)
;Sonucun yüksek baytı.

rs

h’A5’
AL
h’33’
AH
h’DE’
BL
h’8E’
BH
AL,0
BL,0
CL
STATUS,0
BH,1
AH,0
BH,0
CH

w

.e
em
de

MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
MOVLW
MOVWF
CIKAR MOVF
SUBWF
MOVWF
BTFSS
DECF
MOVF
SUBWF
MOVWF

w

w

1.6.15. Çevrim Tabloları
1.6.15.1. Çevrim Tabloları

Çevrim tabloları sıralı değer alma işlemleri gereken yerlerde kullanılır. Bu şekilde bir
kodu başka bir koda çevirebiliriz. Örneğin B portuna bağladığımız 7 segment display
üzarinde hexadesimal karakterleri görmek istiyoruz. Çevrim tablosunda hexadesimal koda
karşılık gelen uygun kodu B portuna göndermemiz gerekir. Ya da bir adım motorunu belirli
bir şekilde döndürmek için porta bağlanmış step motoruna sıralı ikili değerleri göndermemiz
gerekir. Bu tip durumlarda çevrim tablolarından faydalanılır.
61

1.6.15.2. Çevrim Tablolarının Kullanım Yerleri ve Kullanımı

rs

no

tla

ri.

co
m

Çevrim tablolarının kullanımı için PC’ın (program counter) yapısının iyice
anlaşılmasında fayda olacaktır. Program sayacı (PC), 13 bit genişliğindedir. Düşük byte PCL
registeri , okunabilir ve yazılabilir bir kayıtçı olup belleğin h'02’ adresinde yer alır. PC’nin
yüksek byte’ı , PCLATH registerinden gelir ve direkt olarak okunamaz ya da yazılamaz.
PCLATH (PC latch high) registeri PC<12:8> için bir tutma registeridir ve PIC’e gerilim
uygulandığında (power on reset) tüm bitleri ‘0’dır. PC yeni bir değerle yüklendiği zaman
PCLATH’ın içeriği program sayacının üstteki byte’ına transfer edilir. Bu olay PCL’ye
yazılımda, CALL veya GOTO esnasında olur. PC’nin yüksek bitleri PCLATH’dan
yüklenmiştir. Bu olaylar şekil 1.17 ve şekil 1.18’de gösterilmiştir.

.e
em
de

Şekil 1.17: Hedefi PCL kayıtçısı olan komutların PC’yi yüklemesi

Şekil 1.18: GOTO ve CALL komutlarının PC’yi yüklemesi

w

w

w

GOTO ve CALL komutlarıyla kullanılan 11 bitlik adreslemeler 2KB’lık program
belleği bulunan PIC’lerde (16FCxxx ve16Fxx) herhangi bir adrese erişim için yeterlidir
(211=2KB). 1KB belleği olanlarda (16F84) ise 10 bit yeterlidir (210=1KB).

Çevrim tablolarının kullanımı için ayrıca RETLW komutunun da iyice anlaşılması
gerekir. Bu komut RETURN komutu gibi anaprograma dönüşü sağlar. Tek fark dönüş
esnasında W kayıtçısına bir sabit sayı yükler.
Şimdi de bir örnek ile çevrim tablolarının nasıl kullanıldığını görelim;

Örnek: B portunun uçlarına bağlı 7 sagment display in 0-F arasında saydıran programı
yazınız.
62

rs

no

tla

ri.

co
m

Çözüm: Öncelikle Hexadesimal koddan 7 sagment display koduna dönüşüm tablosunu
çıkarmalıyız;
Hexadesimal sayı
7 segmentte görülecek
7 segment
7 segment kodu
Sayı
uçlarındaki veri
00
0
00111111
3F
01
1
00000110
06
02
2
01011011
5B
03
3
01001111
4F
04
4
01100110
66
05
5
01101101
6D
06
6
01111101
7D
07
7
00000111
07
08
8
01111111
7F
09
9
01101111
6F
0A
A
01110111
77
0B
B
01111100
7C
0C
C
00111001
39
0D
D
01011110
5E
0E
E
01111001
79
0F
F
01110001
71
Nokta
.
10000000
80

.e
em
de

Şimdi de programı yazalım. Programın “tablodan değer alma ve gecikme
altprogramına dallan” bölümünde şu olaylar gerçekleşir;
AND komut satırındaki ifade ile W’nin üst 4 biti maskelendi. Dolayısıyla SAYAC
değeri h’F’=15 değerini geçemez [0-15] arası sayar. Ve her sayıda tablodan bir değer alıp , B
portuna bağlı 7 segment display’de göstererek GECİKME altprogramına dallanır.

w

;====hex.asm======
LIST
P=16F84
INCLUDE “P16F84.INC”
SAYAC1 EQU
h’0C’
SAYAC2 EQU
h’0D’
SAYAC
EQU
h’0E’
CLRF PORTB
BSF STATUS,5
CLRF TRISB
BCF
STATUS,5
MOVLW
h’00’
MOVWF SAYAC

B portu çıkış olarak
ayarlandı.

w

w

tanımlamaların yapıldığı
bölüm

SAYAC sıfırlandı.

63

TEKRAR

co
m

no

tla

;PCL= W(SAYAC)
;0
;1
;2
;3
;4
;5
;6
;7
hexadesimalden 7 segment
;8
display’e dönüşüm tablosu.
;9
;A
;B
;C
;D
;E
;F

h’FF’
SAYAC1

h’FF’
SAYAC2
SAYAC2,F
DON2
SAYAC1,F
DON1

w

w

w

.e
em
de

HEX_7SEGMENT
ADDWF PCL,F
RETLW h’3F’
RETLW h’06’
RETLW h’5B’
RETLW h’4F’
RETLW h’66’
RETLW h’6D’
RETLW h’7D’
RETLW h’07’
RETLW h’7F’
RETLW h’6F’
RETLW h’77’
RETLW h’7C’
RETLW h’39’
RETLW h’5E’
RETLW h’79’
RETLW h’71’
GECIKME
MOVLW
MOVWF
DON1
MOVLW
MOVWF
DON2
DECFSZ
GOTO
DECFSZ
GOTO
RETURN
END

tablodan değer al ve
gecikme altprogramına
dallan.

ri.

SAYAC,W
b’00001111’
HEX_7SEGMENT
PORTB
SAYAC,F
GECIKME
TEKRAR

rs

MOVF
ANDLW
CALL
MOVWF
INCF
CALL
GOTO

64

GECİKME altprogramı.

1.6.16. Kesmeler

co
m

Mikrodenetleyicilerle yeni çalışmaya başlayanlar kesme (interrupt) kelimesini
duymalarına rağmen, kullanımlarının zor olduğu düşüncesiyle programları içersinde
kullanmaktan çekinirler. Oysa öğrenilmesi ve uygulaması pek de zor olmayan kesme
altprogramları kullanarak , program içerisinde kullanılacak komut sayısı azaltılabilir ve bir
çok mantıksal karışıklıklar önlenebilir.

ri.

1.6.16.1. Kesme Nedir?

no

tla

Kesme işlemini günlük hayattan bir örnek vererek açıklayalım; mesela yemek
yiyorsunuz ve telefon çaldı.Ne yaparsınız? Yemek yemeyi bir süre için bırakır, telefona
bakar sonra dönüp yemek yemeye devam edersiniz . İşte günlük hayatta karşılaştığınız bir
kesme. Asıl işiniz yemek yeme olayı iken, ihtiyaçtan (telefon çalması) dolayı asıl işinizi
bırakıp, diğer bir işi yaptınız (telefona bakma) ve geri dönüp asıl işinizde kaldığınız yerden
devam ettiniz.

.e
em
de

rs

Mikrodenetleyicilerdeki kesme olayı yukarıdaki örneğe oldukça benzerdir. Kesme,
mikrodenetleyicilerin herhangi bir kesme kaynağından gelen sinyal nedeniyle çalışmakta
olan programı bırakması ve önceden hazırlanan kesme altprogramını çalıştırması olayıdır.
Altprogramın çalışması bittikten sonra ana program kaldığı yerden itibaren tekrar
çalışmasına devam eder. Şekil 1.19’u inceleyiniz.

w

w

w

Ana program

PC=>TOS(Yığın) ve
Kesme vektörü (h’004’)=>PC gerçekleşir.

Kesme_altprogramı

Altprogram
TOS(Yığın) =>PC yapılarak
Ana programa dönülür.
RETFIE
Şekil 1.19: Kesme altprogram kurgusu

65

1.6.16.2. INTCON Kayıtçısı (Kaydedicisi)

co
m

INTCON registerı, bütün kesme kaynakları için olan çeşitli yetkilendirici bitleri
içeren, okunabilir ve de yazılabilir türde bir registerdır.
Aşağıda PIC16F8X mikrodenetleyicisi için INTCON kayıtçısının her bir bitinin hangi
durumlarda 1 ve 0 olacağı gösterilmiştir;

TOIE:TMR0 sayıcı taşma (Overflow) kesmesi yetki biti.
1=TMR0 kesmesini yetkilendirir.
0=TMR0 kesmesine yetkiyi kaldırır.

w

w

w

.e
em
de

bit 5:

rs

no

tla

ri.

R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0
R/W-0 R/Wx
GIE
EEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF
bit7
bit0
R = Okunabilir bit.
W = Yazılabilir bit.
-n = Güç reseti (POR reset) durumundaki bit değeri.
bit 7:
GIE:Global Kesme biti yetkisi.
1=Tüm kesmelere yetki verir.
0=Tüm kesmeleri yetkisizleştir.
bit 6:
EEIE:EEPROM belleğe yazma işlemi tamamlama kesim yetki biti.
1= EEPROM yazma tamamlama kesmesine yetki verir.
0= EEPROM yazma tamamlama kesmesine yetkiyi kaldırır .

bit 4:

INTE: RB0/INT hâricî kesmesi yetki biti.
1=RB0/INT kesmesine yetki verir.
0=RB0/INT kesmesine yetkiyi kaldırır.

bit 3:

RBIE: Port B (4,5,6ve 7. bitleri) değişiklik kesmesi yetki biti.
1= Port B değişiklik kesmesine yetki verir. Yani B portundaki
değişiklikler
kesme oluşturur.
0= Port B değişiklik kesmesine yetkiyi kaldırır.

bit 2:

T0IF: TMR0 sayıcısı taşması durum bayrağı.
1=TMR0 taşmıştır (yazılımın içinden silinmesi gerekiyor).
0=TMR0 taşmamıştır. Zaman aşımı yok.
INTF: RB0/INT hâricî kesme durum bayrağı.
1=RB0/INT kesmesi meydana gelmiştir.
0=RB0/INT kesmesi meydana gelmemiştir.
RBIF: Port B değişiklik bayrağı.
1=RB7:RB4 pinlerinden en az bir tanesinin durumu değişti
(yazılım içinden silinmesi gerekiyor).
0=RB7:RB4 pinlerinden hiç bir tanesinde durum değişikliği
yoktur.

bit 1:
bit 0:

66

1.6.16.3. Kesme Kaynakları

¾

Hâricî (External) kesme: PIC16F84’ün RB0/INT ucundan gelen sinyal ile
oluşur.

¾

co
m

Kesme kaynakları mikrokontrolür ailesine bağlı olarak farklılık gösterir. Aşağıda PIC
16F8X ailesi için olabilecek kesme kaynakları sıralanmıştır.

Hâricî

kesmelerin

kullanabilmesi

için

2 şey

gereklidir; yazılım ve

ri.

donanım.Yazılım aracılığı ile B portunun RB0 ucu, dışarıdan gelebilecek
kesmeyi alabilecek şekilde hazırlanmalıdır. Bunun için iki işlem yapılır;

RB0 ucu giriş olarak yönlendirilmeli.
INTCON kayıtçısı içerisindeki ilgili bayrak (INTE bayrağı) kullanılarak
hâricî kesme işlemi için yetkilendirilmeli.

tla


no

Hâricî kesmenin kullanılması için bir de donanım gereksinimi vardır. Bu da RB0
ucundan kesme sinyalini verecek elektronik devredir.

rs

Ayrıca RB0 ucundan uygulanacak sinyalin kenar tetiklemesi önemlidir. OPTION
kayıtçısının 6.biti kesmeyi yapacak sinyalin kenar tetiklemesini belirler. Eğer bu bit 0 ise
kesme sinyalin düşen kenarında , 1 ise yükselen kenarında gerçekleşir.

.e
em
de

Kesme altprogramın çalışması esnasında gelebilecek yeni kesmeleri engellemek için
INTCON kayıtçısındaki INTE biti 0 yapılarak hâricî kesme yetkisi kaldırılmalıdır. Bununla
beraber bir hâricî kesme olursa INTCON kayıtçısı içindeki INTF 1 olur.Bu bayrak kesme
altprogramı içerisinde tekrar 0 yapılmalıdır. Aksi durumda tekrarlanan kesmelerle
karşılaşılır.
¾

TMR0 sayıcısında oluşan zaman aşımı kesmesi; yani TMR0 sayıcısının h’ff’
den h’00’a gelmesi olayında oluşur. Bu konu ileride TMR0 sayıcısı konusunda

işlenecektir.

B Portunun 4,5,6 veya 7. bitlerindeki lojik seviye değişikliği;

¾

B portunun 4,5,6 ve 7.bitlerindeki lojik değişim INTCON kayıtçısının RBIF

w

w

w

¾

¾

bayrağını 1 yapacaktır. Bu kesme INTCON kayıtçısının RBIE biti ile aktif ya da

pasif yapılabilir.
B portundaki değişikliği algılamak için bu portaki en son değer, RB4-RB7
uçlarından okunan veri ile karşılaştırılır. Eski ve yeni okunan veri OR’lanır.
Farklılık varsa RBIF bayrağı 1 olur.

B Portu kesmesi aşağıdaki gibi silinebilir;

RBIE biti silinmek suretiyle,
B Portunu okuduktan sonra RBIF bitini silmek suretiyle.
67

¾

EEPROM belleğe yazma işleminin tamamlanması; EEPROM veri yazma

co
m

zamanı yaklaşık 10 ms kadardır. Yazma işlemi bittiğinde EEIF bayrağı 1 olur
ve yazmanın bittiğini gösterir. EEIF bayrağı EECON1 kayıtçısında bulunur.

no

tla

ri.

Yukarıda anlatılan kesme kaynakları mantığı şekil 1.20’de verilmiştir.

rs

Şekil 1.20: PIC16F84’ün kesme kaynakları ve bayrakları

1.6.16.4. Kesme Altprogramlarının Düzenlenmesi

.e
em
de

Bir kesme olayının meydana gelmesi esnasında INTCON kayıtçısının GIE biti 0 olur.
Bu işlem kesme alt programının çalışması esnasında yeni bir kesmenin olmaması için PIC
tarafından otomatik olarak yapılır. Kesme altprogramı çalışmasını RETFIE komutu ile sona
erdirip ana programa dönüldüğü anda ise sonraki kesmelerin geçerli olabilmesi için tekrar
otomatik olarak 1 yapılır. Kesme işleminde meydana gelen olayları şekil 1.21’den
inceleyiniz.
Bir kesme meydana geldiğinde kesme vektörü (interrupt vector) denilen adres
gösterici PC’ye program belleğinin h’0004’ adresini gösterir. Kesme altprogramın ilk
komutu ( genellikle GOTO ) buraya yazılmalıdır.

w

w

w

Kesme kullanılmadığı zaman ana program, program belleğinin h’0000’ adresinden
itibaren h’0004’ adresine doğru problem çıkarmadan çalışır. Eğer kesme kullanılıyorsa
programcı tarafından başka bir çalışma sırası düzenlenmelidir. Bu düzen aşağıdaki gibi
olabilir.
ORG
GOTO
ORG
GOTO

h’000’
BASLA
h’004’
KESME

;Reset vektör adresi.
;Ana program başlangıcı.
;Kesme vektör adresi

68

;Ana program komutları
.
.
.

Ana program
buraya
yazılmalıdır.

KESME

co
m

BASLA

ri.

;kesme altprogram komutları
Kesme alt programı
.
buraya yazılmalıdır.
.
RETFIE
;Ana programa dön.

tla

1

INTCON

GIE

no

kesme

GIE
0

.e
em
de

rs

INTCON

PC= TOS
PC (program sayıcı) değeri yığına itilir.

h’004’= PC
PC reset vektörüne dallanır. Burada GOTO
komutu kesme alt programına dallanılır.

w

Kesme altprogramı çalıştırılır.

w

w

İlgili kesme bayrağı kontrol edilir.

RETFIE komutu ile ana programa geçilir.

INTCON

1

GIE

Şekil 1.21: Kesme işleminde oluşan olaylar

69

co
m

Bir kesme esnasında sadece geri dönme PC değeri yığında saklanır. Çoğunlukla ,
kullanıcılar bir kesme esnasında anahtar register değerlerini saklamak isterler (Örneğin W
registeri ve STATUS registeri). Bu, yazılımda yerine getirilir.
Örnek 1’de STATUS ve W registerlerinin değerleri saklanmış ve tekrar depolanmıştır.
Kullanıcı tanımlı registerler W_TEMP ve STATUS_TEMP , W ve STATUS register değerleri için geçici depolama yerleridir.
Örnek 1’de aşağıdakiler yapılmaktadır:
W registerini bir değişkene (W =W_TEMP) yükle.

¾

STATUS registerini bir değişkene (STATUS=STATUS_TEMP) yükle

¾

Kesme altprogramını çalıştır .

¾

STATUS registerini geri yükle (STATUS_TEMP= STATUS).

¾

W registerini geri yükle (W_TEMP=W).

¾

Kesme altprogramından geri dön (RETFIE).

¾

Şimdi bu işlemleri yapacak örneğimizi yazalım.

rs

no

tla

ri.

¾

.e
em
de

Örnek1: Kesme esnasında W ve STATUS kayıtçı değerlerini saklamak.
MOVWF W_TEMP
; W , TEMP registerine kopyalanır
SWAPF STATUS , W ; STATUS içeriğini SWAP’la ve W’ye yükle.
MOVWF STATUS _TEMP
; STATUS içeriğini STATUS_TEMP
;registerine yükle.
;
; Kesme altprogramı
; buraya yazılımalı.

w

w

w

SWAPF STATUS_TEMP , W

; STATUS_TEMP içeriğini yeniden
;SWAP’la ve W’ye yükle.

MOVWF

STATUS

; W’yi STATUS Registerine yükle.

SWAPF

W_TEMP , F

; W_TEMP içeriğini SWAP’la sonucu
;W_TEMP’e

SWAPF W_TEMP , W

tekrar yükle.

; W_TEMP içeriğini SWAP’la sonucu
;W’ye tekrar

;yükle.

Yukarıdaki işlem için neden MOVF komutunu kullanmadığımız aklınıza gelmiş
olabilir. Kullanamayız, çünkü MOVF komutu, STATUS kayıtçısındaki Z bayrağını
değiştireceğinden, programda bu bayrağın kontrolü ile yapılan işlemlerde hatalara neden
olacaktır.

70

Çözüm: Problemdeki verilere göre aşağıdaki algoritmayı çizebiliriz;
Başla

tla

PORTA’deki ledleri
söndür.

RETFIE

no

PIC16F84’ü tanıt.
PORTA çıkış
PORTB giriş

ri.

KESME

co
m

Örnek2: PIC16F84’e enerji verildiğinde A portundaki tüm ledler sönük iken B portunun
0.bitine bağlı (RB1) bir butuna basıldığında A potuna bağlı ledler yansın. Daha hâricî kesme
ile (RB0/INT) ledler tekrar söndürülsün. Kesme, kesme sinyalinin düşen kenarında
gerçekleşsin.

OPTION kayıtçısını kur.

.e
em
de

rs

INTCON kayıtçısını kur.

PORTA’yı sıfırla.

w

w

w

PORTB<1>=1
mi?

PORTA’deki 4 ledi yak.

son
Şekil 1.22: Örnek 2’deki programın algoritması

71

Tekrar test et.

;====kesme.asm======
LIST
INCLUDE
ORG h’000’
GOTO BASLA
ORG h’004’
GOTO KESME

P=16F84
“P16F84.INC”

ri.

A portu çıkış, B portu giriş olarak
ayarlandı.

tla

BSF
STATUS,5
CLRF TRISA
MOVLW
h’FF’
MOVWF
TRISB
MOVLW
b’10111111’
MOVWF
OPTION_REG
BCF
STATUS,5
CLRF
PORTA
BCF
INTCON,1
BSF
INTCON,7
BSF
INTCON,4

tanımlamaların yapıldığı
bölüm

;düşen kenarda kesme palsı ,
;gelecek şekilde OPTION_REG’i kur.
;Bank0’a geç.
;A portunu sıfırla.
;INF bayrağını sil.
;Global kesmeyi etkinleştir.
;Hâricî kesmeyi aktifleştir.

.e
em
de

rs

no

BASLA

co
m

Şimdi de asm programımızı yazlım;

TEST_PORTB

BTFSS
GOTO
MOVLW
MOVWF
GOTO
END

PORTB,0 ;PORTA<0>=1 mi?
TEST_PORTA
;hayır.Tekrar test et.
h’FF’
;evet. W=h’ff’ yükle.
PORTA
;A portundaki tüm ledleri yak.
TEST_PORTB

KESME

w

BCF

INTCON,1
MOVLW h’00’
MOVWF PORTA

RETFIE

END

1.6.17. Donanım Sayıcıları

w

w

;INTF bayrağını sil.
;W=h’00’ yükle.
;A portundaki tüm ledleri söndür.

Zaman geciktirme döngüleri konusunda, port çıkışlarına göndereceğimiz sinyaller
arasında bir gecikme olmasını istediğimiz zaman bunu yazılım (software) ile nasıl
yapacağımızı gördük. Burada ise aynı işlemi donanım zamanlayıcısını (hardware) kullanarak
nasıl yapacağımızı göreceğiz. Bunun için donanım zamanlayıcısını (TMR0) kullanacağız. Bu
zamanlayıcı / sayıcıların sayısı kullanılan mikrokontrolöre göre değişmekle beraber, biz
genel olan TMR0’ın kullanımını göreceğiz.
72

1.6.17.1. Donanım Sayıcısı ( zamanlayıcısı ) Nedir?

co
m

Peki donanım zamanlayıcısı ya da sayıcısı nedir? Belli bir değerden (genelde h’00’)
başlayıp değeri yukarı doğru artan bir dosya kayıtçısıdır. PIC’ler iki tip zamanlayıcıya
sahiptir; ilki TMR0 adı verilen 8 bitlik bir sayıcıdır. Bu RAM belleğin h’01’ adresinde
bulunan özel bir kayıtçıdır. Diğeri de WDT (Watchdog timer) denilen bir zamanlayıcıdır.
WDT zamanlayıcısı ileriki konularda işlenecektir.
1.6.17.2. TMR0 Sayıcısı ( zamanlayıcısı )

ri.

TMR0 sayıcısı RAM belleğin h’01’ adresinde bulunan özel bir kayıtçıdır. TMR0
programlanabilen bir sayıcıdır. Yani saymaya istenilen bir sayıdan başlatılabilir ve herhangi
bir anda içeriği silinebilir. Timer0 (TMR0) zamanlama/sayıcısı aşağıdaki özelliklere sahiptir:
8 bit’lik zamanlama/sayıcı,

¾

Okunabilirlik ve yazılabilirlik,

¾

Programlanabilen frekans bölme değeri özelliği(prescaler),

¾

Dâhilî ve hâricî saat palsı seçimi,

¾

FFh’dan 00h’a düşerken taşma üzerinden kesme oluşturma,

¾

Hâricî saat için düşen veya yükselen kenar seçimine (edge select) sahiptir.

rs

no

tla

¾

.e
em
de

TMR0 sayıcısının önemli özelliklerinden biri de ana program veya kesme
altprogramları çalışırken sayma işlemini durdurmamasıdır. Sayma işleminde FFh’dan 00h’a
geçişte oluşan taşma INTCON kayıtçısının TOIF bayrağında görülür ve bu bayrak 1 olur
(INTCON kayıtçısı konusuna bakabilirsiniz). İstenirse bu bayrak test edilerek bir kesme
altprogramı çalıştırılabilir. Şimdi de TMR0 ve WDT zamanlayıcıların kontrolünde kullanılan
OPTION kayıtçısını görelim.
1.6.17.3. Option Kayıtçısı

OPTION registeri, TMR0/WDT için frekans bölme için gerekli bitleri bulunduran,
hâricî kesme sinyal tipini belirleyen, PORTB üzerindeki zayıf Pull-up dirençlerini ayarlayan
çeşitli kontrol bitlerini içeren, TMR0 veya WDT’yi seçme bayrağı bulunduran, yazılabilen
ve de okunabilen tipte bir registerdir.
R/W-1
INTEDG

R/W-1 R/W-1
T0CS
T0SE

R/W-1
PSA

R/W-1
PS2

bit7

R/W-1 R/W-1
PS1
PS0
bit0

Şekil 1.23: Option kayıtçısı içeriği

w

w

w

R/W-1
RBPU

73

bit 6:

RBPU:PORTB Pull-up dirençleri yetki biti.
1=PORTB Pull-up’lar pasif durumundadırlar (yetki vermeme).
0=PORTB Pull-up’lar aktif durumundadırlar (yetki verme).
Pull-Up dirençleri aktif yapıldığında B portu pinleri 50KΩ luk
dirençlerle +Vcc’ye bağlanır.
INTEDG:Hâricî kesme sinyali kenar seçim biti.
1=RB0/INT pini sinyalin yükselen kenarında kesme yapar.
0= RB0/INT pini sinyalin düşen kenarında kesme yapar.

co
m

it 7:

TOCS:TMR0 sinyal kaynağı seçim biti.
1=RA4/T0CKI pini üzerinden hâricî sinyal.
0=Dâhilî komut palsleri (CLKOUT).

bit 4:

T0SE: TMR0 sinyal kaynağı kenar seçim biti.
1=RA4/T0CKI pini üzerindeki sinyalin yükselen kenarında.
0=RA4/T0CKI pini üzerindeki sinyalin düşen kenarında.

bit 3:

PSA: Frekans bölücü seçim biti.
1= Frekans bölücü sayısı ,WDT’a tayin edilir.
0= Frekans bölücü sayısı ,TMR0’a tayin edilir.
PS2:PS0:Ön-ölçücü oran seçim bitleri

tla

no

rs

bit 2-0:

ri.

bit 5:

.e
em
de

Bit 2-0 Değeri
TMR0 Oranı
WDT Oranı
000
1:2
1:1
001
1:4
1:2
010
1:8
011
1 : 16
1:8
100
1 : 32
1 : 16
101
1 : 64
1 : 32
110
1 : 128
1 : 64
111
1 : 256
1.6.17.4. TMR0 Sayıcısının Özellikleri

1:4

1 : 128

w

w

w

TMR0’ın çalışması ve özelliklerini anlamak için şekil 1.24’deki blok şemayı
incelemeniz faydalı olacaktır.

Şekil 1.24:TMR0 yapısı

74

¾

Sayıcı içindeki sayının artması için gerekli saat palsı iki kaynaktan alınabilir:

co
m

¾

Dâhilî komut sinyali (T0CS=0 durumu)
Hâricî saat palsi (T0CS=1 durumu). Bu durumda hâricî sinyal A portunun
3.bitinden (RA4) uygulanır. Hâricî sinyal PIC tarafından sayılması gereken
bir sinyal de olabilir.
Sinyal kaynağından gelen sinyal direkt olarak TMR0’ı besleyebileceği gibi

frekans bölücü aracılığı ile de besleyebilir.

OPTION kayıtçısının 0,1 ve 2.bitleri kullanarak 8 farklı frekans bölme değeri

ri.

¾

seçilebilir. TMR0 sayıcısını tetikleyecek sinyal, frekans bölücü kullanılmadan

tla

direkt olarak kullanılmak isteniyorsa , frekans bölme değeri WD’ye atanır. Bu
işlem PSA biti ile gerçekleştirilebilir. Ayrıca frekans bölme oranlarının TMR0
ve WDT için farklı olduğuna dikkat ediniz.

Frekans bölme değerleri TMR0’a atandığında ,TMR0’a yazmak için kullanılan

no

¾

tüm komutlar frekans bölme değerini siler (CLRF , MOVWF, BSF….gibi).
Frekans bölme değeri kullanılmadan, direkt olarak hâricî sinyal kullanılırsa,

rs

¾

dâhilî komut sinyali ile eşleşmeyi (senkron) sağlamak için 2 saykıllık bir

.e
em
de

gecikme sağlanır.
¾

TMR0 sayıcısında çıkış sinyalleri iki şekilde oluşur:


¾

RAM belleğin h’01’ adresindeki TMR0 kayıtçısının okunmasıyla,
Sayıcının h’ff’den h’00’a geçişinde oluşan taşmadan dolayı INTCON
kayıtçısının T0IF bayrağına 1 yazılması durumunda.
Kaynak olarak hâricî sinyal seçildiğinde istenirse bu sinyaller sayılabilir. Bu
durumda TMR0 sinyal sayıcı olarak kullanılmış olur. Bu uygulama devir sayıcı,
ürün saydırma gibi işlemler için kullanılabilir.

¾

Frekans bölme değerleri, TMR0 veya WDT sayıcılarının kaç dâhilî komut

w

saykılında bir defa bir üst sayıya geçişini belirleyen orandır. Örneğin,

TMR0 oranı ½ ise , 2 komut saykılında bir defa üst sayıya geçiş olur.

w

w

TMR0 oranı 1/8 ise , 8 komut saykılında bir defa üst sayıya geçiş olur.

TMR0 oranı 1/256 ise , 256 komut saykılında bir defa üst sayıya geçiş olur.

Bilindiği gibi program belleğine yerleştirilen komutların çalışması için PIC’e hâricî bir
osilatörden saat palsı (fosc)uygulamak gerekir. Bu frekeans PIC tarafından 4’e bölünerek
OSC2 ucundan dışarı verilir. İşte bu sinyalin 1 saykılı için geçen süre (peryodu), bir
komutun çalışması için geçen zamandır. Bu durumda ;

75

Tkomut = 1 / Fkomut
TMR0 sayma aralığı zamanı= Tkomut x ( TMR0 oranı)-1

co
m

Fkomut= fosc / 4

Kesme olayı sayının h’ff’den h’00’a geçişinde oluştuğuna göre ve h’ff’=256
olduğundan ;

ri.

Kesme gecikmesi = TMR0 sayma aralığı zamanı x 256 olur.

tla

Bütun bu formülleri tek formülde birleştirirsek;

no

(256-TMR0 ilk değeri) x ( TMR0 oranı)-1
Kesme gecikmesi =
µS olur.
fosc / 4
Prescaler: Frekans bölme sayısı (2,4,8,…,256)

rs

TMR0 ilk değeri: TMR0’a atanan ilk sayı. Eğer değer atanmamışsa ‘0’dır .

.e
em
de

Bu formülden, istenirse belli bir kesme süresi için, TMR0’a yüklenecek sayı formülü
de çıkarılabilir. Bu durumda;
TMR0 ilk değeri = 256- [(Kesme gecikmesi x fosc ) / 4 x ( TMR0 oranı)-1 ]
olur.

Örnek 1: 4MHz’lik kristal osilatör kullanan bir PIC’de, frekans bölme değeri (prescaler)
b’000’ seçilirse, kesmenin ne zaman olacağını bulalım.
Frekans bölme değeri (prescaler) b’000’ olduğundan TMR0 oranı ½ olur.

w

w

w

Fkomut= fosc / 4 = 4Mhz / 4 = 1 Mhz
Tkomut = 1 / Fkomut = 1 / 1 Mhz = 1µS
TMR0 sayma aralığı zamanı= 1µS x ( TMR0 oranı)-1

TMR0 sayma aralığı zamanı= 1µS x ( 1 / 2 )-1 = 2 µS ; yani her 2 µS’de bir sayı
yukarı doğru artıyor. Kesme olayı sayının h’ff’den h’00’a geçişinde oluştuğuna göre ve
h’ff’=256 olduğundan ;
Kesme gecikmesi = TMR0 sayma aralığı zamanı x 256
76

Kesme gecikmesi = 2 µS x 256

= 512 µS’lik periyotlarla kesme olayı

Veya;

co
m

oluşur.
(256-TMR0 ilk değeri) x ( TMR0 oranı)-1

Kesme gecikmesi =
fosc / 4
(256-0) x 2

= 512 µS olur.

ri.

Kesme gecikmesi =

4 Mhz / 4

tla

Örnek 2: 4MHz’lik kristal osilatör kullanan bir PIC’de, frekans bölme değeri (prescaler)
b’110’ ise 1.28 ms’lik gecikme için TMR0’a hangi sayının atanması gerekir?

no

1.28 ms =1280 µS yapar ve (prescaler) b’110’ için TMR0 oranı =1 /128’dir.
TMR0 ilk değeri = 256- [(Kesme gecikmesi x fosc ) / 4 x ( TMR0 oranı)-1 ]
TMR0 ilk değeri = 256- [(1280 x 4Mhz ) / 4 x 128 ]
TMR0 ilk değeri = 246 desimal değeri bulunur.

rs

Bunu hexadecimal formata dönüştürürsek h’F6’ olur.

.e
em
de

TMR0 ‘0’dan değil de örneğimizdeki gibi başka bir sayıdan başlatılmak isteniyorsa ,
yapılması gereken TMR0’a MOVWF komutu ile o sayının yüklenmesidir.
¾

Prescalar değerini, TMR0’ dan WDT’ a veya WDT’dan TMR0’ a atama

işlemi yapılırken, prescaların sıfırlanması nedeniyle PIC’in çalışması esnasında
istenmeyen

resetleri engellemek için aşağıdaki komut sırası takip edilerek

prescalar tayininin Timer0’dan WDT’ye değiştirilmesi sağlanmalıdır. Bu sıra ,

WDT mümkün kılınmadığı durumlara da takip edilmelidir. Prescaları WDT’den

Timer0’a değiştirmek için de verilen sıra takip edilmelidir.

w

w

w

TMR0’ dan WDT’ a Prescalar değeri atamak (TMR0→WDT) için aşağıdaki
sıra takip edilmelidir.

BCF
CLRF
BSF
CLRWDT
MOVLW
MOVWF
BCF

STATUS RP0
TMR0
STATUS, RP0
b’xxxx1xxx’
OPTION
STATUS, RP0

; Bank 0’a geç.
; TMR0 ve prescaler silinir.
; Bank 1’e geç.
; WDT silinir.
; Yeni prescaler WDT için seçilir.
; OPTION kayıtçısına yaz.
; Bank 0’a geç.

77

co
m

WDT’dan TMR0’a prescalar değeri atamak (WDT→TMR0) için aşağıdaki
sıra takip edilmelidir.
CLRWDT
; WDT ve prescalar silinir.
BSF
STATUS, RP0
; Bank 1’e geç.
MOVLW
b’xxxx0xxx’ ;TMR0, yeni prescalar değeri ve saat kaynağı seçilir.
MOVWF
OPTION
; OPTION kayıtçısına yaz.
BCF
STATUS, RP0 ; Bank 0’a geç.

GECIKME etiketi ile altprograma dallanılmıştır. Burada Türkçe karakterlerinin
kullanılmağını hatırlayın.

¾

Program içindeki

no

¾

tla

ri.

Örnek: Şimdi de B portunun 1.bitinden kare dalga sinyal veren programı yazalım. Sinyal
kaynağı olarak dâhilî sinyal kaynağını kullanalım ve TMR0 oranını 1 / 256 olacak şekilde
prescaler değerini ayarlayalım. Çıkış sinyali PIC’in RB1 bitine osilaskobun bağlanmasıyla
izlenecektir.
Şekil 1.26’deki akış diyagramını inceleyiniz. Bu diyagramda;
¾
TMR0 <6>=1 ifadesiyle TMR0’ın 6.biti 1 mi? Sorgusu yapılmıştır.

MOVLW

ayarlanmıştır;

.e
em
de

PortB pull-up
dirençleri
geçersiz.

w

w

1 1 0 1 0 1
Option
kayıtçısı

w

ve

MOVWF

OPTION kayıtçısı aşağıdaki gibi

rs

OPTION_REG komut satırları ile

b’11010111’

1 1

TMR0 sinyal
kaynağı dâhilî
komut saykılı.

Harici kesme
yükselen kenarda
Prescaler (111)
TMR0
oranı(1/256)
Prescaler
TMR0'a
atanır.
TMR0'ın sayı artışı harici
sinyalin düşen kenarında.
( burada kullanılmıyor)

Şekil 1.25: Program için OPTION kayıtçısının kurulması

78

¾

TMRO kayıtçısının tamamı olunabilir veya bu örnekteki gibi sadece bir biti test

co
m

edilebilir. TMR0 <6>=1 olduğunda ulaşılan sayı b’0100 0000’=64’tür (onlu).
PIC’in 4 Mhz’lik kristal osilatörle kullanılacağını düşünürsek GECİKME
altprogramının süresini aşağıdaki gibi bulabiliriz;
Fkomut= fosc / 4 = 4Mhz / 4 = 1 Mhz

ri.

Tkomut = 1 / Fkomut = 1 / 1 Mhz = 1µS
TMR0 sayma aralığı zamanı= 1µS x ( TMR0 oranı)-1
TMR0 64’e kadar sayacağından;

tla

TMR0 sayma aralığı zamanı= 1µS x ( 1/256 )-1 =256µS
GECİKME = 256µS x 64 =16384 µS = 16.384 ms olur.

no

Bu durumda PortB<1> pininden çıkacak kare dalga sinyalin frekansı;
F= 1/t = 1/16.384 ms = 61 Hz olur.

rs

Başla

.e
em
de

WDT’ı sil.
PIC16F84’ü tanıt
PortB=Çıkış

GECIKME

PortB’yi sil.

w

w

w

1 seviyesini oluştur

hayır

GECIKME

TMR0
<6>=1
evet

0 seviyesini oluştur
Dön (RETURN)
GECIKME
Şekil 1.26: Programın akış diyagramı

79

Şimdi de algoritmayı programa dökelim;

tla

no

.e
em
de

1.6.17.5. WDT Zamanlayıcısı

ri.

;Bank1’e geç.
;B portunun tümü çıkış.
; WDT ve prescalar’ı sil.
;TMR0’ı, yeni prescalar değerini ve sinyal
;kaynağını seç ve
OPTION_REG ;OPTION kayıtçısına yaz.
STATUS,5 ;Bank0’a geç.
PORTB
;B portunun tüm uçlarını ‘0’ yap.
PORTB,1 ;PortB 1.bit lojik 1 yap.
GECIKME ;GECIKME altprogramını çağır.
PORTB,1 ; PortB 1.bit lojik 0 yap.
GECİKME ;GECIKME altprogramını çağır.
PALS
TMR0
TMR0,6
TEST_BIT

rs

MOVWF
BCF
CLRF
PALS
BSF
CALL
BCF
CALL
GOTO
GECİKME CLRF
TEST_BIT BTFSS
GOTO
RETURN
END

co
m

LIST P=16F84
INCLUDE “P16F84.INC”
BSF
STATUS,5
CLRF
TRISB
CLRWDT
MOVLW
b’11010111’

PIC donanımı içerisinde bulunan ikinci bir zamanlayıcıdır. Türkçe karşılığı “bekçi
köpeği”dir. Mikrodenetleyici içerisinde bulunan programın bir anlamda bekçiliğini yaptığı
için bu ad verilmiştir. Peki bu işi nasıl yapmaktadır? PIC’in önceden belirlenen sürede
yapması planlanan bir işi zamanında yapmadıysa, yani döngü kontrolden çıkıp da
kilitlendiyse , WDT devreye girer ve PIC’i resetler.
Şekil 1.27’de WDT zamanlayıcısı blok diyagramı görülmektedir. Şimdi de WDT’ın
birkaç özelliğinden bahsedelim;
¾

Watchdog Timer, başka hâricî bileşenler talep etmeyen serbest çalışan on-chip

w

w

w

RC osilatörüdür. Bu osilatörün WDT’a sağladığı nominal zaman aşımı süresi 18

¾

ms’dir. Prescaler değeri artırılarak bu değer 2-3 S’ye kadar çıkarılabilir.
WDT RC osilatörü , OSC1/CLKIN pininin RC osilatöründen ayrılmıştır. Yani,
WDT , OSC1/CLKIN ve OSC2/CLKOUT pinlerindeki saat palsı (clock) dursa
bile çalışacaktır. Örneğin , SLEEP komutu yürürlüğe konduğu durumlarda buna
rastlanır. Normal işletim esnasında bir WDT zaman aşımı (time-out) PIC reset’i
yaratacaktır. Eğer PIC SLEEP modunda ise bir WDT cihazın uyanmasını
(wake-up) ve normal işletimine devam etmesine sebep olur.
80

¾

OPTION kayıtçısının sadece ilk 4 biti (prescaler ve TMR0/WDT seçim bitleri)

co
m

WDT’la ilgilidir. OPTION kayıtçısının 3.biti 1 yapılarak WDT seçilir ve
prescaler bitleri (OPTION<0:2>) ile de frekans bölme değeri ayarlanır.
¾

WDT’ın, CLRWDT komutuyla reset yapıldıktan sonra, saymasını tamamlayıp

baştan tekrar saymaya başladığı ana kadar geçen süreye zaman aşımı süresi
(time-out) denir. WDT saymasını tamamladığı anda zaman aşımı sinyali verir.

ri.

Bu sinyal STATUS kayıtçısının 3. ve 4. bitlerindeki (TO ve PD bayrakları)

bayrakların durumunu değiştirir. Bu konumda STATUS kayıtçısı konusuna
¾

tla

dönüp ilgili bitleri inceleyiniz.

Eğer WDT ile, kontrolden çıkmış bir programı tekrar resetleyerek, kontrolü ele

no

almayı planladıysanız , ana program başında STATUS kayıtçısının bu bitlerini
kontrol etmelisiniz. Daha sonra da reset gerçekleştikten hemen sonra da bu
bitleri kontrol etmelisiniz. Böylece WDT’ın zaman aşımı süresi dolduğunda

rs

program akışını başka bir yere dallandırabilirsiniz. Örnek program parçası
aşağıdaki gibi olabilir.

.e
em
de

WDT_KONTROL BTFSS STATUS,TO ;TO bayrağı 1 mi?
CALL KUR
;hayır (zaman aşımı oluşmuş) , KUR
;altprogramını çağır.
MOVLW h’CC’
;Evet (zaman aşımı oluşmamış)
.
;programa devam et.
.
.
.
¾
PIC içerisinde bulunan WDT zamanlayıcısının durumunu konfigürasyon
bitlerini yazarken belirleyebiliriz. Bu konfigürasyon bitlerini program içerinde

w

w

w

aşağıdaki gibi yazabiliriz.

_CONFIG
Bu ifadede ;
_CP_OFF
_WDT_ON
_ PWRT_ON
_RC_OSC
_HS_OSC)

_CP_OFF & _WDT_ON &_ PWRT_ON & _RC_OSC
;kod koruma yok.
;WDT aktif
;Power-On-Reset var.
;RC osilatör kullnılıyor. (Diğer seçenekler _LP_OSC, _XT_OSC,

81

.e
em
de

rs

no

tla

ri.

co
m

İstenirse konfigürasyon bitlerini PIC programlayıcının kendi programındaki “fuses”
penceresinden de yapabiliriz.WDT’ı programın çalışması esnasında geçersiz yapmak
mümkün değildir.

Şekil 1.27: WDT Blok diyagramı

Not : T0CS , T0SE , PSA , PS2:PS0 bitleri OPTION registeri içindedir.

1.6.18. D/A ve A/D Çevirme

w

PIC16F84 mikrokontrolü sadece dijital verileri giriş olarak kabul eden ve yine sadece
dijital çıkış verebilen bir entegredir. Bu yüzden analog veri girişi ve çıkışı gereken
durumlarda bu işler için üretilmiş özel entegreler kullanmak gerekir. Bununla beraber
Microchip firmasının katalogları incelendiğinde, PIC14C000 mikrodenetleyicisinin girişine
uygulanan dijital sinyali doğrudan analog voltaj çıkışı olarak verebilmektedir. Ayrıca
PIC16F877 mikrodenetleyicisi de girişine uygulanan analog sinyali doğrudan dijital çıkış
olarak verebilmektedir.

w

w

1.6.18.1. Dijital Analog Çevirici

PIC’ten çıkan dijital kelimeyi analog sinyale dönüştürmek için kullanılacak
yöntemlerden biri AD558 entegresini kullanmaktır. Çünkü bu entegre 8 bitlik dönüşüm
sağlamaktadır ve PIC için kontol girişlerine sahiptir. Diğer bir yöntem de PWM (Pals
genişlik modülasyonu) yöntemini kullanmaktır. Bu yöntemle ayrıca bir entegre kullanmak
gerekmediğinden (zaten denetleyicilerin kullanma amaçlarından biri de budur. Biz de bu
yöntemi kullanacağız.
82

no

tla

ri.

co
m

Şekil 1.28’de bir kare dalga sinyalin, 3 farklı lojik “1” ve “0” süreleri için ,
voltmetrede ölçüm değerleri (Analog gerilim değerleri) görülmektedir. Dolayısı ile bu 3
gerilim değerleri ile ledleri sürersek led parlaklıkları birbirinden farklı olacaktır.

rs

Şekil 1.28:PWM sinyali ile analog gerilim üretmek

.e
em
de

Eğer iş ve bekleme sürelerini bir periyot içinde değiştirirsek çıkış derilimini de 0-5V
arasında değiştirebiliriz. Aşağıdaki gibi bir gecikme alt programı ile iş ve bekleme sürelerini
belirleyebiliriz.
GECIKME

MOVWF

SAYAC

DECFSZ
GOTO
RETURN

SAYAC,1
TEKRAR

TEKRAR

w

w

w

8 bitlik bir DA çevriminde, olabilecek en büyük dijital değer h’FF’ olacağından bu
değeri biz bir çevrim peryodunu oluşturan sayı olarak almalıyız.Yani PWM çıkış periyodu
SAYAC değerinin h’FF’=d’256’olması durumunda oluşur. Bu durumda iş ve bekleme
sürelerini,

256 sayısı
Sayıiş

5V oluşursa;
Vanalog oluşur.

Sayıiş x 5V = 256 x Vanalog

Sayıiş=(256x Vanalog )/5 , Vanalog = (Sayıiş x 5)/ 256 , Sayıbek =256 - Sayıiş
formülleri bulunur.
Örneğin 0.5V’luk analog gerilim elde etmek için GECIKME
kayıtçısına yüklenecek iş ve bekleme sayılarını bulalım.
83

altprogramında SAYAC

Sayıiş=(256x Vanalog )/5=(256 x 0.5)/5=25.6=26 =h’1A’ve
Sayıbek =256 - Sayıiş =256-26=230=h’E6’ olur. Bu kadar basit.

co
m

Şimdi de bir programla PWM yöntemi ile analog sinyal üretelim:
Örnek: B portunun 1.Bitinden 2V’luk analog değer üreten programı yazınız.
Çözüm: Önce iş ve bekleme sayılarını bulalım;
Sayıiş=(256x Vanalog )/5=(256 x 2)/5=102.4= 103 = h’67’ve
Sayıbek =256 - Sayıiş =256-103=153=h’99’ olur.

GECIKME

tla

PIC16F84’ü
Tanıt.
PortB çıkış

SAYAC değerini W’den yükle.

no

SAYAC=SAYAC-1

IS sayısını W ye’yükle

rs

PORTB<1>=1

SAYAC=0
mı?

.e
em
de

GECIKME

ri.

Başla

RETURN

PORTB<1>=0

BEKLE sayısını W ye’yükle

w

GECIKME

Şekil 1.29: Örnek progamın algoritması

w

w

Programda B portunun 1.biti önce 1 yapılıyor. Daha sonra iş zamanını belirleyen
değer (h’67’) W kayıtçısına yüklenip GECIKME altprogamına dallanılıyor. GECIKME
altprogamında h’67’ değeri 0 olana kadar B portunun 1.biti 1 olarak kalıyor. SAYAC değeri
0 olduğunda ise anaprograma dönülüyor. Böylece iş zamanı bitmiş oluyor. Anaprogamda B
portunun 1.biti bu el 0 yapılıyor. Daha sonra bekleme zamanını belirleyen değer (h’99’) W
kayıtçısına yüklenip GECIKME altprogramına dallanılıyor. GECIKME altprogramında
h’99’ değeri 0 olana kadar B portunun 1.biti 0 olarak kalıyor. SAYAC değeri 0 olduğunda
ise anaprograma dönülerek tekrar B portunun 1.biti 1 yapılıyor. Böylece bekleme zamanı da
bitmiş oluyor. Bu olay silsilesi sonunda B portunun 1.bitine bağlı voltmetrede 2V oluşuyor.
84

ri.
tla
no

w

w

w

.e
em
de

rs

;######DAC.asm#########
LIST
P=16F84
INCLUDE “P16F84.INC”
IS
EQU
h’0C’
BEKLE
EQU
h’0D’
SAYAC
EQU
h’0E’
ORG
h’00’
BSF
STATUS,5
CLRF
TRISB
BCF
STATUS,5
CLRF
PORTB
MOVLW h’67’
MOVWF IS
MOVLW h’99’
MOVWF BEKLE
TEKRAR
BSF
PORTB,1
MOVF
IS,W
CALL
GECIKME
BCF
PORTB,0
MOVF
BEKLE,W
CALL
GECIKME
GOTO
TEKRAR
GECIKME
MOVWF SAYAC
DONGU
DECFSZ SAYAC,1
GOTO
DONGU
RETURN

co
m

Şimdi de programımızı yazalım.

85

1.6.18.2. Analog Dijital Çevirici

co
m

PIC16F84 kontrolcüsünde dâhilî ADC olmadığı için bu işi PIC16FF877 kullanarak
gerçekleştireceğiz.

.e
em
de

rs

no

tla

ri.

16F877 analog giriş için A portunda 5 , E portunda ise 3 pini kullanır (Şekil 1.30’u
inceleyiniz). Yani 8 kanallı ADC olarak kullanılabilir. Bu pinlere bağlanacak sıcaklık, ses,
ışık sensörleri veya potansiyometrelerden analog veri alınabilir. Çevrim sonucu 10 bitliktir.

Şekil 1.30: 16F877 denetleyicisi pin diyagramı

w

w

w

ADC uyuma modunda da çalışabilir ve kendi iç devre saatini (RC osilatörünü)
kullanır. ADC modülü bu iş için 4 kayıtçı kullanır; ADRESH, ADRESL, ADCON0 ve
ADCON1 .ADRESH ve ADRESL kayıtçıları, ADC dönüşüm sonucunun üst ve alt
baytlarını tutar. ADCON0 , ADC işleminin kontrolünde ADCON1 ise port pinlerinin
konfigürasyonunda kullanılan kayıtçılardır. ADCON0 ve ADCON1 kayıtçılarının içyapısı
şekil 1.31 ve şekil 1.32’de verilmiştir.

86

CHS2 CHS1 CHS0

Osc modu;
Analog kanal
00:Fosc/2
seçim bitleri
01: Fosc/8
( 000:AN0…111:AN7)
10: Fosc/32
11: FRC

GO/DONE 1=Dönüşüm
başladı
0=Bitti

ADON
1=AD çalışıyor
0= AD kapalı.

co
m

ADCS1 ADCS0

-

PCFG3

PCFG2

PCFG1

PCFG0

tla

ADFM
AD sonuç seçim biti
0:Sağa yanaşık
1:Sola yanaşık

ri.

Şekil 1.31: ADCON1 kayıtçısı

AD PORT konfigürasyon bitleri

w

w

w

.e
em
de

rs

no

Şekil 1.32: ADCON0 kayıtçısı

Şekil 1.33: AD PORT konfigürasyon bitleri

ADC dönüşümü yapmak için şu sıra izlenir:
¾ AD biriminin konfigürasyononu yap;
• Analog giriş portunu belirle (ADCON1).
• Anlog giriş kanalını seç (ADCON0).
• AD dönüşüm osilatörünü seç(ADCON0).
• AD birimini aktifleştir.
87

co
m

¾ PIC16877’de ayrıca AD kesmesi yapılabilir. İstenirse AD kesme kullanılarak kesme
altprogramı da yazılabilir. Bu durumda ADIF bitinin silinip ADIE, PEIE, GIE
yetkilerinin 1 yapılması gerekir. Bunu yapmak için aşağıdakileri bilmemiz gerekir.
• ADIE biti 16F877’nin PIE1 kayıtçısında bulunur. PIE1 16F877’nin kesme yetki
durumları hakkında içinde kontrol bitleri barındırır. Burada biz sadece ADIE
yetki biti ile ilgileniliyoruz.
ADIE=1 AD kesmesi aktif.
ADIE=0 AD kesmesi pasif.

no

tla

ri.

PEIE ve GIE biti 16F877’nin INTCON kayıtçısında bulunur. INTCON
16F877’nin kesme durumları hakkında içinde kontrol bitleri barındırır. Burada
biz sadece PEIE ve GIE biti bayrakları ile ilgileniliyoruz.
PEIE=1 çevresel kesmeler aktif.
PEIE=0 çevresel kesmeler pasif.
GIE=1 tüm kesmeler aktif.
GIE=0 tüm kesmeler pasif.
Kullanılmayacaksa bu basamak geçilir.
Gereken dolum süresini bekle (çevrim zamanı).
GO/DONE bitini 1 yaparak çevrime başla.
Çevrimin bitmesini bekle. GO/DONE biti ‘0’sa çevrim bitmiştir. Ya da AD
kesmesini bekle.
AD sonuç yazmaç çiftini oku (ADRESH:ADRESL). ADIF bayrağını 0 yap.
ADIF biti 16F877’nin PIR1 kayıtçısında bulunur. PIR1 16F877’nin kesme
durumları hakkında içinde kontrol bitleri barındırır. Burada biz sadece ADIF bayrağı
ile ilgileniliyoruz.
ADIF=1 ise AD çevrimi tamamlandı.
ADIF=0ise AD çevrimi tamamlanmadı.
Sonraki çevrim için 1 yada 2. basamağa git.

rs

¾
¾
¾

.e
em
de

¾

¾

Şimdi de bir örnekle AD dönüşümünü görelim.

Örnek: 16F877 denetleyicisinin AN0 kanalına bağlı bir potansiyometrenin oluşturacağı
analog sinyal, 8 bit dijital kelimeye dönüştürülerek C portundaki ledlerde gösterilsin.

w

w

w

Bunun çözümü için kayıtçıların hangi banklarda bulunduğunu gösteren 16F877’nin
kayıtçı haritasına ihtiyacımız olacaktır (Şekil 1.34). Zaman gecikmesi için TMR0 donanım
zamanlayıcısının kullanıldığına dikkat ediniz.

88

co
m
ri.
tla
no
rs
.e
em
de
w

w

w

Şekil 1.34: 16F877’nin kayıtçı haritası

89

w

w

w

.e
em
de

rs

no

tla

ri.

co
m

;**********************************************************
;* ADC.ASM
;**********************************************************
;* Microchip Technology Incorporated
;* 16 December 1998
;* Assembled with MPASM V2.20
;**********************************************************
;* Bu program A/D
;* A/D dönüşümü için kanal 0 seçilmiş, analog sinyal bir
;* potansiyometre üzerinden sağlanmakta ve sonuç
;* PORTC’deki ledlerde gösterilmektedir.
;**********************************************************
list p=16f877
include "p16f877.inc"
org
0x000
nop
clrf
PORTC
;Clear PORTC
movlw
B'01000001'
;Fosc/8, A/D etkin olacak şekilde
movwf
ADCON0
; ADCON0’ı ayarla.
bsf
status,5
; Bank1’e geç.
movlw
b'10000111'
; TMR0 etkin, prescaler 1:256 olacak
movwf
OPTION_REG
;şekilde OPTION_REG’i ayarla.
clrf
TRISC
;PORTC çıkış.
movlw
B'00001110'
;sola yanaşık çıkış formatı, 1 analog kanal
movwf
ADCON1
; (AN0)girişi ve VDD ve VSS referans
;olacak şekilde ADCON1’i ayarla.
bcf
status,5
;Bank0’a geç.
BASLA
btfss
INTCON,T0IF
; Timer0 taşması gerçekleşti mi?
goto
BASLA
;hayır.Taşmayı bekle.
bcf
INTCON,T0IF
;evet.T0IF bayrağını sil.
bsf
ADCON0,GO
; A/D çevrimini başlat.
BEKLE
btfss
PIR1,ADIF
;çevrim bitti mi?
goto
BEKLE
;hayır.Bitirmesini bekle.
movf
ADRESH,W
;Evet sonucu PORTC’deki
movwf
PORTC
;ledlere gönder.
goto
BASLA
;tekrarla.
End

90

co
m

UYGULAMA FAALİYETİ
UYGULAMA FAALİYETİ
İŞLEM BASAMAKLARI

ÖNERİLER

ri.

¾ B Portuna bağlı 8 led , A portunun 0.bitine ¾ Akış diyagram sembollerini amacına
uygun kullanınız.
bağlı bir butona basıldığında birbirine
eklenerek aşağıdaki gibi 1 sn. arayla sola
¾ Programın başlık kısmında gerekli
doğru kayarak yansın.
tanımlamaları
yapınız
(
LIST,
INCLUDE).

no

tla

¾ Programda
kullandığınız
mikrodenetleyici komutlarının, sayı ve
karakterlerin yazılışına dikkat ediniz.
Programın tamamını ya büyük ya da
küçük harfle yazmak yazım hatalarını
azaltacaktır.

rs

¾ Program başında giriş/çıkış portlarını
kurduktan sonra B portunu ve C (elde)
bayrağını silerek programa başlayınız.

Programın;
¾ Program akış diyagramını çiziniz.

.e
em
de

¾ Programlama dilini seçiniz.

¾ Programlama dilinin yazım kurallarınına
dikkat ederek assemler komutlara göre
programınızı yazınız.

¾ Programı MPASM ile derleyiniz.

w

w

w

¾ Derleme
sonucunda
oluşan
HEX
dosyasını , programlama kartı
ile
mikrodenetleyiciye yazınız.

91

¾ Programın derlenmesi sonucunda oluşan
HEX
dosyası
ASM
dosyanızın
bulunduğu
dizindedir
(MPASM
programı dizininde değildir).

co
m

ÖLÇMEVE
VEDEĞERLENDİRME
DEĞERLENDİRME
ÖLÇME
OBJEKTİF TESTLER (ÖLÇME SORULARI)

LIST ve INCLUDE ifadeleri bir assabmler programın hangi bölümünde bulunur?

A Portu yönlendirme kayıtçısı aşağıdakilerden hangisidir?
C) STATUS

B) INTCON

C) TMR0

D) STATUS

Bank değiştirme işlemini hangi kayıtçı sağlar?
A) PORTB

B) OPTION_REG

C) STATUS

D) ADCON0

w

.e
em
de

Aşağıdaki program parçasına göre 5-15. sorulardaki boşlukları tamamlayınız.
;====örnek.asm======
LIST
P=16F84
INCLUDE “P16F84.INC”
ORG h’000’
GOTO BASLA
BASLA
BSF
STATUS,5
CLRF TRISB
MOVLW
h’FF’
MOVWF
TRISA
BCF
STATUS,5
TEKRAR
CLRF
PORTB
BCF
STATUS,C
KONTROL
BTFSS
PORTA,0
GOTO KONTROL
MOVLW
h’35’
MOVWF
TEST
INCF
TEST,1
RRF
TEST,1
COMF TEST,1
RLF
TEST,0
MOVWF PORTB
GOTO TEKRAR
END

w

w

D) INTCON

Kesme bit ve bayraklarını içinde barındıran kayıtçı aşağıdakilerden hangisidir?
A) OPTION_REG

4.

B) TRISA

D) Sonlandırma

tla

A) PORTA
3.

C) Program

no

2.

B) Atama

ri.

A) Başlık

rs

1.

92

co
m

ri.

11.
12.
13.
14.
15.

Programın başlangıç adresi h’.......’dır.
Programda ..........................mikrodenetleyicisi kullanılmıştır.
Programda .. ....portu giriş,........ portu çıkış olarak kurulmuştur.
A Portunun ........bitine bağlı bir buton ile programın akışı konrol edilmektedir.
A Portuna bağlı buton basılmadığı sürece PORB kayıtçısının değeri h’......’dir.
Butona basıldıktan sonra BCF STATUS, C komut satırında C (elde) bayrağının
değeri olur.
Butona basıldıktan sonra, program sonunda W kayıtçısının değeri h’......’dir.
Butona basıldıktan sonra, program sonunda TEST kayıtçısının değeri h’......’dir.
Butona basıldıktan sonra, program sonunda PORTB kayıtçısının değeri h’......’dir.
Butona basıldıktan sonra program sonunda C (elde) bayrağının değeri ......dir.
GOTO komutuna PC’ye(program sayıcıya) ...............etiketinin adresi yüklenir.

tla

5.
6.
7.
8.
9.
10.

DEĞERLENDİRME

no

Cevaplarınızı cevap anahtarı ile karşılaştırınız. Doğru cevap sayınızı belirleyerek
kendinizi değerlendiriniz. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt yaşadığınız
sorularla ilgili konuları faaliyete dönerek tekrar inceleyiniz.

w

w

w

.e
em
de

rs

Tüm sorulara doğru cevap verdiyseniz diğer faaliyete geçiniz.

93

ÖĞRENME FAALİYETİ-2
ÖĞRENME FAALİYETİ-2

co
m

AMAÇ

Uygun ortam sağlandığında microdenetleyici programını derlemesini yapabilecek,
derleme sonunda oluşan dosyaları tanıyabilecek ve oluşan dosyalardan faydalanarak
programınız hakkında yorum yapabileceksiniz.

ri.

ARAŞTIRMA

¾

MPASM programının menülerini tanıyıp ayarlarının nasıl yapılması gerektiğini
öğrenmelisiniz.
Yazdığımız

programı

araştırmalısınız.

derleme

olayına

neden

no

¾

tla

Bu faaliyet öncesinde yapmanız gereken öncelikli araştırmalar şunlar olmalıdır:

ihtiyaç

duyduğumuzu

.e
em
de

rs

MPASM programının menülerini tanıyıp ayarlarının nasıl yapılması gerektiğini
öğrenme faaliyetleri-1’den öğrenebilirsiniz. Ayrıca
internet ortamından ve mesleki
kitapların bulunduğu kütüphaneler ile bu işi yapan sektörde çalışanlardan daha ayrıntılı bilgi
bulabilirsiniz. Araştırma için arkadaşlarınızla iş bölümü yapabilirsiniz.

2. MİKRODENETLEYİCİ KONTROL
PROGRAMININ MAKİNE DİLİNE
ÇEVRİLMESİ

w

w

w

Bildiğimiz gibi MPASM derleyici programı assmbly programımızın makine kodunu
üretiyordu . MPASM derleyici programının nasıl kurulacağını, ayarlarının nasıl yapılacağını
“Mikrodenetleyici için gerekli yazılımın kullanımı” konusunda anlatmıştık. Burada ise
derleme işleminin yapılması ve derleme sonucunda oluşturulan dosyaları göreceğiz.

94

2.1.1. Derleme İşleminin Yapılması
Bir assembly dosyasını derlemek için aşağıdaki sıra izlenir.
¾

co
m

2.1. Programın Derlenmesi

MPASM programı çalıştırılarak resim 2.1’deki gibi ayarlanır. Burada

.e
em
de

rs

no

tla

ri.

mikrodenetleyici olarak 16F84A seçilmiştir.

w

w

w

Resim 2.1: MPASM derleyici programı arabirimi

95

¾

Daha önceden yazılıp kaydedilmiş .asm uzantılı kaynak dosyası “Browse” ile

no

tla

ri.

co
m

açılır (Resim 2.2).

¾

rs

Resim 2.2: ASM dosyanın seçilmesi.

“Assemble” komut tuşuna basılarak derleme işlemi bitirilir. Sonuç, derleme

.e
em
de

başarılı olduysa resim 2.3’teki, başarılı olmadıysa resim 2.4’teki pencere ile

w

w

w

programcıya bildirilir.

Resim 2.3: Başarılı ASM derleme

Resim 2.4: Başarısız ASM derleme

96

2.1.2. Derleme Sonucu Elde Edilen Dosyalar

co
m

Derleme sonunda LST dosyası, ERR dosyası, HEX dosyası,WAT dosyası, PJT
dosyası, LST dosyası dosyaları MPASM programının bulunduğu dizinde oluşur. Şimdi de
bu dosyaların ne anlama geldiğini görelim.
2.1.2.1. ERR Dosyası

tla

ri.

ERR dosyası metin editörünü kullanarak açabileceğiniz bir dosyadır. ASM dosyası
konusunda örnek olarak verilen tersle.asm dosyası derlendikten sonra hiç hata oluşmadığı
için tersle.err dosyası açılırsa boş bir sayfa görülecektir. Fakat hata çıkması durumunda
MPASM bunu programcıya şekil 2.4’teki pencere ile bildirecektir. Bu pencerede hata , uyarı
ve mesaj sayılarına ait bilgiler bulunur. Errors:4 ifadesi 4 satırda hata bulunduğunu ifade
etmektedir. Bu hatalar bir ERR dosyası olarak ASM dosyasının bulunduğu dizinde
oluşturulur.

w

.e
em
de

rs

no

Şimdide 1LEDYAK.ERR dosyamızın hatalarını bulup düzeltelim. ERR uzantılı
dosyayı bir metin editörü ile açıp içinde hataların olduğu satırları arıyoruz. Hataları
bulduktan sonrada tekrar ASM dosyamızı açıp ilgili hataları birer birer gidereceğiz. Eğer
programınızda kod satırları çoksa biraz zor olabilir, ama gene de çözüm var; dosyada metin
arama özelliğini kullanarak “Error” kelimesini arayarak bulabilirsiniz. Şimdi dosyayı açalım
ve hataları bulalım.

w

w

¾

¾

Şekil 2.5: Örnek hata dosyası

1.satırda bir hata var, hata olan kod EQUa =>hâlbuki bu değişken tanımlama
için kullandığımız equ olmalıydı. Gidip onu EQU yaparak düzeltiyoruz.
2.satırda bir hata var. Illegal opcode (PORTB)=> Yalnız bu PORTB’nin
yazılışında bir hata yok; burada başka bir hata olmalı gidip 12 inci satıra
bakalım. Görüyoruz ki 12. satır CLRF PORTB olması gerekirken, CLRFg
PORTB olarak girilmiş, burada ERR dosyasında CLRFg ifadesini warning
olarak bir üst satırda görüyoruz.CLRF yazdığımızda bu assembler kodu olur,
97

ama CLRFg yazdığınızda bu ifade satırın başında olduğu için bunu ETIKET
¾

co
m

olarak tanımaya çalışır. Bu yüzden bu satırda PORTB’de hata gösterdi.
28 ve 40. satırlarda iki hata var; fakat esas hata burda değil. Error dosyasında

açıklamaya bakarsak "Symbol not previously defined (SAYAC1)" yazıyor.

Burada MPASM diyor ki: "Sayac1 değişkenini daha önce tanımlamadınız.”O
zaman öğreteceğiz demektir, gidip asm dosyamızda tanımlamaları yaptığımız

ri.

bölüme bakıyoruz ve görüyoruz ki aslında bu hatayı az önce düzeltmişiz. Çünkü
az önce 6.satırda bulunan hata , SAYAC1 değişkenini tanımlarken bulduğumuz
¾

tla

hataydı ve düzeltmiştik.

Not: Bu hataya düşmeyiniz. Bir hata başka bir hatanın sebebi olabilir.Yani

no

derleme sonucunda eğer 20 hata uyarısı aldıysanız derleme yapılırken 20 defa
sorunla karşılaşılmış anlamına gelir, yoksa 20 tane hata var anlamına gelmez
(ama olabilir de tabii). Hatta yukarıdaki örneğe benzer şekilde bir hata olup çok

rs

hata uyarısı alabilirsiniz. Örneğin bir değişkenin tanımlanmasında hata varsa ve
bu değişkeni biz 20 yerde kullandıysak, hatamız bir yerde olmasına rağmen 20

.e
em
de

tane hata uyarısı alırız.Üstteki hatayı düzelttiğinizde unutup 2 dk. sonra
aşağılarda bulduğunuz hatadan dolayı tekrar aynı hatayı ararsanız bulamazsınız,

en güzeli birkaç düzeltme yaptığınızda bir karmaşa oluşursa MPASM’la tekrar
derleme yapınız ve ERROR dosyasını tekrar açınız. Bu durumda en son hataları

w

w

w

görmüş olacağınızdansorun yaşamazsınız, uzun uzun hata aramazsınız.

98

2.1.2.2. ASM Dosyası

“Bit pozisyonlarını tersleme”
görüyorsunuz.

konusundaki

co
m

ASM dosyası aslında derleme sonunda oluşan bir dosya değildir. Bizim program
kaynak dosyamızdır. Fakat derleme sonunda oluşan kaynak dosyalarla aynı dizinde
bulunduğu için listeye dahil edildi.
tersle.asm programını aşağıda

w

w

w

.e
em
de

rs

no

tla

ri.

;====tersle.asm======
LIST
P=16F84
INCLUDE "P16F84.INC"
SAYAC1 EQU
h'0C'
SAYAC2 EQU
h'0D'
CLRF
PORTB
BSF
STATUS,5
CLRF
TRISB
BCF
STATUS,5
MOVLW h'0F'
;ilk değeri yükle ve
MOVWF PORTB
;B portundan çıkar.
TERSLE
CALL
GECIKME ;Yeni değer için bekle.
COMF
PORTB,F ;PORTB'yi tersle.
GOTO
TERSLE ; sağa kaydır.
GECIKME
;GECIKME alt programı başlangıcı.
MOVLW h'FF'
MOVWF SAYAC1
DON1
MOVLW h'FF'
MOVWF SAYAC2
DON2
DECFSZ SAYAC2,F
GOTO
DON2
DECFSZ SAYAC1,F
GOTO
DON1
RETURN
;GECIKME alt programı sonu
END

99

2.1.2.3. HEX Dosyası

co
m

HEX dosyası metin editörünü kullanarak açabileceğiniz bir dosyadır. ASM dosyası
konusunda örnek olarak verilen tersle.asm dosyası derlendikten sonra oluşan tersle.hex
dosyası aşağıda görülmektedir. Denetleyiciye bu dosyadaki verileri yükleriz.
:1000000086018316860183120F3086000920860937
:100010000628FF308C00FF308D008D0B0D288C0BD7
:040020000B280800A1
:00000001FF

ri.

2.1.2.4. WAT Dosyası

tla

WAT dosyası MPASM programının derlemesi sonucu oluşan bir dosya değildir. Bu
yüzden bunun üzerinde durmayacağız.
2.1.2.5. PJT Dosyası

rs

2.1.2.6. LST Dosyası

no

PJT dosyası metin editörünü kullanarak açamayacağınız bir dosyadır. Bu dosya proje
dosyasıdır ve hangi program kullanarak proje oluşturulmuş ise o program tarafından açılır.
Örneğin MPLAB kullanarak oluşturacağınız projeler gibi… Programcı için bilgilendirici bir
dosya değildir sadece var olan çalışmayı açmak için kullanılır.

.e
em
de

LST dosyası metin editörünü kullanarak açabileceğiniz bir dosyadır. Bu dosya birkaç
sayfadan oluşabilir. ASM dosyası konusunda örnek olarak verilen tersle.asm dosyası
derlendikten sonra oluşan tersle.lst dosyası aşağıda görülmektedir. Dikkatli incelendiği
zaman aşağıdaki bilgileri içerdiği görülmektedir.
¾

Bir lst dosyası birkaç sayfadan oluşur. Bu örnekte PAGE1, PAGE2 ve PAGE3

şeklinde 3 sayfa var.

¾

Komutların hex kodları (PAGE1 içerisinde)

¾

Komutların bellekteki adresleri ( PAGE1 içerisinde LOC OBJECT CODE ),

¾

Kaynak program ve satır numaraları (PAGE1 içerisinde LINE SOURCE

TEXT),

w

w

w

¾

Programda kullanılan etiketler ve tanımlar (PAGE2 içerisinde SYMBOL

TABLE)

¾

OPTION_REG tanımlamaları (PAGE3 içerisinde)

¾

Bellek kullanım haritası (PAGE3 içerisinde, x =kullanılan, ‘-‘ kullanılmayan
alanları belirtir)

¾

Bellekte durumu (PAGE3 içerisinde kullanılan 18 , kullanılmayan 1006 bayt,
toplam 1KB)

100

¾

Oluşan hata ve uyarı sayısı (PAGE3 sonunda hata sayısı 0, uyarı sayısı 7,

MPASM 02.30.11 Intermediate
LOC OBJECT CODE

co
m

uyarılar ise PAGE1 içerisinde bulunuyor. )
tersle.ASM 8-6-2005 19:02:47

LINE SOURCE TEXT

VALUE

PAGE 1

w

w

w

.e
em
de

rs

no

tla

ri.

00001 ;====TERSLE.asm======
00002
LIST P=16F84
Warning[205]: Found directive in column 1. (INCLUDE)
00003 INCLUDE "P16F84.INC"
00001
LIST
00002 ; P16F84.INC Standard Header File, Version 2.00 Microchip Technology, Inc.
00136
LIST
0000000C
00004 SAYAC1 EQU
h'0C'
0000000D
00005 SAYAC2 EQU
h'0D'
0000 0186
00006
CLRF PORTB
0001 1683
00007
BSF STATUS,5
0002 0186
00008
CLRF TRISB
0003 1283
00009
BCF STATUS,5
0004 300F
00010
MOVLW h'0F'
;ilk değeri yükle ve
Warning[203]: Found opcode in column 1. (MOVWF)
0005 0086
00011 MOVWF PORTB ;B portundan çıkar.
0006
00012 TERSLE
0006 2009
00013
CALL GECIKME
;Yeni değer için bekle.
Warning[203]: Found opcode in column 1. (COMF)
0007 0986
00014 COMF PORTB,F
;PORTB'yi tersle.
0008 2806
00015
GOTO TERSLE
; sağa kaydır.
00016
0009
00017 GECIKME
Warning[203]: Found opcode in column 1. (MOVLW)
0009 30FF
00018 MOVLW h'FF'
Warning[203]: Found opcode in column 1. (MOVWF)
000A 008C
00019 MOVWF SAYAC1
000B
00020 DON1
Warning[203]: Found opcode in column 1. (MOVLW)
000B 30FF
00021 MOVLW h'FF'
Warning[203]: Found opcode in column 1. (MOVWF)
000C 008D
00022 MOVWF SAYAC2
000D
00023 DON2
000D 0B8D
00024
DECFSZ SAYAC2,F
000E 280D
00025
GOTO
DON2
000F 0B8C
00026
DECFSZ SAYAC1,F
0010 280B
00027
GOTO
DON1
0011 0008
00028
RETURN
00029
END
101

w
w

w

co
m

tla
no
rs

00000000
00000001
0000000B
0000000D
00000009
00000088
00000089
00000008
00000006
00000004
00000001
00000004
00000009
00000007
00000000
0000000B
00000004
00000006
00000001
00000007
00000003
00000007
00000004
00000081
00000002
0000000A
00000005
00000006
00000000
00000001
00000002
00000003
00000003
00000000
00000000
00000005
00000006
0000000C
0000000D
00000003
00000005
00000005
00000002

.e
em
de

C
DC
DON1
DON2
EEADR
EECON1
EECON2
EEDATA
EEIE
EEIF
F
FSR
GECIKME
GIE
INDF
INTCON
INTE
INTEDG
INTF
IRP
NOT_PD
NOT_RBPU
NOT_TO
OPTION_REG
PCL
PCLATH
PORTA
PORTB
PS0
PS1
PS2
PSA
RBIE
RBIF
RD
RP0
RP1
SAYAC1
SAYAC2
STATUS
T0CS
T0IE
T0IF

PAGE 2

ri.

MPASM 02.30.11 Intermediate
ABD.ASM 8-6-2005 19:02:47
SYMBOL TABLE
LABEL
VALUE

102

ri.

co
m

T0SE
00000004
TERSLE
00000006
TMR0
00000001
TRISA
00000085
TRISB
00000086
W
00000000
WR
00000001
WREN
00000002
WRERR
00000003
Z
00000002
MPASM 02.30.11 Intermediate

_CP_OFF
_CP_ON
_HS_OSC
_LP_OSC
_PWRTE_OFF
_PWRTE_ON
_RC_OSC
_WDT_OFF
_WDT_ON
_XT_OSC
__16F84

00003FFF
0000000F
00003FFE
00003FFC
00003FFF
00003FF7
00003FFF
00003FFB
00003FFF
00003FFD
00000001

no

VALUE

.e
em
de

rs

SYMBOL TABLE
LABEL

PAGE 3

tla

ABD.ASM 8-6-2005 19:02:47

MEMORY USAGE MAP ('X' = Used, '-' = Unused)
0000 : XXXXXXXXXXXXXXXX XX-------------- ---------------- ---------------All other memory blocks unused.
Program Memory Words Used:

18

w

Program Memory Words Free: 1006

Warnings :

0
7 reported,

0 suppressedMessages :

w

w

Errors :

103

0 reported,

1 suppressed

co
m

UYGULAMA FAALİYETİ
UYGULAMA FAALİYETİ
Yaptığınız ve yapacağınız bir mikrodenetleyici programını makine diline çevirerek
ASM, HEX, LST, COD, ERROR dosyalarını inceleyiniz.

İŞLEM BASAMAKLARI
programını ¾ Derleme

(MPASM) bilgisayarınıza kurunuz.

bölümünde yazmış olduğunuz programı

yapınız.

no

programınızı

makine diline heksadesimal

tek bulmaya çalışınız ve bir hatayı

bulduktan

kodlara çeviriniz (HEX dosyası).

sonra,

o

hatayı

giderip

programı tekrar derleyiniz. Çünkü bir

rs

derleyerek

¾ Derleme sonucunda hata oluştuysa,
bütün hataları birden bulmak yerine, tek

derleme programında açınız.
yazılmış

mutlaka

denetleyici tipi, çıkış formatı ayarlarını

¾ “Uygulama faaliyetleri-1” Uygulamalar

dilinde

önce

MPASM programında kullanacağınız

¾ MPASM program ayarlarını yapınız.

¾ Komut

yapmadan

ri.

derleme

tla

¾ Mikrodenetleyici

ÖNERİLER

hata başka hataların nedeni olabilir.

.e
em
de

¾ Eğer derleme sonucunda hatalar oluştuysa,
hata dosyasını açıp hataları gideriniz.

¾ LST dosyasını açıp denetleyicinin bellek
durumunu ( boş ve dolu bellek alanları)

w

w

w

öğreniniz.

104

co
m

ÖLÇME VE DEĞERLENDİRME
ÖLÇME VE DEĞERLENDİRME
Aşağıdaki soruları cevaplayarak faaliyette kazandığınız bilgi ve becerileri ölçünüz.

OBJEKTİF TESTLER (ÖLÇME SORULARI)

2.

D) PPT dosyası

B) ERR

C) PJT

D) ASM

MPASM ile derleme sonucu oluşan dosyalar hangi dizinde bulunur?
B) ASM dosyasının
bulunduğu dizin

C) MPASM
programı dizininde

D) C (sabit disk)

rs

A) Belgelerim

Aşağıdaki hata mesajı ekranına göre kaç assembly satırında hata var?

w

w

w

.e
em
de

4.

C) HEX dosyası

MPASM ile derleme sonucu oluşan hata dosyası aşağıdakilerden hangisidir?
A) LST

3.

B) LST dosyası

tla

A) ERR dosyası

ri.

Bir assembly program MPASM ile derlendikten sonra aşağıdaki dosyalardan hangisi
oluşmaz?

no

1.

5.

A) 4

B) 177

C) 1

D) 7

Aşağıdaki dosyalardan hangisini bir metin editörü ile açıp programımız hakkında
bilgi alamayız?
A) ERR dosyası
B) LST dosyası
C) ASM dosyası
10 nu.lu soruları doğru/yanlış olarak cevaplandırınız.
105

D) PJT dosyası

7.
8.
9.

tla

ri.

10.

ASM dosyası MPASM programının derleme sonucunda oluşturduğu bir dosya
değildir.
Denetleyiciye yükleyeceğimiz veriler ASM dosyası içindedir.
LST dosyasından denetleyici belleğini ne kadar kulladığımızı öğrenebiliriz.
“ Error [113] C:\prog\test.asm 20 :illegal opcode (PORTA)” hata satırı bize test.asm
programının 20. satırında bir komut yazılım hatası olduğunu söyler.
Hatasız program mutlaka beklediğimiz gibi çalışır.

co
m

6.

DEĞERLENDİRME

no

Cevaplarınızı cevap anahtarı ile karşılaştırınız. Doğru cevap sayınızı belirleyerek
kendinizi değerlendiriniz. Yanlış cevap verdiğiniz ya da cevap verirken tereddüt yaşadığınız
sorularla ilgili konuları faaliyete dönerek tekrar inceleyiniz.

w

w

w

.e
em
de

rs

Tüm sorulara doğru cevap verdiyseniz diğer faaliyete geçiniz.

106

MODÜL DEĞERLENDİRME

co
m

MODÜL DEĞERLENDİRME
PERFORMANS TESTİ (YETERLİK ÖLÇME)

Mikrodenetleyici programlama modülü, faaliyetleri ve araştırma çalışmaları sonunda
kazandığınız bilgi ve becerilerin ölçülmesi ve değerlendirilmesi için kendinizi değerlendirme
ölçeğine göre değerlendiriniz. Bu değerlendirme sonucuna göre bir sonraki modüle
geçebilirsiniz.

Evet

no

tla

Akış diyagramı sembollerini bir problemin çözümünde kullanabilir
misiniz?
Mikrodenetleyici assembler programı ve yazım kurallarına uygun
program yazabilir misiniz?
Mikrodenetleyici komutlarının işlevlerini biliyor musunuz?

rs

Programda sayı ve karakterleri kullanmak;
¾ Heksadesimal sayıları kullanabilir misiniz?
¾ Binary sayılar kullanabilir misiniz?
¾ Desimal sayılar kullanabilir misiniz?
¾ ASCII karakterler kullanabilir misiniz?

Mikrodenetleyici için gerekli yazılımın kullanmak;

w

w

w

.e
em
de

¾ MPASM derleyici programını kurabilir misiniz?
¾ MPASM programının kullanacağınız denetleyiciye göre
ayarlarını yapabilir misiniz?
Mikrodenetleyici programını yazmak;
¾ Portların giriş ve çıkış olarak yönlendirebilir misiniz?
¾ Konfigürasyon bitlerinin yazabilir misiniz?
¾ W kayıtçısının kullanabilir misiniz?
¾ Bitleri test ederek işlem yapabilir misiniz?
¾ Status kayıtçısını kullanabilir misiniz?
¾ Zaman geciktirme döngüleri düzenleyebilir misiniz?
¾ Bit pozisyonlarını sola/sağa kaydırma ,tersleme işlemlerini
yapabildiniz mi?
¾ İstenen bitleri sıfırlamak, bire çevirmek ve terslemek
işlemlerini yapabilir misiniz?
¾ Bir bytlık iki veriyi birbiriyle veya 0 ile karşılaştırabilir
misiniz?
¾ 8 ve 16 bitlik toplama yapabilir misiniz?
¾ 8 ve 16 bitlik çıkarma yapabilir misiniz?
¾ Çevrim tablolarını kullanabilir misiniz?
¾ INTCON kayıtçısını kullanabilir misiniz?
¾ Kesme kaynaklarını biliyor musunuz?
¾ Kesme alt programlarını düzenlenleyebildiniz mi?
¾ TMR0 ve WDT sayıcılarını kullanabilir misiniz?
107

Hayır

ri.

DEĞERLENDİRME KRİTERLERİ

co
m

tla

ri.

¾ Option kayıtçısını kullanabilir misiniz?
¾ Mikrodenetleyici ile dijital /analog çevirmesini yapabilir
misiniz?
¾ Mikrodenetleyici ile analog /dijital / çevirmesini yapabilir
misiniz?
Mikrodenetleyici kontrol programını makine diline çevirmek;
¾ Assembly programını derleyebilir misiniz?
¾ Derleme sonucunda oluşan dosyalardan faydalanarak çıkan
hataları giderebilir misiniz?

DEĞERLENDİRME

no

Yaptığınız değerlendirme sonucunda eksikleriniz varsa öğrenme faaliyetlerini
tekrarlayınız.

w

w

w

.e
em
de

rs

Modülü tamamladınız, tebrik ederiz. Öğretmeniniz size çeşitli ölçme araçları
uygulayacaktır. Öğretmeninizle iletişime geçiniz.

108

CEVAP ANAHTARLARI
CEVAP ANAHTARLARI

ri.

no

tla

A
B
B
C
000
P16F84
A,B
0
0.
00
C8
E4
C8
1
TEKRAR

rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

co
m

ÖĞRENME FAALİYETİ -1 CEVAP ANAHTARI

ÖĞRENME FAALİYETİ-2CEVAP ANAHTARI

.e
em
de

1
2
3
4
5
6
7
8
9
10

D
B
B
A
D
Y
Y
D
D
Y

w

w

w

Cevaplarınızı cevap anahtarları ile karşılaştırarak kendinizi değerlendiriniz.

109

ÖNERİLEN KAYNAKLAR

¾

co
m

ÖNERİLEN KAYNAKLAR
ALTINBAŞAK Orhan, Mikrodenetleyiciler ve PIC Programlama, İstanbul,
2000.
http://www.antrak.org.tr

¾

http://www.Microchip.com

w

w

w

.e
em
de

rs

no

tla

ri.

¾

110

KAYNAKÇA

co
m

KAYNAKÇA
ALTINBAŞAK Orhan, Mikrodenetleyiciler ve PIC Programlama, İstanbul,
2000.

¾

BODUR Yaşar, Adım Adım PICmicro Programlama, İstanbul.

¾

Microchip Technology Inc.,PIC16F84 Data Sheet 18-Pin Enhanced
Flash/Eprom 8-bit Microcontrollers, 2001.

¾

GÜNEŞ Abdullah, Mikrodenetleyici Ders Notları, Bursa, 2004.

¾

http://www.antrak.org.tr

¾

http://www.ramay.net

¾

http://www.Microchip.com

w

w

w

.e
em
de

rs

no

tla

ri.

¾

111

tla

ri.

co
m

T.C.
MİLLÎ EĞİTİM BAKANLIĞI

no

MEGEP

de

rs

(MESLEKİ EĞİTİM VE ÖĞRETİM SİSTEMİNİN
GÜÇLENDİRİLMESİ PROJESİ)

.e
em

ELEKTRİK-ELEKTRONİK TEKNOLOJİSİ

w

w

w

MİKROİŞLEMCİ VE
MİKRODENETLEYİCİLER

ANKARA 2006

Talim ve Terbiye Kurulu Başkanlığının 02.06.2006 tarih ve 269 sayılı Kararı
ile onaylanan, Mesleki ve Teknik Eğitim Okul ve Kurumlarında kademeli
olarak yaygınlaştırılan 42 alan ve 192 dala ait çerçeve öğretim programlarında
amaçlanan mesleki yeterlikleri kazandırmaya yönelik geliştirilmiş öğretim
materyalleridir (Ders Notlarıdır).

Modüller, bireylere mesleki yeterlik kazandırmak ve bireysel öğrenmeye
rehberlik etmek amacıyla öğrenme materyali olarak hazırlanmış, denenmek
ve geliştirilmek üzere Mesleki ve Teknik Eğitim Okul ve Kurumlarında
uygulanmaya başlanmıştır.

Modüller teknolojik gelişmelere paralel olarak, amaçlanan yeterliği
kazandırmak koşulu ile eğitim öğretim sırasında geliştirilebilir ve yapılması
önerilen değişiklikler Bakanlıkta ilgili birime bildirilir.

Örgün ve yaygın eğitim kurumları, işletmeler ve kendi kendine mesleki
yeterlik kazanmak isteyen bireyler modüllere internet üzerinden ulaşabilirler.

Basılmış modüller, eğitim kurumlarında öğrencilere ücretsiz olarak dağıtılır.

Modüller hiçbir şekilde ticari amaçla kullanılamaz ve ücret karşılığında
satılamaz.

.e
em

de

rs

no

tla

w

w

w

co
m

ri.

Milli Eğitim Bakanlığı tarafından geliştirilen modüller;

İÇİNDEKİLER

w

w

w

.e
em

de

rs

no

tla

ri.

co
m

AÇIKLAMALAR ...................................................................................................................iii
GİRİŞ ....................................................................................................................................... 1
ÖĞRENME FAALİYETİ-1 ..................................................................................................... 3
1. MİKRO İŞLEMCİLER VE MİKRODENETLEYİCİLER.................................................. 3
1.1. Mikroişlemcileri Birbirinden Ayıran Özellikler ........................................................... 3
1.1.1. Kelime Uzunluğu................................................................................................... 3
1.1.2. Komut İşleme Hızı................................................................................................. 5
1.1.3. Adresleme Kapasitesi ............................................................................................ 6
1.1.4. Kaydedici Sayısı .................................................................................................... 6
1.1.5. Farklı Adresleme Modları...................................................................................... 7
1.1.6. İlave Edilecek Devrelerle Uyumluluk ................................................................... 7
1.2. Mikroişlemciyi Oluşturan Birimler ve Görevleri.......................................................... 8
1.2.1. Kaydediciler........................................................................................................... 8
1.2.2. Aritmetik ve Mantık Birimi (ALU) ..................................................................... 12
1.2.3. Kontrol Birimi ..................................................................................................... 13
1.3. Merkezi İşlemci Biriminde İletişim Yolları................................................................ 13
1.3.1. Veri Yolu ............................................................................................................. 14
1.3.2. Adres Yolu........................................................................................................... 15
1.3.3. Kontrol Yolu........................................................................................................ 16
1.4. Bellek .......................................................................................................................... 17
1.4.1. RAM Bellekler .................................................................................................... 17
1.4.2. ROM Bellekler .................................................................................................... 17
1.4.3. Programlanabilir ROM Bellek (PROM).............................................................. 17
1.4.4. Silinebilir Programlanabilir ROM Bellek (EPROM) .......................................... 18
1.4.5. Elektriksel Yolla Değiştirilebilir ROM Bellek (EEPROM) ................................ 18
1.5. Mikrodenetleyici Tanımı ve Çeşitleri ......................................................................... 18
1.5.1. Mikrodenetleyicinin Tanımı ................................................................................ 18
1.5.2. Mikrodenetleyicilerin Sağladığı Üstünlükler....................................................... 19
1.5.3. Mikrodenetleyici Çeşitleri ................................................................................... 19
1.5.4. Mikrodenetleyici Dış Görünüşleri ....................................................................... 20
1.5.5. Mikroişlemci ve Mikrodenetleyici Arasındaki Farklar ....................................... 20
1.6. Mikrodenetleyici Program Aşamaları ve Gerekli Donanımlar ................................... 21
1.6.1. Mikrodenetleyicilerde Dikkat Edilmesi Gereken Özellikler ............................... 21
1.6.2. PIC16F84 Özellikleri........................................................................................... 22
1.6.3. PIC Programlamak İçin Gerekli Donanımlar ...................................................... 23
1.7. Mikrodenetleyicinin İç Yapısı ve Çevre Elemanları................................................... 23
1.7.1. Mikrodenetleyici Yapısı ...................................................................................... 23
1.7.2. Giriş/Çıkış Pinleri İle Bağlantısı.......................................................................... 26
ÖLÇME VE DEĞERLENDİRME .................................................................................... 32
ÖĞRENME FAALİYETİ-2 ................................................................................................... 33
2. MİKRODENETLEYİCİ PROGRAMLAMA KARTI....................................................... 33
2.1. Mikrodenetleyici Programlama ve Deneme Kartı ...................................................... 33
2.2. Mikrodenetleyici Programlama ve Deneme Yapabilen Bir Kartın Yapımı ................ 35
2.2.1. Kart İçin Gerekli Malzemeler .............................................................................. 35
2.2.2. Kartın Baskı Devresini Çıkarma.......................................................................... 36
2.2.3. Devre Elemanlarını Baskı Devre Üzerine Monte Etme....................................... 38
i

w

w

w

.e
em

de

rs

no

tla

ri.

co
m

2.2.4. Kartın Besleme ve Bağlantılarının Tanıtılması ................................................... 38
DEĞERLENDİRME ÖLÇEĞİ .......................................................................................... 39
ÖLÇME VE DEĞERLENDİRME .................................................................................... 40
ÖĞRENME FAALİYETİ-3 ................................................................................................... 41
3. MİKRODENETLEYİCİYE PROGRAM YÜKLEME ...................................................... 41
3.1. Giriş............................................................................................................................. 41
3.2. Yükleme Programını Kullanma .................................................................................. 44
3.2.1. Yükleme Programının Başlatılması ..................................................................... 45
3.2.2. Program Menülerinin Açıklanması...................................................................... 47
3.2.3. Mikrodenetleyici Seçimi...................................................................................... 47
3.2.4. Program Dosyasını Açma .................................................................................... 48
3.2.5. Mikrodenetleyici Konfigürasyonunu Ayarlama .................................................. 48
3.2.6. Bilgisayar ile Kart Arasındaki Haberleşme Ayarlarını Yapmak ......................... 50
3.2.7. Programı Mikrodenetleyiciye Yükleme............................................................... 51
UYGULAMA FAALİYETİ .............................................................................................. 52
DEĞERLENDİRME ÖLÇEĞİ .......................................................................................... 54
ÖLÇME VE DEGERLENDİRME .................................................................................... 55
CEVAP ANAHTARLARI ..................................................................................................... 56
KAYNAKLAR....................................................................................................................... 58

ii

AÇIKLAMALAR
KOD

523EO0019

co
m

AÇIKLAMALAR

Elektrik Elektronik Teknolojisi

DAL/MESLEK

Mikrodenetleyiciler

MODÜLÜN ADI

Mikroişlemci ve Mikrodenetleyiciler

Bu modül mikrodenetleyicilerin çeşitleri, yapısı,
programlanması ve denenmesine yönelik bilgi ve
becerilerin verildiği öğrenme materyalidir.

tla

MODÜLÜN TANIMI

ri.

ALAN

40/24

ÖN KOŞUL

PLC modülerini tamamlamış olmak.

no

SÜRE

Yapılacak işe uygun mikrodenetleyiciyi seçerek,
mikrodenetleyiciye program yüklemek ve programın
doğruluğunu kontrol etmek.
Genel Amaç
Gerekli ortam sağlandığında istenen sistem için
gerekli mikrodenetleyici ve donanım elemanlarını seçerek
mikrodenetleyiciye
program
yüklemesini
eksiksiz
yapabileceksiniz.

de

rs

YETERLİK

¾

.e
em

MODÜLÜN AMACI

¾
¾

EĞİTİM ÖĞRETİM
ORTAMLARI VE
DONANIMLARI

IBM uyumlu bilgisayar, bir metin editörü (Notpad),
assembler programı (MPASM), yükleme programı (ICProg),
elektrik
araçları
(yankeski,
kargaburun),
programlama ve deneme kartı malzemeleri, baskı devre
kalemi, havya, lehim, asit banyo malzemeleri, matkap.

ÖLÇME VE
DEĞERLENDİRME

Modülün içinde yer alan her faaliyetten sonra,
verilen ölçme araçlarıyla kazandığınız bilgileri ölçerek
kendi kendinizi değerlendirebileceksiniz.

w

w

w

Amaçlar
Yapılacak işe uygun mikrodenetleyiciyi ve donanım
elemanlarını doğru olarak seçebileceksiniz.
Mikrodenetleyici programlama kartlarını tanıyarak,
programlama kartını hatasız çalışacak şekilde
kurabileceksiniz.
Yapılan programı mikrodenetleyiciye hatasız
yükleyebileceksiniz.

iii

iv

de

.e
em

w

w

w

ri.

tla

no

rs

co
m

GİRİŞ

co
m

GİRİŞ
Sevgili Öğrenci,

ri.

Çağımızda bilgi ve teknoloji hızla ilerlemekte, hayatımızın her alanına girmiş
bulunmaktadır.

no

tla

Karmaşık ve uzun zaman alan hesaplamaların çözümlenmesi için bilim dünyası
sürekli bir arayış hâlindeydi. Alman bilim adamı Zuse 1936 yılında mekanik anahtarlı Z1
adında ilk bilgisayarı yaptıktan sonra 1939 yıllında manyetik röle ile çalışan Z2 bilgisayarını
tasarlamıştır. 1942 yılında Lowa State Üniversitesinin profesörü John Atanasoff ile öğrencisi
Clifford Berry ilk elektronik bilgisayar olan vakum tüpleriyle ABC’nin yapımını
gerçekleştirdi. 1946 yılında ABD’de askeri amaç için düşünülen bomba izlerinin
hesaplanmasında kullanılacak olan ENIAC yapıldı. Bu bilgisayarlar manyetik röle ve vakum
tüplü olduklarından, fiziki olarak bir oda büyüklüğünde ve sadece özel amaçlı kullanılıyordu.

w

w

w

.e
em

de

rs

1948 yılında yarı iletkenlerin keşfi ve 1950 yılında transistörlerin kullanılmasıyla
birlikte bilgisayarlar yeni bir boyuta taşındı. Eskisine göre daha küçük ve az enerji harcayan
bilgisayarlar üretilmeye başlandı. 1970 yılında Intel firması bilgisayarın beyni sayılan
mikroişlemciyi (CPU) tek bir entegre olarak tasarladı. Gelen istekler doğrultusunda sürekli
geliştirilen mikroişlemciler, sadece bilgisayarlarda kullanılmayıp otomobil, telefon
sistemleri, beyaz eşya, robotlar, müzik aletleri, güvenlik sistemleri ve endüstride
kullanılmaktaydı. Bellek, giriş/çıkış birimleri ve işlemciden meydana gelen basit bir
mikroişlemcili sistem daha sonraları günümüzde adı geçen elemanların tek bir entegre hâline
getirilmesiyle mikrodenetleyici adını almıştır. Mikroişlemcili sistemi meydana getiren
birimlerin kırpılmış özellikleri mikrodenetleyici sistemde kullanıldığından, maliyet düşmüş,
programlanması kolay olmuş ve dolayısıyla boyutları da küçük olmuştur.
Mikrodenetleyiciler sürekli geliştirilmekte, özellikleri ve performansları arttırılmaktadır.
Mikrodenetleyiciler bilindik kullanım yerlerinin dışında endüstride ve günlük yaşantımızda
kendisine sürekli yeni kullanım alanları açmaktadır.

1

2

de

.e
em

w

w

w

ri.

tla

no

rs

co
m

AMAÇ

ÖĞRENME FAALİYETİ-1

co
m

ÖĞRENME FAALİYETİ-1

ri.

Mikroişlemcileri ve mikrodenetleyicilerin yapı ve çalışmasını öğrenecek,
mikroişlemci ve mikrodenetleyicilerileri özelliklerine göre karşılaştırabilecek, istenilen
özellikte mikroişlemci ve mikrodenetleyiciyi seçebileceksiniz.

ARAŞTIRMA

8 bitlik mikroişlemci ve mikrodenetleyicilerin özelliklerini rapor hâlinde
hazırlayınız.

tla

¾

no

1. MİKRO İŞLEMCİLER VE
MİKRODENETLEYİCİLER

w

.e
em

de

rs

1.1. Mikroişlemcileri Birbirinden Ayıran Özellikler

w

w

1.1.1. Kelime Uzunluğu
Mikroişlemcinin her saat darbesinde işlem yapabileceği bit sayısına kelime uzunluğu
denir. İşlemciler bu süre zarfında komutları yorumlar veya bellekteki veriler üzerinde işlem
yapar. İşlenen veriler işlemcinin özelliğine göre 4-bit, 8-bit, 16-bit, 32-bit ve 64-bit
uzunluğunda olabilir. Kelime uzunluğu veri yolu uzunluğuna eşittir. İşlemci, her saat
darbesinde işleyebildiği kelime uzunlu ile tanımlanır. Intel 8086 işlemcisinin kelime
uzunluğu 16-bit olduğu için 16-bitlik mikroişlemci denir. İşlemciler dört, sekiz, on altı, otuz
iki ve altmış dört bit olarak sınıflandırılır (Şekil 1.1).
3

co
m
ri.

Şekil 1.1: Çeşitli kelime uzunlukları

tla

Eğer komutlar veya veriler küçük gruplar hâlinde işlenirse hızda azalma meydana
gelir. İşlenen veri sayısının artması aynı sürede yapılan işin miktarını artırmakta ve yapılan
işin süresini azaltmaktadır.

Üretim Yılı

Intel
Motorola
Zilog
MOS Tec
Intel
Intel
Motorola
Intel
Motorola
Intel
Motorola
Intel
Intel

1971
1974
1975
1976
1976
1978
1979
1982
1983
1985
1987
1989
1993

.e
em

de

4004
6800
Z80
6502
8085
8086
68000
80286
68010
80386DX
68030
80486
Pentium

Veri Yolu genişliği
(Kelime Uzunluğu)
4 bit
8 bit
8 bit
8 bit
8 bit
16 bit
16 bit
16 bit
16 bit
32 bit
32 bit
32 bit
32 bit

Tablo 1.1: Mikroişlemciler ve kelime uzunlukları

w

w

w

Mikroişlemci

rs

Üretici Frma

no

16-bitlik bir işlemci ile 16-bitlik iki sayının toplanması, çarpılması veya
karşılaştırılması bir adımda yapılırken 8-bitlik işlemcide bu işlem daha fazla adımda
gerçekleştirilmektedir. Tablo 1.1’de mikroişlemciler ve kelime uzunlukları görülmektedir.

4

co
m

1.1.2. Komut İşleme Hızı

rs

no

tla

ri.

Mikroişlemcilerin çalışması için saat sinyallerine ihtiyaç vardır. İşlemci (CPU) her
saat sinyalinde bir sonraki işlem basamağına geçer. İşlemcinin hızını incelerken saat
frekansına ve komut çevrim sürelerine bakmak gerekir. Saat frekansı mikroişlemciye
dışardan uygulanan ya da işlemcinin içinde bulunan osilatörün frekansıdır. Komut çevrim
süresi ise herhangi bir komutun görevini tamamlayabilmesi için geçen süredir. Şekil 1.2’de
komut çevrim süresi gösterilmiştir

de

Şekil 1.2: Komut çevrim süresi

.e
em

Her işlemcinin komut çevrim süresi farklı sayıda saat çevrimleri ile tanımlanmaktadır.
Tablo 1.2’de işlemcinin komut çevrim süreleri birbirine denk olan komutlara bakarak
karşılaştırılma yapılmıştır.
Mikro
İşlemci

Komut

Saat Periyodu

2 MHz

6502A

ADC

2

1 ms

2 MHz

68B00

ADCA

2

1 ms

5 MHz

8085A

ACI

7

1,4 ms

4 MHz

Z80A

ADC

7

1,75 ms

w

Süre

Tablo 1.2: Karşılaştırmalı hız tablosu

w

w

Harici Saat
Girişi

Tabloda görüldüğü gibi, sadece saat frekansına bakarak değerlendirme yapmak
yanıltıcı olabilmektedir. Saat frekansı her zaman gerçek çalışma frekansını yansıtmasa da,
bir mikroişlemcinin hızını doğrudan etkilemektedir. Bir mikroişlemcinin hızını artıran temel
unsurlar şöyle sıralanabilir:

5

CPU tasarım teknolojisi

¾

Kelime uzunluğu

¾

İşlemci komut kümesi çeşidi

¾

Zamanlama ve kontrol düzeni

¾

Kesme altyordamlarının çeşitleri

¾

Bilgisayar belleğine ve giriş/çıkış aygıtlarına erişim hızı

tla

ri.

co
m

¾

1.1.3. Adresleme Kapasitesi

no

Bir işlemcinin adresleme kapasitesi, adresleyebileceği veya doğrudan erişebileceği
bellek alanının büyüklüğüdür. Bu büyüklük işlemcinin adres hattı sayısına bağlıdır. Bu hattın
sayısı tasarlanacak sistemde kullanılabilecek bellek miktarını da belirlemektedir.

.e
em

de

rs

Motorola 6800, Zilog Z-80, Intel 8085 ve Mostek 6502 mikroişlemcileri 16 adres
hattına sahiptir. 16-bitlik adres hattına sahip bir mikroişlemcinin adres büyüklüğü 216 ile
65536 olacaktır. Bu miktar yaklaşık 64KB ile ifade edilir.

Şekil 1.3: 64 KB’lık 6502 işlemcisi

w

Eğer çok büyük bellek gerektiren bir sistem tasarlanacaksa işlemcinin adres hattı
büyük seçilmelidir. Bundan sonraki bilgiler daha çok 6502 mikroişlemci ağırlıklı olacaktır.

w

w

1.1.4. Kaydedici Sayısı
Bir programcının assembly diliyle program yazımı sırasında en çok ihtiyaç duyduğu
geçici bellek hücreleri kaydedicilerdir. Mikroişlemcilerde kaydediciler, genel amaçlı
kaydediciler ve özel amaçlı kaydediciler olmak üzere iki grupta toplanır. Tüm
mikroişlemcilerde bu gruplara dahil edebileceğimiz değişik görevlere atanmış, farklı
özellikte, sayıda kaydediciler bulunur. Bu kaydediciler 8, 16, 32 ve 64-bitlik olabilir.
6

co
m

Kaydedicilerin sayısının programcının işinin kolaylaştırmasının yanında programın
daha sade ve anlaşılır olmasını da sağlar. Her mikroişlemcinin kendine has yapısı ve
kaydedici isimleri vardır. Herhangi bir mikroişlemciyi programlamaya başlamadan önce
mutlaka bu kaydedicilerin isimlerinin ve ne tür işlevlere sahip olduklarının iyi bilinmesi
gerekir. Şekil 1.3’te 6502 mikroişlemcisi görülmektedir.

1.1.5. Farklı Adresleme Modları

tla

ri.

Bir komutun işlenmesi için gerekli verilerin bir bellek bölgesinden alınması veya bir
bellek bölgesine konulması ya da bellek–kaydedici veya kaydedici–kaydedici arasında
değiştirilmesi için farklı erişim yöntemleri kullanılır. Mikroişlemcinin işleyeceği bilgiye
farklı erişim şekilleri, ‘adresleme yöntemleri’ olarak ifade edilir. Kısaca adresi tarif
yollarıdır.

rs

no

Herhangi bir bellek bölgesindeki veriye çok farklı şekillerde erişilebilmek için farklı
yolların olması programcıya esneklik sağlar. Mesela, 6800 ve 8085 işlemcilerde 7’şer, Z-80
işlemcisinde 10 ve 6502 mikroişlemcisinde 13 adet adresleme modu vardır. 6502
işlemcisinde temelde 51 komuta vardır. Bu komutlar 13 adresleme yoluyla birlikte 150
civarına ulaşmaktadır. Bu da programcının elinde kullanabileceği çok komut demektir. Tüm
bu işlemcilerde esasta aynı olan adresleme modları bazılarında uygulamada değişmektedir.
Adresleme modlarını meydana getiren bazı adresleme türleri aşağıda sıralanmıştır.
Doğrudan adresleme

¾

Dolaylı adresleme

¾

Veri tanımlı adresleme

.e
em

de

¾

Kaydedici adresleme

¾

Mutlak adresleme

¾

Göreceli adresleme

¾

İndisli adresleme

¾

Akümülatör ve imalı adresleme

w

¾

w

w

1.1.6. İlave Edilecek Devrelerle Uyumluluk
Mikroişlemcili sisteme eklenecek devrelerin en azından işlemci hızında çalışması
gerekir. Sisteme ilave edilecek bellek entegrelerinin hızları işlemci ile aynı hızda olması
tercih edilmelidir. Aynı şekilde sisteme takılan giriş çıkış birimlerinin (Şekil 1.4) hızları ve
performansları mikroişlemci ile aynı veya çok yakın olmalıdır. Sisteme takılan birimlerin
hızları mikroişlemciye göre düşükse mikroişlemcinin hızı diğer elemanlardaki yavaşlıktan
dolayı düşer.
7

co
m
ri.
tla
no

rs

Şekil 1.4:CPU’nun giriş çıkış birimleri

de

1.2. Mikroişlemciyi Oluşturan Birimler ve Görevleri
Adres yolu

MAR

Dahili adres yolu

.e
em

DAR

MBR

Dahili veri yolu

w

Veri yolu

IR
ALU

A
Komut
Kodçözücüsü

Zamanlama ve
Kontrol Birimi
Di?er CPU
elemanlaryna

Kontrol yolu
R/W

Şekil 1.5: 6502 Mikroişlemcisinin genel ve özel amaçlı kaydedicileri

w

w

DR

Bellek

PC

1.2.1. Kaydediciler
Kaydediciler, daha önce de bahsedildiği gibi, genel ve özel amaçlı olmak üzere iki
gruba ayrılır. Bunlardan başka programcıya gözükmeyen (ilgilendirmeyen) kaydediciler de
vardır. (IR, DAR, MAR ve MBR gibi). Genel amaçlılara 6502 işlemcisinde; akümülatör, X
indis ve Y indis kaydedicisi girmektedir. Özel amaçlılar ise, PC, SP, Bayraklar, DR gibi
kaydediciler girmektedir. (Şekil 1.5) Aşağıda bunlardan bazıları anlatılacaktır.
8

co
m

1.2.1.1. Akümülatör
Akümülatörler (ACC ya da A olarak da tanımlanabilir), bilgisayarın aritmetik ve
mantık işlemleri sırasında depo görevi yapan önemli bir kaydedicidir. Eğer kaydediciler bir
sistemde sekreterya olarak düşünülürse, akümülatör bu sistemde baş sekreter olarak yerini
alır.

tla

ri.

Ara değerlerin üzerinde tutulması, sisteme gelen verinin ilk alındığı yer, belleğe veya
dış dünyaya gönderilecek verilerin tutulduğu yer olarak görev yapar. Bu yüzden, işlemcinin
A kaydedicisini hedefleyen komutları çoktur. Bazı işlemcilerde B kaydedicisi de yardımcı
akümülatör olarak kullanılır.
1.2.1.2. İndis Kaydedicileri

no

X ve Y olarak tanımlanan indis kaydedicilerinin temelde üç görevi vardır.
Hesaplamlarda ara değerlerin geçici tutulmasında, program döngülerinde ve zamanlama
uygulamalarında bir sayıcı olarak ve bellekte depolanmış bir dizi verinin üzerinde bir indisçi
olarak kullanılmaktadır. Bazı işlemcilerde sadece tek indisçi olabilir.

rs

1.2.1.3. Program Sayıcı (PC)

w

w

w

.e
em

de

Mikroişlemcinin yürütmekte olduğu program komutlarının adres bilgisini tuttuğu özel
amaçlı bir kaydedicidir. Bilindiği gibi bir programı oluşturan komutlar ve veriler normal
bellekte saklıdır. Bilgisayarın çalışması sırasında hangi komutun hangi sırada
kullanılacağının bilinmesi gerekir. Bu görevi program sayıcı (PC) yerine getirir. Program
sayıcının bit genişliği adres yolu genişliği kadardır. Eğer işlemcinin 16-bit adres hattı var ise
PC=16 bit, işlemcinin 32-bit adres hattı var ise PC=32 bit büyüklüğünde olur.

Şekil 1.6: PC’in işleme adımları

9

co
m

Bellekten alınan her komut kodundan sonra alınacak yeni komut kodunun adresi
program sayıcıya otomatik olarak işlemci tarafından yüklenir. Komut çevrimi, PC’nin yeni
adresi adresyoluna koyması ile başlar. Bunun ardından da ilgili kontrol sinyali gönderilir.
Bellekten gelen her bilgiden sonra PC, kontrol devresinden aldığı işarete uyarak adres
satırını 1 arttırır. (Şekil 1.6) Böylece bilgilerin bellekten işlemciye düzenli bir şekilde
gelmesi sağlanır.

ri.

1.2.1.4. Durum Kaydedicisi (Bayraklar)

de

rs

no

tla

Durum kaydedicisi 8-bitlik bir kaydedicidir. Bu kaydedicinin her bir biti ayrı ayrı
anlam ifade eder. Mikroişlemci içinde veya dışardan yapılan herhangi aritmetiksel, mantıksal
veya kesmelerle ilgili işlemlerin sonucuna göre bu bitler değer değiştirir. Bir işlem
sonucunda bu bitlerin aldığı değere göre program yön bulur. Programcı bu bitlerde oluşacak
değerlere göre programa yön verebilir. Şekil 1.7’te 6502 mikroişlemcisine ait 1-baytlık
durum kaydedicisinin bit şekli göstermektedir.

.e
em

Şekil 1.7: 6502 bayrak kaydedicisi

Kabul edilen terminolojiye uyarak, eğer bir bayrağa karşılık olan bit 1 ise söz konusu
bayrak kuruldu, eğer bit 0 ise söz konusu bayrak silindi denir.

w

Carry (elde bayrağı-C): Elde / borç bayrağıdır. 8-bitlik bir işlem sonucunda
dokuzuncu bit ortaya çıkıyorsa elde var demektir. Bu durumda C bayrağı mantıksal 1 olur.
Bu bayrak biti programcı tarafından kurulur ya da silinebilir (CLC, SEC). Ayrıca bazı
komutlar tarafından test edilebilir (BCC, BCS).

w

w

Zero (sıfır bayrağı-Z): Sıfır bayrağı, aritmetik ve mantık işlemi sonucunda kaydedici
içeriği sıfır ise Z = 1’e kurulur. Aksi durumda sıfırlanır (Z = 0).

Interrupt disable (kesme yetkisizleştirme bayrağı-I): Mikroişlemci normal
durumda komutları işlerken bir kesme (IRQ) geldiğinde bu kesme bu bayrak biti ile
engellenebilir. Eğer bu bit komutlar (SEI) mantıksal 1 yapılırsa gelen kesmeler göz önüne
alınmaz. Ancak bu bayrak mantıksal 0 olduğunda kesme dikkate alınır ve kesme hizmet
yordamına dalınır. Yani bu bayrak biti, normal işleyiş sırasında bir kesme geldiğinde kabul
edilip edilmeyeceğini belirler. Programcı bunu komutla yapar. NMI kesmesi bu bayrak için
kullanılmaz.
10

co
m

Decimal (ondalık bayrağı-D): Bu bayrak 1 olduğunda aritmetik işlemler BCD
modunda yapılırken 0 olduğunda ikilik modta yapılır. Bu işlem eğitim ve uygulama açısında
programcıya büyük kolaylıklar sağlar.

ri.

Overflow (taşma bayrağı-V): Bu bayrak aritmetik işlemlerde, eğer işlem +127 ile 128 aralığını geçiyorsa bir taşma meydana gelir ve V bayrağı 1 olur. Diğer yandan, yine
benzer işlemlerde, eğer pozitif bir sayı ile negatif bir sayı üzerinde işlem yapılıyorsa ve
sonuç pozitif çıkması gerekiyorken negatif çıktıysa, bu bayrak 1 olur. Taşma bayrağı işaretli
sayılarla işlem yapılırken devreye girer.

tla

Negative (negatif bayrağı-N): 8-bitlik bir işlemcide 7.bit MSB biti olarak bilinir.
Eğer MSB biti bir işlem sonucunda 1 ise N bayrağı 1’e kurulur. Eğer MSB biti 0 ise
kaydedicisideki değer pozitif demektir ki, N bayrağı 0 olur.

no

Bayraklardaki 4. bit B (Break) olarak tanımlanmış olup, program durduğunda
otomatikman 1 olur. 5. bit ileride kullanılmak üzere boş (+5V) bırakılmıştır.

1.2.1.5. Yığın İşaretçisi (SP)

rs

Farklı mikroişlemcilerde birbirine benzer bayraklar olmasına rağmen faklı bayraklarda
olabilir.

Şekil 1.8: SP’nin işleme adımları

w

w

w

.e
em

de

RAM belleğin herhangi bir bölümü yığın olarak kullanılabilir. Yığın mikroişlemcinin
kullandığı geçici bellek bölgesi olarak tanımlanır. Yığın işaretçisi, yığının adresini tutan özel
amaçlı bir kaydedicidir. SP adres bilgisi göstereceği için 16-bit uzunluğundadır.

11

co
m

Bu kaydediciye programın başında yığının başlangıç adresi otomatik olarak atanır.
İşlemci tarafından yığının başlangıç adresi SP’ye yüklendikten sonra artık belleğin bu
bölgesi depo benzeri bir görev yürütür. Yığına veri girişi yapıldıkça yığın göstericisinin
değeri de yapısına gore değişir. (Şekil 1.8).

tla

ri.

Yığına her veri girişinde yığın göstericisinin değeri bir azalmakta, yığından her veri
çekildiğin de ise yığın göstericisinin değeri otomatik olarak bir artmaktadır. Yığına
gönderilen veri yığın göstericisinin işaret ettiği adresteki bellek hücresine yazılır. Yığından
veri çekilirse yığın göstericisi bir önceki verinin adresine işaret edecek şekilde bir
azalacaktır. Mikroişlemci işlediği ana programdan alt programa dallandığında veya bir
kesme sinyali ile kesme hizmet programına dallandığında mevcut kaydedicilerin içeriklerini
ve dönüş adresini saklayabilmek için otomatik olarak verileri ve adresleri yığına atar. Alt
programdan veya kesme hizmet programından ana programa geri dönülmesi durumunda, ana
programda kaldığı yerin adresini ve kaydedicilerdeki verileri kaybetmemiş olur.

no

1.2.2. Aritmetik ve Mantık Birimi (ALU)

BELLEK

DAHİLİ VERİ YOLU

A

DR

ALU

w

w

w

.e
em

de

rs

Mikroişlemcinin en önemli kısmını aritmetik ve lojik birimi (ALU) oluşturur (Şekil
2.5).Bu ünite kaydediciler üzerinde toplama, çıkarma, karşılaştırma, kaydırma ve döndürme
işlemleri yapar. Yapılan işlemin sonucu kaydediciler üzerinde saklanır. Bazen de yalnızca
durum kodu kaydedicisini etkiler. ALU’daki bir işlem sonucunda durum kodu
kaydedicisindeki bayrakların birkaçı etkilenebilir veya hiçbiri etkilenmez. Programcı için
çoğu zaman ALU’da yapılan işlemin sonucunda etkilenen bayrakların durumu daha
önemlidir. Gelişmiş mikroişlemcilerin içindeki ALU’lar çarpma ve bölme işlemlerini
yapabilmektedir. ALU’nun işlem yapabileceği en büyük veri, mikroişlemcideki
kaydedicilerin veri büyüklüğü ile sınırlıdır. 8 bitlik mimariye sahip bir mikroişlemcideki
ALU en fazla 8 bitlik sayılar üzerinde işlem yapar.

BAYRAKLAR

Şekil 1.9: Aritmetik ve mantık birimi

ALU’nun yapabildiği işlemler iki grupta toplanır.

12

Aritmetiksel işlemler

co
m

¾

Mantıksal işlemler
Mantıksal çarpma VE işlemi

Mantıksal toplama VEYA işlemi

Özel VEYA, XOR işlemi

Değil, NOT işlemi

Karşılaştırma (=, =<, =>, <> gibi) ve kaydırma gibi işlemler bu ünitede
yapılır.

Sağa veya sola kaydırma ve döndürme işlemleri

İçerik artırma veya azaltma işlemleri

rs

no

tla

de

¾

ri.

ALU’da yapılan aritmetiksel işlemler mikroişlemcinin yapısına göre çeşitlilik
gösterebilir. 8-bitlik mimariye sahip bir mikroişlemcide toplama, çıkarma, çarpma, bölme
işlemleri ve ondalıklı sayılarla matematiksel işlemler yapılabilmektedir. Gelişmiş
işlemcilerde büyük ondalıklı sayılarla işlem yapmak için ayrıca matematik işlemci
mevcuttur.

.e
em

Bütün bu işlemler teknolojik yapısı değişik kapı ve flip-flop’lardan oluşan bir sistem
tarafından yürütülmektedir.

1.2.3. Kontrol Birimi

Kontrol birimi, sistemin tüm işleyişinden ve işlemin zamanında yapılmasından
sorumludur. Kontrol birimi, bellekte program bölümünde bulunan komut kodunun alınıp
getirilmesi, kodunun çözülmesi, ALU tarafından işlenmesi ve sonucun geri belleğe
konulması için gerekli olan kontrol sinyalleri üretir.

w

1.3. Merkezi İşlemci Biriminde İletişim Yolları

w

w

Mikroişlemcide işlenmesi gereken komutları taşıyan hatlar yanında, işlenecek verileri
taşıyan hatlar ve kesme işlemlerini kontrol eden sinyalleri taşıyan hatlar bulunur. İşlenecek
verileri işlemciye yollamak veya işlenen verileri uygun olan birimlere aktarmak için aynı
hatlardan faydalanılır. Tüm bu yollara iletişim yolları adı verilir.

13

Tampon

Tampon

Mikroişlemc
i

KONTROL
YOLU

KONTRO
L

Bellek

Giriş
Çıkış

Tampon

Tampon

ADRES YOLU

co
m

VERİ YOLU

ri.

Şekil 1.10: Mikroişlemcili sistemde birimler arasında iletişimi sağlayan yollar

tla

1.3.1. Veri Yolu

rs

no

Merkezi işlem biriminden bellek ve giriş / çıkış birimlerine veri göndermede ya da bu
birimlerden işlemciye veri aktarmada kullanılan hatlar, veri yolu olarak isimlendirilir. Veri
yolu genişliği, mikroişlemcinin yapısı, mikroişlemci kaydedici genişliği ve kullanılan kelime
uzunluğu ile doğrudan ilişkilidir. 8-bitlik mikroişlemcilerde veri yolu 8 hattı içerirken, 16bitlik işlemcilerde 16 hattı içerir. Mikroişlemciye işlenmek üzere iletilen veriler veri yolu
üzerinden iletildiği ya da mikroişlemcide işlenen veriler veri yolu üzerinden ilgili birimlere
yollandığı için, veri yolunda iki yönlü iletişim mümkün olmaktadır.
Bellek

RAM

de

Merkezi
İşlem
Birimi

Tamponlar

.e
em

Tamponlar

ROM

Tamponlar
Giriş
/Çıkış
Birimi

Şekil 1.11: Bellek biriminden işlemciye veri yolu kullanarak veri aktarımı

w

w

w

Bellekte bulunan ve CPU tarafından işlenmesi istenilen veriler, veri yolu üzerinden
iletilir. (Şekil 1.11) Bellekteki verilerin hatlara yerleştirilmesinde veya hatlardan gelen
verilerin CPU’ya aktarılmasında, verileri kısa süre tutmak amacıyla kullanılan tamponlardan
faydalanılır. Tampon olarak kaydediciler kullanılır. CPU’da işlenen verilerin harici
elemanlara iletilmesinde veya harici elemanlardan gelen verilerin CPU’ya gönderilmesinde
ara birim olarak giriş/çıkış (G/Ç) birimi kullanılır. CPU ile G/Ç birimi arasında veri
iletiminde, veri yolundan faydalanılır. Veri yolu üzerinden G/Ç birimine gelen veriler,
tamponlar kullanılarak veri yolu üzerinden klavye, monitör, yazıcı ve tarayıcı gibi birimlere
gönderilir veya bu birimlerden gelen bilgiler CPU’ya aktarılır.

14

Bellek
RAM

Tamponlar
Giriş /Çıkış
Birimi

Tamponlar

ri.

Tamponlar

ROM

co
m

Merkezi
İşlem
Birimi

tla

Şekil 1.12: İşlemcide işlenen verilerin, veri yolu kullanılarak G/Ç birimine iletilmesi

1.3.2. Adres Yolu

RAM

Merkezi
İşlem
Birimi

rs

Bellek

no

Verinin alınacağı (okunacağı) veya verinin gönderileceği (yazılacağı) adres bölgesini
temsil eden bilgilerin taşınmasında kullanılan hatlar, adres yolu olarak isimlendirilir. Adres
yolu, tek yönlüdür ve paralel iletişim sağlayacak yapıdadır.

ROM

de

Tamponlar

Tamponlar

Giriş
/Çıkış
Birimi

.e
em

Tamponlar

.

Şekil 1.13: Verilerin iletileceği bölgenin adres yolu kullanılarak tespiti

w

CPU’da işlenen verilerin, bellekte saklanması veya diğer elemanlara gönderilmesi
gerekebilir. Bu durumda, verinin saklanacağı veya gönderileceği yerin adresi, mikroişlemci
içerisindeki PC yardımı ile adres yolu üzerine yerleştirilir. Yerleştirilen bilginin temsil ettiği
adres bölgesi dahili bellekte olabileceği gibi, harici bellekte de olabilir. Yerleştirilen bilginin
kodu çözülerek ilgili adres bölgesi bulunur ve bulunan adres bölgesindeki veri, veri yoluna
konur. Yapılan bu işlemlerin düzgün ve kontrollü olarak gerçekleştirilmesinden, zamanlama
ve kontrol birimleri görevlidir.

w

w

Adres yoluna yerleştirilen bilgi, mikroişlemcinin kapasitesine ve adreslenebilecek
bölge sayısına bağlı olarak değişir. Bir mikroişlemci tarafından adreslenebilecek maksimum
bellek kapasitesi ‘2n’ formülü ile hesaplanabilir. ‘n’ adres hattı sayısını gösterir.
Bu durumda;
216 = 65536 Bayt = 64 KBayt adres bölgesi,
220 =1048576 Bayt = 1MBayt adres bölgesi ve
232 = 4 GBayt adres bölgesi adreslenebilir.
15

co
m

Mikroişlemci veri yolu ve adres yolu farklı sayıda hattı içerebilir. Veri yolu 8 hattan
oluşan bir mikroişlemcili sistemde, adres yolu 16 hattan (16 bit) oluşabilir. Günümüz
mikroişlemcilerinde sürekli veri yolları artırılırken adres yolları hattını büyük oranda
korumaktadır. Adres yolları hatlarının fazla artmamasının sebebi, şu anda kullanılar
adresleme kapasitesinin çok yüksek ve ileriye yönelik olmasındandır.

1.3.3. Kontrol Yolu

tla

ri.

Mikroişlemcili sistemde bulunan birimler arasındaki ilişkiyi düzenleyen sinyallerin
iletilmesi amacıyla kullanılan hatlar kontrol yolu olarak adlandırılır. Her bir mikroişlemciye
ait komut kümesi ve belirli amaçlar için kullanılan sinyallerin farklı olması sebebiyle, her
mikroişlemcide farklı sayıda hattı içeren kontrol yolu bulunabilir. Kontrol yolunda bulunan
sinyaller üç farklı işlemi gerçekleştirmek için kullanılır:

no

Sinyal seçimi: Sistemde kullanılacak sinyallerin ve sinyallerin uygulanacağı yerin
belirlenmesi işlemini gerçekleştiren sinyaller.
Yön tayini: Sistemdeki verinin ne yöne gideceğini belirleyen sinyaller (okuma veya
yazma).

rs

Zamanlama: Yapılacak işlemlerin sırasını ve zamanlamasını belirleyen sinyaller.

.e
em

de

Kontrol yolunda bulunan hat sayısı, mikroişlemcinin bit sayısına bağımlı değildir.
Kontrol yolunu oluşturan hatların mikroişlemci içersinde ağ şeklinde yayılması sebebiyle,
kontrol yolu terimi yerine kontrol hatları terimi kullanılabilir. Mikroişlemcili sistemdeki
birimlerin çalışması, kontrol hatları üzerinden iletilen tetikleme sinyalleri ile yönlendirilir.
Mesela, bir bellekten veri okunacağı zaman, ilgili bellek entegresine aktif olmasını
sağlayacak yetkilendirme (CS-Chip select) sinyali ile birlikte, okuma işlemi için gerekli
uygun R/W sinyalinin uygulanması gerekir.
Merkezi
İşlem
Birimi

Giriş /Çıkış
Birimi

Şekil 1.14: Kontrol sinyallerinin kontrol yolu kullanılarak bellek birimine iletimi

w

w

w

Bellek

16

co
m

1.4. Bellek
1.4.1. RAM Bellekler

no

tla

ri.

Mikroişlemcinin çalışması esnasında her türlü değişkenin üzerinde yer aldığı ve geçici
işlemlerin yapıldığı birimi RAM belleklerdir. Özel bir sıra takip etmeden herhangi bir adrese
erişildiği için rastgele erişimli bellek (Random Access Memory) – RAM olarak
isimlendirilir. Ayrıca yığın olarak adlandırılan ve mikroişlemci programlarının çalıştırılması
esnasında çeşitli alt-programlar kullanıldıkça geri dönüş adreslerinin, içeriklerinin
değişmesinin istenmediği kaydedici içeriklerinin saklandığı bellek bölgeside yine RAM’da
birimlerinde yer alır. RAM tipi entegreler hem yazmada hem okumada kullanıldıklarından
CPU, bu entegreleri kontrol ederken okuma R (Okuma) ve W (yazma) sinyalleri göndermesi
gerekir. (Şekil 1.15) Ayrıca entegrenin istendiği zaman aktif duruma geçmesinin sağlayacak
entegre seçimi (CS =Chip Select) pini bulunmaktadır ve active low (aktif düşük, 0 Volt) ile
çalışır. Her bir biti bir flip-flop devresi olan bu bellekler, yeni bir tetikleme işareti gelinceye
kadar içindeki bilgiyi (0 veya 1’i) saklayabilme özelliği sebebiyle çok düşük güç tüketimi ile
çalışmaktadır.

de

rs

Dışardan devreye bağlanan bir pil yardımıyla
içindeki bilgileri çok uzun süreler boyunca
saklayabilme imkânı vardır.Yüksek maliyetli olmaları
sebebiyle çok yüksek kapasitelerde üretilmez.

.e
em

Şekil 1.15: RAM giriş/çıkış sinyalleri

1.4.2. ROM Bellekler

Yalnız okunabilen birimlere ROM (Read Only Memory)
bellekler denir. Bu bellek elemanlarının en büyük özelliği enerjisi
kesildiğinde içindeki bilgilerin silinmemesidir. ROM belleklere
bilgiler üretim aşamasında yüklenir. Kullanıcıların bellek içindeki
bilgileri değiştirmesi mümkün değildir.

w

1.4.3. Programlanabilir ROM Bellek (PROM)

w

w

PROM’lar bir kez programlanabilir. Bu bellek elemanı entegre şeklindedir.
Kaydedilen bilgiler enerji kesildiğinde silinmez. Üzerine program kodlarını veya verileri
yazmak için PROM programlayıcı cihazlara ihtiyaç vardır. Bu bellek elemanının yapısında
küçük sigorta telleri bulunur. Bellek hücrelerinde, hepsi sağlam durumda bulunan sigortalar
“1”i temsil eder. Yazılacak olan bilginin bit düzeninde “0”lara karşılık gelen hücredeki
sigorta, küçük bir elektrik akımı ile aktarılır. Bu şekilde PROM programlanır.

17

co
m

1.4.4. Silinebilir Programlanabilir ROM Bellek (EPROM)
EPROM’lar bellek hücrelerine elektrik sinyali uygulanarak programlama işlemi
yapılır. Kaydedilen bilgiler enerji kesildiğinde silinmez. EPROM içindeki programın
silinmemesi için cam pencereli kısım ışık geçirmeyen bantla örtülmelidir. Eprom belleğe
yeniden yazma işlemi yapmak için EPROM üzerindeki bant kaldırılıp ultraviyole altında
belirli bir süre tutmak gerekir. Bu şekilde içindeki bilgiler silinebilir. (Şekil 1.15)

no

Şekil 1.15: Bir
EPROM Bellek

tla

ri.

Böylece tekrar programlanabilir hâle gelen ürün tekrar
tekrar farklı programların denenmesi ve cihazın çalıştırılması için
kullanılabilir. Silme işlemi esnasında belirli şartlara dikkat
edilmemesi (gereğinden fazla süre UV ışığa maruz kalmak,
yüksek ışık şiddetine sahip UV ampul kullanmak gibi) hâlinde
silinebilme ömrü kısalan entegreler bir süre sonra kullanılamaz
(silinemez) hâle gelmektedir.

1.4.5. Elektriksel Yolla Değiştirilebilir ROM Bellek (EEPROM)

de

rs

Üzerindeki bilgiler, elektriksel olarak yazılabilen ve silinebilen bellek elemanlarıdır.
EEPROM’ u besleyen enerji kesildiğinde üzerindeki bilgiler kaybolmaz. EEPROM’daki
bilgilerin silinmesi ve yazılması için özel silme ve yazma cihazlarına gerek yoktur.
Programlayıcılar üzerinden gönderilen elektriksel sinyalle programlanır. EEPROM’la aynı
özellikleri taşıyan fakat yapısal olarak farklı ve daha hızlı olan, elektriksel olarak
değiştirilebilir ROM’lara flash bellek denir.

1.5. Mikrodenetleyici Tanımı ve Çeşitleri

.e
em

1.5.1. Mikrodenetleyicinin Tanımı

w

w

w

Bir mikroişlemcili systemi meydana getiren temel bileşenlerden mikroişlemci, bellek
ve G/Ç birimlerinin, bazı özellikleri kırpılarak (azaltılarak) tek bir entegre içerisinde
üretilmiş biçimine mikrodenetleyici (microcontroller) denir. Denetim teknolojisi gerektiren
uygulamalarda kullanılmak üzere tasarlanmış olan mikrodenetleyiciler, mikroişlemcilere
göre çok daha basit ve ucuzdur. Endüstrinin her kolunda kullanılan mikrodenetleyiciler;
otomobillerde, kameralarda, cep telefonlarında, fotokopi ve çamaşır makinelerinde,
televizyonlarda, oyuncak vb cihazlarda sıklıkla kullanılmaktadır (Şekil 1.16).

18

co
m
ri.
tla

Şekil 1.16: Mikrodenetleyicilerin kullanım alanları

no

1.5.2. Mikrodenetleyicilerin Sağladığı Üstünlükler

Mikroişlemcili sistemin tasarımı ve kullanımı mikrodenetleyicili sisteme göre
daha karmaşık ve masraflıdır.

¾

Mikrodenetleyicili bir sistemin çalışması için elemanın kendisi ve bir osilatör
kaynağının olması yeterlidir.

¾

Mikrodenetleyicilerin küçük ve ucuz olmalası, bunların tüm elektronik kontrol
devrelerinde kullanılmasını sağlamaktadır.

de

rs

¾

.e
em

1.5.3. Mikrodenetleyici Çeşitleri

w

w

w

Günümüzde mikrodenetleyiciler, basit ve ucuz üretim maaliyetleri dolayısıyla bir çok
firma tarafından üretilmektedir. Bunlardan en önemlilerine; Intel firması tarafından üretilen
8051 serisi, Motorola tarafından üretilen 68HC11 serisi ve Microchip tarafından üretilen ve
kısaca PIC denilen 16X/18X serisi örnek olarak verilebilir.

19

no

tla

ri.

co
m

1.5.4. Mikrodenetleyici Dış Görünüşleri

rs

Şekil 1.17:Mikrodenetleyici çeşitleri

de

1.5.5. Mikroişlemci ve Mikrodenetleyici Arasındaki Farklar

w

w

w

.e
em

Bir mikroişlemci görevini yerine getirebilmesi için mutlaka, verilerin saklanacağı
bellek birimine, dış dünyadan veri alış-verişinin düzenli yapılmasını sağlayan giriş/çıkış
birimine ihtiyaç duyar. Bunlar bir mikroişlemcili sistemde ayrı ayrı birimler (entegreler)
şeklinde yerini alır. Bundan dolayı mikroişlemcili sistemlere çok-entegreli sistemler denilir.
(Şekil 1.18) Bilgisayar gibi mikroişlemcili sistemlere verilen bir örnekte, bir bilgisayarın bir
çamaşır makinesinde veya cep telefonunda kullanılması elbette mümkün olmayacaktır.
Bilgisayar aynı anda milyonlarca işi yapabildiğinden ve çok yer kapladığından böyle
yerlerde kullanılması mantıklı olmaz ve maliyetli olur. Bundan dolayı, sistemi meydana
getiren elemanların birçok özelliklerinden feragat edilerek ve bir entegrede birleştirilerek,
mikroişlemcilerin yeni türevleri oluşturulmuştur.

Şekil 1.18: Mikroişlemcili sisteminin temel bileşenlerinin blok diyagramı

20

tla

ri.

co
m

Mikrodenetleyicilerde tüm bu birimler (işlemci, bellek ve G/Ç, bunlara ADC ve DAC
gibi sinyal dönüştürücü elemanlarda eklenebilmektedir) bir arada bulunmaktadır. Bundan
dolayı mikrodenetleyiciler tek-entegreli sistemler olarak anılır (Şekil 1.19).

Şekil 1.19: Mikrodenetleyici sisteminin temel bileşenlerinin blok diyagramı

no

Mikrodenetleyici tüm birimlerin birarada tek bir entegrede olması işlem hızına ve
performansa doğrudan yansımaktadır.

1.6. Mikrodenetleyici Program Aşamaları ve Gerekli Donanımlar

de

rs

Mikroişlemci firmalarının ürettiği birkaç gözde mikrodenetleyici bulunmaktadır. Her
firma ürettiği entegreye, özelliklerini belirlemek için isim ve parça numarası vermektedir.
Bunlar; 16F628A, 8051, 68HC11 gibi kodlamalardır. Bir uygulamaya başlamadan önce
hangi firmanın ürünü kullanılacağına, daha sonra da hangi numaralı denetleyicinin
kullanılacağına karar vermek gerekir.

.e
em

1.6.1. Mikrodenetleyicilerde Dikkat Edilmesi Gereken Özellikler
Mikrodenetleyiciler ile tasarım yapmadan önce tasarlanan sisteme uygun bir
denetleyici seçmek için o denetleyicinin taşıdığı özelliklerin bilinmesi gereklidir.
Mikrodenetleyicinin hangi özelliklere sahip olduğu kataloglarından anlaşılabilir. Aşağıda
sıralanan özellikler bunlardan bazılarıdır.
Programlanabilir dijital paralel giriş/çıkış

¾

Programlanabilir analog giriş/çıkış

w

w

w

¾

¾

Seri giriş/çıkış (senkron, asenkron ve cihaz yönetimi)

¾

Motor veya servo kontrol için pals sinyali çıkışı

¾

Harici giriş vasıtasıyla kesme

¾

Harici bellek arabirimi

¾

Harici veri yolu arabirimi
21

Dahili bellek tipi seçenekleri (ROM, EPROM, PROM, EEPROM)

¾

Dahili RAM seçeneği

¾

Kayan nokta hesaplaması

co
m

¾

1.6.2. PIC16F84 Özellikleri

Kelime uzunluğu: 8 bit.

no

tla

ri.

Bu modülde mikrodenetleyiciler örnek olarak PIC16F84 alınmıştır. Mikroişlemcili
sistemlerde kullanılan iki tip temel mimari vardır. Bunlar, Von Neuman Mimarisi ve
Harvard Mimarisi’dir. Von Neuman Mimarisin’de, program kodları (komutlar) ve veriler
aynı bellek biriminden tek bir yoldan alınıp işlemciye getirilir. Önce komut getirilir daha
sonraki adımda veri alınıp getirilerek işlenir. Bu durum bazı gecikmelere sebep olur. Harvard
Mimarisi’nde, program kodları ve verilere ayrı veri yollarından ulaşıldığından çalışma daha
hızlı olmaktadır. Mikrodenetleyicilerde daha çok Harvard Mimarisi kullanılmaktadır. Bu
denetleyicinin belli başlı özellikleri şunlardır:

de

rs

Güvenirlik: PIC komutları bellekte çok az yer kaplar. Dolayısıyla bu komutlar 12
veya 14 bitlik bir program bellek sözcüğüne sığar. Harward Mimarisi kullanılmayan
mikrodenetleyicilerde yazılım programının veri kısmına atlama yaparak bu verilerin komut
gibi çalışmasını sağlamaktadır. Bu ise büyük hatalara yol açmaktadır. PIC’lerde bu durum
engellenmiştir.

.e
em

Hız: PIC oldukça hızlı bir mikrodenetleyicidir. Her bir komut satırı 1µsn’lik bir
zaman diliminde işlenir. Örneğin, 5 milyon komutluk bir programın 20Mhz’ lik bir kristalle
işletilmesi yalnız 1sn. sürer. Bu süre kabaca 386 diye tanımladığımız sayısal bilgisayarın
hızının yaklaşık 2 katıdır. Ayrıca PIC’lerin RISC mimarisine sahip olmasının hıza etkisi
oldukça büyüktür.

Komut kümesi: PIC’te bir işlem gerçekleştirmek için kullanılacak komut sayısı
oldukça azdır. Örnegin, PIC16F8XX ailesinde 33 komutu kullanarak sınırsız sayıda işlem
yapabilmek mümkündür.

w

Statik işlem: PIC mikrodenetleyici tamamıyla statik bir işlemcidir. Statik işlemciye
darbe sağlayan osilasyon kaynağı durdurulsa bile işlenen veriler muhafaza edilmektedir.

w

w

Sürme özelliği: PIC’ler yüksek bir sürme kapasitesine sahiptir. Çıkış olarak
tanımlanan pinlerin yalnız birinin aktif olması halinde 25 mA çekilebilmektedir.
Güvenlik: PIC üretim özelliği itibariyle bir koruma bitine sahiptir. Bu bitin
programlanması yolu ile PIC içerisine yazılan programın başkaları tarafından okunması ve
kopyalanmasına engel olunmuş olunur.

22

co
m

Flash olma özelliği: Bu özellik PIC’in yeniden programlanabilir olması durumunu
ifade etmektedir. Yani PIC üzerine yazılan program geliştirme amacı ile silinebilir ve yeni
bir program yüklenebilir.

1.6.3. PIC Programlamak İçin Gerekli Donanımlar
PC bilgisayar

¾

Bir metin editörünün kullanılmasını bilmek

¾

PIC assembler programı

¾

PIC programlayıcı donanımı

¾

PIC programlayıcı yazılımı

¾

Programlanmış PIC’in çalışmasını görmek için PIC deneme kartı

no

tla

ri.

¾

de

rs

Assembly program kodlarını kolayca yazmak, doğru ve hızlı bir şekilde PIC’ in
program belleğine göndermek için, bilgisayara ihtiyaç vardır. Bir metin editörü kullanarak
yazılan program kodları derlendikten sonra PIC’e gönderilmesi gerekir. Program kodlarının
PIC’e yazdırma işlemi paralel veya seri porta bağlanan PIC programlama kartı ile yapılır. Bu
işleri yapabilmek için gereken donanımlar; görsel bir işletim sistemi (Windows, Linux), basit
bir editör (Edit, Notpad, Word gibi) 1GHz CPU, 256 MB RAM, 40 GB sabit disk ve CDROM sürücüsü olmalıdır. Bu donanımlar 2006 yılı şartlarına göre yazılmıştır.

.e
em

1.7. Mikrodenetleyicinin İç Yapısı ve Çevre Elemanları
1.7.1. Mikrodenetleyici Yapısı

1.7.1.1. I/O Portları

w

w

w

PIC16F84 mikrodenetleyicisinin 13 adet giriş ve çıkış portu vardır. Bunlardan 5 tanesi
A portu (RA0-RA4) 8 tanesi B portu (RB0-RB7)’dur. 13 portun her biri giriş veye çıkış
olarak kullanılabilir.

23

co
m
ri.
tla
no

1.7.1.2. Program Belleği

rs

Şekil 1.20: Program belleğinin

de

PIC16F84’ün 1 Kbyte’lık program belleği vardır. Her bir bellek hücresi 14 bit
uzunluğundadır. Program belleği elektriksel olarak yazılıp silinebilir ama program çalışırken
sadece okunabilir. Çalışması istenen program bu bellek içerisine yüklenir. Program belleği
0X000 ile 0x3FF adreslerini kapsar.

.e
em

1.7.1.3. Ram Belleği

w

w

w

PIC16F84’ün 0x00~0X4F adres aralığında ayrılmış olan RAM belleği vardır. Bu
bellek içerisindeki dosya kümesi (file registerler) içerisine yerleştirilen veriler PIC
işlemcisinin çalışmasını yönlendirir. File registerlerin bellek uzunluğu 8 bittir. File register
adı verilen özel bellek alanlarının dışında kalan diğer bellek alanları program içerisindeki
değişkenler için kullanılır.

24

co
m
ri.
tla
no
rs

1.7.1.4. W Kayıtcısı

de

Şekil 1.21: Ram bellek yapısı

.e
em

PIC16F84’ün içerisinde akümülatör veye geçici depolama alanı olarak
düşünebileceğimiz W registeri (mikroişlemcideki A kaydedicisine benzer işleve sahip)
vardır. PIC içerisinde gerçekleşen aritmetik işlemler ve atama işlemleri bu kaydedici
vasıtasıyla gerçekleştirilir.

W
REGİSTER

Şekil 1.22: W kaydedicisi

w

w

w

PORT A

25

PORT B

co
m

1.7.2. Giriş/Çıkış Pinleri İle Bağlantısı
1.7.2.1. Besleme Gerilimi

rs

no

tla

ri.

PIC’in besleme gerilimleri 5 ve 14 nu.lu pinlerden yapılır. Kullanılan osilatör
frekansına göre besleme gerilimi değişebilir. 4 Mhz’lik osilatör kullanılmışsa besleme
gerilimi 2V - 5.5 V arasında uygulanabilir. Tüm frekanslar için en uygun besleme gerilim
değeri 5 V’tur. 5 nulu uç Vdd=+5V’a, Vss ucu da şaseye bağlanır. PIC’e ilk defa enerji
verildiğinde meydana gelebilecek gerilim dalgalanmalarını önlemek için Vdd ile Vss arasına
dekuplaj kondansatörü bağlanmalıdır.

de

Şekil 1.23: PIC besleme gerilimi

1.7.2.2. Saat Uçları ve Osilatör Çeşitleri

.e
em

PIC16F84’ün saat (clock) sinyal girişi için kullanılan iki ucu vardır. Bunlar OSC1 (16.
Pin) ve OSC2 (15. Pin)’dir. Bu uçlara farklı tipte osilatörlerden elde edilen saat sinyalleri
uygulanır.
1.7.2.2.1. RC Osilatör

R
10K
10K
10K

C
20pf
220pF
0.1µf

Fosc
625 KHz
80 KHz
85 KHz

Tablo 1.24: R-C değer aralığı

w

w

w

PIC’in denetlediği elektronik devredeki zamanlamanın hassas olmadığı durumlarda
kullanılır. Belirlenen değerden % 20 sapma görülebilir.

26

co
m
ri.

tla

Şekil 1.25: RC bağlantı şeması

1.7.2.2.2. XT Osilatör

Mode

Frekans
100 KHz
2 MHz
4MHz

XT

455 KHz
2 MHz
4MHz

OSC1/C1

KRİSTAL RESONATÖR
100-150pF
15-33 pF
15-33 pF
SERAMİK RESONATÖR
47-100 pF
15-33 pF
15-33 pF

de

rs

XT

no

Kristal veya seramikle yapılmış genel amaçlı saat osilatörüdür.

OSC2/C2

100150 pF
15-33 pF
15-33 pF
47-100 pF
15-33 pF
15-33 pF

.e
em

Tablo 1.26:Kristal ve seramik değer aralığı

Şekil 1.27: Kristal veya seramik bağlantı şeması

w

w

w

1.7.2.2.3. HS Osilatör

Kristal veya seramikle yapılmış yüksek hızlı saat osilatörüdür.
Mode

Frekans

OSC1/C1

OSC2/C2

HS

KRİSTAL RESONATÖR
4 MHz
15-33 pF
20MHz
15-33 pF
SERAMİK RESONATÖR

15-33 pF
15-33 pF

HS

8 MHz
10MHz

15-33 pF
15-33 pF

15-33 pF
15-33 pF

Tablo 1.28:Kristal ve seramik değer aralığı

27

LP

Frekans

OSC1/C1

OSC2/C2

KRİSTAL RESONATÖR
32 KHz
68-100 pF
200 KHz
15-33 pF

68-100 pF
15-33 pF

tla

Mode

ri.

Kristalle yapılmış düşük güçlü saat osilatörüdür.

co
m

Şekil 1.29: Kristal veya seramik bağlantı şeması

1.7.2.2.4. LP osilatör

rs

no

Tablo 1.30: Kristal değer aralığı

de

Şekil 1.31: Kristal bağlantı şeması

1.7.2.3. Reset Uçları ve Reset Devresi

w

w

w

.e
em

PIC16F84’ün reset ucu 4 nu.lu pinde bulunan MCLR ayağıdır. PIC16F84 besleme
uçlarına gerilim uygulandığı anda EEPROM belleğindeki programın başlangıç adresinden
itibaren çalışmaya başlar. Programın herhangi bir anında 4 nu.lu MCLR ucu 0 V yapılınca
program başlangıç adresine geri döner.

Şekil 1.32: 16F84 reset devresi

28

co
m

1.7.2.4. I/O Pinleri ve Port Yapısı

de

rs

no

tla

ri.

PIC16F84’de 1,2,3,17 ve 18 nu.lu pinler giriş 6,7,8,9,10,11,12 ve 13 nu.lu pinler çıkış
olarak tanımlanmıştır. Program yazılırken istenilen pin, giriş veya çıkış pini olarak atanabilir.
B portunun 8 ucu PIC içerisinde pull-up yapılmış etki gösterir.

w

w

w

.e
em

Şekil 1.33: 16F84’ün pin uçları

Şekil 1.34: 16F84 giriş ve çıkış port yapısı

29

co
m

Port uçlarından herhangi birisi çıkış olarak yönlendirildiğinde o uçtaki pull-up direnci
otomatik olarak iptal olur. A portunun 4. biti TOCKI adı verilen haricî timer/counter giriş
ucu ile ortak kullanılınır. RA1, RA2, RA3 ve RA4 açık kollektör özelliğinden dolayı haricî
olarak pull-up direncine bağlanmalıdır.
7.2.4.1. I/O Pinleri Akım Sınırları

.e
em

de

rs

no

tla

ri.

PIC16F84’ün belleğinde bulunan programı çalıştırması sırasında çıkış portlarına 0
veya 1 bilgisi gönderir. Portlara 0 bilgisi gönderildiğinde çıkış portu max 25 mA’lik giriş
(sink) akımı çeker. Portlara 1 bilgisi gönderildiğinde çıkış portu 25mA’lik çıkış (source)
akımı verilebilir.

w

w

w

Şekil 1.35: Sing ve source akım

30

co
m

1.7.2.4.2. I/O Port Pinlerine Kumanda Edilecek Devre Elemanlarının Bağlanması

rs

no

tla

ri.

I/O portlarından geçebilecek 25 mA’lik giriş akımı veya 25 mA’lik çıkış akımı ile led,
lcd, transistör, tristör ve triyak’lar doğrudan sürülebilir çıkış akımının yetmediği durumlarda
yükselteç devreleri kullanılmalıdır.

w

w

w

.e
em

de

Şekil 1.36:I/O port pinlerine kumanda edilecek devre elemanlarının bağlanması

31

co
m

ÖLÇMEVE
VEDEĞERLENDİRME
DEĞERLENDİRME
ÖLÇME
OBJEKTİF TESTLER (ÖLÇME SORULARI)
Aşağıdaki soruları doğru (D), yanlış (Y) olarak doldurunuz.

w

.e
em

de

rs

no

tla

ri.

1. (
) Mikroişlemcinin bir anda işleyebileceği bit sayısına kelime uzunluğu denir.
2. (
) Saat frekansı işlemcinin hızını belirler.
3. (
) Adres hattı sayısı işlemcinin adresleyebileceği bellek alanını gösterir.
4. (
) Her mikroişlemcinin kaydedici sayısı aynıdır.
5. (
) Mikroişlemcinin hızı sistemin hızını tayin eder.
6. (
) ALU’nun işleyeceği veriler program sayıcıya yüklenir.
7. (
) Program sayıcının büyüklüğü 8 bittir.
8. (
) Bellekten alınan komutlar, komut kaydedicisine yüklenir.
9. (
) Komut kaydedicisindeki komutu ALU çözer.
10. (
) ALU’nun yaptığı işlemlerin sonucundan durum kaydedicisi etkilenmez.
11. (
) Yığın işaretçisi geçici bellek bölgesinin adresini tutar.
12. (
) Veri aktarmada kullanılan yollara veri yolu denir.
13. (
) Adres bölgesini temsil eden bilgilerin taşınmasında kullanılan hatlara adres yolu
denir.
14. (
) 20 adres hattı 2 MBayt adres bölgesini gösterir.
15. (
) Mikroişlemcili sistemde bulunan birimler arasındaki ilişkiyi düzenleyen hatlara,
kontrol yolu denir.
16. (
) Geçici işlemlerin yapıldığı bellek birimi ROM hafızalardır.
17. (
) Yalnız okunabilen belleklere RAM bellekler denir.
18. (
) Bir kez programlanabilir belleklere PROM bellek denir.
19. (
) Silmek için ultraviyole ışık altında belirli bir süre tutulan bellekler SRAM
belleklerdir.
20. (
) XTAL kristal veya seramikle yapılmış genel amaçlı saat osilarötüdür.
21. (
) Elektriksel olarak yazılabilen ve silinebilen belleklere EEPROM denir.
22. (
) Mikroişlemci, bellek ve G/Ç birimlerinin tek bir entegre içerisinde üretilmiş
biçimine mikrodenetleyici denir.
23. (
) PIC16F84’ün 5 Kbyte’lık program belleği vardır.
24. (
) PIC’in besleme gerilimleri 5 ve 14 nu.lu pinlerden yapılır.

w

w

DEĞERLENDİRME
Cevaplarınızı modülün sonunda yer alan cevap anahtarı ile karşılaştırınız. Yaptığınız
değerlendirme sonunda yanlış cevaplarınızı tekrar gözden geçiriniz. Kendinizi yeterli
görmüyorsanız öğrenme faaliyetini tekrar ediniz. Cevaplarınızın hepsi doğru ise öğrenme
faaliyeti-2’ye geçiniz.

32

ÖĞRENME FAALİYETİ-2
AMAÇ

co
m

ÖĞRENME FAALİYETİ-2

ARAŞTIRMA
Programlama kartının görevini sınıf içinde tartışınız.

tla

¾

ri.

Assembly programlarınızı yükleyip deneyebileceğiniz programlama ve deneme kartı
yapabileceksiniz.

no

2. MİKRODENETLEYİCİ PROGRAMLAMA
KARTI

.e
em

de

rs

2.1. Mikrodenetleyici Programlama ve Deneme Kartı

Şekil 2.1: Mikrodenetleyici programlama ve deneme kartı görünüşleri

w

w

w

Mikrodenetleyici programlama kartı, mikrodenetleyicin istenilen şekilde çalışabilmesi
için yazılan programı mikrodenetleyiciye yükleyen karttır. Yapılan kartın özelliğine göre
bilgisayarın seri veya paralel portuna bağlanabilir. Bizim yapacağımız kart seri iletişim
yapan mikrodenetleyici programlama kartıdır.

33

co
m
ri.
tla

Şekil 2.2: Programlama kartı devre şeması

w

w

w

.e
em

de

rs

no

Mikrodenetleyici deneme kartı, programlanmış mikrodenetleyicinin çalışmasının
gözlemlendiği karta deneme kartı denir. Deneme kartlarında giriş olarak push buton ve
anolog giriş için potansiyometre seçilebilir. Çıkış değerlerini görmek için led, display ve lcd
ekran kullanılabilir. Programlanmış mikrodenetleyicinin deneneceği deneme kartının şeması
Şekil 2.3’te görülmektedir.

34

co
m
ri.
tla
no
rs
de

Şekil 2.3: Deneme kartı devre şeması

.e
em

2.2. Mikrodenetleyici Programlama ve Deneme Yapabilen Bir
Kartın Yapımı
2.2.1. Kart İçin Gerekli Malzemeler

w

w

w

Programlama Kartı
1
2
3
4
5
6
7
8
9
10

Deneme Kartı

IC1=18 Pin IC soket
R1=2,2 K
R2=22 K
R3=2,2 K
R4=10 K
D1=1N4148
D2(zener)=5,6 V
C1=1 µF
X3=DS9P(Seri dişi port)
5X6 cm Bakır plaket

1
2
3
4
5
6
7
8
9
10
11
12
35

IC1=16F84A
18 Pin IC soketx2
IC2=ULN 2803
Ortak anotlu display
Push buton (6 adet)
Kırmızı Led (9 Adet)
R1..R8 , R14=330Ω x 9
R9…R14=10 KΩ x 6
D1=1N4148
C1,C2=22pF
Kristal=4 Mhz
10x8 cm Bakır plaket

co
m

2.2.2. Kartın Baskı Devresini Çıkarma
İŞLEM BASAMAKLARI

ÖNERİLER

¾ Bağlantı yolları devre şemasında
birbirinin üstünden geçebilir. Baskı
devre şemasında bağlantı yollarını
birbirinin üstünden geçirilmemesine
dikkat edilmelidir.

ri.

¾ Devre şemasındaki yollarını milimetrik
kâğıt üzerine çiziniz.

tla

¾ Baskı devre şeması çizilirken
elemanların fiziksel büyüklükleri göz
önünde tutulmalıdır.
¾ Çizim yapılırken çizilen hatlarda
aydınlık veya bulanık bölgenin
kalmamasına dikkat edilmelidir.
Çizgiler koyu olmalıdır.
¾ Asit karışımı iyi ayarlanmalı gerekirse
su miktarı arttırılmalıdır.

no

¾ Hazırladığınız veya verilmiş baskı devre
şemasını bakır plaket üzerine baskı devre
kalemi ile geçiriniz.
¾ Baskı devre şeması çizilmiş bakır plaketi
asit banyosuna atınız.

¾ Matkap ucunun kaymaması için bağlantı
noktalarının ortası, delme işleminden
önce bız ile işaretlenebilir.

de

rs

¾ Bağlantı noktalarını 1mm’lik matkap ile
deliniz.

Şekil 2.4: Programlama kartı, baskı devresinin üst ve alt görünüşü

w

w

w

.e
em

Programlama Kartı

36

co
m

Deneme Kartı

rs

no

tla

ri.

¾

w

w

w

.e
em

de

Şekil 2.5: Deneme kartı, baskı devresinin üst görünüşü

Şekil 2.6: Deneme kartı baskı devresinin alt görünüşü

37

co
m

2.2.3. Devre Elemanlarını Baskı Devre Üzerine Monte Etme
İŞLEM BASAMAKLARI

ÖNERİLER

ri.

¾ Bakır plaket üzerindeki bağlantı yollarını ¾ Bağlantı yollarını şemadan takip ederek
test ediniz.
en uç noktalarıyla irtibatlı olup
olmadığına bakabilirsiniz.
¾ Malzemelerinizin sağlamlık kontrolünü ¾ AVO metre ile sağlamlık kontrolü
yapınız.
yapılabilecek elamanları ölçebilirsiniz.

rs

no

tla

¾ Bağlantı
noktalarına
göre, ¾ Elemanların bağlantılarını dik veya
malzemelerinizin ayak uzunluklarını
yatay yapabilirsiniz.
belirleyiniz.
¾ Havyanızı uygun sıcaklığa getiriniz.
¾ Elektronik
malzemelerin
montajı
yapılırken
30
W’lık
havya
kullanabilirsiniz.
¾ Malzemelerinizi üst görünüş şemasına ¾ Entegrelerin sıcaktan etkilenmesini
göre bakır plaket üzerine lehimleyiniz.
önlemek
için
yalnız
soketleri
lehimleyebilirsiniz.

de

2.2.4. Kartın Besleme ve Bağlantılarının Tanıtılması
Mikrodenetleyici programlama kartı D sub 9P (seri dişi port) üzerinden iletişim
yapmaktadır. Devre enerjisi seri port üzerinden verilmektedir. Haricî enerji uygulamaya
gerek yoktur.

w

w

w

.e
em

PIC mikrodenetleyiciler 2V-5,5V arasında çalışmaktadır. Mikrodenetleyicinin en
uygun çalışma gerilimi 5V’tur. Deneme kartının + ve – besleme uçlarına gerilim
uyguladığında mikrodenetleyiciyi deneyebiliriz.

38

DEĞERLENDİRME KRİTERLERİ

4
5

no

6

Hayır

ri.

2
3

Evet

Programlama kartının şemasına göre baskı devresini tekniğe
uygun çıkarttınız mı?
Kart için gerekli malzemeleri doğru ve eksiksiz tespit ettiniz mi?
Devre elemanlarının sağlamlık kontrolünü yaptınız mı?
Kart üzerinde bulunan elemanların yerleşimini ve montajını
tekniğine uygun olarak yaptınız mı?
Kart üzerine yerleştirdiğin devre elemanlarının lehimlemesini
tekniğe uygun olarak yaptınız mı
Devre elemanlarının montajı tamamlanan kartın denemesini
yaptınız mı?

tla

1

co
m

DEĞERLENDİRMEÖLÇEĞİ
ÖLÇEĞİ
DEĞERLENDİRME

Cevaplarınızı modülün sonunda yer alan cevap anahtarı ile karşılaştırınız. Yaptığınız
değerlendirme sonunda yanlış cevaplarınızı tekrar gözden geçiriniz. Kendinizi yeterli
görmüyorsanız öğrenme faaliyetini tekrar ediniz.

w

w

w

.e
em

de

rs

Cevaplarınızın hepsi doğru ise öğrenme faaliyeti-3’e geçiniz.

39

co
m

ÖLÇMEVE
VEDEĞERLENDİRME
DEĞERLENDİRME
ÖLÇME
ÖLÇME DEĞERLENDİRME

(
(
(
(

w

w

w

.e
em

de

rs

no

3.
4.
5.
6.

ri.

2. (

) Mikrodenetleyicinin istenilen şekilde çalışabilmesi için yazılan programı
mikrodenetleyiciye yükleyen karta programlama kartı denir.
) Programlanmış mikrodenetleyicinin çalışmasının gözlemlendiği karta deneme
kartı denir.
) Programlama kartı bilgisayar ile seri iletişim yapar.
) Programlama kartı bilgisayar ile paralel iletişim yapar.
) Deneme kartında giriş olarak led’ler seçilebilir.
) Deneme kartında çıkış olarak display seçilebilir.

tla

1. (

40

ÖĞRENME FAALİYETİ-3
AMAÇ

co
m

ÖĞRENME FAALİYETİ-3

ri.

Mikrodenetleyiciyi programlayarak kullanılabilir hâle getirmek için gerekli adımları
öğreneceksiniz.

ARAŞTIRMA

tla

Asembly dilinde yazılmış program kodlarının mikrodenetleyiciye
yüklenilmesine kadar olan aşamaları sıralayınız ve kullanılan programları
inceleyerek sınıf içinde arkadaşlarınızla tartışınız.

no

¾

.e
em

de

rs

3. MİKRODENETLEYİCİYE PROGRAM
YÜKLEME

Şekil 3.1: Mikrodenetleyiciye program yüklenmesinin blok diyagramı

3.1. Giriş

w

w

w

Mikrodenetleyiciye assembly dilinde yazılmış program kodlarının yüklenebilmesi için
önce program herhangi bir editörde yazılır. Yazılan programın çalışmasından emin olmak
için bir simülatör benzeri yazılımlarda denenir. Sonra, uygun şekilde isim verilerek saklanır.
Şekil 3.2’de Not Defteri’inde yazılan bir programın asm uzantılı olarak saklanması
görülmektedir.

41

co
m
ri.
tla
no

rs

Şekil 3. 2: Metin editöründe yazılan programın kaydedilmesi

w

w

w

.e
em

de

Yazılan program Kaydet onay kutusu işaretlendiğinde C sabit diskinde YNPSNN.asm
dosyası olarak saklanır. Bu program doğrudan mikrodenetleyiciye yükleyemezsiniz.
Assembly diliyle yazılmış programınızı makine diline (*.hex) çeviren assempler programını
kullanmanız gerekir. Piyasada çok çeşitli assembler programları mevcuttur. Kullanım
kolaylığından dolayı burada MPASM yazılımı tercih edilmiştir.

Şekil 3.3: Asembler programında çevrilecek programın bulunması

42

rs

no

tla

ri.

co
m

Makine diline çevrilecek YNPSNN.asm programı Browse düğmesinden dizin ve
dosya adı belirtilerek Source File Name kutucuğuna yazdırılır (Şekil3.3).

de

Şekil 3.4: Assembler programının options ayarları

w

w

w

.e
em

MPASM programının options ayarları Şekil 3.4’te görüldüğü gibi seçildikten sonra
Assemble (yeşil çizgili) onay butonuna basılır. Eğer yazılmış programda herhangi bir hata
yoksa ekranda yeşil bantlı rapor penceresi çıkar (Şekil 3.5). Eğer kırmızı bantlı ropor
penceresi çıkmış ise programda hata veya hatalar var demektir. Bu durumda tekrar Not
Defterine dönüp, YNPSNN.asm programını yeniden açarak yazım hatalarını düzeltmeniz
gerekmektedir.

Şekil 3.5: Assembler rapor penceresi

43

.e
em

de

rs

no

tla

ri.

co
m

OK onay düğmesini işaretlediğinizde MPASM Assembleri, metin editöründe yazılmış
YNPSNN.asm dosyasını makine diline çevirerek YNPSNN.hex dosyası ve çeşitli rapor
dosyaları oluşturur. (Şekil 3.6)

Şekil 3.6: Assembler programının oluşturduğu dosyalar

Diğer rapor dosyalarından LST, program kodlarının bellekte yerleştikleri adresleri,
komutların hex kodlarını ve satır numaralarını ve assembly dilinde yazılan programı listeler.
ERR rapor dosyası adından da anlaşılacağı gibi hataların rapor edilmesinde kullanılır.
Hatalı satır numarası ve yapılan hatanın karşılığı bu raporsa sıralanır.

w

3.2. Yükleme Programını Kullanma

w

w

Mikrodenetleyiciye (16F84) derlenmiş yani makine diline çevrilmiş program
kodlarının yüklemek için aracı program kullanmak gerekir. Bu konuda firmaların ürettiği;
Micropro, MPlab, PicEQ, Propic, ICProg….gibi bir çok program mevcuttur. Bunlardan
birini tercih ederek kodları mikrodenetleyiciye yükleyebilirsiniz.

44

no

tla

ri.

co
m

3.2.1. Yükleme Programının Başlatılması

rs

Şekil 3.9: ICProg yükleme programının çalıştırılması

w

w

w

.e
em

de

ICProg programını bilgisayara yüklediğinizde entegre sembollü uygulama dosyası
oluşturulur. Üzerine tıkladığınızda ICProg çalışır.

Şekil 3.8: ICProg programının görünüşü
45

tla

ri.

co
m

ICProg programını Türkçeleştirerek işlemlerimizi kolaylaştırırız. Bunun için, Setting
menüsünden options seçilir. Language menüsünden yön çubuğuyla Turkish seçeneği
bulunarak onay düğmesine tıklanır. (Şekil 3.9 ve 3.10)

.e
em

de

rs

no

Şekil 3.9: Programın Türkçeleştirilmesi için seçilen menü

Şekil 3.10: Options menüsü

w

w

w

Karşınıza programı yeniden başlatma bilgisi gelir. OK onay kutusu tıklanır. Programı
kapatıp açtığımızda Icprog programını Türkçeleştirmiş hâlde karşınıza gelecektir.

Şekil 3.11: Programı yeniden başlatma bilgisi

46

ri.

co
m

3.2.2. Program Menülerinin Açıklanması

Aç: Yüklenilmesi istenen dosyayı seçmemizi sağlar.

¾

Yeni Adla Kaydet: Seçilmiş programı yeni adla kaydetmemizi sağlar.

¾

Donanım: Donanım ayarları yapılır.

¾

Seçenekler: Program ayarları yapılır.

¾

Tümünü Oku: Mikrodenetleyici içindeki programı ekranda gösterir.

¾

Tümünü Programla: Seçilmiş olan *.hex uzantılı dosyaları mikrodenetleyiciye
yükler.

¾

Tümünü Sil: Mikrodenetleyici içinde yüklü olan programı siler.

¾

Doğrula: Mikrodenetleyiciye
karşılaştırır.

¾

Assembler Görünüm: Seçilmiş programın ekranda assembler modunda
görünmesini sağlar.

no

rs

programla

kaynak

programı

de

yüklenen

.e
em
¾

tla

¾

Hex Görünüm: Seçilmiş programın ekranda hex modunda görünmesini sağlar.

3.2.3. Mikrodenetleyici Seçimi

w

w

w

Hangi mikrodenetleyici ile çalışılıyorsa seçenek kutusundan o mikrodenetleyicinin
seçilmesi gerekir. Mikrodenetleyici devremizde PIC16F84A kullandığımız için bu
mikrodenetleyici seçilmelidir.

47

co
m
ri.
tla

Şekil 3.12: Mikrodenetleyici seçenek kutusu

no

3.2.4. Program Dosyasını Açma

w

w

w

.e
em

de

rs

IC_Prog programında mikrodenetleyiciye yüklemek istediğimiz *.hex (YNPSNN.hex)
dosyasını Dosya menüsü işaretlenerek dosya aç komutu aktifleştirilir. Karşımıza çıkan
ekranda *.hex uzantılı dosyanın dizini ve dosyası bulunarak, dosya seçilip Aç onay kutusu
işaretlenir. (Şekil 3.13)

Şekil 3.13: Program dosyasını açma

3.2.5. Mikrodenetleyici Konfigürasyonunu Ayarlama
IC-Prog programında PIC seçimi ile beraber konfigürasyon ayarlarının da yapılması
gerekmektedir. Osilatör seçeneklerinden kullanılan osilatör seçimi yapılır. Devremizde XT
osilatör kullanıldığı için bu seçenek işaretlenir.
48

co
m

CP, (Code Protect) seçeneği işaretlendiğinde mikroişlemcinizin üzerindeki programa
bir şey eklenemez ve program kopyalanamaz. Yaptığınız programın başkaları tarafından
okunmasını ve kopyalanmasını istemediğiniz durumlarda bu seçenek işaretlenir. (Şekil 3.14)

rs

no

tla

ri.

Sadece Erase (sil) komutu verildiğinde mikroişlemci üzerindeki program silinir. Fakat
program okunamadığı için kopyalanamaz.

de

Şekil 3.14: Mikrodenetleyici konfigürasyonunu ayarlama

Bütün bunları yaptıktan sonra yine Ayarlar menüsünden Seçenekler alt menüsü seçilir.
Karşımıza çıkan ekrandan Karışık menüsüne girilir. Buradan;

.e
em

1. İşlem önceliği Normal seçilir.

2. Yan taraftan ise JDM için Vcc Kontrol Etkin seçilmelidir.
3. Windows XP kullanıyorsanız program açılırken;

w

w

w

Privileged Instruction şeklinde hata mesajı görülebilir. Bunu engellemek için de yine
buradan NT/XP Sürücüsü Etkin seçeneğini işaretlemeliyiz. Diğer menülerden de çalışma
ayarlarını yapabilirsiniz.

49

co
m
ri.
tla

no

Şekil 3.15: Seçenekler menüsü

3.2.6. Bilgisayar ile Kart Arasındaki Haberleşme Ayarlarını Yapmak

w

w

w

.e
em

de

rs

Şekil 3.15’te görülen menüden programlayıcı yazan liste kutusundan JDM
Programmer seçeneğini işaretlediniz. Kart hangi COM portuna bağlıysa Portlar bölümünde o
bağlantı noktasını işaretleyiniz. Arayüz bölümünde Windows 2000, NT veya XP
kullanıyorsanız Windows API, Windows 98, 95 ve ME için Direct I/O seçeneklerini
işaretleyiniz. Girişi/Çıkış gecikmesi ve iletişim bölümlerinde değişiklik yapmanıza gerek
yoktur. Donanım ayarlarını yaptıktan sonra Tamam onay kutusunu tıklayınız.

Şekil 3.16: Bilgisayar ile kart arasındaki haberleşme ayarları

50

no

tla

ri.

co
m

3.2.7. Programı Mikrodenetleyiciye Yükleme

Şekil 3.17: Programı mikrodenetleyiciye yükleme

w

w

w

.e
em

de

rs

IC-prog’da program dosyası açıldıktan sonra tümünü programla araç çubuğu
işaretlenir. Program dosyası bu şekilde mikrodenetleyiciye yüklenmiş olur.

51

co
m

UYGULAMAFAALİYETİ
FAALİYETİ
UYGULAMA
Deneme Kart İle Yüklenen Programı Deneme

.e
em

de

rs

no

tla

ri.

Şekil 3.18’de mikrodenetleyicinin B Portuna bağlı olan LED’leri belirli aralıklarla
yakıp söndüren assembly programı verilmiştir.

w

w

w

Şekil 3.18: Mikrodenetleyicinin çıkışları yakıp söndüren assembly programı

52

co
m

İŞLEM BASAMAKLARI

ÖNERİLER

no

tla

ri.

¾ Şekil 3.18’ deki programı metin editörüne ¾ Yazıların hizalı olmasına dikkat
yazınız.
etmelisiniz.
Türkçe
karakter
kullanmaktan kaçınmalısınız.
¾ Metin editörünüzde yazmış olduğunuz ¾ *.asm dosyasının kolay bulunabilmesi
programı *.asm olarak kaydediniz.
için masa üstüne kaydedebilirsiniz;
yazılmasını unutmamalısınız.
¾ MPASM programını aktifleştirip options ¾ Options ayarlarını konu anlatımına
bakarak yapabilirsiniz.
ayarlarını yaparak *.asm dosyasını *.hex
dosyasına dönüştürünüz.
¾ IC-prog programını aktifleştirip donanım, ¾ Donanım, seçenek ve konfigirasyon
seçenek ve konfigirasyon ayarlarını
ayarlarını konu anlatımına bakarak
yaparak makine diline çevrilmiş (*.hex)
yapabilirsiniz.
programınızı
mikrodenetleyiciye
yükleyiniz.

.e
em

de

rs

¾ Mikrodenetleyicinizi
programlama ¾ Programlama kartına mikrodenetleyiciyi
kartından çıkarıp deneme kartına takınız.
takarken ve çıkarırken bilgisayarın
kapalı olması muhtemel kısa devreleri
önler.
¾ Deneme
kartına
enerji
vererek ¾ Mikrodenetleyicinizi deneme kartına
taktıktan
sonra
enerji
vermeniz
mikrodenetleyicinizin
çalışmasını
muhtemel kısa devreyi önler.
gözlemleyiniz.

w

w

w

Cevaplarınızı modülün sonunda yer alan cevap anahtarı ile karşılaştırınız. Yaptığınız
değerlendirme sonunda yanlış cevaplarınızı tekrar gözden geçiriniz. Kendinizi yeterli
görmüyorsanız öğrenme faaliyetini tekrar ediniz.

53

DEĞERLENDİRME KRİTERLERİ
2
3

w

w

w

.e
em

de

rs

no

tla

4

Evet

Yükleme programı mönüleri ve kullanımını kavrayabildiniz mi?
Yükleme kartı ile bilgisayar arasındaki haberleşmeyi
gerçekleştirebildiniz mi?
Bilgisayardan mikrodenetleyiciye hatasız olarak programı
yükleyebildiniz mi?
Program yüklenmiş microdenetleyiciyi deneme kartı ile deneme
şeklini kavrayabildiniz mi?

Hayır

ri.

1

co
m

DEĞERLENDİRMEÖLÇEĞİ
ÖLÇEĞİ
DEĞERLENDİRME

54

co
m

ÖLÇMEVE
VEDEGERLENDİRME
DEĞERLENDİRME
ÖLÇME
OBJEKTİF ÖLÇME SORULARI
ÖLÇME DEĞERLENDİRME

w

w

w

.e
em

de

rs

no

6. (

ri.

3. (
4. (
5. (

) Assembly programını doğrudan mikrodenetleyiciye yükleyebiliriz.
) Assembler; metin editöründe yazılmış *.asm uzantılı dosyayı makine diline
çevirerek *.hex dosyası oluşturur.
) *.LST dosyası bellek kullanım haritasını gösterir.
) Micropro, MPlab, PicEQ ,Propic, ICProg assembler programıdır.
) CP komutu aktifleştirildiğinde mikrodenetleyici üzerindeki programa bir şey
eklenemez ve program okunamaz.
) Doğrula komutu mikrodenetleyici içindeki programı ekranda gösterir.

tla

1. (
2. (

55

CEVAP ANAHTARLARI

no

tla

D
Y
D
Y
Y
Y
Y
D
Y
Y
D
D
D
Y
D
Y
Y
D
Y
D
D
D
Y
D

.e
em

de

rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

ri.

ÖĞRENME FAALİYETİ-1 CEVAP ANAHTARI

w

ÖĞRENME FAALİYETİ-2 CEVAP ANAHTARI
1
2
3
4
5
6

D
D
Y
Y
Y
D

w

w

co
m

CEVAP ANAHTARLARI

56

Y
D
D
Y
D
Y

w

w

w

.e
em

de

rs

no

tla

ri.

1
2
3
4
5
6

co
m

ÖĞRENME FAALİYETİ-3 CEVAP ANAHTARI

57

KAYNAKLAR

ri.

tla

no

rs

w

w

w

.e
em

¾
¾
¾
¾
¾
¾
¾
¾
¾
¾
¾
¾
¾
¾

ADALI Eşref, Mikroişlemciler Mikrobilbisayarlar, 1998.
ALTINBAŞAK Orhan, PIC Programlama, 2000.
ARSLAN Adnan, Elektronik öğrt. Ders Notları
GÜMÜŞKAYA Doç.Dr. Haluk, Mikroişlemciler ve 8051 Ailesi, 1998.
HOŞGÖREN Mehmet, Mikroişlemciler, Ankara, 2003.
KARAAĞAÇ Adil, A.T.L Temel Seviye PIC16F84 Mikrodenetleyici Kurs
Kitabı, 2005.
KAYA Öğr. Göv. Sinan, Mikro Bilgisayar ve Assembler Ders Notu.
Sakarya Üniversitesi, Uzaktan Eğitim Ders Notları
SÖNMEZ Akbay, Kadir ÇETİN, Mikroişlemciler
TOPALOĞLU Nurettin, Mikroişlemciler ve Assembly Dili, Ankara, 2003.
http://www.Intel.com
http://www.micropic.com
http://www.cpu-museum.com/
http://www.dijitalbilgi.tripod.com
http://www.cpu-world.com
http://www.fujitsu.com
http://www.antrak.org.tr
http://www.amd.com
http://www.atariage.com
http://www.old-computers.com

de

¾
¾
¾
¾
¾
¾

co
m

KAYNAKLAR

58