Professional Documents
Culture Documents
Mikroişlemciler 2020 Bahar - Kısım 2
Mikroişlemciler 2020 Bahar - Kısım 2
8051 Ailesinin Temel Özellikleri: 8051 Intel firması tarafından üretilen MCS-51
ailesinin ilk üyesi olup MCS-51 ailesinin ilk çekirdeğidir. Temel özellikleri:
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
3
8051 çekirdeğinin detaylı blok şeması
4
8051 Tümdevre Uç Fonksiyonları
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.
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.
9
8051 Portlarının Latch’ları ve Giriş/Çıkış Buffer’ları
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.
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
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.
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.
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.
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.
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.
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.
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.
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.
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
3
8051 Adresleme Modları (Adresleme Yöntemleri)
Veri Adresleme Modlarının Makine Kodu Formatları:
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 !
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.
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.
15
8051 Komut Kümesi - Veri Transfer Komutları
Komut Yapıları:
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
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ı:
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
25
8051 Komut Kümesi - Veri İşleme Komutları
1. Aritmetik Komutlar: Toplama İşlemi
Örnek: 16-bitlik iki tamsayının toplama işlemi
MOV A, 78H ; A = XL
ADD A, 7AH ; A = XL + YL
MOV 78H, A ; XL = A
MOV A, 79H ; A = XH
ADDC A, 7BH ; A = XH + YH + C
MOV 79H, A ; XH = A
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
MOV A, 78H ; A = XL
SUBB A, 7AH ; A = XL – YL – C (başlangıçta C = 0)
MOV 78H, A ; XL = A
MOV A, 79H ; A = XH
SUBB A, 7BH ; A = XH – YH – C
MOV 79H, A ; XH = A
Komut Örnekleri:
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ı
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.
Ö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.
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