66
PIC MİKRODENETLEYİCİLERİN HAFIZA YAPISI Temel olarak bir PIC içerisinde de iki tür hafıza bulunur: 1. Program Hafızası (ROM,PROM,EPROM,FLASH) Programı saklar, kalıcıdır. 2. Veri Hafızası (RAM, EEPROM) Veriyi saklar, genellikle uçucu olmakla (RAM) birlikte kalıcı olan (EEPROM) özel türleri de vardır. 1

Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

PIC MİKRODENETLEYİCİLERİN HAFIZA YAPISI

• Temel olarak bir PIC içerisinde de iki tür hafıza

bulunur:

1. Program Hafızası (ROM,PROM,EPROM,FLASH)

Programı saklar, kalıcıdır.

2. Veri Hafızası (RAM, EEPROM)

Veriyi saklar, genellikle uçucu olmakla (RAM) birlikte kalıcı olan (EEPROM) özel türleri de vardır.

1

Page 2: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

PIC16F84’DE PROGRAM HAFIZASI

• PIC16F84 de Program hafızası …

• Flash tipte olup…

PIC düşük gerilimle ( 5V)

Kolaylıkla Programlanıp

silinebilir.

2

Page 3: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

PIC16F84 ‘DE PROGRAM HAFIZASI (Devam)

• Programlamak üzere Seçtiğimiz PIC16F84 ‘de…

o 1K kelime’lik (word) toplam 1024 komutluk program hafızası vardır.

• ( ) olduğunu hatırlayalım.

NOT: Byte(Bayt) kelimesi 8 biti temsil ettiği ve PIC16F84’de 14 bitlik komut kelimeleri (word) kullandığı için 1K bayt yerine 1K word ifadesi tercih edilmektedir.

3

Page 4: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Pprogram hafızasında bu komutlar ikili (binary) tabandadır.

• Örn: (00 0001 0111 0000)2 = (0170)16

Aküyü sil anlamına gelen komutdur.

• Biz Assembly Dilinde Program yazarken ise aynı komutu;

CLRW şeklinde kullanacağız.

4

PIC16F84 ‘DE PROGRAM HAFIZASI (Devam)

Page 5: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

PIC16F84 ‘DE PROGRAM HAFIZASI (Devam)

• Her bir program

hafıza hücresi

içerisinde…

• 14 bit uzunluğundaki komut kelimeleri (komutlar) saklanır.

5

Page 6: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

PIC16F84 ‘DE VERİ (DATA) HAFIZASI

• Her PIC ‘de bulunan diğer bir hafıza türü Veri Hafızasıdır.

• Bu hafıza sıkça kullanılır ve genellikle RAM türü Geçici (Uçucu) Bilgi Depolama alanıdır.

6

Page 7: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Ayrıca PIC16F84 ’de EEPROM denilen 64 byte’lık kalıcı veri hafızası da vardır…

• Dersimizde EEPROM türü hafızanın programlanması incelenmeyecektir.

7

PIC16F84 ‘DE VERİ (DATA) HAFIZASI (Devam)

Page 8: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

PIC16F84 ‘DE VERİ (DATA) HAFIZASI (Devam)

• PIC16F84’de normalde Veriler…

• 8 bitlik (binary 8 basamaklı) = 1 bayt dır.

(örn. bir baytlık veri : 0110 0111)

• PIC16F84’de Veri Hafızası ikiye ayrılır :

Bank 0

Bank 1

8

Page 9: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Ayrıca Veri Hafızasında iki çeşit Saklayıcı (Register) söz konusudur:

oÖzel Fonksiyon Registerleri

(STATUS, PORTA gibi isimleri belirli olanlar)

oGenel Amaçlı Registerler

(Genel Veri Depolama alanıdır.

Herhangi bir genel veri saklanabilir)

9

PIC16F84 ‘DE VERİ (DATA) HAFIZASI (Devam)

Page 10: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

10

Öze

l Fo

nks

iyo

n R

egi

ste

rle

ri Ö

zel Fo

nksiyo

n R

egiste

rleri

PIC16F84 ‘DE VERİ HAFIZA HARİTASI (sadeleştirilmiş) (BANK 0 ve BANK 1)

Page 11: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• BANK 0

o Hafıza Haritası da denilen bu tabloyu incelersek sol sütunda…

o (0X00 … 0X4F) adres aralığında…

o Toplam ( 50 )16=(80)10 adet 8 bit uzunluğunda VERİ HAFIZASI vardır.

Not: 0X: Heksadesimal sayı anlamındadır

11

PIC16F84 ‘DE VERİ HAFIZA HARİTASI (BANK 0 ve BANK 1) (Devam)

Page 12: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

BANK 0 (Bütün Registerleri ile)

12

Page 13: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• BANK 1

• Bank 0 ‘a benzer şekilde (0X80 … 0XCF) adres aralığında bulunur.

Önemli Not: • Burada bazı Özel Fonk. Registerleri hem Bank 0 ‘da

hem Bank 1’ de olduğundan birbirlerinin kopyasıdır. (INDF, STATUS gibi)

• Genel Amaçlı Registerler ise Bank 0 ve Bank 1 de her zaman birbirinin kopyasıdır.

13

PIC16F84 ‘DE VERİ HAFIZA HARİTASI (BANK 0 ve BANK 1 ) (Devam)

Page 14: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

BANK 1 (Bütün Registerleri ile)

14

Page 15: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• PROGRAMLAMA İÇİN ÖNEMLİ BİLGİ:

• Programlamada bir Bank’ın içindeki herhangi bir registeri kullanabilmek için o Bank’a geçmek gerekir.

• Ancak her iki Bankta da bulunan registerler Bank değiştirmeksizin her zaman kullanılabilirler.

• İlk enerji verildiğinde PIC “Bank 0” da açılır. • Daha sonra Programcı yazdığı komutlarla “Bank

1” e geçebilir. 15

PIC16F84 ‘DE VERİ HAFIZA HARİTASI (BANK 0 ve BANK 1) (Devam)

Page 16: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

ÖZEL BİR REGİSTER ( W : AKÜMÜLATÖR )

• PIC16F84 ‘de Akümülatör (W)

Veri Hafıza haritasında görülmemesine

rağmen

sıkça kullanılan

8 bitlik

“Geçici Depolama Registeri”

denebilecek bir registerdir.

16

Page 17: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Diğer pek çok File Registerleri gibi

W (Akümülatör) de 8 bit uzunluğundadır.

Not: Veri okur, yazarken, registerler arası veri kopyalama ile tüm aritmetik işlemler ve diğer bazı işlemler için bu W registerini kullanmak şarttır.

17

ÖZEL BİR REGİSTER ( W : AKÜMÜLATÖR )

Page 18: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Meselâ ;

• (PORTA) ‘yı (03) sayısı ile toplayıp…

• Sonucu PORTB ‘ye yazmak istersek…

• Akümülatörden (W ) faydalanmak gerekir.

18

ÖZEL BİR REGİSTER ( W : AKÜMÜLATÖR ) (Devam)

Page 19: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

PIC16F84’ ÜN BACAK (PİN) YAPISI VE PORTLARI • PIC16F84 mikrodenetleyicisi 18

sayısal bacağa (pin) sahiptir.

• VDD(+), VSS (-) 5 V besleme uçlarıdır.

• RA ve RB ile başlayan bacaklar PORTA ve PORTB ye aittir.

• Kullanılmayan PORT girişleri +5V (Lojik 1) ‘a bağlanmalıdır.

• OSC1/CLK IN ve OSC2/CLK OUT uçları saat işareti üretmek veya uygulamak için kullanılır.

• MCLR ucu Reset işlemi içindir.

19

Page 20: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

PORTA ve PORTB ’nin YAPISI

• Burada lojik(sayısal) Giriş/Çıkış yapacağımız PORTA ve PORTB üzerinde durmak gerekir.

• Bunlardan PORTA 5 bitliktir; [8 bitlik değil !] ( RA4,RA3,RA2,RA1,RA0)

• PORTB ise normal olarak 8 bitliktir; (RB7,RB6,RB5,RB4,RB3,RB2,RB1,RB0)

• Her bir Port biti (RA2, RB5… gibi) Giriş ya da Çıkış olarak programlanabilir.

20

Page 21: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

PIC16F84 ‘DE PORT BİTİ ÇIKIŞ İKEN

MAKSİMUM AKIMLAR

• PIC16F84 ‘de bir PORT’a ait olan bir bit

Ya Giriş ya da Çıkış olarak programlanarak

kullanılır.

• PORT biti çıkış olarak kullanıldığı zaman

İki tür akım söz konusudur :

• PORT’dan içeri çekilebilen (Sink) ve…

• PORT’tan dışarı alınabilen (Source) akım.

21

Page 22: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Bu durumlardaki maksimum çıkış akımı değerleri hiçbir zaman aşılmamalıdır.

• Bu değerler seri bir direnç üzerinden bir LED’i rahatlıkla sürebilecek seviyededir.

• Ayrıca besleme gerilimi 5 V olarak belirtilmişti.

Bu değerin 5.5 V ‘un üzerine çıkarılması PIC’in

bozulmasına sebep olabilecektir.

• Bu yüzden kararlı bir besleme kaynağı kullanılmalıdır.

22

PIC16F84 ‘DE PORT BİTİ ÇIKIŞ İKEN

MAKSİMUM AKIMLAR (Devam)

Page 23: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

SINK VE SOURCE AKIMLARI

• Sink Akımı :

• (+5 volt) beslemeden PORT’un içine doğru akan akımdır. Bu durumda + 5V ‘dan PORT’un içine doğru akacak maksimum akım 25 mA ile sınırlıdır !

• PORT 'tan içeri daha fazla

akıtılan akım PIC ‘in

bozulmasına

sebep olabilir !

23

Page 24: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Bu tür bağlantıda (Sink akımı) ancak PORT biti = Lojik 0 yapıldığında LED yanacaktır.

• Örnek olarak;

24

SINK VE SOURCE AKIMLARI (Devam)

Page 25: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

25

• Source Akımı :

• PORT’un içinden toprağa doğru akan akımdır.

• Bu durumda akacak maksimum akım 20 mA dir.

• Bir başka ifade ile PORT ’tan dışarı bu değerden fazla akım çekilirse PIC bozulabilir.

SINK VE SOURCE AKIMLARI (Devam)

Page 26: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Bu tür bağlantıda (Source akımı) PORT biti = Lojik 1 yapıldığında LED yanacaktır…

• LED’e seri direnç…

26

SINK VE SOURCE AKIMLARI (Devam)

Page 27: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

OSİLATÖR ( SAAT/CLOCK ) DEVRESİ

• PIC ‘in program hafızasında bulunan komutların çalışması Kare dalga şeklindeki saat (clock) işareti ile olur;

• Genelde OSC1/CLK IN ve OSC2/CLK OUT bacaklarına bazı elemanlar (kristal, direnç-kondansatör) bağlanarak saat işaretinin PIC içerisinden üretilmesi sağlanır.

27

Page 28: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

OSİLATÖR ( SAAT/CLOCK ) DEVRESİ (Devam)

• PIC 16F84 ‘de en çok kullanılan osilatör tipleri şunlardır :

1 ) RC Tipi ( Direnç/Kondansatör )

2 ) XT Tipi ( Kristal veya Seramik Rezonatör )

3 ) HS Tipi (Yüksek Hızlı Kristal /Seramik Rezonatör)

4 ) LP Tipi ( Düşük Frekanslı Kristal )

28

Page 29: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Bu osilatör yapılarından sık kullanılan ikisinin tipik bağlantıları …

1. RC Tipi Bağlantı :

• Bu amaçla kullanılan tipik bağlantı şöyledir. Hassas zamanlama gerektirmeyen tasarımlar için elverişlidir.

OSİLATÖR TİPLERİ VE BAĞLANTILARI

29

Page 30: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

2. XT, HS, LS Tipi Bağlantı :

• Bu bağlantılarda her iki OSC bacağı kullanılır. C1 ve C2 değerleri 15-22 pF civarında seçilebilir.

30

OSİLATÖR TİPLERİ VE BAĞLANTILARI (Devam)

NOT: Kullanılacak Osilatör tipi komut olarak veya programlama esnasında belirtilmelidir. Bunun yolu ilerde açıklanacaktır.

Page 31: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

MCLR (RESET) BACAĞI VE DEVRESİ

• Program herhangi bir nedenle kilitlenirse…

• Ya da programı yeniden (baştan) çalıştırmak istersek…

• Dışardan PIC ‘i Reset yapmamız gerekir.

• PIC16F84 ‘de RESET fonksiyonu gören 4 nolu bacak (MCLR) ‘dir.

31

Page 32: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Resetleme işlemi için bu girişe önce kısa bir süre lojik 0 verilmeli, daha sonra lojik 1 uygulanmalıdır.

• Not: MCLR üzerindeki çizgi “0” da Reset gerçekleşir demektir.

32

MCLR (RESET) BACAĞI VE DEVRESİ (Devam)

Page 33: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

PIC16F84 ve ASSEMBLY DİLİ PROGRAMLAMA

• Biz programlarımızı PIC16F84 ‘ye ait 35 farklı komuttan oluşan assembly programlama dili ile yazacağız.

• Önce basit bir metin editöründe (not defteri gibi) yazılacak olan program .asm uzantılı olarak kaydedilir.

NOT: Bu komutlar Lab. da incelenecek 40 bacaklı

PIC16F877 için de geçerlidir.

33

Page 34: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Yazdığımız Assembly Program PIC’in çalıştırabileceği hale dönüştürmek üzere MPASM veya MPLAB ile derlenmelidir.

• Derlenen (.asm) uzantılı dosya… (Örn: isim.asm)

aynı dosya ismiyle ( .hex) uzantılı olarak

aynı klasörde üretilir. (Örn: isim.hex)

• Artık program “Makine Dili” olmuştur. Yani bir programlayıcı ile PIC’e yüklenebilir.

34

PIC16F84 ve ASSEMBLY DİLİ PROGRAMLAMA (Devam)

Page 35: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

ASSEMBLY DİLİNDE PROGRAM YAZARKEN DİKKAT EDİLECEK HUSUSLAR

Noktalı Virgül ( ; )

o Bir satırın başına (;) konursa o satır ( hex ) koda dönüştürülmez.

o Daha sonra programı değiştirir ya da geliştirirken hatırlamak istediklerimizi de (;) den sonra yazabiliriz.

o Bir komuttan sonraki (;) den sonrası da aynı şekilde sadece bilgi amaçlıdır.

o Örn: MOVLW 0x2F ; Akümülatöre 2F yaz

35

Page 36: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

Etiketlerin Özellikleri:

• Birinci sütunda yer alan Etiketler…

• PIC’in Program ya da Veri Hafızasındaki bir Komut ya da Register adresine karşılık gelen ve hatırlatmayı kolaylaştıran kelimelerdir.

– PORTB EQU 0x06 ; PORTB bir etikettir.

– BEKLE GOTO BEKLE ; İlk BEKLE bu komutun etiketidir.

36

ASSEMBLY DİLİNDE PROGRAM YAZARKEN DİKKAT EDİLECEK HUSUSLAR (Devam)

Page 37: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

Program Bölümleri :

o Assembly programında Başlık, Atama , Program ve Sonuç bölümleri vardır.

o Ayrıca Program yazılmadan önce 3 kolona bölünür. Bunlar;

– Etiket,

– Komut,

– Adres ya da Veri dir…

37

ASSEMBLY DİLİNDE PROGRAM YAZARKEN DİKKAT EDİLECEK HUSUSLAR (Devam)

Page 38: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

Örnek bir Program Yazılışında Bölümler

38

Page 39: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

ASSEMBLY DİLİNDE SAYI VE KARAKTER YAZILIŞLARI

• Assembly dilinde program yazarken sayılar çeşitli formatlarda (biçimlerde) yazılabilir :

Hexadesimal sayılar için:

• Normal komutlarda 0x03 , h ‘03’ ya da 03 şeklinde kullanılırlar. Mesela W registerine (03) heksadesimal sayısını yüklemek için;

MOVLW 0x03 MOVLW h’03’ MOVLW 03 ;biçimlerinden biri yazılabilir.

Not: Biz Derslerimizdeki programlarda genellikle h’03’ formatını tercih edeceğiz.

39

Page 40: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

Binary ( ikili ) sayılar için: • b’0010 0101‘ şeklinde yazılır.

• Örn : ( 0010 1100 )2 sayısını W (akümülatör)’e yüklemek için gerekli komut;

MOVLW b’00101100’ ;şeklinde ikili tabanda yazılabilir.

Desimal sayılar için: • Desimal sayılar ise başına d harfi konup yine tırnak içinde

yazılır. d‘18‘ , d’255’ gibi.

• Örn. (15)10 sayısını W ye yüklemek için ;

MOVLW d’15’ ;şeklinde yazılabilir.

40

ASSEMBLY DİLİNDE SAYI VE KARAKTER YAZILIŞLARI

(Devam)

Page 41: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

ASCII karakterler için :

• Tırnak içinde karakterin kendisi yazılır . • Genellikle daha sonra incelenecek RETLW

komutu ile beraber kullanılır. Örn.

RETLW ‘B’ ;B heks. bir sayı değil harftir RETLW ‘X’

gibi komutlar B ve X karakterlerinin ASCII karşılığı olan sayıyı W registerine yazarak altprogramdan dönüşü sağlar.

41

ASSEMBLY DİLİNDE SAYI VE KARAKTER YAZILIŞLARI

(Devam)

Page 42: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

PIC16F84’DE ASSEMBLY DİLİ KOMUTLARI

• PIC 16F84 de toplam 35 komut vardır.

• Biz PIC komutlarını 4 ana grupta toplayarak

inceleyeceğiz :

1 ) Byte (bayt) Yönlendirmeli Komutlar

2 ) Bit Yönlendirmeli Komutlar

3 ) Sabitle Çalışan Komutlar

4 ) Kontrol Komutları

42

Page 43: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

KOMUT FORMATLARI YAZILIRKEN KULLANILAN BAZI KISALTMA HARFLERİ

• f : File register (Özel veya Genel, PORTA, STATUS vb. )

d : (Sonucun gönderileceği yeri belirtir)

d = W ise (Sonuç W registerine kaydedilir )

d = f ise (Sonuç komutta belirtilen File registerine kaydedilir)

• k : Sabit veya adres etiketi …

• b : Bit veya Binary sayıyı …

• d : Desimal sayıyı …

• h : Heksadesimal sayıyı ifade eder

43

Page 44: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

KOMUT GRUPLARI VE FORMATLARI

1) Byte (bayt) Yönlendirmeli Komutlar:

• Bir register üzerinde işlem yapan komut türüdür. Komut Formatı:

• Örnekler: MOVF 0x03 ,W ; 0x03 adresindeki (STATUS daki) veriyi W (Akümülatör)‘e ; kopyala. MOVF STATUS ,W ; STATUS registerini W ‘nin içine kopyala. ; (STATUS EQU h’03’ komutu ile önceden tanımlıysa !) MOVF PORTA ,W ; PORTA ‘yı W ‘ye kopyala.(PORTA EQU h’05’ ile tanımlıysa !)

44

Page 45: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

2) Bit Yönlendirmeli Komutlar:

• Bir register’da bulunan bitlerden sadece biri üzerinde işlem yapan komutlar bu gruba girer. Komut Formatı:

• Örnekler : BCF 0x03,5 ; 0x03 adresindeki registerin (STATUS’un) 5. bitini 0 yap.

BSF PORTA,3 ; PORTA da bulunan verinin 3. bitini 1 yap. ; PORTA EQU h’05’ komutu ile önceden tanımlıysa !

BCF PORTB,4 ; PORTB ‘deki verinin 4. bitini 0 yap. ; PORTB EQU h’06’ ile önceden tanımlıysa !

45

KOMUT GRUPLARI VE FORMATLARI (Devam)

Page 46: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

3) Sabit İşleyen Komutlar

• Bu tür komutlar belli bir sabit sayıyı işler. Komut Formatı:

• Örnekler : MOVLW 0x2F ; W registerine h’2F’ yazar ( yükler )

MOVLW h’17’ ; W registerine h’17’ yazar ( yükler )

ADDLW b’00011111‘ ; O anda W registerinde bulunan sayıya

; ( 0001 1111 )2 = ( 1F )16 ekler.

46

KOMUT GRUPLARI VE FORMATLARI (Devam)

Page 47: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

4) Kontrol Komutları

• Program akışını değiştiren komutlar bu tür komutlardır. Komut Formatı:

• Örnekler : GOTO DONGU ; Program şartsız olarak DONGU etiketli satıra gider.

GOTO BASLA ; Program şartsız olarak BASLA etiketli satıra gider.

CALL GECIKME ; Program GECIKME etiketli altprograma gider.

KOMUT GRUPLARI VE FORMATLARI (Devam)

47

Page 48: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

ASSEMBLY DİLİNDE İLK PIC16F84 PROGRAMI

• Örnek olarak, PIC16F84 ye enerji verince PORTB’yi tamamen çıkış yaptıktan sonra PORTB nin 0. ve 2. bitlerini (RB0, RB2) lojik (1) diğerlerini de Lojik (0) yapan bir program yazalım:

• Not: Bu durumda program çalıştıktan sonra PORTB nin çıkışları şöyle olacaktır :

• O halde programla PORTB’ yükleyeceğimiz sayı :

(0 0 0 0 0 1 0 1)2 = (05)16 olacaktır.

RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0

0 0 0 0 0 1 0 1

48

Page 49: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• İstenen Assembly Programı yazmak için önce Veri Hafızasındaki Özel Fonksiyon Registerlerinde …

o PORTB ‘nin 0x06 adresinde (Bank 0 da)

o TRISB ‘nin 0x86 adresinde (Bank 1 da)

o STATUS ‘ün 0x03 ve 0x83 adreslerinde

olduklarını hatırlayalım…

49

ASSEMBLY DİLİNDE İLK PIC16F84 PROGRAMI

(Devam)

Page 50: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Daha önce de belirtildiği gibi herhangi bir file registere ulaşmak için o registerin bulunduğu Bank’a geçmek şarttır.

• Ayrıca burada PORTB den dışarı Lojik değerler almak istediğimize göre önce PORTB yi tamamen çıkış yapmak gerekir.

50

ASSEMBLY DİLİNDE İLK PIC16F84 PROGRAMI

(Devam)

Page 51: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• BANK DEĞİŞTİRME İŞLEMİ için;

• 16F84 ‘de Veri hafızasındaki Özel Fonksiyon Registerlerinden STATUS Registerinin

5. biti (RP0) Bank değiştirme için kullanılır.

• BSF gibi bir bit yönlendirmeli komutla

RP0 = 1 yapılırsa Bank 1 ‘e geçilmiş olacaktır.

STATUS REGISTER (Adresi:0x03 ve 0x83)

51

IRP RP1 RP0 TO PD Z DC C

7 6 5 4 3 2 1 0

ASSEMBLY DİLİNDE İLK PIC16F84 PROGRAMI

(Devam)

Page 52: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• O halde burada STATUS ‘un 5. bitini (RP0=1) yaparak Bank 1 ‘e geçelim;

BSF STATUS , 5 ; STATUS 5. biti RP0=1

; yapılarak Bank 1 ‘e geçiliyor.

52

ASSEMBLY DİLİNDE İLK PIC16F84 PROGRAMI

(Devam)

Page 53: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• GİRİŞ/ÇIKIŞ için ilgili PORT ‘a karşılık gelen TRIS registerini belirli bitlerle (sayıyla) yüklemek gerekir.

• Bir portu;

Çıkış yapmak için ilgili TRIS registeri bitlerini “0”

Giriş yapmak için ilgili TRIS registeri bitlerini “1”

yapmak gerekir.

• Burada ilgilendiğimiz PORTB olduğuna göre…

TRISB registeri ile PORTB çıkış yapılacaktır.

53

ASSEMBLY DİLİNDE İLK PIC16F84 PROGRAMI

(Devam)

Page 54: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• PORTB ‘yi tamamen çıkış yapacağımıza göre TRISB de tüm bitler (0) yapılmalıdır.

• Bu durumda ;

• Sonuç olarak (00)16 sayısının TRISB registerine yüklenmesi gerekir.

54

ASSEMBLY DİLİNDE İLK PIC16F84 PROGRAMI

(Devam)

Page 55: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

ETİKET KOMUT ADRES ya da VERİ

AÇIKLAMA

; ORNEK.ASM – 01/10/ 2015 Programı hatırlamak için ad ve tarihi yazıldı

LIST P = 16F84 ; Başlık Bölümü, kullanılan PIC bildiriliyor.

PORTB EQU h’06’ ; 0x06 adresi PORTB olarak tanıtıldı

STATUS EQU h’03’ ; 0x03 adresi STATUS olarak tanıtıldı

TRISB EQU h’86’ ; 0x86 adresi TRISB ‘ye olarak tanıtıldı

BSF STATUS,5 ; STATUS 5. biti 1 yap, Bank 1’e geç

MOVLW h’00’ ; W registerine ( 00 )16 sayısını yükle

MOVWF TRISB ; TRISB ye (00) yaz ; ve böylece PORTB yi tamamen çıkış yap.

BCF STATUS,5 ; Bank 0 ’a dön. (Giriş/Çıkış işlemi bitti )

MOVLW h’05’ ; W registerine ( 05 )16 sayısını yükle

MOVWF PORTB ; W deki sayıyı PORTB ‘ye yükle

END ; Son

İŞTE PROGRAMIMIZ…

55

Page 56: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Hatırlatmalar :

• İlk satırdan sonraki LIST ile hangi PIC’i kullandığımız END ile de programın sona erdiği belirtilir.

• Burada her bir Özel Fonksiyon Registerinin adresi doğrudan yazılabileceği gibi

(örn: STATUS yerine h’03’ ) yazılabilirdi.

• Başlangıçta EQU komutları ile tanıtma yapılarak Registerin adı Programda doğrudan kullanılabilir.

• Yukarıdaki programda biz bu yolu kullandık.

56

ASSEMBLY DİLİNDE İLK PIC16F84 PROGRAMI

(Devam)

Page 57: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

57

ASSEMBLY DİLİNDE İLK PIC16F84 PROGRAMI

(Devam)

Page 58: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

MPASM PROGRAMI İLE DERLEME ve ÖNEMLİ DOSYALAR (Devam)

• Derleme sırasında ornek .hex dosyası ile birlikte bazı farklı dosyalar da üretilir.

• Programda hata varsa veya değişiklikler yapılmak istendiğinde …

58

Page 59: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Üretilen dosyalardan ikisi önem kazanır ;

o ornek .err (Hata dosyası)

o ornek .lst (Liste dosyası)

• Belirtilen dosyalar açılarak incelenmelidir.

MPASM PROGRAMI İLE DERLEME ve ÖNEMLİ DOSYALAR (Devam)

Page 60: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

INCLUDE DOSYALAR

• Yukarıda belirtildiği gibi Assembly dilinde programlar yazarken kullanılacak

Özel Fonksiyon Register adreslerini (EQU)

komutları ile tanımlamak hem kolaylık

sağlamakta hem de anlaşılırlığı arttırmakta idi.

• Ancak özellikle programımızda çok sayıda register kullanıyorsak her sefer bu tanımları tekrar tekrar yapmak gereksiz gibidir.

60

Page 61: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Diğer taraftan bu EQU komutları yazacağımız programı da şişirecektir.

• Bunun yerine o PIC için Include Dosya kullanarak her PIC için sabit olan bu tanımları her sefer yeniden yapmaktan kurtulmuş oluruz.

• Mesela; P16F84.INC adlı “hazır” dosya PIC16F84 için gerekli tanımları içerir.

61

INCLUDE DOSYALAR (Devam)

Page 62: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Bu maksatla;

INCLUDE “P16F84.INC”

komutunu (satırını) programda LIST komutundan sonra yazmamız yeterlidir.

Not: Sadece kullanacağımız (SAYAC gibi) özel bir değişkenimiz için;

SAYAC EQU h’0C’ şeklinde EQU komutu

yazmamız yine gerekecektir.

62

INCLUDE DOSYALAR (Devam)

Page 63: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

KONFİGÜRASYON BİTLERİ

• Bu bitler PIC’ e gerilim verildiği anda geçerli kuralları belirlemek içindir.

• Meselâ; PIC devremizin osilatörünü RC tipi olarak kullanacaksak bunu bildirmemiz lazımdır.

63

Page 64: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

• Benzer şekilde Watchdog timer’ i (WDT) devreye sokmak için (ON) veya çıkarmak için (OFF) …

• Power-on Reset özelliğini devreye sokmak için (ON) ya da çıkarmak için (OFF),

• Programı korumayı devreye almak(ON) veya almamak (OFF) için bu konfigürasyon bitleri kullanılır.

KONFİGÜRASYON BİTLERİ (Devam)

Page 65: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

KONFİGÜRASYON BİTLERİ (Devam)

• Program içersinde bu komutun yazılışına ait aşağıdaki gibi bir örnek verilebilir:

_CONFIG _CP_ON & WDT_OFF & PWRTE_OFF & RC_OSC

Bu durumda;

• CP_ ON : Program Koruması var • WDT_OFF : Watchdog Timer OFF , kullanılmıyor • PWRTE_OFF : Power-on Reset OFF , kullanılmıyor • RC_OSC : Osilatör Tipi (RC)

• Not: Devrede Kristal kullansaydık RC yerine XT yazılırdı.

65

Page 66: Temel olarak bir PIC içerisinde de iki tür hafıza€¦ · PICF ve ASSEMBLY DİLİ PROGRAMLAMA •iz programlarımızı PIC16F84 ye ait farklı komuttan oluşan assembly programlama

KONFİGÜRASYON BİTLERİ (Devam) • Burada; & : Ve _ : Alt çizgi boşluk yerine OFF : Yok, devre dışı, kullanılmıyor, ON : Devrede, kullanılıyor anlamındadır.

• Not 1: Aslında Konfigürasyon Bitleri böyle bir komutla

programa yazılmadan programlama esnasında programlayıcı yazılımı üzerinde de doğrudan belirlenebilir.

• Not 2: Biz Derste verdiğimiz örneklerde Programlama sırasında bu bitlerin ayarlandığını varsayacağız.

66