BÖLÜM I
GİRİŞ
Günümüzde mikroişlemci kelimesi
pek çok insan için yabancı
olmayıp herkese fraklı anlam ifade eder. Teknik
olmayan pek çok kişi , mikroişlemcinin , bir kişisel bilgisayarda (PC)
kullanılan , bilgisayarını gücünü
belirleyen çok önemli bir elektronik tümdevre olduğunu bilir. PC‘lerden başlayıp ,diz üstü PC’ler,
minibilgisayarlara kadar bütün bilgisayarlar, mikroişlemcinin görevini
gerçekleştiren , daha genel bir ifadeyle ,bir işlemciye sahiptir. Bilgisayarlardaki işlemciler , 1950’lerden günümüze
çok değişik şekiller almıştır. Günümüzde tipik bir bilgisayar üç ana
birimden oluşur :
1- Merkezi İşlem Birimi(Central
Processing Unit-CPU)
2- Hafıza
(Memory)
3- Giriş/
Çıkış(I/O) Birimleri
CPU
,bilgisayarın değişik birimleri
arasındaki
veri akışı ve veri işleme görevlerini
yerine getirir. Veri işlemenin çoğu,
CPU içindeki aritmetik lojik birimde
gerçekleştirilir. CPU çeşitli
komutları yürüterek , bilgisayar sisteminin çalışmasını yönetir.
Bilgisayar hafızasında saklı olan
komutlar, bilgisayarın yürüteceği programı oluşturur. Bir CPU‘ daki kontrol alt
birimi, sistemdeki veri akışını yönetir, hafızadan okunan komutu çözer ve komut tarafından belirlenen işlemi yerine getirir. İşlemler ,veri
transferi veya ALU’ daki işlemlerdir. ALU
, toplama ,çıkarma .çarpma ,bölme gibi temel aritmetik işlemler ve lojik işlemleri yerine
getirir. Lojik işlemler, AND, OR ve EX-OR gibi
işlemlerdir.
Dış dünyadan
CPU’ ya veri transfer eden alt birim giriş cihazıdır. Giriş verisi, bir insan ,diğer bir bilgisayar
veya başka bir elektronik sistem
gibi çok değişik kaynaklardan gelebilir. CPU tarafından işlenen veri , hemen çıkışa
gönderilebilir veya daha sonra
işlenmek üzere hafızada saklanır. CPU’
dan dış dünyaya veri transfer eden alt
birim çıkış cihazıdır. Bu birim ile,
göstergeler, yazıcılar ,diğer
bilgisayarlara veya elektronik
sistemlere veri transfer eden cihazları belirtmektedir.
1971 yılında , bir bilgisayarın
ALU ile kontrol birimlerinin bir silikon tümdevresi üzerine , INTEL
firması tarafından konulması ile ,
mikroişlemciler dönemi başlamıştır.
Basit bir teknik tanım ile ,
mikroişlemci, yarı iletken tek bir tümdevre üzerine
yerleştirilmiş CPU'’ya denir. Mikroişlemciler genel amaçlı
cihazlar olup bir çok uygulama
için uygundur. Bir mikroişlemci temel olarak
CPU’ nun fonksiyonlarını yerine
getirdiği için ,pek çok kere , CPU ile mikroişlemci eş anlamda
kullanılmaktadır.
Bir bilgisayarın CPU’ su baskı devre kartında bulunuyorsa ,
bilgisayar , minibilgisayar diye adlandırılır. Bir mikroişlemci etrafına kurulu
bilgisayar, mikrobilgisayar diye adlandırılır. Bir mikrobilgisayarın
mikroişlemcisi, I/O ve hafıza cihazları ,teknolojiye ve uygulamalara göre
devamlın değişim göstermektedir. Teknolojinin gelişimi doğrultusunda , daha önce mikroişlemci
tümdevresi üzerinde olmayıp dışarıda
olan , pek çok giriş/ çıkış ve hafıza alt birimleri, CPU üzerine taşınmıştır.
Mikrokontrolör
, bir tümdevre üzerinde üretilen
bilgisayara denir. Bir mikrokontrolör tümdevresinde bulunan
hafıza ve giriş/ çıkış alt sistemleri, bu işlemcilerin bir çok
uygulama içinde , gömülü olarak doğrudan
ve tek başına , mikroişlemcilere göre çok daha basit ve ucuz arabirim
teknikleriyle , kontrol amaçlı olarak
kullanılmalarını sağlar. Günümüzde
mikroişlemciler ev mikrokontrolörler teknolojinin vazgeçilmez birimleri olup , sayısız alanlarda kullanılmaktadır. Bugün ,mikroişlemci ve
mikrokontrolör üreten pek çok firma
bulunmaktadır. Bunların en önemlileri
INTEL ve MOTOROLA firmalarıdır.
Bir
mikrokontrolör, özet olarak , kullanıldığı sistemin bir çok özeliğini aynı
anda gözleme (monitoring) ,ihtiyaç
anında gerçek zamanda cevap verme (real-time response) ve sistemi denetlemeden (control) sorumludur.
Mikrokontrolörler , örneğin , otomobillerde motor
kontrol, elektrik ve iç panel kontrol ;
kameralarda , ışık ve odaklama kontrol
gibi amaçlarla kullanılmaktadır. Bilgisayarlar , telefon ve modem gibi çeşitli haberleşme cihazları ,CD teknolojisi
, fotokopi ve faks cihazları , radyo, TV,teyp,oyuncaklar, özel amaçlı
elektronik kartlar ve sayılamayacak
kadar pek çok alanda , mikrokontrolörler yoğun olarak kullanılmaktadırlar. Bu kadar geniş uygulamalarda kullanılan mikrokontrolörler , tümdevre
–üzerinde yer alan çok değişik donanım özelikleri sunmaktadır. Bu özeliklerden
bazıları şunlardır :
Paralel ve Seri I/O portları
,zamanlayıcı / sayıcılar, ADC, ve RAM, ROM, EPROM ve EEPROM gibi değişik kapasitelerde ve özeliklerde hafıza birimleri.
Mikrokontrolörlerin yoğun olarak kullanıldığı elektronik
ve kontrol uygulamalarının yapısı , mikrokontrolör , onun arkadaşı
olan genel amaçlı mikroişlemciden
ayırmaktadır. Bu uygulamalarda gerçek
zaman (real time) işlemi ve çok görevlilik( multi-tasking ) özeliği bulunur. Gerçek zamanda işleme ,
kontrolörün , sinyalleri çalışma ortamından
hazır olduklarında alıp ortamı
bekletmeden işleyebilmesi demektir. Benzeri şekilde ,kontrolör ihtiyaç anında çalışma
ortamına ,gereken kontrol
sinyallerini göndermeli ve ortamı
bekletmeyecek tarzda hızlı olmalıdır.
Diğer bir deyişle mikrokontrolör , sistemin çalışmasında sınırlayıcı etmen olmamalıdır. Çok görevlilik, bir çok
görevi aynı anda veya aynı anda gibi yapabilme kapasitesidir.
BÖLÜM II
8051
2.1
8051 MİKROKONTROLÖR AİLESİ
8051 Intel firması tarafından , 1980 ‘lerin başında piyasaya
sunulan , dünyanın en popüler 8-bit
mikrokontrolörüdür. Bu mikrokontrolör için ,
başta Intel olmak üzere , pek çok üretici firma (Philips , Dallas,
Siemens ,Oki ve Matra/Harris gibi) geniş bir donanım ve yazılım desteği sunmuş
ve bunun neticesi, 8051, 1980‘lerden
bugüne , bir endüstri standardı
olmuştur.
8051 ailesi bazen MCS-51
ailesi olarak da belirtilir. “
MCS” harfleri, geleneksel olarak , Intel firmasının üretmiş olduğu , bir
sistemi veya CPU ‘lar , hafızalar, saat
üreteçleri, giriş/ çıkış birimleri ve benzeri birimler içeren , mikrobilgisayar
ve uyumlu parçaları (components) belirtmede kullanılmıştır. Kitapta 8051 ve MCS-51
ifadeleri , eş anlamlı olarak aynı aileyi belirtmek için kullanılmıştır ve
genelde ,bir işlemciyi belirtmeyip
ailenin ismi olarak kullanılmaktadır.
Bununla beraber , 8051, MCS-51
ailesinin ilk üyelerinden olan ,
8051, 8751 ve 8031 mikrokontrolörlerinden birinin de adıdır. Bugün için değişik
mikrokontrolör aileleri arasında ,8051 ailesi, gelişmiş ürünleriyle beraber
yaklaşık % 40 gibi bir piyasa payına sahiptir. 8051 ailesinin temel
özelikleri aşağıda maddeler halinde özetlenmektedir:
Popüler : Kolay bir
şekilde bulunmakta ve desteklenmektedir. 8051 geliştiricileri için bir çok
Internet Web sayfası , kitaplar , teknik
dökümanlar , yazılım ve donanım gereçleri bulunmaktadır.
Uygun, Hızlı ve güçlü : 8051 çekirdek mimarisi
hedef kontrol uygulamalar için çok uygun olup hızlı ve güçlüdür.
Geniş yelpaze ve uyumluluk :
Çok değişik 8051 ürünleri olmasına karşın , ikili kod düzeyinde bütün
ürünler uyumludur (compatible). Diğer
mikrokontrolör aileleri , 8051 ‘in sunmuş olduklarını
, farklı ve uyumsuz işlemcilerle (genellikle tek üretici firma kaynaklı olarak ) ancak
sağlayabilmektedir. Bu uyumluluk , kolaylık
ve esneklik , program geliştirme araçlarında , eğitiminde ve yazılım desteğinde de bulunmaktadır.
Çok kaynaklılık : Günümüzde çok değişik 8051 işlemcisi üreten 12 üreticinin üzerinde
firma bulunmakta ve sayısız yazılım ve
bilgi kaynakları bulunmaktadır.
Sürekli iyileştirme:
1980‘lerden bugüne silikon ve
tasarım olarak sürekli geliştirilen
8051’ler hızını ve gücünü arttırmıştır.
Günümüzde 16-bit modellerinin de bulunduğu 8051’ler değişik kapasite , boyutlarda ve fiyatlarda kolay bir şekilde temin edilebilmektedir.

Şekil-2-1 8051
Mikrokontrolör Blok Diyagramı
8051 ailesi
8-bit single-chip mikrokontrolör 'ler sanayi uygulamaları için geliştirilmiş
üzerinde hem giriş hem de çıkış için kullanılabilen 4 adet I/O port'u bulunan
ayrıca bu portları Data ve Adres hatları
olarak kullanabilen bir yapıya sahiptir. 8051'de Program Bellek olarak 8KB ROM,
8751'de ise 8KB EPROM vardır. Program Bellek 16-bit adresleyebildiğinden,
Program Belleğimiz 64 KB olabilir.16-bitlik Data Bellek' in adreslenebilmesi
CPU' da bulunan DPTR register' i sayesinde mümkündür. Program Bellek yalnız
okunabilir,yazılamaz. Bu ailede 64KB'dan büyük Program Bellek alanına sahip
olan işlemciler de vardır. 8051'de programın ilk 4KB'lık kısmı chip üzerinde
bulunan ROM' da tutulabilir. ROM' suz
versiyonlarda Program Bellek haricidir ve örneğin EPROM olabilir. Bu
versiyonlarda harici Program Bellek ucu PSEN (Program Store Enable) 'dir.

Şekil-2-2 ALE Kullanımı İle Harici Program Kodunun Okunma
Zamanlaması
Data Bellek
(RAM) ,Program Bellekten ayrı bir adres alanını işgal eder. 8051'de 128 Byte'
lık Data Bellek chip' in üzerindedir. Bunlarda en fazla 64KB harici RAM ,harici
Data Bellek alanında adreslenebilir. ROM'suz versiyonlarda 128 Byte' lık Data
Bellek (RAM) chip üzerindedir. CPU' nun RD ve WR bacaklarından çıkan okuma ve yazma sinyalleri ile ihtiyaç
duyulan Data Bellek' e erişilebilinir.


Şekil-2-4 Okuma İşlemi Zamanlaması
RD ve PSEN sinyalleri
lojiksel olarak AND' lenirse bu çıkış ucu harici Program/Data Bellek için okuma
sinyali oluşturulabilir. 8051 Blok
Diyagramı şekil-2-4.'de verilmiştir.
Reset'
ten sonra CPU programını icra etmeye 0000H adresinden başlar. Program Bellek'
in bazı bölgeleri İnterrupt' lar için ayrılmıştır. Gelen interrupt CPU' nun bu
adres alanına atlamasına ve buradan servis programının icrasına başlamasına
neden olur. Örneğin harici INT0 interrupt' ı 0003H bölümüne ayrılmıştır. Eğer
harici INT0 kullanıma girerse, program servis rutini 0003H bölümüne atlayarak interrupt' a cevap
vermeye çalışır. Eğer harici INT0 kullanımda değilse servis rutini genel
Program Bellek' i okumaya ve icra etmeye devam eder.
İnterrupt servis bölümleri 8 Byte' lık aralarla
yerleştirilmişlerdir.
Örneğin; Vektör Adres
Interrupt-0
: 0003H
Timer
-0: 000BH
Interrupt-1: 0013H
Timer-1: 001BH
RI+TI: 0023H 'dir.
Program Bellek'in (ROM) , harici ROM veya dahili
ROM' dan hangisinin seçileceği chip üzerindeki EA (External Access) bacağının
durumuna bağlıdır. Eğer EA bacağı +5V
potansiyeline çekilirse program direk olarak dahili ROM'un 0000H ile 0FFFH
adreslerinden çağrılır. Eğer program 1000H ile FFFFH adreslerinden
çağırılıyorsa harici ROM kullanıldığı anlaşılır. EA bacağı toprak
potansiyelinde ise tüm program harici ROM(EPROM) 'dan direk olarak çağrılır.
ROM' suz versiyonlarda(8031-80C31) program' ın harici Program Bellek alanından
çağrılması için EA bacağı toprak potansiyeline çekilmelidir
Harici
program icrası için donanım konfigürasyonu şekil-2-5'
de gösterilmiştir.

Şekil-2-5. CPU-EPROM
ve Latch ile Harici Program Kodunun Okunması İçin Gerekli Donanım
Burada P0 ve
P2 (16-bit I/O hattı) external Program Bellek' ten programı getirmek için bum
fonksiyonlarını yerine getirmek görevini üstlenmişlerdir. P0 (PORT-0) adres ve
data hattının çoğullanmasından oluşmuştur. Böylece CPU' nun bacak sayısı
azaltılabilmiştir. Bu çoğullama
işleminden adres ve data hatlarını birbirinden ayırma işlemi CPU' dan
çıkan ALE (ADDRESS LATCH ENABLE) bacağı sayesinde olmaktadır.
Dahili Data
Bellek alanı 3 bellek bloğuna bölünmüştür ve bunlar 128 Byte' n altı,üstü ve
SFR (Special Function Register) olarak bilinir. Dahili Data Bellek adresleri
her zaman 1Byte'lıktır. Bu yüzden bu adres alanı yalnızca 256 Byte' ı ima eder.
Kuramsal olarak Data Bellek alanı 384 Byte olarak farz edilir. Bu bellek'in
7FH'dan üstüne, direk adresleme ve indirek adresleme yöntemleri ile iki farklı
bellek alanına erişilir. Kuramsal olarak kabul edilen bu bellek alanından fiziksel
olarak 256 Byte' ından faydalanılır. 80H ile FFH adresleri arasındaki bellek
alanı SFR, 00H ile 7FH adresleri arasındaki bellek alanı ise Dahili
Kullanılabilir RAM olarak adlandırılır.
Dahili RAM' n 128 Byte' lık alt kısmına direk ve
indirek adresleme ile ulaşılabilir. Dahili RAM 4 Register Bankı (yığını)
(Bank0'dan Bank3'e) ve bu bankların her biri 8 registerden oluşan kullanışlı
bir bellek alanıdır. Bu bankların seçimi SFR içindeki PSW (Program Status
Word)'deki RS0 veRS1 (Register Selection bits) bitlerinin durumuna göre
belirlenir.
SFR
kısmına ise sadece direk adresleme ile ulaşılabilir. Dahili RAM' ın 128 Byte'
lık üst kısmında, komut takımı komutları ile, 128 Byte direk olarak
adreslenebilir. SFR ; port adresleri, timer , status ve kontrol bitlerini,
akümülatör , stack pointer vs gibi kaydedicileri (register) içerir. Buradaki
register' lara yukarıda da değinildiği gibi yalnız direk adresleme ile
erişilebilir. SFR' nin içindeki 60 adres alanı hem byte hem de bit bit
adreslenebilir. Bitleri adreslenebilen SFR alanlarının adreslerinin sonu 0H ya
da 8H değerindedir.
Tüm bunların yanı sıra 8051 MCU' da;
·
2 adet 16 bitlik timer/event (zaman/olay) sayıcı
·
Full dublex seri giriş/çıkış ara yüzü
·
Boolean işlemler yapabilme
·
Entegre üzerinde dahili osilatör
·
İki öncelikli bölüm ile 5 interrupt kaynağı
yapısı
·
Çarpma,bölme,çıkarma ve karşılaştırma emirleri
·
3.5MHz-15MHz arası saat frekansı
·
128 Byte stack genişliği özellikleri de vardır.
8051 CPU' nun
bacak bağlantı yapısı şekil-2-6' da verilmiştir.
Burada bulunan 4 port' un da ortak
özellikleri çıkışlarının latch' lanmış , iki yönlü dahili pull-up' lıdır. Yani
bir sonraki bilgi gelene kadar önceki bilgiyi portta tutar.
![]() |
Şekil- 2-6 8051 Mikrokontrolör Bacak Bağlantıları
RST
bacağı yüksekte iken ve osilatör çalışıyorken iki makine periyodu için CPU
resetlenir. Sistem çalışıyorken RST pini 0V potansiyelinde ve reset anında +5V
potansiyelinde olması gerekmektedir. Eğer sürekli olarak +5V seviyesinde ise
CPU sürekli resetleniyor ve herhangi bir program icra edemiyor demektir.
RxD ve TxD pinleri seri iletişim için data alma ve data
gönderme işlevini yerine getirir.
Şekil 2.6. 8051 Bacak Yapısı
INT0 veINT1
pinleri harici interrupt giriş uçlarıdır.
T0 ve T1
pinleri zamanlayıcı harici giriş uçlarıdır.

Şekil-2-7 Portların
Giriş/Çıkış Durum Özellikleri

Şekil-2-8
İki yönlü Çıkış Yapısı

Şekil-2-9 Open-Drain
Çıkış Yapısı

Şekil-2-10. Push-Pull
Çıkış Yapısı
XTALL1 veXTALL2 pinleri ise CPU' nun dahili osilatörüne
bağlı bacaklardır. Hem harici uygun frekanslı kristal bağlayarak hem de harici
osilatör kullanarak CPU çalıştırılabilir.

Şekil-2-11 Saat İşaretinin Üretilmesi İçin Kristal veya
Harici Saat Kullanımı
Sistemin
resetlenmesini sağlamak için şekil-2-12'deki devre (Power-ON Reset) kullanılabilir.
Devreye bağlanan R ve C'nin değeri değiştirilerek reset süresi
değiştirilebilir. Kurduğum devrede R=8.2K ve C=10nF'dır.

Şekil-2-12. Power-ON Reset Devresi
2.1. 8051 Komut Kümesi
8051 komut
kümesi üçe ayrılır. Bunlar ; veri transfer komutları , veri işleme komutları ev
program akışı kontrol komutlarıdır.
Gösterim
İşlem
|
Adresleme modları
|
||||
Dir
|
Ind
|
Reg
|
Imm
|
||
MOV A
,<src>
|
A = <src>
|
*
|
*
|
*
|
*
|
MOV <dest>, A
|
<dest> =A
|
*
|
*
|
*
|
|
MOV <dest> ,<src>
|
<dest>=<src>
|
*
|
*
|
*
|
*
|
MOV DPTR, #data16
|
DPTR =16-bit ivedi sabit
|
*
|
|||
PUSH <src>
|
INC SP : MOV @SP , <src>
|
*
|
|||
POP <dest>
|
MOV<dest> , @SP : DEC SP
|
*
|
|||
XCH A , <byte>
|
ACC ó <byte>
|
*
|
*
|
*
|
|
XCHD A ,@Ri
|
ACC ó @Ri (Düşük 4-bit)
|
*
|
|||
Tablo-2-1 :Dahili Veri
Hafıza Alanına Veri
Transfer Komutları
Adres genişliği
|
Gösterim
|
İşlem
|
8- bit
|
MOVX
A, @Ri
|
Harici
RAM @Ri ‘ yi oku
|
8- bit
|
MOVX
@Ri, A
|
Harici
RAM @Ri ‘ yi yaz
|
16- bit
|
MOVX
A, @DPTR
|
Harici
RAM @DPTR‘ yi oku
|
16- bit
|
MOVX @DPTR ,A
|
Harici
RAM @DPTR‘ a yaz
|
Tablo-2-2 :Harici Veri
Hafıza Alanına Erişen Veri Transfer
Komutları
Gösterim
|
İşlem
|
MOVC A, @A+DPTR
|
Prog.
Hafıza @(A+DPTR)Hücresini Oku
|
MOVC A, @A+ PC
|
Prog.
Hafıza @ (A+PC ) Hücresini Oku
|
Tablo-2-3 : Tablo Okuma
Komutları
Gösterim İşlem
|
Adresleme modları
|
||||
Dir
|
Ind
|
Reg
|
Imm
|
||
ADD A ,
<byte>
|
A
=A +<byte>
|
*
|
*
|
*
|
*
|
ADDC A ,<byte>
|
A
=A +<byte> +C
|
*
|
*
|
*
|
*
|
SUBB A ,<byte>
|
A
=A -<byte>- C
|
*
|
*
|
*
|
*
|
INC A
|
A
=A +1
|
Sak. Özel (sadece ACC)
|
|||
INC <byte>
|
<byte>
=<byte>+1
|
*
|
*
|
*
|
|
INC DPTR
|
DPTR
=DPTR +1
|
Sak. Özel (sadece DPTR)
|
|||
DEC A
|
A=A-1
|
Sak. Özel (sadece ACC)
|
|||
DEC
|
<byte>=<byte>
-1
|
*
|
*
|
*
|
|
MUL AB
|
B:A
=BxA
|
Sak. Özel (sadece ACC ve
B)
|
|||
DIV AB
|
A
=Int (A/B)
B= Mod (A/B)
|
Sak. Özel (sadece ACC ve
B)
|
|||
Sak. Özel (sadece ACC)
|
|||||
DIV A
|
Ondalık Ayar
|
||||
Tablo-2-4: Aritmetik
Komutlar
Gösterim İşlem
|
Adresleme modları
|
||||
Dir
|
Ind
|
Reg
|
Imm
|
||
ANL
A,<byte>
|
A
= A AND<byte>
|
*
|
*
|
*
|
*
|
ANL <byte> ,A
|
<byte>
= <byte> AND A
|
*
|
|||
ANL <byte>, #data
|
<byte>
= <byte> AND #data
|
*
|
|||
ORL A, <byte>
|
A=A
OR <byte>
|
*
|
*
|
*
|
*
|
ORL <byte>, A
|
<byte>
= <byte> OR A
|
*
|
|||
ORL <byte>, #data
|
<byte>
= <byte> OR #data
|
*
|
|||
XRL
A, <byte>
|
A=
A XOR
<byte>
|
*
|
*
|
*
|
*
|
XRL <byte>, A
|
<byte>
= <byte> XOR A
|
*
|
|||
XRL <byte>, #data
|
<byte>
= <byte> XOR #data
|
*
|
|||
CLR A
|
A
=00H
|
Sak. Özel (ACC)
|
|||
CPL A
|
A=NOT
A
|
Sak. Özel (ACC)
|
|||
RL A
|
ACC’
yi bir –bit sola döndür.
|
Sak. Özel (ACC)
|
|||
RLC A
|
Sola
CY üzerinden.
|
Sak. Özel (ACC)
|
|||
RR A
|
ACC’
yi bir-bit sağa döndür:
|
Sak. Özel (ACC)
|
|||
RRC A
|
Sağa
CY üzerinden döndür.
|
Sak. Özel (ACC)
|
|||
SWAP A
|
ACC’
deki iki 4 –bit ‘i değiştir.
|
Sak. Özel (ACC)
|
|||
Tablo-2-5 :Byte Tabanlı
Lojik Komutlar
Gösterim
|
İşlem
|
ANL C, bit
|
C
bayrağını adreslenen bit ile AND ‘le
|
ANL C,
/bit
|
C
bayrağını adreslenen bit in tersi ile
AND‘ le
|
ORL C, bit
|
C
bayrağını adreslenen bir ile OR‘ la
|
ORL C, /bit
|
C
bayrağını temizle
|
CLR C
|
Adreslenen
bit ’i temizle
|
CLR bit
|
C
bayrağını tersle
|
CPL bit
|
Adreslenen
bit’ i tersle
|
SETB C
|
C bayrağını 1 ‘le
|
SETB bit
|
Adreslenen bit’ i
1’ le
|
Tablo-2-6 : Bit Tabanlı Lojik Komutlar
Gösterim
|
Açıklama
|
SJMP <rel data>
|
(Short Jump –Kısa dallanma )operand 2-nin
tümleyeni tek bir byte olup değeri PC’
ye eklenir. Bir sonraki komut, 127 byte
ileri veya 128 byte gerideki bir komut
olacaktır.
|
AJMP <Address 11>
|
(Absolute
Jump- Mutlak Dallanma) Operand 11- bit bir adres olup Program Hafızanın o anki 2 Kbyte’ lık alanı
içine karşı gelir.
|
LJMP<Address 16>
|
(Long Jump – Uzun Dallanma) Operand 16- bit bir adres olup
Program Hafızanın 64 Kbyte‘ lik alanı içinde bir yere karşı gelir.
|
LJMP @ A + DPTR
|
(Long Jump – Uzun Dallanma) Yürütülecek bir sonraki komutun adresi ,ACC ile DPTR ‘ın toplamıdır.
|
Tablo-2-7 : Durumdan Bağımsız
Dallanma Komutları
Gösterim
|
Açıklama
|
ACALL<address 11>
(Absolute
Call)
|
PC yığın hafızaya atılır ,11-bit adres PC’ye yerleştirilir.11-bit adres ile
,Program Hafızada 2K byte’ lık bir
alan içinde dallanma gerçekleşir.
|
LCALL<address 16>
(Long
Call)
|
PC yığın hafızaya atılır ,16-bit adres PC’ye yerleştirilir.16-bit adres ile
,Program Hafızada 64K byte’ lık bir
alan içinde dallanma gerçekleşir.
|
RET
(Return)
|
Yığından ,PC olarak alınacak değer okunur.
|
RETI
(Return
from Interrupt)
|
Yığından PC
olarak alınacak değer okunur ve
kesme donanımı sıfırlanır.
|
Tablo-2-8 : CALL ev RET
komutları
Gösterim
|
Açıklama
|
JZ<rel add>
(jump
if ACC zero)
|
Eğer ACC sıfır ise , 2’ nin tümleyeni olan byte operand PC’ye eklenir.
|
JNZ<rel add>
(jump
if ACC Notzero)
|
Eğer ACC sıfır değil ise , 2’ nin tümleyeni olan byte operand PC’ye eklenir.
|
JC<rel add>
(jump
if carry is set)
|
Eğer elde bayrağı 1 ise , 2’ nin tümleyeni olan byte operand PC’ye eklenir.
|
JNC<rel add>
(Jump
if Carry not set)
|
Eğer elde bayrağı 1değil ise , 2’ nin
tümleyeni olan byte operand PC’ye
eklenir.
|
JB<bit>, <
rel add>
(jump
if Bit set)
|
Eğer ilk operand (adreslenen bit) 1 ise , 2’ nin
tümleyeni olan ikinci byte operand
PC’ye eklenir.
|
JNB <bit>, <
rel add>
(jump
if Bit not set)
|
Eğer ilk operand (adreslenen bit) 1 değil ise , 2’
nin tümleyeni olan ikinci byte operand
PC’ye eklenir.
|
JBC <bit>, <
rel add>
(jump
if Bit set and Clear bit)
|
Eğer ilk operand (adreslenen bit) 1 ise , 2’ nin
tümleyeni olan ikinci byte operand
PC’ye eklenir. Komuttan sonra bit temizlenir.
|
CJNE A, direct, <rel add>
(Compare
and Jump if not equal)
|
Birinci operand ACC ; ikinci bir dahili saklayıcı ; ve üçüncü , göreceli adres.
Eğer ACC ‘nin içeriği saklayıcıdan farklı ise, 2’ nin tümleyeni olan üçüncü byte operand PC ‘ye eklenir.
|
CJNE A, # data ,
<rel add>
(Compare
and Jump if not equal)
|
Birinci operand ACC ; ikinci, bir sabit ; ve
üçüncü , göreceli adres. Eğer ACC ‘nin içeriği sabitden farklı ise, 2’ nin
tümleyeni olan üçüncü byte operand PC ‘ye eklenir.
|
CJNE Rn, # data ,<
rel data>
(Compare
and Jump if not equal)
|
Birinci operand
Rn ;ikinci operand ,bir sabit; ve üçüncü göreceli adres. Eğer Rn’ nin
içeriği sabitten farklı ise 2‘ nin
tümleyeni olan üçüncü byte operand PC’ye eklenir.
|
CJNE @Ri ,# data,
< rel add >
(Compare
and Jump if not equal)
|
Birinci operand
Ri ile işaretli byte; ikinci
,bir sabit ; ve üçüncü göreceli adres. Eğer @Ri’ nin içeriği sabitten farklı ise 2‘ nin tümleyeni olan üçüncü
byte operand PC’ye eklenir.
|
DJNZ Rn, <rel add>
(Decrement
and Jump if not Zero)
|
Birinci operand Rn ;ikinic ,göreceli adres. Eğer azaltılan Rn içeriği sıfırdan farklı ise, 2’nin
tümleyeni olan üçüncü
byte operand PC’ ye eklenir.
|
DJNZ direct ,< rel add>
(Decrement
and Jump if not Zero)
|
Birinci operand bir dahili saklayıcı; ikinci göreceli adres. Eğer azaltılan saklayıcının
içeriği sıfırdan farklı ise , 2‘ nin
tümleyeni olan üçüncü byte operand PC’ye eklenir.
|
Tablo2-9 : Duruma
Bağımlı Dallanma Komutları
Gösterim
|
Açıklama
|
ACALL<address 11>
(Absolute
Call)
|
PC yığın hafızaya atılır ,11-bit adres PC’ye yerleştirilir.11-bit adres ile
,Program Hafızada 2K byte’ lık bir
alan içinde dallanma gerçekleşir.
|
LCALL<address 16>
(Long
Call)
|
PC yığın hafızaya atılır ,16-bit adres PC’ye yerleştirilir.16-bit adres ile
,Program Hafızada 64K byte’ lık bir
alan içinde dallanma gerçekleşir.
|
RET
(Return)
|
Yığından ,PC olarak alınacak değer okunur.
|
RETI
(Return
from Interrupt)
|
Yığından PC
olarak alınacak değer okunur ve
kesme donanımı sıfırlanır.
|
Tablo2-10 : CALL ve RET
komutları
2.1.1. Adresleme
Modlarındaki Gösterim :
Adresleme modlarında kullanılan gösterim aşağıda
verilmektedir :
Rn : Aktif
saklayıcı kümesindeki 8
saklayıcıdan biri.
ACC : Akümülatör
PC : Program Counter
direct : Dahili RAM bölgesinden, bit-adreslenebilir hafıza ve
SFR’ lar dahil alana erişen 8-bit adres.
@Ri : Saklayıcı-dolaylı adresleme modunu gösterir.
Aktif saklayıcı kümesinden sadece R0 ve
R1 bu modda kullanılabilir. Ri
dahili RAM bölgesinden , bit-adreslenebilir hafıza ve SFR’ lar dahil , 8-bit bir adres içerir.
# data : İvedi
adreslemede kullanılan 8-bit bir sabit
,yani komutun içindeki veri.
addr16 : 64 K program Hafıza içinde herhangi bir yere işaret eden iki byte adres.
addr11 : Program Hafızada 2K’lık blok içinde,
herhangi bir yere işaret eden 11-bit adres.
rel :Göreceli dallanmada
kullanılan ,ikinin tümleyeni
ofset adres. Bu adres ile program
akışı , PC yi takip eden öndeki –128
byte ve sonraki 127 byte‘ lık bir alan
içinde, dallanabilir.
bit :
Bit adreslenebilir RAM veya SFR’ ın 8-bit adresi.
reg : Saklayıcı adresleme modu.
dir : Doğrudan (direct ) adresleme.
ind : Saklayıcı-dolaylı( register-indirect)
adresleme modu.
imm : İvedi (immediate) adresleme modu.
2.2.1. 8051 Interrupt Yapısı
ROM' suz ve EPROM' lu
versiyonlarda CPU' lar 5 interrupt kaynağına sahiptir. Bunlar; 2 harici
interrupt, 2 timer interrupt ve seri port interrupt' ıdır.
İnterrupt yetkileri: Interrupt kaynakları SFR içindeki IE
registerinin bitleri set/reset (1/0) yapılarak yetkili veya yetkisiz
kılınabilir.
EA
|
-
|
-
|
ES
|
ET1
|
EX1
|
ET0
|
EX0
|
msb lsb
INTERRUPT ENABLE (IE) REGISTER
EA : Tüm interrupt' ları
yetkisizleştirebilir. Eğer EA=0 ise interrupt' lar yetkisizdir ve EA=1 ise
diğer interrupt bitleri set/reset' lenerek interrupt' lar yetkili/yetkisiz
yapılabilir.
ES :
Seri port interrupt yetki biti
ET1 : Timer1
taşma interrupt yetki biti
EX1 : INT1
bacağından gelen interrupt yetki biti
ET0 : Timer0
taşma interrupt yetki biti
EX0 : INT0
bacağından gelen interrupt yetki biti
Interrupt
Öncelikleri: Interrupt
öncelikleri SFR içindeki IP registerinin programlanması ile belirlenebilir.
-
|
-
|
-
|
PS
|
PT1
|
PX1
|
PT0
|
PX0
|
msb lsb
INTERRUPT PRIORITY (IP) REGISTER
PS : Seri port interrupt' ı öncelik
kontrol biti. 0 ise düşük ,1 ise yüksek öncelikli.
PT1 : Timer1 Int. öncelik kontrol biti
PX1 : INT1 bacağı
Int. öncelik kontrol biti
PT0 : Timer0 Int.
öncelik kontrol biti
PX0 : INT0 bacağı
Int. öncelik kontrol biti
Eğer farklı önceliklere sahip
iki interrupt isteği eşzamanlı alındığında istek yüksek öncelikliye servis
verilecektir. Eğer öncelikleri yazılımla tanımamışsak CPU kendi belirlediği
interrupt öncelik sırasına göre hizmet verir. Buna göre en yüksek öncelikliden
en düşük öncelikliye göre sıralanmış interrupt kaynakları şöyledir;
·
IE0
·
TF0
·
IE1
·
TF1
·
RI ya da TI .
İnterrupt
yetki bayrakları setlenmiş interrupt alındığında LCALL emiri ile belirtilen
adrese atlanılır ve gerekli servis programı çalıştırılır. LCALL emirinden önce
programın kesildiği yeri belirten PC (Program Counter)'nin içeriği otomatik
olarak stack' e itilir ve işlem bitirildikten sonra tekrar otomatik olarak
yüklenir. Eğer istenilen register' ların stack bellek' e itilmesi isteniyorsa
bu işlem programcı tarafından yapılmalıdır. Örneğin ;
PUSH IE
MOV
IE,#MASK
CALL LABEL
-------------------------
POP IE
RET
LABEL:
RETI
gibi...
2.2.2. Zamanlayıcı
ve Sayıcı Yapısı
(Timer / Counters)
8051 iki 16
bitlik Timers/Counters registeri içerir. Bunlar
Timer0 ve Timer1'dir.Her ikisi de zamanlayıcı ya da olay sayıcı olarak
konfigüre edilebilir.
Timer (Zamanlayıcı) işlevinde ,
register her makine saykılın da bir arttırılır. Bir makine saykılı ise 12
osilatör periyoduna eşittir. Böylece sayma hızı (count rate) 1/12 osilatör
frekansına eşitlenir.
Counter (Olay sayıcı) işlevinde ise register harici giriş
bacağı yerini tutan T0 veT1'deki her 1'den 0'a geçişte bir arttırılır.
Timer0 ve
Timer1 dört işlem moduna sahiptir. Zamanlayıcı ya da 'Olay sayıcı' işlevlerinin
seçimi SFR' deki TMOD register' inin içindeki C/T kontrol biti ile sağlanır.
Her iki zamanlayıcı TMOD içindeki M1-M0 bit çiftlerinin sayesinde dört işlem moduna sahip olur
GATE
|
C/T
|
M1
|
M0
|
GATE
|
C/T
|
M1
|
M0
|
msb lsb
TIMER-1
TIMER-0
TIMER/COUNTER MODE CONTROL (TMOD) REGISTER
GATE: Kapı Kontrol Setlendiği zaman
sadece INTX bacağı yüksek ve TRX kontrol biti 1 ise yetkili olur. Sıfırlandığı
zaman, TRX kontrol biti 1 olduğunda Timer/Counter yetkilidir.
C/T: Zamanlayıcı veya Sayıcı seçici
Zamanlama işlevinde resetlenir Sayma
işlevinde setlenir.
M1 M0 İşlem
Modu
0 0 (Mode
0) MCS-48 ile aynı zamanlayıcı özelliğinde TLX 5 bitlik ön ölçeklendirici
gibi servis verir.
0 1 (Mode
1) 16 bit zamanlayıcı. TLX ve THX kaskat bağlıdır. Ön ölçeklendirici yoktur.
1
0 (Mode 2) 8 bitlik otomatik yeniden yüklemeli Timer/Counter.
1 1 (Mode
3) TL0 , standart Timer0 kontrol bitlerinin
kontrol ettiği bir
Timer/
Counter. TH0 , Timer1 kontrol bitlerinin kontrol ettiği 8 bitlik bir zamanlayıcıdır.
1 1 Timer1 Timer/Counter durdurulmuştur.
Mode-0 : Mode 0
'da 8051 timer aynen 8048 Timer' ın yerine konulabilir yani aynı özellikler
gösterir. 8 bitlik sayıcı ve 5 bitlik ön ölçeklendirici.
Bu modda zamanlama registeri 13
bit'e ayarlanabilir. 1'den 0'a geçişler sayılır ve Timer interrupt bayrağı olan
TF1 setlenir. TR1=1 ve GATE=0 ya da INT1=1
gerçeklenirse sayılmış giriş yetkilidir. TR1 kontrol biti SFR' deki TCON
'da bulunur. GATE ise TMOD 'da bulunur.
Mode-1: Mode 0
ile aynıdır,tek farkı Timer registerinin 16 bit olmasıdır.
Mode-2: Timer
register 8 bitlik Counter (TL1) ile otomatik yeniden yüklemeli olarak konfigüre
edilebilir. TL1 'in yeniden yükleme değeri TH1'de saklanır. Yazılım ile
presetlenebilir. TH1'in yeniden yükleme değeri değiştirilemez.
Mode-3: Timer1
sayılacak değeri tutar. Etkin olabilmesi için TR1=0 'a setlenmelidir. Mode 3'de
Timer0'ın TL0 ve TH0 iki ayrı sayıcı olarak atanır. Mode 3 bazı uygulamalar
için gereken ekstra 8 bitlik Counter üzerindeki zamanlayıcı sağlar. Mode 3'de
Timer 0 ile 8051 üç adet Timers/Counters' a sahip gibi görünür. Mode 3'de
Timer/Counter, Seri port için Baud Rate üreteci gibi kullanılabilir ve
interrupt istekleri oluşturmakta faydalana bilinir.
TF1
|
TR1
|
TF0
|
TR0
|
IE1
|
IT1
|
IE0
|
IT0
|
msb lsb
TIMER/COUNTER
CONTROL (TCON) REGISTER
TF1/TF0: Timer
1/0 taşma bayrağı. Timer/Counter' da taşma olduğunda donanımla setlenir ve
interrupt işlendiğinde resetlenir.
TR1/TR0: Timer
1/0 koşma kontrol biti. Yazılım ile set/reset'lenir.
IE1/IE0:
Interrupt 1/0 üstünlük bayrağı. Harici interrupt üstünlüğü belirtildiğinde
setlenir ve interrupt işleminde resetlenir.
IT1/IT0:
Interrupt 1/0 tipi kontrol biti. Yazılım ile set/reset'lenir.
2.2.3.
Güç Kontrolu (Power Control)
8051'de güç
harcamasını minimuma indirebilmek için iki yazılım seçim modu vardır. Bunlar;
Idle ve Power Down Modlarıdır. CPU Idle modda iken dahili RAM, zamanlayıcı,
seri port ve interrupt sistem fonsiyonlarının işlemesine izin verir. Power Down
modunda iken sadece dahili RAM değerleri korunur ve diğer bütün fonksiyonlar
işlevsizdir. Bu özel modlar yazılım yolu ile aktif hale geçerler. Aktif hale
geçirmek için gerekli register SFR' deki PCON
registeridir
SMOD
|
-
|
-
|
-
|
GF1
|
GF0
|
PD
|
IDL
|
msb lsb
PCON(POWER CONTROL REGİSTER)
SMOD : Çift veri iletim hızı (baud) oranı biti. Eğer setlenirse
veri iletim hızı iki katına çıkar. Bu halde iken seri port varolan diğer
modları kullanır.
GF1 : Genel amaçlı bayrak biti.
GF0 : Genel amaçlı bayrak biti.
PD : Power Down biti. Bu
bit setlenirse Power Down moduna girilir.
IDL : Idle mode biti. Setlenirse Idle moduna girilir.
Bazen
aynı anda hem PD hem de IDL bitleri setlenmeye çalışılabilir. Bu durumda
üstünlük PD' ye verilmiş olduğundan Power Down moduna girilir. PCON
Registerinin reset değeri (0***0000)'dır.
2.2.3.1. IDLE Modu
CPU , Idle
modunda iken , Stack Pointer(SP), Program Counter (PC), Program Status
Word(PSW), Akümülatör , Dahili RAM ve
bütün diğer registerlerin değerleri korunur. Idle modu, donanım ile geçerli
bazı interruptlar sayesinde PCON.0'ın resetlenmesi ile sona erdirilebilir. Bu
modu sona erdirmenin diğer bir yolu ise donanım reseti vermektir. Önce osilatör
koşturulur ve donanım resetinin aktif olabilmesi için yalnızca 2 makine saykılı
(24 Osc. Periyodu) ile karşılaşılınca reset işlemi tamamlanacaktır.
2.2.3.2. POWER DOWN Modu
PCON.1 bitinin
setlenmesi ile aktif olur. Power Down' da osilatör durdurulur. Çipin üzerindeki
RAM' ın ve SFR' nin içeriği bu modda korunur. Bu moddan çıkmanın tek yolu
donanım reseti vermektir ama donanım reseti vermek SFR yeniden tanımlanmasına
rağmen dahili RAM' ın içeriği değiştirilemez. Power Down modu ile devrede en
küçük güç harcaması gerçekleşir ve Vcc gerilimi yaklaşık 2V seviyesini kadar
indirilebilir. Ama Power Down moduna girilene kadar Vcc geriliminin
düşürülmemesi gerekir. Power Down moduna girildikten en az 10msn sonra Vcc
erilimi 2V'a çekilebilir.
2.2.4. 8051 Mikrokontrolörlerde İletişim
Data bir noktadan diğer bir
noktaya iletilirken ya seri ya da paralel formatta düzenlenir. Her ikisinin de
birbirine göre avantaj ve dezavantajlı olduğu yönler bulunmaktadır. Paralel
data transferi genelde belirli sürede çok miktarda data transferinin gerektiği
yerlerde kullanılır.(PC ile Printer arasındaki gibi) . Seri data iletim
metotlarında yüksek data transfer hızlarına erişilebilir fakat paralel data
transferine göre en önemli üstünlüğü datanın iletilebilmesi için gerekli
iletken sayısının paralele göre daha az olmasıdır.
2.2.4.1. Paralel Haberleşme
Paralel data transferinde ,bir bilgisayarın
mikroişlemcisi ile çevre birimler arasındaki data bus üzerindeki bilgilerin
iletimi gibi datalar bu metodda paralel olarak iletilir. Paralel ve seri data transferinde bir karakterin iletimi 8
bit ile yapılıyorsa, paralel data iletimi seri iletime göre daha hızlı olacağı
hiç şüphesizdir. Çünkü seri data iletiminde bir karakter iletmek için 8t süre
harcanıyorsa (start,stop ve parity bitleri hariç) paralel data iletiminde t
kadar bir sürede işlem gerçeklenmiş olacaktır(Buna diğer üç bitin eklenmediğine
dikkat !). Paralel data iletiminde polling ve handshaking gibi kontrol
işlemleri için de ayrı kabloların kullanılması maliyeti iyiden iyiye
arttırmaktadır. Ayrıca uzak mesafelere iletimde sinyal zayıflamasını kompanze
etmek için Repeater cihazının kullanılması ekonomikliği ortadan kaldırmaktadır.
Böylece paralel data iletimi, bilgisayar sistemlerinin çevre birimlerle
haberleşmesinde ve mesafenin kısa olması durumunda tercih edilebilir.
2.2.4.2. Seri Haberleşme
Uzak
mesafelere dataların paralel iletimi için kablo ve diğer masrafların çok
olmasından dolayı bu durumda daha çok
seri data iletimi tercih edilir. Tek bir iletim kanalı üzerinden belirli bir
zamanda bir bit iletilmesi seri data transferi olarak adlandırılabilir. Seri
iletişim kendi arasında ikiye ayrılır. Şimdi de bunlar hakkında kısa ve öz
bilgiler verelim;
2.1.4.2.1. Seri-Senkron Haberleşme
Senkron seri
data iletiminde önemli bir konu iletim kanalının iki ucundaki alıcı ve verici
düzeneklerin birbiriyle her zaman
senkronize çalışması gerekmesidir. Senkronizasyon işlemi ikinci bir
iletim hattı üzerinden ortak bir clock (saat) sinyalinin hem alıcıya hem de
vericiye gönderilmesi ile elde edilebilir. İletim kanalının her iki ucunda
zamanlamayı sağlamak, senkronizasyonu elde etmek için her zaman bir ana saat
sinyali kullanılır. Senkron seri data iletimi veri bloklarının hazır olduğu
durumlarda kullanılır. Örneğin ; Harddisk' teki bilgilerin karşı tarafa
gönderilmesinde. Senkron iletişim asenkron iletişime göre daha karmaşıktır.
Bunun ana nedeni alıcı ünitede Byte Eşzamanlısının yapılmasının
gerekmesindendir.
2.2.4.2.2. Seri Asenkron
Haberleşme
Asenkron seri
data iletimi, veri iletişiminde kullanılan en basit ve en kolay yöntemdir.
Verimliliği düşük olduğu için düşük hızlardaki veri iletiminde daha çok
kullanılır. Transmitter' den gönderilen her bir karakter 8 bit ile temsil
edilir ve iletim sırasında veri karakterlerinin başına start biti (lojik - 0)
ve sonuna parity (hata denetimi amacıyla) ile stop bitleri eklenir.
Her
bir data dizisinin ilk biti start bitidir , lojik-1'den lojik-0'a geçişle
belirtilir ve bu start biti bir bit süresince lojik-0'da kalır. Ardından data
bitleri gelir ve data biti sayısı 5..8 bit arası seçilebilir. Hemen ardından
hata denetimi biti ve stop biti gelir. Stop biti 1,1.5 ve 2 bit sürelerinde
seçilir ve bu süre boyunca lojik-1'de kalır. Hat boş iken aradaki hat sürekli
lojik-1 seviyesinde tutulur. Bunun nedeni tabi ki hattaki gürültülerden
etkilenmemek içindir.
PC kullanıcıları data iletimi
yapmak için bir RS-232 seri port' a ihtiyaç duyarlar. Bu konnektör için bacak
numaraları ve sinyal adları aşağıdaki tabloda verilmiştir.
BACAK NO
|
ORTAK İSİM
|
RS232C İSMİ
|
TANIM
|
1
|
AA
|
Koruma toprağı
|
|
2
|
TxD
|
BA
|
Gönderilen data
|
3
|
RxD
|
BB
|
Alınan data
|
4
|
RTS
|
CA
|
Gönderme için istek
|
5
|
CTS
|
CB
|
Gönderme için
serbest
|
6
|
DSR
|
CC
|
Veri kümesi hazır
|
7
|
GND
|
AB
|
Sinyal toprağı
|
8
|
CD
|
CF
|
Alınan hat sinyal
algılayıcı
|
9
10
|
Veri kümesi testi
için ayrılmış
|
||
11
|
Tanımlanmamış
|
||
12
|
SCF
|
İkincil alınan hat
sinyali algılayıcı
|
|
13
|
SCB
|
İkincil gönderme
serbest
|
|
14
|
SBA
|
İkincil gönderme
veri
|
|
15
|
DB
|
İletim sinyal
elemanı zayıflaması (DCE)
|
|
16
|
SBB
|
İkincil alınan veri
|
|
17
|
DD
|
Alıcı sinyal
elemanı zayıflaması (DC)
|
|
18
|
Tanımlanmamış
|
||
19
|
SCA
|
İkincil gönd.içn
istek
|
|
20
|
DTR
|
CD
|
Veri terminali
hazır
|
21
|
CG
|
Sinyal kalitesi
algılayıcı
|
|
22
|
CE
|
Halka gösterge
|
|
23
|
CH/CI
|
Veri sinyali hızı
seçici(DTE/ DCE)
|
|
24
|
DA
|
İletken sinyal
elemanı zayıflaması
|
|
25
|
Tanımlanmamış
|
Tablo-2-11-
RS-232 Bacak Bağlantıları Tablosu
2.2.4.3. Standart Seri Arabirim
8051'deki seri
portumuz Full -Dublex' tir. Yani hem alıcı hem de verici eşzamanlı olarak
gerçeklenebilir. Seri portun alıcı ve verici (receiver - transmitter )
registerlerı SFR 'de SBUF adı ile
bulunmaktadır. Gönderilecek bilgiler SBUF' a yazılır, alınacak bilgiler ise
SBUF' dan okunur. Seri portun dört işlem modu vardır;
Mode-0 : Seri data giriş ve çıkışı RxD
üzerindendir. TxD çıkışı saat için kullanılır. Bu uç kaydırmalı-kaydedicileri
(Shift -Register) uyarmak için kullanılabilir. 8 bit alınır/gönderilir. Mutlaka
TTL veya CMOS kaydırmalı-kaydedicilerle senkronize I/O biçiminde
kullanılmalıdır. Bu modun Baud Rate değeri 1/12 osilatör frekansına eşittir.
Sistem seri ise bu modda hız, eğer osilatör 12MHz ise baud rate 1Mbit/sn gibi UART'nin çok üstünde
bir değer olabilmektedir. Ayrıca paralel sistemlerde Shift -Register' den önce
sadece iki hatta (RxD ve TxD) ihtiyaç duyması avantajdır.
Mode-1 : 10 bit RxD ucundan ya da 10
bit TxD ucundan alınır/gönderilir. Bir adet başlama (start) biti,8 data biti ve
birde durdurma (stop) biti bulunur.
Alıcı durumda , durdurma biti SCON' daki
RB8 bitinin içeriğine gider. Baud Rate değeri değişkendir.
Mode-2 : 11 bit RxD ucundan ya da 11
bit TxD ucundan alınır/gönderilir. Bir start biti, 8 data biti, bir adet
programlanabilir 9. data biti ve bir stop biti bu modda bulunur. Gönderici
durumda 9. data biti SCON registerindeki TB8 bitinin içeriğine gider. Ya da
örneğin, PSW 'nin içindeki P (parity bit),TB8 'in üzerine taşınabilir. Alıcı
durumda 9.data biti SCON üzerindeki RB8 değerine gider (eğer stop bitine önem
verilmezse).Baud Rate değeri osilatör frekansının 1/32 veya 1/64 'ü olarak
programlanabilir.
Mode-3 : 11 bit RxD üzerinden veya 11
bit TxD üzerinden alınır/gönderilir. Bir start biti, 8 data biti, bir
programlanabilir 9. data biti ve bir adet stop biti bulunur. Gerçekte Mode-3
ile Mode-2 arasındaki fark, Mode-3'ün istisnai Baud Rate değerlerine
ayarlanabilmesidir. Yani Baud Rate değeri değişkendir.
Tüm bu dört
modda iletişim bazı komutların SBUF gibi tanımlama registerlerini kullanması ile
sağlanır.
SCON
registerinin içeriği yalnız mod seçmek için gerekli bitleri içermeyip ,alıcı ve
verici için 9.biti (TB8 ve RB8) ve seri port interrupt bitleri olan RI ve TI
'yı da içerir.
SM0
|
SM1
|
SM2
|
REN
|
TB8
|
RB8
|
TI
|
RI
|
msb lsb
SERİ
PORT KONTROL (SCON) REGİSTER
SM0 SM1 mode Baud Rate
0 0 0 Fosc/12
0 1 1 Değişken
1 0 2 Fosc/32
yada Fosc/64
1 1 3 Değişken
SM0, SM1, SM2 :
Seri port modu kontrol biti. Yazılımla set / resetlenir.
REN : Alma yetkili kontrol biti. Seri data alma yetkili/yetkisiz
yapmak için yazılımla set / resetlenir.
TB8 : 9. data bitinin (mode-2 ve 3'e göre) gönderilip
gönderilmeyeceğini belirlemek için kullanılan yazılım ile set/resetlenebilen
bitdir.
RB8 : 9. data bitinin alınıp alınmayacağını belirlemek için
kullanılan yazılım ile set/resetlenebilen bitdir.
TI : Gönderme interrupt
bayrağı. Byte gönderildiğinde donanım tarafından setlenir. İşlem
tamamlandığında yazılım ile resetlenmelidir.
RI : Alma interrupt bayrağı. Byte alındığında donanım tarafından
setlenir. İşlem tamamlandıktan sonra yazılım ile resetlenmelidir.
2.2.4.4. Çokişlemcili
Haberleşme (Multiprocessor
Communications)
Çokişlemcili
Haberleşmede Mode-2 ve Mode-3 çok özel durumlara sahiptir. Bu modlarda 9.data
biti kullanılabilir. Data alınırken 9.bit RB8'e yazılır ve arkasından stop biti
gelir. Stop biti alındığında port programlanabilir böylece seri port interrupt'
ı yalnız RB8=1 iken aktif olur. Bu özellik SCON üzerindeki SM2 bitinin
setlenmesi ile geçerlidir. Bu özelliğin Çokişlemcili Haberleşme sistemlerinde
kullanımı şu şekilde olabilir;
Birincil(Master)
işlemci bir ya da birkaç İkincil(Slave) işlemciye data bloklarını göndermek
isterken ,ilk olarak hedef slave işlemciyi tanımlayan adres byte' larını
yollar. Burada adres byte' ı ile data byte' larının farkını 9.bit belirler.
9.bit 1 ise adres byte' ı , 0 ise data byte' ıdır. SM2=1 yapmak ile , data
byte' ı ile slave işlemci interruptlanmayacaktır. Adres byte' ında tüm slave
işlemciler interruptlanacaktır. Bu yüzden slave işlemciler eğer belirtilen
adresin kendi başlangıç adresleri (kendilerine ayrılan adres ise) olup
olmadığını aldıkları adres byte' ını inceleyerek anlayabilirler. Adreslenmiş
olan slave işlemci kendi SM2 bitini temizleyecek ve gelecek olan data byte' larını almak için
kendilerini hazırlayacaklardır. Yani slave işlemciler başlama adresi
verildikten sonra bunun kendi adresleri olup olmadığını test edeceklerdir ve
daha sonra gelecek dataları alarak işleyeceklerdir.
SM2 (SCON.5)
biti Mode-0 'da kullanım dışıdır ve Mode-1 'de stop bitinin
sağlamlığını(doğruluğunu) test etmek için kullanılır. Mode-1 'de SM2=1 ise
alınan interruptlar stop biti alınıncaya kadar aktif olmayacaktır.
2.2.4.4.1. BAUD RATE
Değerleri
Mode-0
'da baud rate değeri (osilatör frekansı/12) 'dir. Mode-2 'de PCON
registerindeki SMOD biti 1 ise baud rate 1/32 ve SMOD 0 ise 1/64 osilatör
frekansına eşittir. Mode-1 ve Mode-3 'de baud rate timer-1'in taşma zamanı
(overflow rate) ile karakterize edilebilir.
Timer-1 'in Baud Rate
Generatörü Olarak Kullanılması:
Timer-1 'in baud
rate generatörü olarak kullanılırken, baud rate değeri SMOD bitinin ve Timer-1
taşma değerine göre karakterize edilmiştir. Bu uygulamada Timer-1 interrupt' ı geçersiz
kılınacaktır.
Mode-1,3 BR= (2 (SMOD)
/32)*(Timer-1 taşma zamanı)
BR : Baud Rate
Timer-1
bazı durumlarda otomatik yeniden yüklemeli (Auto Reload Mode) modda konfigüre
edilebilir. Bu durumda baud rate değeri ise;
Mode-1,3 BR=(2* (SMOD)
/32)*(O_Freq /(12*[256-(TH1)]))
ile verilebilir.Aşağıdaki tabloda
Timer-1 ile çok kullanılan bazı baud rate değerlerinin elde edilmesi için
gereken değerler verilmiştir.
Baud Rate
|
OSC_freq
(MHz)
|
SMOD
|
C/T
c=1,t=0
|
Mode
|
Reload value
|
Mode-0
Max :1.67MHz
|
20
|
X
|
X
|
X
|
X
|
Mode-2
Max : 625 kHz
|
20.00
|
1
|
X
|
X
|
X
|
Mode-1,3
Max : 104.2 kHz
|
20.00
|
1
|
0
|
2
|
FFh
|
19.2k
|
11.059
|
1
|
0
|
2
|
FDh
|
9.6k
|
11.059
|
0
|
0
|
2
|
FDh
|
4.8k
|
11.059
|
0
|
0
|
2
|
FAh
|
2.4k
|
11.059
|
0
|
0
|
2
|
F4h
|
1.2k
|
11.059
|
0
|
0
|
2
|
E8h
|
137.5
|
11.986
|
0
|
0
|
2
|
1Dh
|
110
|
6.00
|
0
|
0
|
2
|
72h
|
110
|
12.00
|
0
|
0
|
1
|
FEEBh
|
{ Timer-1 için }
Özetlenecek
olursa seri port timer-1'in taşması tarafından saatlenecektir. Timer-1'in
girişinde osilatör frekansı 12'ye bölünür ya da harici saat uygulanır.
Mode-0'da 12MHz'lik bir kristal ile 1Mbit/sn ve Mode-2'de ise gene 12Mhz'lik
kristal ile 187.5kHz'lik baud rate değerlerine erişilebilir. Mode-1,3'de ise
baud rate timer-1'e bağlıdır ve timer yeniden yükleme değeri ile istenen
frekansa eşitlenebilir.
Şimdi bu
yeniden yükleme değerinin nasıl hesaplandığına dair bir örneğe bakalım. UART
işlem hızının 300 bps ve osilatör frekansının 12Mhz olduğu durumdaki yeniden yükleme değerini
hesaplayalım; (ARV:Auto Reload Value)
ARV=(Clock
rate)/(12*32*Bit rate) ; 104.16
Eğer T1
üzerinden harici saat kullanılıyorsa;
ARV=(Clock
rate)/(32*Bit rate) ; olur.
Yaklaşık tamsayı olarak 104 kabul edilir ve Timer için
aktüel değer 256-104=152=98h ' dir. Eğer TH1 98h değeri ile yüklenirse doğru
hız olan 300 bps alınır.
Buna göre bizim kullanacağımız
sistemde 9600 bps için ve kristalinde 12MHZ olduğu kabulu ile hesap yapılacak
olursa;
ARV=12M/(12*32*9600)=3.25 olur.
Yaklaşık olarak 3 kabul edilir ve 256-3=253d=0FCh bulunur.
2.2.5. PC Seri I/O Arayüz Cihazının Kontrolü ve Programlama Çalışmaları
PC' lerde seri ara yüz I/O
cihazı olarak 8250 entegresi kullanılmaktadır. PC' lerde genel olarak iki seri
ve bir paralel portları vardır. Bu sayı genel kullanım için yeterlidir. Amaca
göre istenildiğinde arttırılabilir. Sistemde bulunan seri port ,taban vektör ve
adresleri tabloda verilmiştir.
COM1
|
00000:00400H
|
03F8H
|
COM2
|
00000:00402H
|
02F8H
|
COM3
|
00000:00404H
|
0378H
|
COM4
|
00000:00406H
|
0278H
|
Bu
portların kullanımı için bazı registerlerin bulunması ve bunların gerekli
değerlere setlenmeleri gereklidir. Bu registerler ;
1.
Data Register
2.
Interrupt Enable Register
3.
Interrupt Identification Register
4.
Data Format Register
5.
Serial Control Register
6.
Serial Status Register
7.
Modem Status Register' dir.
1.Data Register:
Data register göndermek ve almak
için 1 byte tutar. İçindeki bitler alınacak veya gönderilecek bitleri tutar.
Data Bit7
|
Data Bit6
|
Data Bit5
|
Data Bit4
|
Data Bit3
|
Data Bit2
|
Data Bit1
|
Data Bit0
|
msb lsb
2.Interrupt
Enable Register:
Bit7
|
Bit6
|
Bit5
|
Bit4
|
Bit3
|
Bit2
|
Bit1
|
Bit0
|
Bit0:Veri
geldiğinde interrupt üret.
Bit1:Veri
gönderme işlemi tamamlandığında interrupt üret.
Bit2:Hat
durum değişikliğinde interrupt üret.
Bit3:Modem
hattı değişikliğinde interrupt üret.
Bit4-7:Kullanılmaz.
3.Interrupt
Identification Register:
Bit7
|
Bit6
|
Bit5
|
Bit4
|
Bit3
|
Bit2
|
Bit1
|
Bit0
|
Bit0:Interrupt
bekliyor.
Bit1-2: 00:Modem hattında değişiklik oldu.
01:Gönderme
tamamlandı.
10:Veri
geldi.
11:Hattın
durumunda değişiklik oldu.
Bit3-7:Kullanılmaz.
4.Data
Format Register:
Bit7
|
Bit6
|
Bit5
|
Bit4
|
Bit3
|
Bit2
|
Bit1
|
Bit0
|
Bit0-1:Veri
uzunluğu: 00 5bit
01 6bit
10 7bit
11 8bit
Bit2:Durdurma
biti sayısı: 0 1bit
1 2bit
Bit3:Parity
var/yok: 0 OFF
1 ON
Bit4:Parity
tek/çift: 0 Tek
1 Çift
Bit5 : Stick parity
Bit6 : Set
Break
Bit7 :
Bölücüye erişim biti: 0 Diğer kütükler
1 Bölücü
5.Serial
Control Register:
Bit7
|
Bit6
|
Bit5
|
Bit4
|
Bit3
|
Bit2
|
Bit1
|
Bit0
|
Bit0:
Terminal iletişime hazır.
Bit1:
Gönderme isteği.
Bit2: Out1
Bit3: Out2
Bit4: Geri beslemeli teste geç.
Bit5-7:Kullanılmaz.
6.Serial Status Register :
Bit7
|
Bit6
|
Bit5
|
Bit4
|
Bit3
|
Bit2
|
Bit1
|
Bit0
|
Bit0: Veri
hazır.
Bit1: Veri
ezilmesi var.
Bit2:
Parity biti hatası var.
Bit3:
Zamanlama hatası.
Bit4: Alıcı
işlemi yarıda kesti.
Bit5:
Gönderme tamamlandı.
Bit6: Kaydırma tamamlandı.
Bit7 :
Kullanılmaz.
7.Modem
Status Register:
Bit7
|
Bit6
|
Bit5
|
Bit4
|
Bit3
|
Bit2
|
Bit1
|
Bit0
|
Bit0: CTS
değişti.
Bit1: DSR
değişti
Bit2: RI
kesildi.
Bit3: RLSD
kesildi.
Bit4: CTS' nine sıfıra
tümleyeni.
Bit5: DSR' nine sıfıra
tümleyeni.
Bit6: RI' nın sıfıra tümleyeni.
Bit7: RLSD' nin sıfıra
tümleyeni.
2.2.5.1. Program Communicatıons' un Açıklanması
Procedure BaudRate Aktif: Data Format registerinin en anlamlı biti
1 yapılırsa , data register ile interrupt enable registeri baud rate değerinin
belirlenmesinde kullanılabilir. Procedure' de data format registeri (2FB)' nin
8. Biti setlenmektedir.
Procedure DataAktif : Data
Format registerinin en anlamlı biti resetlenmektedir. Data ve Interrupt Enable
registerleri asıl işlevlerinde kullanılmaya başlanır.
Procedure DataHız Tanımı: BaudRate
Aktif yapıldıktan sonra 2F8 ve 2F9 adreslerine verilen word baudrate değeri
olarak yazılır.
Procedure DataHız Tanımı: Baud rate değeri okunuyor.
Procedure PortuSetle: Seçilen
haberleşme portuna gerekli tanımlamalar yazıldı.
Function InterruptDurumu: Interrupt
ID registeri okunarak verinin geldiğini veya gönderildiğini belirler.
Function PortuOku: Porttan
gelen verinin okunmasını sağlar.
Procedure PortaYaz : Porta
bir byte' lık veriyi koyar. Gönderilecek karakter data registerine konulur.
Function ByteToString: Byte
olarak verilen veriyi string' e dönüştürür.
Function StringToByte: String olarak verilen veriyi byte' a
dönüştürür.
Procedure SeriCom: PC' de
8051 işlemcisi için assembler program yazıp derlendikten sonra HEX uzantılı bir
dosya oluşmaktadır. Bu HEX uzantılı dosya assembly emirlerin kodlarını ve adreslerini
içermektedir. Dosyanın bir satırının formatı ;
dataların_uzunluğu+adres+kayıt_tipi+datalar+kontrol_byte'ı,
şeklindedir. Bu procedure ile ismi verilen HEX uzantılı dosyadan okunmakta ve
seri porttan gönderilmektedir.
Program Communications;
uses
dos,crt;
{*************************************************************}
const
{baud rate
tanımlamaları}
br_9600 =$000C;
{parity biti
tanımlamaları}
pr_none =$00;
pr_odd =$08;
pr_even =$18;
{data uzunluk tanımlamaları}
dl_6 =$01;
dl_7 =$02;
dl_8 =$03;
{stop biti
tanımlamaları}
sb_1 =$00;
sb_2 =$04;
{seri port
tanımlamaları}
com1 =0;
com2 =1;
{8250 entegresi
içerisindeki register tanımlamaları}
data =0;
interrupt_enable =1;
interrupt_identification =2;
data_format =3;
seri_control =4;
seri_status =5;
modem_status =6;
yetkilendir =128;
{register için
port adresleri}
regs:array[0..1,0..6] of word=(($3f8,$3f9,$3fa,$3fb,$3fc,$3fd,$3fe),
($2f8,$2f9,$2fa,$2fb,$2fc,$2fd,$2fe));
{interrupt_identification tanımlamaları}
veri_geldi =4;
veri_gonderme_tamamlandi =2;
{Hexadecimal
Rakamların Tanımlanması}
Hexal:Array[1..16] of String[1]=('0','1','2','3','4','5','6','7',
'8','9','A','B','C','D','E','F');
var
sayih,sayil:byte;
{ByteToString Function'u için}
hsayih,hsayil:string[1];
{StringToByte Function'u için}
ch:char;
{*************************************************************}
{data_format registerinin en anlamlı biti 1 yapılıyor}
procedure BaudRateAktif(pn:byte);
var
temp:byte;
begin
temp:=port[regs[pn,data_format]] or yetkilendir;
port[regs[pn,data_format]]:=temp;
end;
{*************************************************************}
{data_format registerinin en anlamlı biti 0 yapılyor}
procedure DataAktif(pn:byte);
var
temp:byte;
begin
temp:=port[regs[pn,data_format]] and (not yetkilendir);
port[regs[pn,data_format]]:=temp;
end;
{*************************************************************}
{baud_rate değeri ilgili registere yerleştiriliyor}
procedure DataHizAyari(pn:byte;speed:word);
begin
baudrateaktif(pn);
port[regs[pn,data]]:=lo(speed);
port[regs[pn,data+1]]:=hi(speed);
end;
{*************************************************************}
{byte tipinde olan register word olarak tanımlanıyor}
function DataHiziTanimi(pn:byte):word;
begin
baudrateaktif(pn);
datahizitanimi:=portw[regs[pn,data]];
end;
{*************************************************************}
{seçilen haberleşme portunun tanımlaması yapılıyor}
procedure
PortuSetle(pn:byte;speed:word;parity,datalen,stopbits:byte);
var
kontrolreg:byte;
begin
datahizayari(pn,speed);
kontrolreg:=parity or stopbits or datalen;
port[regs[pn,data_format]]:=kontrolreg;
end;
{*************************************************************}
{veri geldiğinde ilgili registeri setler}
function InterruptDurumu(pn:byte):byte;
var
b:byte;
begin
b:=port[regs[pn,interrupt_identification]];
interruptdurumu:=b
and (veri_gonderme_tamamlandi+veri_geldi);
end;
{*************************************************************}
{port veri koruması için setleniyor veya okunuyor}
function PortuOku(pn:byte):byte;
begin
dataaktif(pn);
portuoku:=port[regs[pn,data]];
end;
{*************************************************************}
{data registerine bir byte yazar}
procedure PortaYaz(pn:byte;ch:byte);
begin
dataaktif(pn);
port[regs[pn,data]]:=ch;
end;
{*************************************************************}
Function ByteToString(Sayi:Byte):String;
Var
HexSayi:String[2];
ie:Byte;
Begin
SayiH:=Trunc(Sayi/16);
SayiL:=Trunc(Sayi-SayiH*16);
For ie:=0 to 15 do
if SayiH=ie then
HexSayi:=Hexal[ie+1];
For ie:=0 to 15 do
if SayiL=ie then
HexSayi:=HexSayi+Hexal[ie+1];
ByteToString:=HexSayi;
End;
{*************************************************************}
Function StringToByte(HexSayi1:String):Byte;
Var
Sayi1:Byte;
ie:Byte;
Begin
HSayiH:=(Copy(HexSayi1,1,1));
HSayiL:=(Copy(HexSayi1,2,1));
For ie:=0 to 15 do
if
HSayiH=Hexal[ie+1] then Sayi1:=ie*16;
For ie:=0 to 15 do
if
HSayiL=Hexal[ie+1] then Sayi1:=Sayi1+ie;
StringToByte:=Sayi1;
End;
{*************************************************************}
Procedure SeriCom;
Label Oku;
Var
DosyaAdi:String[50];
Run:String;
Test:Boolean;
PortOkunan:Byte;
Dosya:Text;
Uzunluk,KayitTipi,RamAdrH,RamAdrL,RamData:String[2];
UzunlukByte,RamAdrHByte,RamAdrLByte,RamDataByte:Byte;
i,j:Integer;
Begin
clrscr;
TextBackGround(7);TextColor(0);
GotoXY(18,12);Write('-');
for i:=19 to 66 do
Begin
GotoXY(i,12);
Write('-');
End;
GotoXY(67,12);Write('-');
GotoXY(18,20);Write('-');
for i:=19 to 66 do
Begin
GotoXY(i,20);
Write('-');
End;
GotoXY(67,20);Write('-');
for i:=13 to 19 do
Begin
GotoXY(18,i);
Write('-');
End;
for i:=13 to 19 do
Begin
GotoXY(67,i);
Write('-');
End;
TextBackGround(4);TextColor(30);
GotoXY(19,13);Write(' Seri
Port COM2 :9600,n,8,1 ');
TextBackGround(7);TextColor(1);
{Iletişim Test}
test:=FALSE;
GotoXY(19,14);Write('
');
GotoXY(19,15);Write(' İletişim
Kurulmaya Çalışılıyor ');
GotoXY(19,16);Write(' ');
GotoXY(19,17);Write('
');
while NOT test do
begin
PortaYaz(1,11);
if
InterruptDurumu(com2) =veri_geldi then
begin
PortOkunan:=PortuOku(com2);
if
PortOkunan=11 then
test:=TRUE;
end
else
if keypressed
then
begin
GotoXY(19,14);Write(' ');
GotoXY(19,15);Write(' İletişim
Sağlanamıyor. ');
GotoXY(19,16);Write('
');
GotoXY(19,17);Write('
');
halt;
end;
end;}
GotoXY(19,14);Write('
');
GotoXY(19,15);Write(' Yükleme
Yapacağınız Dosya Adı: ');
GotoXY(19,16);Write('
');
GotoXY(19,17);Write('
');
GotoXY(21,16);Readln(DosyaAdi);
if DosyaAdi=''
then
begin
TextBackGround(0);TextColor(15);GotoXY(1,21);exit;
end;
DosyaAdi:='C:\UTIL\ASM51\EXP\'+DosyaAdi+'.HEX';
{$I-}
Assign(Dosya,DosyaAdi);
Reset(Dosya);
if
IOResult<>0 then
Begin
TextBackGround(0);TextColor(12);
GotoXY(24,18);Write(' Hatalı
Dosya Adı');
GotoXY(26,19);Write(' ');
{ Readkey;
}
TextBackGround(0);TextColor(15);
GotoXY(1,21);
Exit;
End;
Close(Dosya);
{$I+}
TextBackGround(0);TextColor(12);
Assign(Dosya,DosyaAdi);
Reset(Dosya);
Oku:
Read(Dosya,ch);
if ch<>':'
then
Begin
GotoXY(19,18);Write(' Çalışma
dosyanız ASM51 HEX yapılı değil ');
GotoXY(19,19);Write('
');
Close(Dosya);
TextBackGround(0);TextColor(15);
GotoXY(1,21);
Exit;
End;
if ch=':' then
Begin
GotoXY(19,18);Write(' .......... Datalar RAM a yazılıyor ...........');
Uzunluk:='';
For i:=1 to 2
do
Begin
Read(Dosya,ch);
Uzunluk:=Uzunluk+ch;
End;
UzunlukByte:=StringToByte(Uzunluk);
RamAdrH:='';
For i:=1 to 2
do
Begin
Read(Dosya,ch);
RamAdrH:=RamAdrH+ch;
End;
RamAdrHByte:=StringToByte(RamAdrH);
RamAdrL:='';
For i:=1 to 2
do
Begin
Read(Dosya,ch);
RamAdrL:=RamAdrL+ch;
End;
RamAdrLByte:=StringToByte(RamAdrL);
KayitTipi:='';
For i:=1 to 2
do
Begin
Read(Dosya,ch);
KayitTipi:=KayitTipi+ch;
End;
if
(Uzunluk='00') and (RamAdrH='00') and (RamAdrL='00') and (KayitTipi='01') then
Begin
Delay(50);
PortaYaz(Com2,255);
Delay(50);
PortaYaz(Com2,255);
Delay(50);
PortaYaz(Com2,00);
Delay(50);
Close(Dosya);
GotoXY(19,18);Write('
Transfer Tamamlandı...
');
GotoXY(19,19);Write('
Programı koşmak istiyor musunuz ( E/H ): ');
GotoXY(64,19);Readln(Run);
if (Run='e') or
(Run='E') then
Begin
PortaYaz(Com2,01);
GotoXY(19,18);Write('
......... Program Koşuluyor .........
');
GotoXY(19,19);Write('
');
End
else
Begin
PortaYaz(Com2,00);
GotoXY(19,18);Write('
');
GotoXY(19,19);Write('
');
End;
TextBackGround(0);TextColor(15);
GotoXY(1,21);
Exit;
End;
For j:=1 to
UzunlukByte do
Begin
RamData:='';
For i:=1 to
2 do
Begin
Read(Dosya,ch);
RamData:=RamData+ch;
End;
RamDataByte:=StringToByte(RamData);
Delay(50);
PortaYaz(Com2,RamAdrHByte);
Delay(50);
PortaYaz(Com2,RamAdrLByte);
Delay(50);
PortaYaz(Com2,RamDataByte);
GotoXY(28,19);Write('Adres
:',ByteToString(RamAdrHByte),ByteToString(RamAdrLByte),' Data : ',RamData);
RamAdrLByte:=RamAdrLByte+1;
if
RamAdrLByte=0 then RamAdrHByte:=RamAdrHByte+1;
End;
End;
Readln(Dosya);
Goto Oku;
End;
begin
PortuSetle(Com2,BR_9600,Pr_None,Dl_8,Sb_1);
DataAktif(Com2);
SeriCom;
end.
BÖLÜM III
UYGULAMA ÖRNEKLERİ
3.1. Kesme ile Çalışan 8-Bit
ADC Arabirimi
Bir
önceki bölümde , ADC ,analog sinyali
sayısal karşılığına çevirirken ,işlemci
meşgul bekleme durumundaydı. Bu bölümde verilecek örnekte , A/D çevirim
sonu bir kesme ile işlemciye bildirilmektedir. ADC ‘nin çevirim sonunu belirten BUSY sinyali , bir inverter ile
terslenerek mikrokontrtolörnin INTO
girişine bağlanır. Bu örneğin tek donanım farkı budur ve şeması aşağıda görülmektedir.

Şekil-3-1 :
ZN448 A/D Çeviricisinin Kesmeli
Çalışması İçin 8051 Arabirimi
Aşağıda
verilen ana programda , işlemci ,aDC’ yi çevirimi başlattıktan sonra , elde
bayrağı üzeride beklemeye başlar :
BUSY : JNC BUSY
Bu komut yürütülürken , ADC ,çevirimi bitirir ve BUS:Y
sinyalini lojik 1 yapar. Inverter ile terslenen bu sinyal ,ADC’ den işlemciye
bir kesme hizmet programı ,INTSERVIS ,çalışır. Bu alt programda, 8- bit
örnek okunur ev elde bayrağı 1’ lenir. Kesme hizmet
programından döndükten sonra ,daha önce
yürütülmekte olan , yukarıda verilen , bekleme
durumunda olan satırdan çıkılmış olur.
***************************************************************
INTO kesmesi ile çalışan ADC örneği (Ana Program)
***************************************************************
ORG 2200H
MOV DPTR ,# MESAJ ;ADC ‘nin çalıştığı
CALL PSTRING ;ekrana
yazılır.
SETB IE. 7 ;Kesmeler aktif.
SETB IE. 0 ;INTO
aktif.
SETB TCON. 0 ;INTO
düşen kenarda aktif.
LOOP:
MOV DPTR , #OLCU1 ;ekranda
görünecek mesaj
CALL PSTRING ;
gönderilir.
CLR START ;
ADC ‘nin çevrime başlaması için
;
START=0 yapılır.
SETB START ;
Sonra START =1 yapılır
CLR C ;Çevirim
işleminin bitme bayrağı
BUSY:
JNC BUSY ; ISR’ de 1
yapılması beklenir.
CALL BIMARYTOASCII ; İkili değeri ASCII değere çevirir ve ekrana yazdırır.
MOV DPTR, #OLCU2 ; Ekranda görünecek mesaj
CALL PSTRING ;
gönderilir.
JMP LOOP ;
Bir sonraki çevrim için başa dönülür.
***************************************************************
AMAÇ : INTO kesmesi geldiğinde
çevirim değerini okur.
Girişler : P1
Çıkışlar :ACC’ de bir örnek değer.
Call (lar) : Yok
Değişkenler : A, P3.4, C.
***************************************************************
; ADC çevirimini bitirdiğinde bu adrese dallanılır.
ORG 2000h
INTSERVIS :
CLR RD ;
Verinin okunması için RD=0 yapılır.
MOV A, P1 ;
P1’deki sayısal çevirim değeri A’ya alınır.
SETB RD ;Veri okunduktan sonra RD=1 yapılır.
SETB C ;
Ana programdaki kesme döngüsünden çıkmak için C=1 yapılır.
RETI
END.
3.2- SAYISAL ANALOG ÇEVİRİM
Bazı
mikrokontrtolör uygulamalarında analog
çıkışa ihtiyaç vardır. Örneğin bir DC motor kontrolünde veya değişken voltajla bir lambanın ışık
şiddetini ayarlama gibi uygulamalarda DC gerilim kullanılır. Bu tür uygulamalarda kontrol sinyalinin , yani yüke uygulanan gerilimin , sürekli bir şekilde
değiştirilmesi gerekmektedir. Bu işleme sayısal –analog (D/A) çevirim denir. Bir D/A çeviriminde, çıkış
gerilimi bir sayısal değerle (8-bit ,12
–bit gibi) orantılıdır. Şekil(a) da
verilen örnekteki 3-bit D/A çeviricide ,
analog çıkış şekil(b)’ de görüldüğü gibi doğrusaldır.

Şekil-3-2 3-Bit DAC
Bir
mikrokontrtolörlü sistemde , analog sinyal üretmek için değişik yollar
bulunmaktadır. Bir sayısal değerden ,
nalog sinyal üretmenin en kolay
yollarından biri Darbe Genişlik Modülasyonu(PWM) tekniğidir. PWM’ de yüksek frekanslı bir kare
dalga , sayısal çıkış olarak üretilir. Örneğin ,bir port bit’i sürekli şekilde yüksek frekansta 1 ev 0 olarak
değiştirilir. Bu üretilen sinyal
aşağıdaki şekilde görüldüğü gibi
, bir alçak geçiren süzgece uygulanır. Süzgeci çıkışı kare dalga sinyalin
RMS değeridir.

Şekil-3-3 PWM İle Üretilen Sinyalin DC Bileşeni Yoluyla D/A Çevirim.
Kare dalga
sinyalin RMS değeri ,sinyalin dolu ve boşluk oranını (duty cycle) ayarlayarak değiştirilebilir. Dolu boşluk
oranı bir çevrimde sinyalin yüksek
voltajda (lojik 1 ) tutulma oranıdır. Bir
çevrim, 0’ dan 1’e geçişte başlar ve benzeri bir sonraki çevirimde biter.
Bir
çevirimde eğer sinyalin lojik 1’de kalma süresi lojik 0’ da kalma süresine eşit
ise çalışma çevrimi %50 dir. Yani bu
çalışma . zamanının yarısında , sinyal
yüksek değerde tutulmuş anlamına gelir.
%100 bir çalışma zamanı ise devamlı yüksek değerde olduğu demektir. %
25’lik çalışma zamanında ise sinyal ,
zamanın ¼ ünde yüksek tutulmaktadır.
Aşağıdaki grafikte çalışma çevrimleri ve
çıkışın +5 V yüksek voltaj değerine
karşılık gelen , ortalama DC çıkış değerleri görülmektedir.

Şekil-3-4 Değişen Ortalama DC Çıkış İçin PWM Değeri
Bir
mikrokontrolör ile bir bit PWM yapılabilir. Bu tekniğin basit olması ve
mikrokontrtolörünün sadece bir çıkışının bu işlem için yeterli olması, bu
tekniği cazip hale getirmektedir. Fakat bu basitlik , sinyalleme için gereken kod işlem yükü
fiyatı ile beraber gelmektedir. Bugün özel PWM çıkışlarına sahip
mikrokontrtolörler bulunmaktadır.
Örneğin Intel 8096 mikrokontrtolörü
tümdevre üzerinde PWM
kaynaklarına sahiptir. Bu işlemcilerde PWM sinyali üretmede , program ile tek yapılan , bu işlem için
ayrılan saklayıcılara
gerekli değerlerin yüklenmesi ve
sinyal üretiminin başlatılmasıdır. Bu sayede , PWM sinyali üretilmeye
başlandıktan sonra , işlemciye bir kod
yükü olmamakta ve işlemci sinyal üretimi
için sürekli atanmaktadır.
Mikrokontrolörlü sistemlerde
analog sinyal üretmek için diğer bir yöntem , işlemci dışında bir DAC tümdevresi kullanmaktır. Şekil-3-5’ de tipik
bir DAC tümdevresi görülmektedir.
Bu tümdevrenin mikrokontrtolör ile kullanımında , mikrokontrtolörnin 9 tane ucu
bu iş için ayrılır. 8-bit sayısal veri
için , örneğin bir port ve 1 bit bu verinin DAC içindeki latch’ ta tutturulması için , kontrol sinyali
olarak kullanılır. Mikrokontrtolör
, 8-bit sayısal verisini bir port’ u üzerinden
DAC tümdevresinin D7-D0 girişlerine
uyguladıktan sonra , bu 8-bit
verinin latch’ te tutturulması için CE (Chip Enable) DAC kontrol
girişini lojik 0 yapar. Bu 8-bit veri tümdevre içindeki D/A çevirici ile , analog sinyale çevrilir
ve bir op-amp üzerinden bu sinyal dışarı alınır.

Şekil-3-5 8-bit
Bir DAC Blok Diyagramı
Aşağıdaki
şekil-3-6’ da tipik bir DAC
uygulamasına örnek olarak ZN428’ in 8051
arabirimi verilmiştir. Sayısal veri üretimi için , mikrokontrtolörnin P1
portu ve bu veriyi DAC içindeki latch
‘te tutturma kontrol sinyali
olarak , P3.3 ucu kullanılmıştır. DAC’ ın kullanımını gösteren basit bir program aşağıda verilmiştir.
Programda mikrokontrtolör P1 üzerinden
sayısal veri üretmekte ve P3ç3
kontrol ucuyla bu veriyi DAC
latchında kullanmaktadır. P1 önce
sürekli bir şekilde azaltılmakta ev daha
sonra arttırılmaktadır. Bu işlemler sırasında sayısal P1 vericisi, DAC’ a gönderilerek analog karşılıkları elde
edilmektedir. Bu sayede DAC
çıkışında bir üçgen dalga şekli elde edilir.
CLR P3.3 ;
DAC çevrime hazır
MOV P1 , #OFF ; P1 çıkış
AZALT ; DAC P1
MOV
A, P1
CJNE A, #00h, AZALT
ARTTIR ; INC P1
MOV A,
P1
CJNE
A ,#0FFh ,ARTTIR
JMP
AZALT

Şekil-3-6 8 Bit DAC blok diyagramı
BÖLÜM IV
8051
GELİŞTİRME DEVRELERİ- YAZILIMLARI
4.1.CPU-EPROM-LATCH
Kurulumu
8051 CPU' da
adres hattını anlamsız yarısı ile data hattı ortak bir hat üzerine
yerleştirilmişlerdir. Bunun amacı hem CPU' daki bacak sayısının azaltılması hem
de IEEE standartlarına uyum içindir. Bu hattan ne zaman adres ve ne zaman
datanın çıkarılacağı ise CPU üzerindeki ALE(Address Latch Enable) bacağı
sayesinde olmaktadır. CPU dan data çıkarılacağı zaman ALE bacağı Lojik-0
seviyesine çekilmekte ,adres çıkarılacağı zaman ise ALE Lojik-1 seviyesine
çekilmektedir. Eğer Adres-Data ortak hattı bir latch (74LS373) ' lanacak olursa
CPU' dan adres ve data hattı ayrılmış olacaktır. Yapılacak çalışmalarda başlanacak
en temel nokta burasıdır. Kullanılan
CPU' nun (80C31) kendinden EPROM/PROM' u olmadığı için EA bacağı toprak'
a çekilmiş böylece harici Program Bellek kullanılacağı ifade edilmiş olur.
Artık en temel yapı kurularak işe başlanabilir. Şekil-3.3.'de bu yapı
verilmiştir.
![]() |

Şekil-4-1 EPROM Bacak Yapısı ve Bacak Adları
![]() |

Şekil-4-2 Latch Bacak Yapısı ve Doğruluk
Tablosu

Şekil-4-3 CPU-EPROM ve Latch' dan Kurulu Temel Devre
Devre
kurulduktan sonra her aşamada bu yapının çalışıp çalışmadığının testini
sağlayacak bir program yazılacak olursa ileride meydana gelecek arıza
durumlarının testi moduler bir şekilde yapılmış olacaktır. Bunun için yazılmış
program aşağıda gösterilmiştir.
;DENEME PROGRAMI 1
;YAZAN:CUNEYT URGUN
;TARİH:14-3-1997/CUMA
;8051 CPU'NUN P1 PORTUNDAN
YAKLAŞIK OLARAK (KRİSTALE BAĞLI)10-25 sn.
;ARALIKLARLA 10101010 VE 01010101
DEĞERİNİ GÖNDERİR.
BASLA: MOV A,#0AAH
MOV P1,A
MOV R0,#080H
BIR: NOP
DEC R0
MOV R1,#080H
IKI: NOP
DEC R1
MOV R2,#080H
UC: NOP
DEC R2
CJNE R2,#000H,UC
CJNE R1,#000H,IKI
CJNE R0,#000H,BIR
MOV A,#055H
MOV P1,A
MOV R0,#080H
BIR1: NOP
DEC R0
MOV R1,#080H
IKI2: NOP
DEC R1
MOV R2,#080H
UC3: NOP
DEC R2
CJNE R2,#000H,UC3
CJNE R1,#000H,IKI2
CJNE R0,#000H,BIR1
JMP BASLA
END
4.2.RAM (6264)' ın Eklenmesi
Çalışmada iki adet
6264 Statik RAM kullanılacaktır. Bacak Yapısı şekil-4-1.'de verilmiştir. Bu
RAM' lardan biri ,CPU' nun genel olarak kullanacağı RAM, diğeri ise devrenin PC
ile bağlantısı sonucu alınacak bilgilerin yazılacağı ve sonrada bu bilgilerin
program kodu olarak çalıştırılacağı RAM' dır. Bu RAM' lar CPU' nun adresleme
bölgesi içinde sırası ile 2000h-3FFFh ve 4000h-5FFFh arasına oturtulmuştur. Bu
RAM' ların seçilmesi için bazı gerekli kod çözme devrelerinin gerçekleştirilmesi
gerekmektedir. Ancak devrede bu kod çözme elemanlarının eklenmesi hem ek masraf
hem de daha fazla donanım gerekmektedir. Devremde 8'den fazla dış cihaz
kullanılmadığı için 64KB'lık adresleme bölgesi 8 eşit parçaya ayrılabilir. Bu
da adres hattını en anlamlı 3 biti olan A13-A14-A15'den yararlanarak ve bir
3'den 8'e kod çözücü (74LS138) kullanılarak yapılabilir.

Şekil-4-4 Kod Çözme İşlevinin Gerçeklenmesi
Aslında 8051
CPU' da EPROM için bellek alanı ayırmanın gereği yoktur. Yani kod çözücünün Y0
çıkışından alınan ve EPROM' un CE ucuna verilen bağlantı gereksizdir. CPU' da
EA=0 yapmak ile zaten harici program bellek' in kullanılacağı ve PSEN(Program
Stere Enable) bacağınında EPROM' un OE' sine vermek ile de EPROM' un program
bellek' i olduğu tanımlanmış olur. Ama yaptığım çalışmada PC' den datalar
alınıp RAM' a yazıldıktan sonra program bellek alanı RAM olacağından EPROM' un
ortadan kaldırılması için gereklidir.
Aşağıdaki
şekil-4.6.'de birinci RAM' ın devreye bağlanışı gösterilmiştir. RAM bağlandıktan
sonra yazılacak program RAM' ın ve diğer devre elemanlarının çalışmasını da
test etmiş olacaklardır. Yazılan program birinci RAM' a 01010101b ile 10101010b
sayılarını 2000h ve 2001h adreslerine yazmakta
daha sonra ise onları okuyarak P1 portuna 2-3 sn.' lik aralarla
çıkmaktadır.

Şekil-4-5 6264 RAM' ın Bacak
Yapısı

Şekil-4-6 Birinci RAM' ın Devreye Eklenmesi
;DENEME PROGRAMI-2
ORG 0000H
RAM_A_YUKLE:
MOV DPTR,#2000H
MOV A,#055H
MOVX @DPTR,A
INC DPTR
MOV A,#0AAH
MOVX @DPTR,A
ACALL BEKLE
GOSTER:
MOV
DPTR,#2000H
MOVX A,@DPTR
MOV P1,A
ACALL BEKLE
INC DPTR
MOVX A,@DPTR
MOV P1,A
ACALL BEKLE
SJMP RESET
BEKLE:
MOV R0,#015H
BIR:
DEC R0
MOV R1,#080H
IKI:
DEC R1
MOV R2,#080H
UC:
DEC R2
CJNE
R2,#000H,UC
CJNE
R1,#000H,IKI
CJNE R0,#000H,BIR
RET
END
İkinci RAM' ın
bağlanması için önemli bazı ayrıntılar vardır. Birinci RAM' ın bağlanmasında,
CPU' nun RD ve WR bacakları RAM' ın sırasıyla OE ve R/W bacaklarına karşı
düşürülmüştür. Dolayısıyla direk olarak RAM' a bilgi yazılıp bu bilgiler
okunabilecektir. Ama ikinci RAM' a yazılacak bilgiler bir data gibi değil de
program kodu olarak okunacaktır. Dolayısı ile bu RAM program kodu olarak
okunurken hem seçili olmalı hem de CPU' nun PSEN işareti uygulanabilmelidir. Bunu sağlayacak
pek çok yöntem bulunabilir. Bu işi yerine getirecek donanımımız şekil-4.7.'de
gösterilmiştir.

Şekil-4-7 Harici RAM İçin Okuma Sinyalinin Elde
Edilmesi

Şekil-4-8
Kullanılan AND Kapısı İçin Bacak Yapısı ve Lojik Sembolü
Bu RAM' ın
testi için yazılacak programda yazılan datalar okunurken program kodu yani 8031
CPU' su emir kodu olarak okunacaktır. Bu yüzden programın sonucunu görmek için
RAM' a çok basit bir programın emir kodları yazılacak ve sonrada
çalıştırılacaktır. Önce basit programımızı yazalım. Örneğin bu program P1
portuna 10000001b değerini çıkan bir program olabilir.
;DENEME PROGRAMI-3
ORG 0000H
MOV
A,#10000001B
MOV
P1,A
END.
Bu
programın hexal yani emir kodu karşılığı
74 81
F5 90'dır.
Şimdide
deneme programımızı yazalım.
;DENEME PROGRAMI-4
RAM2 EQU 4000H
ORG 0000H
MOV
DPTR,#4000H
MOV
A,#074H
MOVX
@DPTR,A
INC
DPTR
MOV
A,#081H
MOVX
@DPTR,A
INC
DPTR
MOV
A,#0F5H
MOVX
@DPTR,A
INC
DPTR
MOV
A,#090H
MOVX
@DPTR,A
INC
DPTR
MOV
A,#022H
MOVX
@DPTR,A
LCALL
RAM2
END.
Program çalıştırıldığında eğer
bir sorunla karşılaşılmaz ise ikinci RAM' ın içindeki bilgileri data gibi değil
de emir kodu gibi okuduğu ve sonuç olarak P1 portuna 10000001b değerini çıktığı
görülecektir. Son satırlarda ayrıca RAM' ın içine 22h değerinin de yazıldığı
görülmektedir. Bunun anlamı RET komutunun çalıştırılarak LCALL ile çağrılan
yere geri dönmesini sağlamak içindir.
4.3.İki
Mikrobilgisayar' ın Haberleştirilmesi
Yapılan
uygulamalı çalışmalardan biride iki mikrobilgisayar sisteminin
haberleştirilmesi olmuştur. CPU, EPROM, Latch ve RAM' dan kurulmuş iki sistem
8031'in içinde bulunan UASRT (Universal Asencrounus Receiver and Transmitter)
sayesinde seri asenkron haberleşmeyi çok basit olarak yapabileceklerdir. Bu
işlemi gerçekleştirecek program, seri haberleşmenin nasıl yapılacağı konusunda
bilgi vermenin yanı sıra CPU' daki Timer/Counter kullanımı ve Baud Rate değeri üretiminin
nasıl gerçekleştirileceği konusunda da faydalı olacaktır. Devrenin kurulmasında
dikkat edilmesi gereken nokta, birinci CPU' nun RxD ve TxD bacaklarının sırasıyla ikinci CPU' nun
TxD ve RxD bacaklarına bağlanması sonra da devrenin topraklarının birleştirilmesidir.
;DENEME PROGRAMI-5
;CUNEYT URGUN
;VERICI 8031 ICIN PROG.
;05-04-1997/CUMARTESI
ORG 0000H
MOV
PSW,#00011000B
LCALL
RAM_A_YAZ
LCALL
TIMER_KUR
GOND:
LCALL
DATA_GONDER
SJMP GOND
TIMER_KUR:
MOV
TMOD,#00100010B
CLR TR0
MOV TL1,#0FDH
MOV
SCON,#01000000B
SETB TR1
RET
DATA_GONDER:
MOV R7,#003H
MOV
DPTR,#2000H
OKU: MOVX A,@DPTR
MOV SBUF,A
GONDER: JNB TI,GONDER
INC DPTR
CLR TI
DJNZ R7,OKU
RET
RAM_A_YAZ:
MOV A,#70H
MOV
DPTR,#2000H
MOVX @DPTR,A
INC DPTR
MOV A,#52H
MOVX @DPTR,A
INC DPTR
MOV A,#63H
MOVX @DPTR,A
RET
END
;DENEME PROGRAMI-6
;CUNEYT URGUN
;ALICI 8031 ICIN PROG.
;05-04-1997/CUMARTESI
ORG 0000H
MOV PSW,#00011000B
LCALL TIMER_KUR
LCALL DATA_AL
YAZ: LCALL RAMDAN_P1_E
SJMP YAZ
TIMER_KUR:
MOV TMOD,#00100010B
CLR TR0
MOV TL1,#0FDH
MOV SCON,#01010000B
SETB TR1
RET
BEKLE:
MOV R0,#080H
BIR:
DEC R0
MOV R1,#080H
IKI:
DEC R1
MOV R2,#080H
UC:
DEC R2
CJNE R2,#000H,UC
CJNE R1,#000H,IKI
CJNE R0,#000H,BIR
RET
DATA_AL:
MOV R7,#003H
MOV DPTR,#2000H
AL: JNB RI,AL
MOV A,SBUF
MOVX @DPTR,A
INC DPTR
CLR RI
DJNZ R7,AL
RET
RAMDAN_P1_E:
MOV R7,#003H
MOV DPTR,#2000H
OKU:
MOVX A,@DPTR
INC DPTR
MOV P1,A
LCALL BEKLE
DJNZ R7,OKU
RET
END
4.4. İletişim Arayüz Devre Elemanlarının
(1488-1489) Eklenmesi
Ara yüz elemanları iki birim arasındaki işaret
seviyelerini uygunlaştırmak için kullanılan ara elemanlardır. PC(Personel
Computer)' ler seri haberleşmede RS232 standardını kullanırlar. RS232'de DTE
(Data Terminal Equipment) karşısındaki
DTE' yi yaklaşık 20mA'lik bir akımla sürer. Akımla sürme yöntemi
hatlardaki kayıplardan dolayı daha uygun bir çözümdür. RS232 standardında
lojik-0 seviyesi -15V ile --3V ve lojik-1 seviyesi ise +3V ile +15V
arasındadır. Arada kalan -3Vile +3V bölgesi ise belirsizlik bölgesidir.
8051 CPU
+5V'da çalıştığı için RxD ve TxD bacaklarında lojik-1 +5V ile lojik-0 ise 0V ile ifade edilecektir. PC'
lerde ise lojik-1 +12V ve lojik-0 -12V olduğundan ikisi birbirleri ile
haberleştirilirken gerekli gerilim genlik dönüşümlerinin yapılması
gerekmektedir. Bu iş için 1488(Quad Line Receiver) ile 1489(Quad Line Driver)
entegreleri veya tamamen bunlara eşdeğer 75188-75189 entegreleri
kullanılabilir.
**DCE(Data Communication
Equipment)


Şekil-4-9. DTE ve DCE
PC ile 8031 arasındaki seri bağlantının ara yüzler ile
yüzleştirilmesi aşağıdaki biçimdedir.
+12V -12V

Şekil-4-10. PC ile
8051'in Yüzleştirilmesi
BÖLÜM V
PIC
5.1. PIC MİKROKONTROLÖRÜ
Kod Verimliliği :
PIC Harvard mimarisi temelli 8 bitlik bir mikrokontrtolördir. Bu ,bellek ve veri için
ayrı yerleşik bus’ ların bulunduğu anlamına gelir. Böylelikle akış miktarı veriye
ve program belleğine simültane erişim sayesinde arttırılmış olur. Geleneksel
mikrokontrtolörlerde veri ve program
taşıyan bir tek yerleşik bus bulunur. Bu ,PIC’ le karşılaştırıldığında işlem hızını
en az iki kat yavaşlatır.
Güvenilirlik
:
Tüm komutlar
12 veya 14 bitlik bir program bellek sözcüğüne sığar. Yazılımın programın VERİ
kısmına atlamaya ve veri’yi komut gibi
çalıştırmasına gerek yoktur. Bu 8 bitlik bus kullanan ve Horvard mimarisi
temelli olmayan mikrokontrtolörlerde
gerçekleşmektedir.
Komut
Seti :
16C5X
ailesinde yazılım yaratmanız için 33 komut
öğrenmeniz yeterlidir. 16CXX araçları içinse bu sayı 35 tir. OIC
tarafından kullanılan komutların hepsi yazmaç (register) temellidir ve 16C5X ailesinde 12 bit 16CXX
ailesindeyse 14 bit uzunluğundadır. CALL, GOTO ve bit test eden BTFSS, INCFSZ gibi komutlar dışında ,her
bir komut, tek bir çevrimde çalışır.
Hız:
PIC ,osilatör ve yerleşik saat yolu (clock
bus) arasına bağlı yerleşik bir (divide by 4 ) 4’lü bölünme’ ye sahiptir. Bu , özelikle 4 MHz lik kristal
kullanıldığında komut sürerlerinin hesaplanmasında kolaylık sağlar. Her bir
komut döngüsü 1 ms’
dir. PIC oldukça hızlı bir mikrokontrtolördür. Örneğin 5 milyon komutluk bir programın , 20
MHz lik bir kristalle aydınlanması
yalnız 1 saniye sürer. Bu süre
386 SX 33 hızının neredeyse 2 katıdır.
Statik
İşlem :
PIC tamamıyla
statik bir mikroişlemcidir. Başka
bir deyişle saati durdurduğunuzda ,tüm yazmaç içeriği korunur. Pratikte bunu
tam olarak gerçekleştirmeniz mümkün
değildir. PIC’i uyutma moduna
getirdiğinizde , saat durur ve PIC ‘e uyutma işleminden ....hangi durumda olduğunu size hatırlatacak
çeşitli bayraklar kurar. PIC uyuma modunda
yalnızca 1mA dan
küçük bir değere sahip bekleme (standby)
akımı çeker.
Sürücü Kapasiteleri :
PIC yüksek
bir sürücü çıktı kapasitesine sahiptir.
Seçenekler
:
PIC ailesinde her türlü ihtiyacınızı
karşılayacak çeşitli hız, sıcaklık ,kılıf, I/O hatları ,zamanlama (timer )
fonksiyonları,seri iletişim portları
,A/D ve bellek kapasite seçenekleri
bulunur.
Güvenlik
:
PIC endüstride
en üstünler arasında yer alan bir kod koruma özeliğine sahiptir. Koruma
bitinin programlanmasından itibaren , program belleğinin içeriği , program
kodunun yeniden yapılandırılmasına olanak verecek şekilde
okunamaz.
Geliştirme
:
PIC geliştirme
amacıyla yeniden programlanabilen (EPROM) ve seri üretim amacıyla
OTP (one time programmable – bir kere programlanabilir) için pencereli formda bulunabilir. Geliştirme
araçlarının temini mümkündür ve fiyatları caziptir.
5.2.1. PIC Mikrokontrolör Yapısı
CPU bölgesinin kalbi ALU’dur. (Arithmetic Logic Unit –Aritmetik
Mantık Birimi) ve W (Working-Çalışan)
yazmacı adında bir yazmaç içerir.
PIC, diğer mikroişlemcilerden ,aritmetik ve mantık işlemleri için bir tek ana yazmaca sahip oluşuyla
farklılaşır. W yazmacı 8 bit genişliğindedir ve CPU’daki herhangi
bir veriyi transfer etmek üzere
kullanılır.
CPU
alanında ayrıca iki kategoriye ayırabileceğimiz Veri
Yazmaç Dosyaları (Data Register Files ) bulunur : I/O ve
kontrol şeklinde çalışanlar ve tamamen
RAM gibi çalışanlar.
Harvard
Mimarisi temelli mikrokontrolörlerde
veri akış miktarını hızlandırmak ve yazılım güvenliğini arttırmak amacıyla aynı
bus’lar kullanılır. Bu mimari , veri ve program
belleğinne simultane erişimi olanaklı kılar.

Şekil-5-1 Temel
PIC Blok Diyagramı
Maxımum frequancyof
Operation
|
EPROM
|
ROM
|
EEPROM
|
Data Memory (bytes)
|
Data EEPROM (bytes)
|
Timer Module(s)
|
Capture /Compare /PWM
Module
|
Serial Port(s) (SPI /I2C ,SCI )
|
Parallel Slave Port
|
Analog to Digital
Convertor(8- bit)
|
Comperators
|
External Interrupts
|
Interrupt Sources
|
I/O
|
Voltage Range (Volts)
|
Number of
Instructions
|
Package
|
|||||
PIC16C620
|
20
|
512
|
_
|
_
|
80
|
_
|
TMR0
|
_
|
_
|
_
|
_
|
2
|
Yes
|
4
|
13
|
3.0to 6.0
|
35
|
16- pin DIP ,16-pin SOIC ,20- pin SSOP
|
||||
PIC16C621
|
20
|
1K
|
_
|
_
|
80
|
_
|
TMR0
|
_
|
_
|
_
|
_
|
2
|
Yes
|
4
|
13
|
3.0to 6.0
|
35
|
16- pin DIP ,16-pin SOIC ,20- pin SSOP
|
||||
PIC16C622
|
20
|
2K
|
_
|
_
|
128
|
_
|
TMR0
|
_
|
_
|
_
|
_
|
2
|
Yes
|
4
|
13
|
3.0to 6.0
|
35
|
16- pin DIP ,16-pin SOIC ,20- pin SSOP
|
||||
PIC16C611
|
20
|
1K
|
_
|
_
|
36
|
_
|
TMR0
|
_
|
_
|
_
|
_
|
_
|
Yes
|
3
|
13
|
3.0to 6.0
|
35
|
16- pin DIP ,16-pin SOIC
|
||||
PIC16C641
|
20
|
2K
|
_
|
_
|
128
|
_
|
TMR0
TMR1
TMR2
|
1
|
SPI/
I2C
|
Yes
|
_
|
_
|
Yes
|
8
|
13
|
3.0to 6.0
|
35
|
40- pin DIP,44-pin PLCC ,44-pin MOFP
|
||||
PIC16C651
|
20
|
4K
|
_
|
_
|
192
|
_
|
TMR0
TMR1
TMR2
|
2
|
SPI/
I2C
SCI
|
Yes
|
_
|
_
|
Yes
|
11
|
13
|
3.0to 6.0
|
35
|
40- pin DIP,44-pin PLCC ,44-pin MOFP
|
||||
PIC16C711
|
20
|
1K
|
_
|
_
|
36
|
_
|
TMR0
|
_
|
_
|
_
|
4ch
|
_
|
Yes
|
4
|
13
|
3.0to 6.0
|
35
|
18- pin DIP ,18-pin SOIC
|
||||
PIC16C731
|
20
|
4K
|
_
|
_
|
192
|
_
|
TMR0
TMR1
TMR2
|
2
|
SPI/
I2C
SCI
|
_
|
5ch
|
_
|
Yes
|
11
|
13
|
3.0to 6.0
|
35
|
28- pin DIP ,28-pin SOIC
|
||||
PIC16C741
|
20
|
4K
|
_
|
_
|
192
|
_
|
TMR0
TMR1
TMR2
|
2
|
SPI/
I2C
SCI
|
Yes
|
8ch
|
_
|
Yes
|
12
|
13
|
3.0to 6.0
|
35
|
40- pin DIP,44-pin PLCC ,44-pin MOFP
|
||||
PIC16C841
|
20
|
_
|
_
|
_
|
36
|
_
|
TMR0
|
_
|
_
|
_
|
_
|
_
|
Yes
|
4
|
13
|
2.0to 6.0
|
35
|
18- pin DIP ,18-pin SOIC
|
||||
5.3. Gerekli Donanım :
PIC ‘i çalıştırmak için gereksinilen asgari donanım
bir osilatörden ibarettir. Osilatör ,bir dirennç ve kapasitör veya bir kristal
/seramik rezonatör ve iki kapasitör
formunda olabilir. Reset hattı kaynak gerilimine bağlanabilir. Dahili devreler
, normal işletim şartlarında PIC’in yeniden
başlatılmasını sağlayacaklardır.
![]() |
Şekil-5-2 PIC İçin Gerekli Minimum Donanım
Bir sonraki
aşama harici reset bileşenlerinin ve gerekiyorsa gerilim düşüklüğünden kaynaklanabilecek reset korumasını
sağlanmasıdır. 100nF’lik bir dekuplaj kapasitörü PIC’ e olabildiğince yakın
olarak güç kaynağına bağlanmalıdır. Güç ve toprağı taşıyan bakır yollar mümkün
olduğunca geniş olmalıdır. Böylelikle
elektriksel gürültü sorununu en aza
indirgemeye yardımcı olacak bir
direnç düşüklüğü sağlanabilir.
5.3.1.Reset Devreleri :
Mikrokontrtolör sistemlerinde reset devreleri aşağıda sıralanan nedenlerden ötürü önemlidir :
- Program sayacı
,I/O ve kontrol yazmaçları
gibi belirli yazmaçlar için bilinen bir durumun varlığıundan emin olunmasını sağlar.
-
Saatin doğru
frekansa yerleşmesi için yeterli
zamanın verilmesine yardımcı olur.
-
Şebeke
geriliminde bir sorun varsa
,mikrokontrtolör nin düzgün olarak
yeniden başlayacağından emin olunmasının sağlar.
PIC
dahili Power On Reset
devrelerine sahiptir. Eğer PIC’i
besleyen güç kaynağı 0,05 V/ms’den
daha büyük bir oranda artarsa
dahili reset devreleri yeterli olacaktır (Kaynak geriliminin
0V’tan 5V ‘a kadar artması için
gereken süre 100ms ‘den küçük
olmalıdır).
Bazı
düşük frekanslı kristal osilatörler çalışmak için 18ms’den
fazlasının gereksinirler. Bu durumda ve
güç kaynağının yükselmesinin 100 ms’den uzun sürdüğü durumlarda
,harici bir RC reset devresi gerekebilir.
Şebeke geriliminin
inişli çıkışlı olabileceği veya
gerilim düşüklüğü olasılığı bulunduğu uygulamalarda ,
gerilim düşüklüğü durumunu
temiz bir reset’in izleyeceğinden emin olmak için extra reset devreleri eklenmesi gerekir.
![]() |
Şekil-5-3 Kesinti Koruma Devreleri ve Harici Reset Devreleri
Kusursuz kesinlikle bir
reset gerilim ayarı
gereken uygulamalarda ,Texas
Instruments TL7705 gibi bir cihaz
kullanılabilir. Bu cihaz, şebeke gerilimi
yeniden çalıştırma öncesinde
gerekli değerin altına düşerse
,gerilim düşüklüğü oluşumuna karşı koruma sağlayarak reset’ in gerçekleşmesine
çalışacaktır. Bu tip uygulamalar için tasarlanmış bir başka aygıt ,10-92 kılıflı Dallas
EconoReset ‘tir.
Not: 16C62X serisi
aygıtlar gerilim düşmesi veya güç
kesintisini algılayabilecek dahili
devrelere sahiptirler. Programın gerilim düşmesi veya güç kesintisinin
ardından kendini toplayabilmesi için
yazmaçta bu durumun belirtilmesi
gerekmektedir.
5.3.2. Osilatörler
PIC,
sayılı seçeneklerde kristal ve RC osilatörleri kabul eder.
16C5X PIC sonekleri :
-XT Kristal veya Seramik Rezonatör-genel amaçlı
–4 MHz
-RC Direnç / Kapasitör zaman sabitli – düşük
maliyet –4MHz
-HS Kristal veya Seramik Rezonatör
–yüksekhız-20MHz
-LP Kristal veya Seramik Rezonatör-asgari akım –40KHz
Yukarıdaki konfigürasyon lar için pencereli cihazlar-JW sonekleriyle
programlanabilirler.
16C5X ailesinin son sürümü artık
bir sayı ve kılıf tipinin izlediği A soneklerine sahiptir. A cihazlarının en
büyük farkı ,osilatör tipinin astın alma aşamasında değil, programlama
aşamasında seçilebilmesidir.
RC osilatör
tasarımın da direnç 5KW-100KW aralığında olmalıdır. 1MW gibi yüksek R değerleri osilatörü gürültü ,nem ve
sızıntıya duyarlı duruma
getirir. Nem ve sızıntıyı PCB ve
çevre birimleri üretir. 2,2KW ‘un altındaki R
değerleri kararsızlığa hatta osilasyon kaybına yol açabilir.
RC
osilatörünün kapasitans kısmı 20pF’den
büyük olmalıdır.
R ve C seçiminde
büyük ve yüksek değerli C ve R ‘den kaçınılmalıdır. C’nin sızıntısı ve R’nin
direnci frekans kararlılığını
etkileyebilir.
Eğer bir RC osilatör kullanıyorsanız, OSC2/ CLKOUT bacağında saat
frekansının ¼’ ü frekansta bir sinyal bulabilirsiniz. Bunu A/D dönüştürücülerini ve LCD sürücü yongalarını sürmek amacıyla devrelerinizde
kullanabilirsiniz.
![]() |
Şekil-5-4 PIC
Osilatör Devreleri
KAPASİTÖR SEÇİMİ (KRİSTAL OSİLATÖR İÇİN)
OSC
TYPE
|
FREQ
|
C 1
|
C 2
|
LP
|
32 KHz
|
15 pF
|
15 pF
|
XT
|
100 KHz
200 KHz
455 KHz
1 MHz
2 MHz
4 MHz
|
15-30 pF
15-30 pF
15-30 pF
15-30 pF
15 pF
15 pF
|
200-300
PF
100-200 pF
15 –100 pF
15
pF
15
pF
15 pF
|
HS
|
4 MHz
8 MHz
20 MHz
|
15
pF
15
pF
15 pF
|
15
pF
15
pF
15 pF
|
KAPASİTÖR SEÇİMİ (SERAMİK
RESONATÖR İÇİN)
Oscillatör Type
|
Resonatör
Frequancy
|
Capacitör Range C1 =C2
|
XT
|
455 KHz
2,0 MHz
4,0 MHz
|
150-300 pF
20-330 pF
20-330 pF
|
HS
|
8,0 MHz
|
20-230 pF
|
5.3.4. PIC’ lerde Kılıf Yapıları
PIC’ler
çeşitli kılıf tiplerinde ,hız ve
osilatör fonksiyonlarına sahip olarak
üretilmektedir. 16C5X gibi cihazlar standart DIL veya SO kılıfları
halinde bulunabilirler ve osilatör tipiyle satın alınırlar. PIC’lerde A
serisi (örneğin 16C54A)
çalışabildikleri maksimum hıza göre (-0,4 ;10 ,-20) satın alınırlar
ve osilatör tipi
seçimi programlama aşamasında yapılır. Bu kullanıcıya maliyette ve
envanter kontrolünde kolaylık sağlar.
5.3.5. Giriş / Çıkış Devresi
Bir PIC’e
arabirim oluşturabilecek en temel I/O devresi bir düğme veya bir LED olabilir.
Bu PIC’le denenecek ilk örnekler için asgari gereksinimdir.
PIC,LED’leri doğrudan
sürebileceği gibi ,portların bağlı olduğu her 25 mA’e kadar akım çekebilir veya
20mA’e kadar akım pompalayabilir.(En fazla port sayısı ve akım sınırları için
PIC veri tablolarına bakınız)Bu akım kapasiteleri PIC’lerin LCD ve mantık
devrelerinden , şehir şebekesine bağlı triyaklara kadar uzanan aygıtları
doğrudan sürebilmesini sağlar.
16Cxx
ailesinde, PORT B üzerinde zayıf bir yukarı çekme (pull up)olanağı vardır. Bu
OPTION yazmacında yer alır ve port B girdiler için kullanıldığında ortaya
çıkabilecek direnç ihtiyacını giderir.
16Cxx cihazlarında
T0CLK girdisi şeklinde fonksiyon gösteren ek bir PORT A(A4) bulunur. Bu girdi
olarak kullanıldığında bir Schmitt tetikleyicisi aracılığıyla tamponlanır.
Çıktı olarak ayarlandığındaysa , bacak açık kollektör durumundadır.
A4 bacağının çıktı olarak kullanılması
için , çıktı durumunda herhangi bir değişikliğin görülmesi gerektiğinden bir
akımın varolması şarttır. Bu bir yukarı çekme direnci formunda olabilir. Çıktı
açık kollektör olduğunda, bu bacağın mantığı tersine çevrilir-mantık1
transistörü açar ve bacağı mantık 0’a çeker. Bu bacak kaynak kapasitesine bağlı
değildir yalnızca akım çeker.
5.3.6. Şehir Şebeke Gerilimi:
Şehir
şebekesine doğrudan bağlanan devreler geliştirilirken daima bir
yalıtım transformatörü ve toprak
kaçak koruması kullanılmalıdır.
Şebekeyle arabirim
yapılanması iki yolla başarılabilir:
a)
Bir opto izolatörle
b)
Şebeke girişine
seri bağlı 4,7MW
dirençle
Her iki yöntemin de avantajları ve dezavantajları vardır.Opto ,özellikle son kullanıcının devrelere erişimi mümkün olduğunda güvenlik sağlar. Uygulamalar kullanıcıdan tamamen izole edilmiş olur. Öte
yandan ,0V geçiş algılanmasının (zero
crossing deetection) sağlanması için portlardan birine bağlanmış 4,7 MWdirenç ve kapasitif güç
kaynağıyla oluşturulmuş bir aydınlatma dimmeri, şebekeye doğrudan bağlanarak çalıştırılabilir.
5.3.7. Analog Girdiler :
16C71,C73,C74
PIC serileri dahili bir 8 bit’lik analogdan sayısala dönüştürücüye sahiptir.
A/D dönüştürücüsüne ulaşan bir gerilim ölçülür ve 256 seviyesinden birine
dönüştürülür. Gerilim A/D’nin ölçebilme eşiklerinin dışında kalırsa, giriş
geriliminin değişme aralığında bulunduğundan emin olmak için girişte seviye
ayarı yapmak gerekebilir.
Örneğin sensör 0-3V üretiyorsa
ve A/D’nin referansı 5V ise, sensör için en iyi çözünürlük 5/256=19.5 mV
olacaktır.
Diğer yandan, sensör 5V’a
çıkmışsa veya A/D referansı 3V’a dönüşmüşse, çözünürlük 11.7 mV’a düşer.
Gerilim çok yüksekse, A/D’ye
verilmeden önce düşürülmesi gerekir. En basit gerilim düşürücü, kaynağa yükleme yapmayan bir potansiyel
bölücü gibi davranan bir çift dirençtir.
Direnç
hesabı, A/D tarafından çekilen akım ihmal edilebilir olduğun düz oranla
yapılabilir. Ancak yüksek gerilimin bölücü ağlardaki dirençlerin ısınmasını
önlediğinden emin olmalısınız.
Örneğin 0-20 V’luk bir kaynağın 16C71’e sabit bir güç
kaynağının bir parçası olarak verilmesi gerekir. 20K’lık bir direnç zinciri 20
mW tüketecektir. Direnç zinciri bir 15 K ve bir 5K’dan oluşturulabilir ve
böylelikle PIC’e 05V’luk bir girdi ulaştırır.
Direnç toleransının telafi
edilmesi gereklidir. 5k’nin yerine 4K7 sabit dirence seri bağlanmış 1K’lık çok
turlu trimer direnç konabilir. 20V’luk bir referans 15K’lık direncin üstüne
uygulanır ve gerilim, trimmer ayarlanarak A/D girdisinde tam 5V’a ayarlanır.
Opamlar kullanılarak
sinyal güçlendirilebilir.
A/D ile bağlantılı olarak
uğraşılması gereken üç yazmaç vardır: ADCON0, ADCON1 ve ADRES. ADRES, A/D
dönüşüm süreci sonuçlarını tutan yazmaçtır.
EK 1
MİKROKONTROLÖR
TESTİ
Özel bir
uygulama için uygun mikrokontrolörün
seçilmesi , piyasada çok sayıda kontrolör ailesi ve bunların bir çok türevi bulunduğundan kullanıcı için pek kolay değildir. Buarad
verilecek bir takım kriterler ,
kullanıcıya , seçimde kolaylık sağlayacaktır.
Günümüzde mikrokontrolörler yarım düzineden fazla kriterlerle değerlendirilir ve sınıflandırılır. Bu kriterler arasına CPU‘nun performansı ,iç ve dış belleğin
büyüklüğü , iç çevre birimler ve onların
interrupt yetenekleri , güç tüketimi , kılıf, sunulan geliştirme desteği ,
fiyatı ve istenen miktarın temin edilebilmesi girmektedir. Bu özelikler
,yan taraftaki “Mikrokontrolörler için seçim kriterleri” adlı kutuda
ayrıntılı olarak
gösterilmektedir.
Elbette genel geçerli
performans verilerinin yanı sıra
gerçekleştirilecek uygulama da
seçimi etkiler. Burada birincil hedef daima , geliştirilecek sistemin beklentilerinin minimuma indirgenerek karşılanmasıdır. Mikrokontrolör
kullanımındaki şu anki eğilime bakılırsa
gittikçe 4 bitlik elemanların
yerini 8 bitliklerin aldığı
görülebilir. 8 bit mimarilerinin
avantajlarından biri ise hesap gücünün daha yüksek olmasıdır.
Böylece klasik kumanda görevlerinin yanı sıra kontrol
problemlerinin de çözülmesi mümkün olmuştur. Öte yandan da kullanıcı ,belleğin büyütülebilmesi ve uygun derleyicilerin bulunması sayesinde elemanı
yüksek seviyeli bir dille programlayabilme imkanına kavuşmuştur.
Kontrolörlerin Çarpma ve Bölme İşlemleri Aracılığıyla
Karşılaştırılması
Burada tamsayı
çarpma ve bölme işlemleriyle
bazı kontrolör ailelerinin hesap gücü karşılaştırılacak. Bunun için ilk önce ilgili kontrolörün
hangi işlemleri desteklediği
incelenmelidir. Ayrıca bazı
teknik özeliklerin de bilinmesi gerekir.
Nitekim bir de ilgili
işlemlerin süresi önem taşır.
Bu, osilatör frekansı , makine çevrimi
başına saat periyotları sayısı ve makine
komutu başına makine çevrimleri
sayısı gibi değerler üzerinden
hesaplanır.(“Tam sayı hesap gücünün
değerlendirilmesi” adlı kutuya
bakınız).
Tabloda birtakım 8 bitlik kontrolör
aileleri karşılaştırılmaktadır.
Bu tabloda osilatör frekansı ve makine çevrimleri sayısının
yanı sıra çeşitli komutların işlenmesi için kaç çevrim gerektiği de gösterilmektedir. Ayrıca donanım
olarak gerçekleştirilen çarpma ve bölme komutları
ve onların ilgili kontrolöre göre işlem süreleri de Tabloda verilmiştir. Bu sürelerin
verilen maksimum saat frekansında değil , tipik bir frekansta hesaplandığı
dikkate alınmalıdır , çünkü genelde bir
ailenin her türevi maksimum saat
frekansında çalışmaz.
Tamsayı
Hesap Gücünün Değerlendirilmesi
1-Donanım
aritmetik komutlarının analizi
Çarpma (8x8 ,
16x16) , bölme (8/8 , 16 /16) (ön işaretli / ön işaretsiz)
2- Komut işleme
süresinin hesaplanması
fos osilatör frekansı
Makine çevrim
sayısı(osilatör saatleri / makine çevrimi)
NCYCL
Komut çevrimi
sayısı (makine çevrimi / komut)
NINSTR
Komut
işleme süresi (t INSTR)
t INSTR =
NCYCL NINSTR
SGS Thomsan
‘un ST6 kontrolörleri ve Microchip’in
PIC16C5X ailesi daha çok alt
performans sınıfına girer. Bu
tipler donanım olarak bir çarpma
/bölme birimine sahip
değildir. Ama PIC16C5X ailesinin RISC
mimarisine benzer özelikleri nedeniyle
aritmetik işlemlerin süresi çok
kısadır. Verilen süreler çalışma
süresine göre optimize edilmiştir.
Kuşkusuz 8 bit alanındaki en yaygın aileler Intel’ in 8051 ve Motorola’ nın 68Hc11
kontrolörleridir. 8051 ailesinde yazılım aritmetiğinin işlem süresiyle ilgili değerlerde çalışma süresi
optimizasyonu söz konusu
değildir. Bu rutinler PIC kontrolörlerininkiyle
karşılaştırıldığında büyük bir fark
görülecektir. PIC’ lerin avantajı 20MHZ
saat frekansında 200ns kadar kısa bir makine çevrim süresine sahip
olmalarıdır. Ayrıca PIC CPU’ su
kütük-takım-makinesi(register-file-machine) olarak düzenlenmiştir.8051
kontrolörleri ise bir akümülatör CPU’ suyla
çalışır. Bu demektir ki 8051 ‘de örneğin bir toplama veya çıkarma
işleminin sonucu daima akümülatörde bulunur , PIC ‘te ise iç RAM
hücrelerinden herhangi biri hedef kütük olabilir. Gerçi 68HC11 ailesi çok güçlü bir 16/16 Bit bölme komutu sunuyor, ama bunun uzun işlem süresi interrupt yanıt
süresini olumsuz yönde etkiler.
Tabloya NEC
‘in görece yeni olan 78K/ 0 ailesi de
alındı. Bu özelikle düşük akım
çekişi ve özel iç çevre
birimleriyle dikkati çeken çok güçlü bir ailedir.
Bir kıyaslama yapmak amacıyla tabloda Siemens’in 16 Bitlik mikrokontrolörü SAB8XC166’ya da yer verildi. RISC’ e benzer
mimari özeliklerine sahip olan
(örneğin çok katlı bir pipelining)
bu eleman ,performans
açısından 32 bitlik
kontrolörlerle bile rekabet edebilir.
Ama yüksek saat frekanslarında hesap gücünün değerlendirilmesi 8 bitliklerde
olduğu kadar kolay değildir. Burada verilen değerler , yalnızca
iç kod belleği aracılığıyla
yapılan program işlemlerinde elde
edilen minimum komut işleme sürelerine
dayanmaktadır. Dış bellekle
çalışıldığında bu süreler ,
konfigüre edilen bellek arabirimine bağlı
olarak bir hayli uzayabilir.
Mikrokontrolörler İçin
Seçim Kriterleri
CPU’ nun
Performansı İç çevre
Birimlerinin İnterrupt
Yeteneği
Komut
dağarcığı(RISC/CISC)
Dış interruptlar
Adresleme türleri İnterrupt Tepki
Süresi
Veri yolu genişliği( 4...32 bit)
İç , Dış bellek (büyüklüğü) Güç
Tüketimi
Veri belleği olarak RAM, Akım
çekişi
EPROM Power Down modları
Program belleği olarak Statik Dizayn
ROM Sub Clock
FLASH , EPROM (OTP) Besleme gerilimi bölgesi
Sub Clock
Kılıf(DIP ,SDIP, SOIC, PLCC,
PQFP)
İç Çevre Birimleri Geliştirme
Desteği
Zamanlayıcı (Compare , Assembler Linker
Capture , PWM) Yüksek seviyeli dil(ANSI-C)
Seri arabirimler(UART ,USART
ROM –Monitörlü ,emülatörlü
, I2C ,SPI)
geliştirme kartı
A/D çevirici (8 veya 10 Bit) Gerçek zamanlı işletim sistemi
D/A çevirici
Watchdog
![]() |
Karşılaştırma Kütükleri İçin Formüller
Periyot süresi
=Yakalama değeri 2 –Yakalanan değeri 1
360 0
Karşılaştırma değeri 1
= Karşılaştırma açısı1 + Yakalama değeri 2
360
0
Karşılaştırma değeri 2
= Karşılaştırma açısı 2 rel + Yakalama değeri 2
Ayrıca
şunu da belirtmek gerekir ki hesap işleminin süresi sadece
o işlemin yerine getirilmesiyle
sınırlı değildir ,buna da bir giriş işlenenlerinin yüklenmesi ve sonuçların güvence altına alınması için gereken
süre de eklenmelidir. Bu süreler
ise uygulamaya bağlı olarak değişebilir. Burada
16 bitlik aktarma komutlarına
sahip olan 8 bitlik kontrolörler daha avantajlı durumdadır (örn: 68HC11 ,78K/0)
Bir başka kontrolör özeliği de aritmetik yardımcı
işlemcidir. Bir örnekse , hesap gücü bu şekilde 16 bitlik
kontrolörlere erişen Siemens’ in
8 bitlik kontrolörsi SAB80C537 dir. Ne var ki
burada hesap işleminin yerine getirilmesi bazı özel fonksiyon kütüklerinin (SFR) programlanma sırasına bağlıdır.
Dolayısıyla bu komut dizileri kesilemez.
Bu demektir ki programdaki “yardımcı işlemcinin SFR’ sinin yüklenmesi ve
işlemin yerine getirilmesi”
akışının yardımcı işlemciyi kendi hesap
işleri için kullanacak bir interrupt
servis rutini tarafından kesilmesi gerekir.
Uygulama Örneği :
Aşağıda aritmetik işlemlerdeki zaman sorununun gösterilmesi için yararlı olan bir uygulama örneği verilecektir.
Çizimde görüldüğü
gibi periyodik bir giriş işaretinden
(XE) iki çıkış
işareti (XA1 ve XA2)
üretilecek ve bunların açı bağıntısı değişken olacak , XE ,
maksimum devir sayısı 15000 devir/ dakika olabilen bir milden
alınacak. Bu görevin yerine getirilmesi
için Siemens ‘in SAB80C535
mikrokontrolör' ü uygun bulundu
,çünkü onun 2 numaralı zamanlayıcısı
(timer 2) ve özel karşılaştırma /
yakalama fonksiyonlarıyla (compare /
capture) darbe ölçümü ve darbe üretimi
için gereken donanım desteği sağlanmış oluyor. Bu iş için 2 numaralı zamanlayıcı ,500 Khz’
lik bir giriş saatiyle zaman
üreteci olarak kullanılır. Bir başka
zamanlayıcıda yakalama fonksiyonu için programlanır : bu kanal tahsis
edilmiş bir işlemci bacağında bir L-H
kenarı meydana geldiği zaman
aktüel zamanlayıcı değeri
özel bir Capture kütüğünde yakalanır ve bir interrupt çözülür. Ardından ilişkin interrupt servis rutininde (ISR) bu yakalanan
değer işlenebilir. Böylece art arda
gelen iki capture değeri arasındaki
farkın hesaplanmasıyla giriş
işaretinin periyot süresi kolayca
belirlenebilir. Çıkış işaretlerinin üretilmesi
için iki zamanlayıcı kanlı daha karşılaştırma moduna programlanır. Bu çalışma türünde kanallara tahsisi edilen karşılaştırma kütüklerinin içerikleri donanım yoluyla
zamanlayıcının sayma kütüğüyle
karşılaştırılır. Eşitlik
durumunda kontrolörün buna ayrılmış bir bacağında
programlı bir seviye değişimi
gerçekleştirilir ve bir interrupt
çözülür.
Burada bir de karşılaştırma kütükleri
için gerekli değerlerin gerçek zamanlı olarak hesaplanması sorunu
çıkıyor. “karşılaştırma kütükleri
için formüller” adlı kutuda gerekli matematiksel
bağıntılar verilmiştir. Periyot
süresi iki 16 bit yakalama değerinin
farkından elde edilir ve 16 bit
büyüklüğünde bir değer olabilir.
Açılar 0.5 derece kadar bir çözünürlükle işlendiğinden
onların veri genişliği 10 Bit
olur.
Dolayısıyla ikinci
denklemde bir 10x16 bit çarpma ve ardından bir 10 bit değerinde bölme işleminde 16 bitlik
bir sonuç elde edilir.
Ardından yapılan bir 16x16 Bit toplama işleminin sonucu ise 16 bitlik bir karşılaştırma değeridir. İkinci karşılaştırma değeri için
de aynı akış geçerlidir.
Maksimum devir
sayısında (15000 devir /dakika)
giriş işaretinin minimum periyot süresi 4 ms olur. Hesapların giriş işaretiyle
senkron yapılması gerektiğinden bunlar
devir sayısı işaretinin ISR’ sinde halledilir.
Hesaplar tablodaki yazılım aritmetik
rutinleriyle
gerçekleştirilmiştir. Devir
sayısı yakalama ISR’ sinin toplam
çalışma süresi olarak 2.5 ms kadar
bir süre ölçülmüştür. Bundan , söz konusu hesapların CPU ‘nun işlem kapasitesinin % 62
‘sini gerektirdiği anlaşılmaktadır.
İkinci bir işaretin üretilmesi
ise kontrolörün kapasitesini aşardı. Kontrolörün saat frekansının yükseltilmesi de çözüm değildir ,çünkü onunla birlikte zamanlayıcının giriş frekansı da yükselir. Gerçi daha yüksek giriş frekansında periyot süresi ölçümünün çözünürlüğü yükselir ,ama bununla birlikte
ölçülebilir en kısa periyot süresi
de artar( 12 MHZ saat frekansı ve 458 dev /dak kadar bir devir sayısında 0.131
ms)
Daha iyi bir çözüm ise
yazılımın , SAB80C535 ‘e
karşılık daha kapsamlı bir iç çevre birimlerine
sahip olan ve aritmetik yardımcı işlemcisiyle dikkatleri çeken SAB80C537 ‘ye taşınmasıdır. Bu nedenle karşılaştırma değerlerini hesaplama rutinleri SAB80C537 ‘nin imkanlarına uyarlandı. Sonuç
olarak yakalama ISR’ sinin çalışma süresi olarak (iki karşılaştırma değeri hesaplandığında ) 230 ms
ölçüldü.
EK 2
EEPROMLARIN
PROGRAMLANMASI
Genelde basit türden programlanabilir bellek elemanlarının hedef donanıma bağlanmaları için standart
arabirimleri vardır. Birkaç istisna dışında
bellek bölgesi genelde homojen
olduğundan programlama olaylarının
gerçekleştirilmesi için böyle bir
arabirim yeterlidir. Kumanda için OE ile
CS işaretleri ve çoğu zaman özel bir programlama gerilimi
bacağı (Vpp) kullanılır (şekil-1). Ayrıca bu elemanların uygulama alanı da basit ve standart bir programlama arabirimi gerektirir.
![]() |
Programlanabilir belleği olan mikrokontrolörlerde ise iş daha karmaşıktır. Burada CPU ile bellek arasındaki arabirimi olsa bile onun yapısı uygulama alanına ,
elemanın fonksiyon kapsamına ve elbette
yapımcının konseptine bağlıdır.
Şekil –1 Basit Bir
Programlanabilir Belleğin Standart Arabirimi. Bellek Bölgesi Homojen Olduğundan
Böyle Bir Arabirim Programlama İçin
Yeterlidir.
Motorola’da Standart Arabirim :
Motorola’ nın
MC68HC711 mikrokontrolörün’ de EPROM
birimi , kontrolör EPROM
bölgesi açısından standart bir bellek elemanı (örn :27256)
gibi programlanabilecek ve okunabilecek şekilde
düzenlenmiştir.(şekil-2). Burada
işaretlerin doğru sıralanması
için sadece pasif bir adaptör
gerekir. Saat işareti
gerekli değildir, erişme süreleri ve akım çekimi
ise standart bellek
elemanınkiyle aynıdır. Ama kontrolördeki EPROM belleğinin iç adres bölgesi D000H ile FFFFH arasındadır ,oysa bakılırsa
–programlama cihazından –EPROM için 0
...7FFFH adres bölgesi ayrılmış. Bu
çelişkinin çözülmesi için
programlama cihazının belirli ofset ve
bölge işlemleri sunması gerekir. Ayrıca MC68HC711 mikrokontrolörü , bu arabirim üzerinden
erişilemeyen bir EEPROM bölgesine de sahiptir.
![]() |
INTEL’
de Aktif
Parelel Arabirim :
8051
mikrokontrolörün’ de (Intel –Siemens, AMD)
şu yöntem seçildi ; Önceden belirlenmiş tolerans bölgesinde bir saat frekansı uygulanarak
iç yol fonksiyonları kumanda
edilir. Mikrokontrolörünün kendisi
ise aktif çalıştırılır. Kumanda
girişlerine( örn :RDY, EA , PSEN ,P1.0 v.b) uygulanan belirli
seviyelerle eleman programlama
moduna getirilir ve port bacakları iç adres ve veri yollarına bağlanır(şekil-3). EA
bağlantısı üzerinden de programlama gerilimi uygulanır. Programlama cihazı ise
serbest erişimle bellek hücrelerini okuyup programlayabilir. Ama paralel modda bir kaç
elemanın aynı anda programlanması gerektiğinde
(üretimde) ne yazık ki her zaman
belirlenmemiş olan özel işaret
kombinasyonları gerekir. Bazı 8051
versiyonlarında güvenlik
fonksiyonları tümleştirilmiştir. Örneğin
programlanmış belleğin okunmasını
engelleyen güvenlik bitleri
ve hata kontrolü sağlayan deşifre tabloları. Bu özel fonksiyonlar ise basit programlama cihazlarının standart fonksiyon kapsamını aşar. Bu özel
fonksiyonların çalıştırılabilmesi için
en azından kullanıcı arabiriminde gerekli düzenlemelerin yapılmış olması, elemanda ise özel kumanda işaretlerinin uygulanması gerekir.
![]() |
Şekil –3 8051 ailesinde kumanda işaretleriyle programlama modu seçildikten sonra port bağlantıları iç veri ve adres yoluna bağlanmış olur.
SIEMENS’
te Kütük Arabirimi :
Siemens’in
SAB88C166(16-bit)ve SAB80C512( 8051 varyasyonu) mikrokontrolörlerinde programlama arabirimi (şekil-4) şu şekilde düzenlenmiştir. Programlama modunda
port bağlantıları üzerinden ,gerekli
bilgilerin (adresler, bölgeler, veriler) yazıldığı ve işlemlerin sonuçlarının bulunduğu iç
kütüklere erişebilir. Asıl okuma ve programlama olayı elemanın içinde gerçekleşir. Programlama cihazı açısından bu yöntem daha
karmaşık değil ,ama farklı.
![]() |
Şekil- 4 8051 ‘in Siemens versiyonu olan 80C512 ‘de programlama içte yapılır. Programlama cihazı , C512’ yi programlama moduna getirmek için kontrolörnin belir li kütüklerine verilir.
68HCXX
mikrokontrolör ailesinin tam
servisten yararlanmadan salt programlanması için yapımcı, özel
devreler kullanılmasını öneriyor. Bunları ya kullanıcın kendisi hazırlaması ya da bu devrelerin
bulunduğu bir geliştirme kiti astın
alması gerekiyor. Bu devrelerde ,iç
belleği kullanılacak master EEPROM ‘un içeriğiyle besleyen
sabit olarak programlanmış bir yazılımı aktifleştirilir. (şekil-5).
Geliştirmede zahmetli olan ve
üretimde gerekli kalite güvencesini sağlamayan (çünkü elemanın okunarak kontrol edilmesi mümkün değil) bir
yöntem.
Buna karşılık
PGS53 vePGS67 ertec sistemleri
eksiksiz bir yöntem sunuyor: gerçi
biraz zahmetli , ama kullanıcı
bunu fark etmiyor ; üstelik bu
sistem tüm özel fonksiyonlarla
donatılmış. Burada programlama cihazıyla yükleyici üzerinden elemana
seri olarak bir program yüklenir ve orada başlatılır. Bu servis rutini sadece
programlama cihazıyla iletişimi
sürdürmek ve elemandaki programlama fonksiyonlarını kumanda etmek için kullanılır. İletişim ya seri ya da
hızı yükseltmek amacıyla port
bağlantıları üzerinden paralel yapılabilir.
O zaman örneğin MC68HC711 elemanının EEPROM bölgesi de okunup programlanabilir. Ayrıca güvenlik bitleri
ve konfigürasyon kütüklerinin
aktifleştirilmesi de mümkündür.
Bir başka
sorun da mikrokontrolör içindeki belleklerin
homojen bir yapıya sahip
olmamasıdır. Ama bu sorun , programlama
cihazının kullanıcı arabirimindeki
ofset ve bölge operatörleriyle
çözülebilir. Ne yazık ki kullanılan
yazılım çeviricileri bu tür
elemanların içeriğini eksiksiz ve
çelişkisiz gösteren – ki bu üretim için
gereklidir. –kod dosyaları sağlamıyor.
Burada programlama cihazı yapımcıları
tarafından verilmesi gereken
dönüştürme araçları yardımcı olur.
Ayrıca
MC68HC11F1’de ,yükleyici üzerinden de
dıştan erişilmeyen bir EPROM
hücresi ( konfigürasyon kütüğü ) vardır. Ama elemanın tüm
davranışları (örn: memory-mapping) bu
hücre üzerinden belirlendiği için bu hücrenin içeriğini mutlaka –en azından üretimde-erişilebilmelidir. Burada da yüksek
performanslı programlama cihazları bir çıkar yol sunuyor :Elemana ,zamanlama
spesifikasyonlarına uyarak bir dış kod
belleği bağlanır ve ardından aktif dış veri yolu üzerinden konfigürasyon
kütüğünün içeriği okunur.
![]() |
Şekil-5 Karmaşık : 8HC11 mikrokontrolör bir
master-EPROM üzerinden programlanır. EPROM
içeriğinin kontrol amacıyla
okunması mümkün değildir. Kalite güvencesi açısından kötü. İyi
programlama cihazlarıyla bu dezavantajlar giderilebilir. Yükleyici üzerinden mikrokontrolöre , programlama
olaylarını kumanda eden bir servis rutini yüklenir.
PIC’ lerde Mantıksal Arabirim :
![]() |
Microchip firmasının PIC mikrokontrolörlerinin programlama arabirimi basittir , ama programlama cihazından birtakım zeki fonksiyonlar bekler(şekil-6) : Elemanın kendi içindeki bazı kütükler dış programlama ve okuma erişimlerini kumanda eder. Ama bu kütüklerin hepsine dıştan erişilemez. Örneğin adres kütüğü sadece silinebilir ve saatle saydırılabilir. İç bellek hücrelerine erişilmesi için bu kütüğün kontrollü olarak çok kez saatlenmesi gerekir.
Şekil 6 -Gerçi
PIC ailesinin programlama arabirimi
basit , ama programlama cihazının
zeki olması gerekir. Dış okuma /
yazma erişimlerini kumanda eden her
kütüğe dıştan erişilemez.
Sözü
edilen mikrokontrolörde erişim ne kadar karmaşık
ve değişik olursa olsun ; Bu
kullanıcıdan gizli kalmalıdır.
Kullanıcının beklentileri şunlardır : Bütün iç EPROM ve EEPROM hücrelerine
serbest ve parametrelenebilir şekilde
erişmek. Bu standart fonksiyonlara
ek olarak konfigürasyon ve güvenlik kütüklerine
yazma ve kontrol amacıyla okuma için yöntemlerde bulunmalıdır. Özelikle üretim alanında proseslerin daha fazla
otomatikleştirilmesi için cihaz
fonksiyonlarının kullanıcı için sadece
inter aktif olarak değil , açık ve kesin belirlenmiş komutlar üzerinden de
başlatılabilmesinde yarar vardır.
O zaman işçilerin de kullanabileceği
projeye özel yığın işlemlerinin
hazırlanması da mümkün olur.
Örneğin
ertec GmbH ‘nın geliştirme için PGS53 ve üretim için PGS67 (şekil –7) programlama sistemlerinde , özellikle yukarıda
belirtilen son beklentiyi
karşılayan bir komut dili
kullanılmaktadır. Burada bir elemanın programlama sı için gereken
çağrı şu şekilde yapılır.
PGS67
w –emc68hc11f1_ee -fproject.rel
Bu çağrı
Motorola nın MC68HC11F1 mikrokontrolörsinin
EEPROM bölgesini PROJECT.REL
dosyasındaki verilerle programlar. Bu
Motorola-S formatlı doya tüm EPROM bölgesini kesin olarak
tanımlarsa başka ofset veya uzunluk bilgileri verilmesi gerekmez.
İkinci bir çağrıyla da
PGS67
c –emc68hc11f1_ee -fproject.hex
Programlamanın sonucu bir kez
daha kaynak dosyayla karşılaştırılır.
Ancak bu şekilde programlamanın kesin olarak doğru yapıldığı kanıtlanabilir. Konfigürasyon kütüğünün yazılması ise şu
şekilde yapılır.
PGS67 #3,0x1f
-emc68hc11f1_ee
Bir özel fonksiyon olan #3 ,ardından gelen hexadesimal sayıyı
kütüğe yazar ve içeriğini geri bildirir.
Gerçi bu programlama sistemleri için Windows versiyonları da
vardır, ama fonksiyon dizilerinin toplu
işlem dosyaları içinde işlenmesi oldukça
etkili ve her zaman
tekrarlanabilir bir çalışma yöntemi teşkil etmektedir. Hata kodlarının ve onunla kumanda edilen
çalışma akışlarının değerlendirilmesi nedeniyle böyle bir kumanda dili ,
üretime uygun programlama için
idealdir. Programlama görevi kesin olarak tanımlandıktan sonra
cihazı, üretimde çalışan elemanlar da
basit çağrılarla ( yanlış kullanma tehlikesi çok az ) kullanılabilir.
İster basit bellek elemanı, ister karmaşık mikrokontrolör, ister basit kod
programlaması veya elemana özel
fonksiyonlar olsun kullanıcı için hepsi
bir.
KAYNAKLAR
1-
Mikroişlemciler ve 8051 Ailesi(Donanım Programa Ve
Uygulamalar) , Dr.Haluk
Gümüşkaya
2-
ELO, Elektronik
Dergisi , Sayı-92 –S.54-57
3-
ELO, Elektronik
Dergisi , Sayı-92 –S.58-60
4-
PIC Programlama El Kitabı
5-
MCS51 Microcontroller Family User’s Manuel , Intel ,1994
6-
The 8051 Family
Of Microcontroller, Richard H. Barnett , Prentice Hall ,1995 (164 Sayfa)
7-
Applications Notes For 80C51 –Based 8-Bit Microcontroller, Intel













Hiç yorum yok:
Yorum Gönder