You are on page 1of 62

8051 Mikrodenetleyici Mimarisi ve Çalışması

8051 Ailesinin Temel Özellikleri: 8051 Intel firması tarafından üretilen MCS-51
ailesinin ilk üyesi olup MCS-51 ailesinin ilk çekirdeğidir. Temel özellikleri:

• Kontrol uygulamalarına yönelik 8-bit CPU


• Yoğun Boolean işlemleri yapabilme (tek-bit lojik işlemler) özelliği
• 64K program hafıza adres alanı
• 64K veri hafıza adres alanı
• 4K tümdevre-üzeri program hafıza (ROM)
• 128 byte tümdevre-üzeri veri hafıza (RAM)
• 32 tane iki yönlü adreslenebilir I/O hatları
• 2 tane 16-bit Zamanlayıcı/Sayıcı (Timer/Counter)
• Full duplex UART (Universal Asynchronous Receiver Transmitter)
• İki öncelik seviyesine sahip 6-kaynak / 5 vektörlü kesme donanım yapısı

8051 çekirdeğinin temel mimari yapısı, daha sonraki ürünlerde olan önemli
bazı mimari ilavelerle birlikte aşağıdaki şekilde görülmektedir.

1
8051 Çekirdeği ve diğer ürünlerde olan bazı önemli mimari ekler

2
8051 Çekirdeği ve diğer ürünlerde olan bazı önemli mimari ekler
Temel 8051 tümdevreleri:
8051: Tümdevre üzeri 4K ROM
8052: Tümdevre üzeri 8K ROM
8751: Tümdevre üzeri 4K EPROM
8752: Tümdevre üzeri 8K EPROM
8031: 8051’in ROM’suz versiyonu
8032: 8052’nin ROM’suz versiyonu

Daha sonra üretilen 80C51 tümdevreleri:


87C51: Tümdevre üzeri 4K EPROM (CMOS teknolojisi ile üretilen versiyonlar)
87C52: Tümdevre üzeri 8K EPROM
83C51FB: Tümdevre üzeri 16K EPROM
83C51FC: Tümdevre üzeri 32K EPROM

8051 çekirdeğine sahip mikrodenetleyiciler, Intel’den üretim izni alan birçok


firma tarafından günümüzün ihtiyaçlarına cevap verecek şekilde gün geçtikçe
geliştirilmekte ve yeni teknolojiler içermektedir.

3
8051 çekirdeğinin detaylı blok şeması

4
8051 Tümdevre Uç Fonksiyonları

8051’in 40 uçlu tümdevre ve blok şema gösterimleri


5
8051 Portlarının Latch’ları ve Giriş/Çıkış Buffer’ları

Port 0 (P0):

• 8-bit open-drain çıkışlı iki yönlü I/O portudur. P0 uçlarına program ile lojik 1
yazılması durumunda yüksek empedanslı giriş uçları olarak kullanılabilir.
• P0 harici program hafızaya ve veri hafızaya erişimlerde seçmeli (multiplexed) düşük-
değerli Adres/Veri Yolu (AD7-AD0) olarak da kullanılır. Bu durumda çalışırken P0
dışarıya lojik 1 gönderme işleminde dahili pull-up olarak çalışan FET transistörleri
kullanır.
• P0, dahili EPROM’lu mikrodenetleyicilerin programlanmasında işlem kod byte’larını
alır. ROM ve EPROM program doğrulamasında (verification) işlem kod byte’ları
buradan dışarıya çıkar. Program doğrulama işleminde harici pull-up dirençlere
ihtiyaç vardır.
6
8051 Portlarının Latch’ları ve Giriş/Çıkış Buffer’ları

Port 1 (P1):

• 8-bit dahili pull-up dirençlere sahip iki yönlü I/O portudur. Uçlarına
program ile lojik 1 yazılan P1, dahili pull-up dirençleri ile lojik 1 seviyesine
çekilir ve bu durumda giriş uçları olarak kullanılabilir.

• Dahili EPROM’lu mikrodenetleyicilerin programlanmasında, ROM ve


EPROM’ların program doğrulama işlemleri esnasında düşük değerli adres
byte’larını alır.

7
8051 Portlarının Latch’ları ve Giriş/Çıkış Buffer’ları

Port 2 (P2):

• 8-bit dahili pull-up dirençlere sahip iki yönlü I/O portudur. Uçlarına
program ile lojik 1 yazılan P2, dahili pull-up dirençleri ile lojik 1 seviyesine
çekilir ve bu durumda giriş uçları olarak kullanılabilir.
• Harici program hafızadan okumalarda ve 16-bit adresler kullanan harici veri
hafızaya erişimlerde, P2 yüksek değerli adres byte’ını çıkarır. Bu durumda
çalışırken, P2 dışarıya lojik 1 göndermede dahili pull-up dirençlerini kullanır.
• Dahili EPROM’lu mikrodenetleyicilerin programlanmasında, ROM ve
EPROM’ların program doğrulama işlemleri esnasında yüksek değerli adres
byte’larını alır.
8
8051 Portlarının Latch’ları ve Giriş/Çıkış Buffer’ları

Port 3 (P3):

• 8-bit dahili pull-up dirençlere sahip iki yönlü I/O portudur. Uçlarına
program ile lojik 1 yazılan P3, dahili pull-up dirençleri ile lojik 1 seviyesine
çekilir ve bu durumda giriş uçları olarak kullanılabilir.

• P3 ayrıca aşağıdaki tabloda verilen alternatif fonksiyonlara sahiptir.

9
8051 Portlarının Latch’ları ve Giriş/Çıkış Buffer’ları

Port 3 (P3) uçlarının alternatif fonksiyonları:

10
8051 Ailesinin Hafıza Yapısı

11
Harvard Mimarisi – Von Neuman Mimarisi

8051 ailesi 64K harici program hafızasını ve 64K harici veri hafızasını
adresleyebilmektedir. Bunlar fiziksel olarak farklı hafıza blokları olabilmektedir.
Böylece 128K’ya kadar hafıza işlemciye eklenebilmektedir. Ayrı veri ve program
hafızalar Harvard Mimarisi olarak bilinen klasik mimari modelin temel bir
özelliğidir.

Harici program hafızadan okuma sinyali PSEN ’dir.


Harici veri hafızadan okuma ve yazma sinyalleri ise RD ve WR ’dir.

Bir hafıza bloğu hem veri hafıza hem de program hafıza olarak hafıza haritasına
yerleştirilebilir. Aşağıdaki şekilde görüldüğü gibi eğer istenirse RD ve PSEN
sinyalleri bir AND kapısı ile birleştirilip kapı çıkışı harici Program/Veri hafıza
okuma sinyali olarak kullanılarak da program ve veri hafıza birleştirilebilir.

12
Harvard Mimarisi – Von Neuman Mimarisi

Program ve Veri hafızaların birleştirilmesi, Von Neuman Mimarisi olarak


bilinen klasik mimari modelin temel bir özelliğidir.

Harvard mimarisinin avantajı, sadece mikrodenetleyicinin hafıza kapasitesini


iki katına çıkartmak değildir. Program ve Veri hafızanın ayrılması,
mikrodenetleyicinin güvenilirliğini de arttırmaktadır. Çünkü program hafızaya
yazmak için bir komut yoktur.

Harvard mimarisi, geliştirilen kodun program hafızaya birçok defa yüklendiği


program geliştirme sistemleri için biraz terstir.

Program ve Veri hafızaların yukarıdaki şekilde verildiği gibi birleştirildiği Von


Neuman mimarisinde, program kodu hafızaya veri byte’ları gibi yazılabilmekte
ve aynı hafızadan program komutları olarak yürütülebilmektedir. Önceki derste
anlatılan hafıza sistem tasarımlarında bu yöntem kullanılmaktadır.

13
Program Hafıza – Kesme Başlangıç Noktaları
8051 ailesinde resetleme işleminden sonra, işlemcinin program yürütmeye
başlama adresi 0000h’tır. Program hafızanın düşük adresli bölümünde,
işlemcinin yürütmekte olduğu programı kesip yürüten program kodları
bulunur. Bir dış veya iç birimden gelen bu isteğe kesme (Interrupt), ve cevap
verdiği kod parçasına kesme hizmet programı (Interrupt Service Routine - ISR)
denir. Kesme hizmet alanları 8-byte aralıklarla yerleştirilmiştir.

14
Harici Program Hafızadan Program Yürütme
Program hafızanın düşük 4Kbyte’ı (veya 8Kbyte, 16Kbyte, 32Kbyte) tümdevre
üzerindeki bir ROM’da veya harici bir ROM’da olabilir. Bu seçim,
mikrodenetleyicinin EA bacağının +VCC’ye (+5 Volt) veya VSS’ye (GND)
bağlanmasıyla yapılır.

Harici program hafızadan program yürütme işlemi

15
Harici Program Hafızadan Program Yürütme
Örneğin Atmel AT89S52 mikrodenetleyicisi tümdevre üzeri 8Kbyte’lık flash
program hafızaya sahiptir. Bu durumda EA = +VCC’ye bağlanarak 0000h – 1FFFh
adresleri arasında olan program komutları dahili program hafızadan okunur.
2000h – FFFFh adresleri arasında olan program komutları ise harici program
hafıza için kullanılabilir. Eğer kullanılan mikrodenetleyicide tümdevre üzeri
program hafıza yok ise (örneğin Dallas DS80C390), EA = +VSS’ye (GND)
bağlantısı yapılarak bütün program hafıza erişimleri harici program hafızadan
yapılır. Harici program hafıza okuma sinyali PSEN bütün harici program hafıza
erişimlerinde kullanılır, dahili program hafıza erişimlerinde ise aktif değildir.

Yukarıdaki şekilde harici program hafızaya erişim için kullanılan tipik bir
donanım yapısı görülmektedir. Port 0 ve Port 2’nin toplam 16-bit giriş/çıkış
hattı program hafızaya erişim için yol işlemlerine atanır. Port 0, seçimli
(multiplexed) Adres/Veri yolu olarak kullanılır. Port 0, (PC) Program Counter’ın
düşük byte’ını (PCL) adres olarak, Adres/Veri yoluna çıkartır ve daha sonra
komut byte’ının program hafızadan gelmesini bekleme durumuna geçer.
PCL’nin üretilip Port 0’da geçerli olma anında, ALE (Address Latch Enable)
sinyali bu byte’ı adres latch’ına tutturur. Bu esnada Port 2, (PC) Program
Counter’ın yüksek byte’ını (PCH) adres yoluna çıkartır. Daha sonra PSEN aktif
edilerek harici program hafızadaki komut byte’ı mikrodenetleyiciye aktarılır.
16
Harici Veri Hafızadan Program Yürütme
Aşağıdaki şekilde 2Kbyte’a kadar harici RAM’a erişebilen bir donanım yapısı
örneği verilmiştir. Bu örnekte, 8051 CPU’su dahili ROM’dan çalışır. P0, RAM için
seçimli Adres/Veri yolu olarak ve P2’nin 3 hattı RAM hafızayı sayfalamak için
kullanılır. CPU, gerektikçe RD ve WR sinyallerini üretir.

Dahili veri hafızadan program yürütmede harici veri hafızaya erişim işlemi
17
Harici Veri Hafızadan Program Yürütme
8051’li bir sistemde en fazla 64KByte’lık harici veri hafıza blunabilir. Harici veri
hafıza adresleri 1 veya 2 byte genişliğindedir. P0’ın 8 biti ve RAM’ı sayfalamak
için kullanılan P2’nin bir veya daha fazla ucu, beraber olarak adreslemede
kullanılır. P2’nin bütün uçlarının kullanılması durumunda, toplam 2 byte adres
ile 64Kbyte RAM hafıza tam olarak adreslenebilir. P2’nin kullanılmayan hatları
giriş/çıkış işlemlerinde kullanılabilir.

Dahili Veri Hafıza:

8051’in dahili veri hafızası 3 alana ayrılır: düşük 128, yüksek 128 ve SFR.
Dahili veri hafıza adresleri 1 byte genişliğindedir ve bu da 256 byte’lık bir alanı
adresleyebilir. Bununla beraber, dahili veri hafızasına yönelik adresleme
modundaki basit bir yöntem ile adreslenebilen hafıza alanı 384 byte olur.

Veri hafızaya erişimlerde 7FH’tan yüksek doğrudan (direct) adresler belirli bir
hafıza bölgesine erişirken, 7FH’tan yüksek dolaylı (indirect) adresler farklı bir
hafıza bölgesine erişmektedir. Yani, yüksek 128 ve SFR hafıza alanları 7FH –
80H adresleri arasındaki hafıza bölgesinde bulunmalarına karşın fiziksel olarak
iki farklı bölgedir.

18
Dahili Veri Hafıza

Düşük 128 byte’lık RAM alanı bütün 8051 ürünlerinde bulunur. Bu hafıza
bölgesine doğrudan veya dolaylı adresleme ile erişilebilir.

19
Dahili Veri Hafıza – Düşük 128 Byte
Düşük 128 byte’lık RAM alanının detaylı hafıza haritası:

20
Dahili Veri Hafıza – Düşük 128 Byte
Doğrudan adresleme moduna örnek : MOV A, 25H
Burada dahili RAM hafızanın 25H adresinin içeriği ACC’ye kopyalanır.

Dolaylı adresleme moduna örnek : MOV A, @R0


Burada adresi R0 saklayıcısında olan, (yani R0 ile işaretlenen) bir dahili RAM
byte’nın içeriği ACC’ye kopyalanır.

Burada R0 geçerli bir adres içermelidir. Örneğin, 8031 ve 8051, 128 byte dahili
hafızaya sahip oldukları için R0, 00H – 7FH arasında bir adres içermelidir. 8052
ve sonrasında çıkan ürünler 256 byte dahili hafızaya sahip olduğundan, R0,
00H – FFH arasında bir adres içermelidir. Program yürütülmesi esnasında seçili
olan bir saklayıcı kümesinden sadece R0 ve R1 dolaylı adreslemede
kullanılabilir.

Saklayıcılar: 4 farklı saklayıcı kümesi (register bank)


Her biri R0 – R7 şeklinde 8 saklayıcıdan oluşan 4 küme (bank) bulunur.
Bank 0 : 00H – 07H adres adalığında
Bank 1 : 08H – 0FH adres adalığında
Bank 2 : 10H – 17H adres adalığında
Bank 3 : 18H – 1FH adres adalığında
21
Dahili Veri Hafıza – SFR Bölgesi

22
Dahili Veri Hafıza – Özel Fonksiyon Saklayıcıları

23
Dahili Veri Hafıza – Özel Fonksiyon Saklayıcıları

24
Program Durum Kelimesi – Program Status Word (PSW)
Program durum kelimesi (PSW), bir çalışma anında CPU’nun durumunu
gösteren çeşitli durum bitlerini (bayrakları - flags) içerir.

Carry (CY veya C) bayrağı: Aritmetik işlemlerde elde fonksiyonunu


gerçekleştirir. C bayrağı, işlemin sonucu FFH değerini aşarsa değeri 1’lenir, aksi
halde 0’dır. Elde barağı birçok lojik işlemde 1-bit ACC olarak görev yapar.

Auxiliary Carry (AC) bayrağı: Düşük 4-bitten (low nibble) yüksek 4-bite (bit
3’ten bit 4’e) bir elde taşma durumunda 1’lenir, diğer durumda 0’lanır. Bu
bayrak BCD (Binary Coded Decimal) sayılarla işlem yaparken kullanılabilir.

25
Program Durum Kelimesi – Program Status Word (PSW)
RS0 ve RS1 Bitleri: Dahili RAM bölgesinde bulunan düşük 128 byte alanındaki
4 saklayıcı kümesinden (Bank 0,1,2,3) birini seçmek için kullanılır.

Overflow (OV) bayrağı: İşaretli sayıların toplanmasında ve çıkarılmasında


oluşan bir durumu yansıtır. Taşma, işlem sonucunun hedef saklayıcıya
sığmadığını gösterir. Örneğin, 8-bitlik saklayıcılarla yapılan işaretli sayı
aritmetiğinde, 7FH (+127) ile 01H toplandığında sonuç 80H (-128) olur. Bu
sonuç, işaretli toplama için OV bayrağı ile belirtilen bir taşma durumudur ve
elde edilen sonucun pozitif bir sayı olarak yorumlanamayacağını gösterir.
İşaretsiz sayılarla yapılan işlemler için OV bayrağının bir önemi yoktur.

Parity (P) bayrağı: ACC’deki bitlerin sayısını yansıtır. Eğer ACC tek sayıda 1
içeriyor ise P = 1 olur (odd parity). Eğer ACC çift sayıda 1 içeriyorsa P = 0 olur
(even parity). Böylece ACC’deki 1’ler ile P bayrağının toplamı her zaman çift
olur.

F0 bayrağı ve Kullanıcı Tarafından Tanımlanabilen Bayrak: Bu 2 bayrak bir


işlem için atanmadığından genel amaçlı durum bayrakları olarak kullanılabilir.

26
8051 Adresleme Modları
• Anlık veriyi saklamak için saklayıcılar (keydediciler) kullanılır
• Saklayıcılar doğrudan işlenecek bir veri baytını içerebilir veya
• Alınacak veri baytına ilişkin bir adres işaretçisi olabilir.
• 8051 saklayıcılarının çoğu 8-bit uzunluğundadır.

En çok kullanılan saklayıcılar:


• A (Accumulator – Akümülatör)
• B, R0, R1, R2, R3, R4, R5, R6, R7 →
• DPTR (Data Pointer – Veri işaretçisi)
• PC (Program Counter – Program Sayacı)
Not: DPTR ve PC 2 byte uzunluğundadır

1
8051 Adresleme Modları (Adresleme Yöntemleri)
Adresleme: Bir işlemdeki kaynak veya hedef byte (veya bitleri)
belirleme yoluna denir. Örneğin, bir veri transfer işleminde
kaynak byte bir saklayıcıda, dahili RAM hafıza, program hafıza
veya harici veri hafızada olabilir. Ayrıca, kaynak byte’ın adresi
komutun bir parçası olarak komutun içine (opkoduna: işlem
koduna) veya bir saklayıcıya yerleştirilebilir. Komutlardaki
operand’lar, yani kullanılacak veriler ve saklayıcıların nasıl
kullanılacağı, kullanılan adresleme modlarını (yöntemlerini)
belirler. Adresleme modu (yöntemi), hafızadaki bir konuma veya
bir veriye erişme yöntemini belirtir ve doğrudan komutun
uzunluğunu belirler. 8051 komut kümesi 1, 2 veya 3 byte
uzunluğundaki komutlardan meydana gelmektedir. Kullanılan
komutlar program hafızada 1, 2 veya 3 byte olarak
saklanmaktadır. Adresleme modlarını anlamanın iyi bir yolu, MOV
veri kopyalama komutunun örneklerine bakmaktır.
2
8051 Adresleme Modları (Adresleme Yöntemleri)
Veri Adreslemede Modları (Yöntemleri):
1. İvedi (Immediate) Adresleme Modu
2. Doğrudan (Direct) Adresleme Modu
3. Saklayıcı (Register) Adresleme Modu
4. Saklayıcı-Özel (Register-Specific) Adresleme Modu
5. Saklayıcı-Dolaylı (Register-Indirect) Adresleme Modu
6. Saklayıcı-İndisli (Register-Indexed) Adresleme Modu

Veri Adresleme Modlarının Makine Kodu Formatları:

3
8051 Adresleme Modları (Adresleme Yöntemleri)
Veri Adresleme Modlarının Makine Kodu Formatları:

Not: Veri adresleme modu, komutların opcode + operand(lar)


şeklinde ifade edilebilen makine kodu uzunluğunu, yani komutun
program hafızada kapladığı alanı belirler.
4
8051 Adresleme Modları
1) İvedi (Immediate) Adresleme:
– Bu mod ile sabit bir değer bir kaydediciye veya bir adrese yüklenir.
– # işareti ivedi adreslemenin simgesidir.

Komut Yapısı:
– KOMUT A/Rx, #data ; Veriyi kaydediciye

Komut Örnekleri:
– MOV A, #12 ; Onluk 12 (onaltılık 0CH) değeri A’ya
– MOV A, #12H ; Onaltılık 12H değeri A’ya
– MOV DPTR, #2000H ; Onaltılık 2000H değeri DPTR saklayıcısına
– MOV P0, #CCH ; Onaltılık CCH değeri Port 0 saklayıcısına
– MOV P1, #55H ; Onaltılık 55H değeri Port 1 saklayıcısına
– MOV R0, #10H ; Onaltılık 10H değeri R0 saklayıcısına
– MOV @R0, #10H ; Onaltılık 10H değeri R0’ın işaret ettiği yere
– MOV 64H, #10H ; Onaltılık 10H değeri 64H adresine

5
8051 Adresleme Modları
2) Doğrudan (Direct) Adresleme:
– Bu mod ile (00H – 7FH) adres aralığındaki düşük 128 byte bölgesine
ve (80H – FFH) adres aralığındaki SFR saklayıcılarına erişilebilir.

Komut Yapısı:
– KOMUT A/Rx, direct ; Bellekten saklayıcıya
– KOMUT direct, A/Rx ; Saklayıcıdan belleğe
– KOMUT direct, direct ; Bellekten belleğe

Komut Örnekleri:
– MOV A, 70H ; 70H adresindeki veriyi A’ya
– MOV 90H, A ; A’yı SFR bölgesi 90H adresindeki Port 1’e
– MOV A, P1 ; Port 1’deki veriyi A’ya
– MOV P1, A ; A’daki veriyi Port 1’e
– MOV 40H, 30H ; 30H adresindeki veriyi 40H adresine
– MOV R5, 30H ; 30H adresindeki veriyi R5 saklayıcısına
– MOV P0, TL0 ; TL0 saklayıcı içeriğini Port 0’a

6
8051 Adresleme Modları
3) Saklayıcı (Register) Adresleme:
– Bu modda kaynak veya hedef byte, PSW saklayıcısının 3. ve 4. bitleriyle
seçilmiş olan (Bank 0,1,2,3) saylayıcı kümesindeki sekiz saklayıcıdan
(R0,R1, … ,R7) biridir.
Komut Yapısı:
– KOMUT A, Rx ; Rx saklayıcısından A’ya
– KOMUT Rx, A ; A’dan Rx saklayıcısına

Komut Örnekleri:
– MOV A, R5 ; R5 saklayıcısındaki veriyi A’ya
– MOV R0, A ; A’daki veriyi R0 saklayıcısına
– MOV B, R2 ; R2 saklayıcısındaki veri B saklayıcısına
– MOV R4, R7 ; Böyle bir kullanım yoktur !

Not: Bu komutlardan önce 4 saklayıcı kümesinden birisi seçilmelidir.


Örneğin: MOV PSW, #00000000B ; Register Bank 0 seçilir.
MOV PSW, #00001000B ; Register Bank 1 seçilir.
MOV PSW, #00010000B ; Register Bank 2 seçilir.
MOV PSW, #00011000B ; Register Bank 3 seçilir.
7
8051 Adresleme Modları
4) Saklayıcı-Özel (Register-Specific) Adresleme:
– Bu modda komutlar sadece belirli saklayıcılara özel olup başka bir
adresleme gerektirmez. Bu komutlar sadece A, B, DPTR, PC gibi
saklayıcıları kullanır.

Komut Yapısı:
– KOMUT A/DTPR ; A veya DPTR üzerinde işlem yapar.

Komut Örnekleri:
– INC A ; A’daki veriyi bir arttır.
– RL A ; A’daki veriyi sola döndür.
– INC DPTR ; DPTR saklayıcısındaki veriyi bir arttır.
– MUL AB ; A’nın ve B’nin verilerini çarp.
– DIV AB ; A’daki veriyi B’deki veriye böl.
– CPL A ; A’nın bitleri terslenir.
– NOP ; İşlem yok. (No Operation)

8
8051 Adresleme Modları
5) Saklayıcı-Dolaylı (Register-Indirect) Adresleme:
– Bu modda kaynak veya hedefin adresi komutun içinde açık olarak
verilmez. R0,R1 saklayıcıları verinin adres bilgisini tutmak için işaretçi
olarak kullanılır. Bu saklayıcılar verinin RAM’da okunacağı veya yazılacağı
adresi içerir.
– Bu adresleme yöntemi bazı 8051 türevlerinin dahili RAM bölgesindeki
yüksek 128 byte’lık alana ulaşmak için de kullanılır. Fakat aynı adrese
sahip olan SFR saklayıcılarına ulaşılamaz.
– @ işareti dolaylı adreslemenin simgesidir.

Komut Yapısı:
– KOMUT @DPTR, A ; A’dan DPTR’nin gösterdiği harici belleğe
– KOMUT A, @DPTR ; DPTR’nin gösterdiği harici bellekten A’ya
– KOMUT @Rx, A ; A’dan Rx’in gösterdiği adrese
– KOMUT @Rx, direct ; dahili bellek verisi, Rx’in gösterdiği adrese
– KOMUT @Rx, #data ; Veri Rx’in gösterdiği adrese
– KOMUT A, @Rx ; Rx’in gösterdiği adresteki veri A’ya
– KOMUT direct, @Rx ; Rx’in gösterdiği adresteki veri dahili belleğe
9
8051 Adresleme Modları
Saklayıcı-Dolaylı (Register-Indirect) Adresleme:

Komut Örnekleri:
– MOV DPTR, #9000H ; DPTR harici bellek 9000H adresini göstersin
– MOVX @DPTR, A ; A’yı DPTR’nin gösterdiği harici belleğe yükle
-----------------------------------------------------------------------------------------------------
– MOV DPTR, #8000H ; DPTR harici bellek 8000H adresini göstersin
– MOVX A, @DPTR ; DPTR’nin gösterdiği harici veriyi A’ya yükle
-----------------------------------------------------------------------------------------------------
– MOV R0, #78H ; R0 dahili bellekteki 78H adresini göstersin
– MOV @R0, A ; A’yı R0’ın gösterdiği dahili belleğe yükle
– MOV @R0, 25H ; 25H adresindeki veriyi R0’ın gösterdiği
dahili belleğe yükle
– MOV @R0, #12H ; Onaltılık 12H değerini R0’ın gösterdiği
dahili belleğe yükle
– MOV A, @R0 ; R0’ın gösterdiği adresteki veriyi A’ya yükle.
– MOV 30H, @R0 ; R0’ın gösterdiği adresteki veriyi 30H
adresindeki dahili belleğe yükle
10
8051 Adresleme Modları
6) Saklayıcı-İndisli (Register-Indexed) Adresleme:
– Bu adresleme modu bellekte bulunan sıralı bilgilere erişmek ve bakma
tablosu (look-up table) halindeki sabit verilere ulaşmak için kullanılır.
– Hedef veya kaynak adres, bir taban adrese A’nın eklenmesiyle elde edilir.
– DPTR veya PC taban adresi tutarken A indis olarak kullanılır
– Bu adresleme modunda MOVC ve JMP komutları kullanılır.

Komut Yapısı:
– KOMUT A, @A+DPTR ; Program bellekten A’ya
– KOMUT A, @A+PC ; Program bellekten A’ya
– KOMUT @A+DPTR ; Program bellek (A+DPTR) adresinin içeriği

Komut Örnekleri:
– MOVC A, @A+DPTR ; ROM bellekte (A+DPTR)’nin gösterdiği
adresindeki veriyi A’ya yükle
– MOVC A, @A+PC ; ROM bellekte (A+PC)’nin gösterdiği
adresindeki veriyi A’ya yükle
– JMP @A+DPTR ; ROM bellekte (A+DPTR)’nin gösterdiği
adrese dallan
11
8051 Adresleme Modları
Saklayıcı-İndisli (Register-Indexed) Adresleme:
ORG 2100H ; ROM bellekteki programın başlangıç adresi
MOV DPTR, #2200H ; Taban adresi look-up tablosunun başlangıcı
MOV A, #6 ; 7-segment göstergede görülecek sayı: 6
MOVC A, @A+DPTR ; Tablodan 6’ya karşılık gelen kodu okur.
MOV P1, A ; Okunan 7-segment kod Port 1’e gönderilir.

ORG 2200H ; 7-segment look-up tablosunun başlangıcı


DB C0H ;0 Hex hgfe dcba
DB F9H ;1 C0h 1100 0000
DB A4H ;2 F9h 1111 1001
DB B0H ;3 A4h 1010 0100
B0h 1011 0000
DB 99H ;4
99h 1001 1001
DB 92H ;5 92h 1001 0010
DB 82H ;6 82h 1000 0010
DB F8H ;7 F8h 1111 1000
DB 80H ;8 80h 1000 0000
DB 90H ;9 90h 1001 0000

12
8051 Adresleme Modları
Saklayıcı-İndisli (Register-Indexed) Adresleme:
ORG 2100H ; ROM bellekteki programın başlangıç adresi
MOV A, #6 ; 7-segment göstergede görülecek sayı: 6
CALL VERIAL ; VERIAL altprogramından gelen veri A’da
MOV P1, A ; Okunan 7-segment kod Port 1’e gönderilir.
ORG 2200H ; VERIAL altprogramının başlangıç adresi
VERIAL: INC A ; 6 deseni RET komutundan sonra 7. sırada
MOVC A, @A+PC ; PC RET komutunun opkodunu işaret eder
RET ; Okunan 7-segment kod Port 1’e gönderilir.
TABLO: DB C0H ;0 Hex hgfe dcba
DB F9H ;1 C0h 1100 0000
DB A4H ;2 F9h 1111 1001
DB B0H ;3 A4h 1010 0100
B0h 1011 0000
DB 99H ;4
99h 1001 1001
DB 92H ;5 92h 1001 0010
DB 82H ;6 82h 1000 0010
DB F8H ;7 F8h 1111 1000
DB 80H ;8 80h 1000 0000
DB 90H ;9 90h 1001 0000
13
8051 Komut Kümesi
• 8051 komut kümesi farklı uzunluktaki (1,2,3 byte), farklı komut işlem
sürelerine (1,2,3,4 makine çevrimi) sahip olan 255 komuttan oluşur.

• 8051 Komut kümesi 3 gruba ayrılabilir:


1. Veri Transfer Komutları
2. Veri İşleme Komutları
• Aritmetik İşlem Komutları
• Lojik İşlem Komutları
3. Program Akış Kontrol Komutları

1. Veri Transfer Komutları:


a) Dahili veri hafıza alanına erişen veri transfer komutları
b) Harici veri hafıza alanına erişen veri transfer komutları
c) Program hafıza alanına erişen veri transfer komutları

Not: Veri transfer komutları bayrakları etkilemez.


14
8051 Komut Kümesi - Veri Transfer Komutları
1. Dahili veri hafıza transfer komutları:

15
8051 Komut Kümesi - Veri Transfer Komutları
Komut Yapıları:

MOV A, <src> ; direct, indirect, register, immediate


MOV <dest>, A ; direct, indirect, register
Dahili RAM veya SFR hücreleri ile A arasında veri transferi yapar.

MOV <dest>, <src> ; direct, indirect, register, immediate


Herhangi iki dahili RAM veya SFR hücreleri arasında, A üzerinden
geçmeden veri transferi yapar.

MOV DPTR, #data16 ; immediate


Harici veri hafızaya erişimlerde DPTR saklayıcısına 16-bitlik ilk değer
(taban adres) yüklenir.

16
8051 Komut Kümesi - Veri Transfer Komutları
Komut Yapıları:
PUSH <src> ; direct adresteki veriyi yığına atar
Yapılan İşlem: INC SP
MOV @SP, <src>
POP <dest> ; yığındaki veriyi direct adrese atar
Yapılan İşlem: MOV <dest>, @SP
DEC SP
PUSH ve POP komutları, yığına atılacak veya yığından geri alınacak olan
veriyi belirlemek için sadece doğrudan adresleme modunu kullanır.
PUSH komutu, önce yığın işaretisini (SP – Stack Pointer) bir arttırır, sonra
SP ile işaretlenen hafıza hücresine bir byte veriyi yazar.
POP komutu ise PUSH komutunun tersini yapar. Önce SP ile işaretlenen
hafıza hücresinden bir byte veriyi okur, sonra SP’nin değerini bir azaltır.
NOT: SP saklayıcısı SFR bölgesinde 81H adresindedir ve işlemci
resetlendiğinde dahili RAM bölgesindeki 07H adresini (Bank 0’daki R7’yi)
gösterir. Yığın bu adresten başlar ve yukarıya doğru genişler.
17
8051 Komut Kümesi - Veri Transfer Komutları
Komut Yapıları:
XCH A, <byte> ; direct, indirect, register
XCHD A, @Rx ; indirect

XCH A, <byte> komutu A ile adreslenen saklayıcının verilerini karşılıklı


yer değiştirir.
XCHD A, @Rx komutu ise A’nın ve Rx ile işaretlenen saklayıcının düşük 4-
bitlerini (low nibbles) yer değiştirir.

Komut Örnekleri:
XCH A, 35H ; direct
XCH A, @R0 ; indirect
XCH A, R7 ; register
XCHD A, @R0 ; indirect

18
8051 Komut Kümesi - Veri Transfer Komutları
2. Harici veri hafıza transfer komutları:

• Harici veri hafızaya erişimlerde sadece dolaylı adresleme kullanılabilir.


• Bir byte (8-bit) adres bilgisi sadece R0 ve R1 ile işaretlenir.
• İki byte (16-bit) adres bilgisi DPTR ile işaretlenir.
• A saklayıcısı her zaman veri için hedef veya kaynak saklayıcısıdır.
• Harici RAM hafıza okuma ve yazma sinyalleri RD, WR (ve ALE),
sadece bir MOVX komutu yürütülürken aktif olur. Harici RAM hafıza
kullanılmayacaksa P3’ün bu sinyallere ait pinleri I/O için kullanılabilir.
19
8051 Komut Kümesi - Veri Transfer Komutları
3. Bakma (Look-up) Tabloları:

• Okuma tablolarına erişimlerde saklayıcı-indisli adresleme kullanılır.


• MOVC komutu program hafızaya (ROM) kaydedilen tabloları okumak
için kullanılır.
• Tablodan sadece okuma yapılabilir, üzerinde değişiklik yapılamaz.
• Harici program hafızaya erişimlerde DPTR ve PC saklayıcıları 16-bitlik
ilk değer (taban adres) yüklenir.
• 8-bitlik A saklayıcısı kullanılarak taban adresten itibaren 256 adet
sıralı veriye erişilebilir.
• MOVC A, @A+PC komutu tabloya alt programlarla erişmek için
kullanılır.
• Harici program hafızaya erişim yapılırken PSEN (ve ALE) sinyalleri
aktif olur. 20
8051 Komut Kümesi - Veri Transfer Komutları
3. Bakma (Look-up) Tabloları:
Örnek 1: TABLO olarak tanımlanan tablonun her bir değerini okuyarak
önce A’ya, sonra P1 portuna gönderen program.

MOV DPTR, #TABLO ; DPTR = TABLO’nun başlangıç adresi

DONGU:
CLR A ;A=0
MOVC A, @A+DPTR ; TABLO’dan erişilen veriyi A’ya yükle
MOV P1, A ; A’ daki veriyi Port 1’e gönder
INC DPTR ; Adresi 1 arttır: DPTR = DPTR + 1
SJMP DONGU ; DONGU etiketine git

TABLO:
DB 01H, 02H, 03H, 04H, 05H, 06H, 07H, 08H, 09H, 0AH, 0BH, 0CH

Not: MOVC komutu ile her seferinde bir sonraki veriye ulaşılır.
21
8051 Komut Kümesi - Veri Transfer Komutları
3. Bakma (Look-up) Tabloları:
Örnek 2: TABLO olarak tanımlanan tablonun her bir değerini okuyarak
önce A’ya, sonra P1 portuna gönderen program.
MOV R1, 0 ; R1 = 0 Alınacak verinin sıra numarası
DNGU: CALL VERI ; TABLO’dan veriyi al
MOV P1, A ; A’ daki veriyi Port 1’e gönder
INC R1 ; R1 = R1 + 1
MOV A, R1 ; A = R1 (Sayaç değerini A’ya yükle)
SJMP DNGU ; DNGU döngüsüne devam et
VERI: INC A ; A’nın değerini (indisi) 1 arttır: A = A + 1
MOVC A, @A+PC ; Tabloda erişilen veriyi A’ya yükle
RET ; VERI altprogramından dönüş
TABLO: DB 33H
DB 55H
DB 77H ; …………. (tablo benzer şekilde devam edebilir)
Not: Tablo program hafızada RET komutundan hemen sonra gelmelidir.
MOVC komutu ile her seferinde bir sonraki veriye ulaşılır.
22
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar:

23
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Toplama İşlemi
• İki tane toplama komutu vardır: ADD ve ADDC (C ile eldeli toplama)
• Birinci operand her zaman A’dadır. İkinci operand doğrudan, dolaylı,
saklayıcı veya ivedi adresleme modları ile belirtilir. A’ya ikinci operand
eklenir ve toplama işleminin sonucu A’ya yerleştirilir.
• ADD ve ADDC komutuyla yapılan toplama işleminde 1 elde oluşursa C
bayrağı 1’lenir. Sonuca göre etkilenen bayraklar: C, AC, OV.
• ADDC komutu elde bayrağının eklenmesi dışında ADD ile aynıdır.
ADDC komutu özellikle uzun tamsayı toplamalarında kullanılır.

Komut Örnekleri:
MOV A, #1CH ; A = 1CH
MOV R5, 0A1H ; R5 = 0A1H
ADD A, R5 ; A = BDH, C = 0, OV = 0
ADD A, R5 ; A = 5EH, C = 1, OV = 0
INC A ; A = 5FH (A = A + 1)
ADDC A, #10H ; A = 70H, C = 0, OV = 0
24
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Toplama İşlemi
Örnek: 16-bitlik iki tamsayının toplama işlemi

X = 1234H ve Y = 12EFH tamsayılarını saklayıcılara yükleyen komutlar:


MOV 78H, #34H ; XL (X Low Byte)
MOV 79H, #12H ; XH (X High Byte)
MOV 7AH, #0EFH ; YL (Y Low Byte)
MOV 7BH, #12H ; YH (Y High Byte)

25
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Toplama İşlemi
Örnek: 16-bitlik iki tamsayının toplama işlemi

XL = XL + YL toplama işlemini gerçekleyen komutlar:

MOV A, 78H ; A = XL
ADD A, 7AH ; A = XL + YL
MOV 78H, A ; XL = A

Bu aşamada 78H adresli hücre 23H değerini içermektedir ve C elde


bayrağı 1’lenmiştir. Aşağıdaki komutlar XH = XH + YH + C işlemini yapar:

MOV A, 79H ; A = XH
ADDC A, 7BH ; A = XH + YH + C
MOV 79H, A ; XH = A

Bu komutlar çalıştırıldığında 2523H toplam değeri 78H - 79H’da saklanır.


26
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Çıkarma İşlemi
• Çıkarma komutu : SUBB (C ile eldeli çıkarma)
• Birinci operand her zaman A’dadır. İkinci operand doğrudan, dolaylı,
saklayıcı veya ivedi adresleme modları ile belirtilir. A’dan ikinci
operand çıkarılır ve çıkarma işleminin sonucu A’ya yerleştirilir.
• SUBB komutuyla yapılan çıkarma işleminde 1 ödünç almak gerekirse
C bayrağı 1’lenir. Sonuca göre etkilenen bayraklar: C, AC, OV.
• SUBB A, #Sayı komutuyla A = A – Sayı – C işlemi yapılır. Yani tek veya
peş peşe yapılan çıkarma işlemlerinden önce C bayrağı sıfırlanmalıdır.

Komut Örnekleri:
MOV C, #00H ;C=0
MOV A, #3AH ; A = 3AH
MOV 45H, #13H ; 45H adresinin içeriği = 13H
SUBB A, 45H ; A = 27H, C = 0, OV = 0
SUBB A, 45H ; A = 14H, C = 0, OV = 0
SUBB A, #80H ; A = 94H, C = 1, OV = 0
27
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Çıkarma İşlemi
Örnek: 16-bitlik iki tamsayının çıkarma işlemi

X = 1234H ve Y = 1135H tamsayılarını saklayıcılara yükleyen komutlar:


MOV 78H, #34H ; XL (X Low Byte)
MOV 79H, #12H ; XH (X High Byte)
MOV 7AH, #35H ; YL (Y Low Byte)
MOV 7BH, #11H ; YH (Y High Byte)
CLR C ; C bayrağını temizle
28
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Çıkarma İşlemi
Örnek: 16-bitlik iki tamsayının çıkarma işlemi

XL = XL – YL çıkarma gerçekleyen komutlar:

MOV A, 78H ; A = XL
SUBB A, 7AH ; A = XL – YL – C (başlangıçta C = 0)
MOV 78H, A ; XL = A

Bu aşamada 78H adresli hücre FFH değerini içermektedir ve C elde


bayrağı 1’lenmiştir. Aşağıdaki komutlar XH = XH – YH – C işlemini yapar:

MOV A, 79H ; A = XH
SUBB A, 7BH ; A = XH – YH – C
MOV 79H, A ; XH = A

Bu komutlar çalıştırıldığında 00FFH fark değeri 78H - 79H’da saklanır.


29
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Arttırma ve Azaltma Komutları
• Bu komutlar döngü sayaçlarını veya veri işaretçilerini arttırma veya
azaltma işlemlerinde kullanılır.

Komut Örnekleri:

INC 25H ; 25H adresindeki veriyi 1 arttır (direct)


INC @R0 ; R0’ın gösterdiği adresteki veriyi 1 arttır (indirect)
INC R1 ; R1 saklayıcısındaki veriyi 1 arttır (register)
INC A ; A = A + 1 (register-specific)
INC DPTR ; DPTR = DPTR + 1 (register-specific)

DEC A ; A = A – 1 (register-specific)
DEC 35H ; 25H adresindeki veriyi 1 azalt (direct)
DEC @R0 ; R0’ın gösterdiği adresteki veriyi 1 azalt (indirect)
DEC R1 ; R1 saklayıcısındaki veriyi 1 azalt (register)

30
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Arttırma ve Azaltma Komutları
Örnek: Veri hafızada bulunan X ve Y vektörleri (veri blokları, örneğin iki
satır veya sütun matris) toplanmaktadır. Yapılan işlem: X = X + Y
Bu program parçasında, X ve Y vektörlerinin boyutunun R2 saklayıcısında
olduğu, ayrıca X vektörüne R0 ve Y vektörüne R1 saklayıcılarının işaret
ettikleri varsayılmıştır.
MOV R0, #80H ; X vektörünün başlangıç adresi: 80H
MOV R1, #90H ; Y vektörünün başlangıç adresi: 90H
MOV R2, #10 ; X ve Y’nin boyutu = 10 (döngü sayacı)
LOOP: MOV A, @R0 ; X’ten 1 byte oku
ADD A, @R1 ; Y’nin 1 byte’ı ile topla
MOV @R0, A ; Sonucu X’e yerleştir
INC R0 ; Bir sonraki X byte’ına işaret et
INC R1 ; Bir sonraki Y byte’ına işaret et
DJNZ R2, LOOP ; Döngü sayacını azalt, sayaç sıfır değilse
; LOOP etiketine git
31
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Çarpma ve Bölme Komutları
• 8051 ailesinin üyeleri çarpma ve bölme donanımlarına sahiptir
• Bu komutlar 4 makine çevrimi ile en uzun zaman alan komutlardır.
• Saklayıcı-özel adresleme modunda A ve B saklayıcıları kullanılır
• MUL AB komutu A ve B saklayıcılarındaki 8-bitlik iki işaretsiz
tamsayıyı çarpar. Yapılan işlem: AxB
• 16-bitlik çarpma işleminin sonucunun düşük byte’ı A saklayıcısına,
yüksek byte’ı B saklayıcısına yüklenir.
• Sonuç 255’ten (FFH) büyük ise OV taşma bayrağı 1’lenir, küçük ise
0’lanır. OV taşma bayrağı 0 ise B saklayıcısı 0 değerini içerir.
• Sonuç FFFFH değerinden büyük olamaz. Yani C bayrağı etkilenmez.
• DIV AB komutu A saklayıcısındaki 8-bit işaretsiz tamsayıyı B
saklayıcısındaki 8-bit işaretsiz tamsayıya böler. Yapılan işlem: A/B
• Bölme sonucu (bölüm) A saklayıcısına, kalan B saklayıcısına yüklenir.
• OV bayrağı sıfıra bölme durumunu gösterir. Bölme komutundan önce
B saklayıcısının içeriği 0 ise sonuç belirsiz olur ve OV bayrağı 1’lenir.
• DIV AB komutu C elde bayrağını temizler.
32
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Çarpma ve Bölme Komutları

Örnek 1: İki adet 8-bitlik sayı ile yapılan çarpma işlemleri

MOV A, #7BH ; A = 7BH


MOV B, #02H ; B = 02H
MUL AB ; A = 00H , B = F6H , OV = 0
MOV A, #0FEH ; A = FEH
MUL AB ; A = 14H , B = F4H , OV = 1

Örnek 2: İki adet 8-bitlik sayı ile yapılan bölme işlemi

MOV A, #19H ; A = 19H (onluk 25)


MOV B, #06H ; B = 06H (onluk 6)
DIV AB ; A = 04H , B = 01H

33
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Çarpma ve Bölme Komutları

Örnek 3: İki basamaklı onluk bir sayının (23) birler ve onlar hanesini elde
etmek için aşağıdaki komutlar kullanılabilir.

MOV A, #23H ; A = onaltılık 23 sayısı


MOV B, #10H ; B = onaltılık 10 sayısı
DIV AB ; A = 02H , B = 03H

Örnek 4: İki basamaklı onaltılık bir sayının (ABH) hane olarak ikiye
ayırmak için aşağıdaki komutlar kullanılabilir.

MOV A, #0ABH ; A = onaltılık ABH sayısı


MOV B, #10H ; B = onaltılık 10 sayısı (= onluk 16 sayısı)
DIV AB ; A = 0AH , B = 0BH

34
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Ondalık Ayarlama Komutu
DA A (Decimal Adjust Accumulator) komutu, ikili kodlanmış ondalık
(BCD – Binary Code Decimal) sayıların toplama işleminden sonra
kullanılır. Bir BCD sayının her 4 biti (nibble) bir ondalık sayıyı belirtir. Yani,
her 4-bit sayının değeri 0 (0000) ile 9 (1001) arasında olabilir. BCD
sayıların kullanıldığı ADD veya ADDC komutlarından sonra tabanlı sonuç
elde etmek için DA komutu kullanılmalıdır. Ya da bazı uygulamalarda ikili
sayının (veya onaltılı eşdeğerinin) onluk sayı sistemine çevrilmesi
gerekebilir. DA komutuyla yapılan işlem, A ve PSW içeriklerine göre, A’ya
0h, 6h, 60h veya 66h ekleme işlemine eşdeğerdir.
Örnek 1: 12 + 29 = ?
MOV A, #12H ; A = 12H (BCD)
MOV B, #29H ; B = 29H (BCD)
ADD A, B ; 12H + 29H = 3BH (BCD değil)
DA A ; 3BH + 06H = 41H bulunur, yani sonuca 6H
; eklenir, BCD toplam: 12 + 29 = 41 olur
; A = 41H içerir ve elde bayrağı C = 0 olur
35
8051 Komut Kümesi - Veri İşleme Komutları
Örnek 2: 55 + 66 = ?
MOV A, #55H ; A = 55H (BCD)
MOV B, #66H ; B = 77H (BCD)
ADD A, B ; 55H + 77H = CCH (BCD değil)
DA A ; CCH + 66H = 132H bulunur, yani sonuca 66H
; eklenir. BCD toplam: 55 + 77 = 132 olur.
; A = 32H içerir ve elde bayrağı C = 1 olur

Örnek 3: 59 + 1 = ?
MOV A, #59H ; A = 59H (BCD)
ADD A, #1 ; A = 59H + 01H = 5AH (BCD değil)
DA A ; 5AH + 06H = 60H bulunur, yani sonuca 6H
; eklenir. BCD toplam: 59 + 1 = 60 olur.
; A = 60H içerir ve elde bayrağı C = 0 olur

36

You might also like