8051 (TEZ) - Fikir Elektronik Teknik

Transkript

8051 (TEZ) - Fikir Elektronik Teknik
1
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)
3- Giriş/ Çıkış(I/O) Birimleri
2- Hafıza (Memory)
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.
2
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
genel amaçlı
uygulamalarının yapısı , mikrokontrolör , onun arkadaşı olan
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.
3
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.
4
Ş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ı
5
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-3 Ortak Adres ve Data Yolunun Program Kodu Okunması Sırasındaki
Zamanlaması
Ş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
6
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;
Interrupt-0 :
Timer -0:
Interrupt-1:
Timer-1:
RI+TI:
Vektör Adres
0003H
000BH
0013H
001BH
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.
7
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.
8
Ş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.
9
Şekil-2-7 Portların Giriş/Çıkış Durum Özellikleri
Şekil-2-8 İki yönlü Çıkış Yapısı
10
Ş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ı
11
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
MOV A ,<src>
MOV <dest>, A
MOV <dest> ,<src>
MOV DPTR, #data16
PUSH <src>
POP <dest>
XCH A , <byte>
XCHD A ,@Ri
A = <src>
<dest> =A
<dest>=<src>
DPTR =16-bit ivedi sabit
INC SP : MOV @SP , <src>
MOV<dest> , @SP : DEC SP
ACC <byte>
ACC @Ri (Düşük 4-bit)
Dir
*
*
*
Adresleme modları
Ind
Reg
Imm
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Tablo-2-1 :Dahili Veri Hafıza Alanına Veri Transfer Komutları
Adres genişliği
8- bit
8- bit
16- bit
16- bit
Gösterim
MOVX A, @Ri
MOVX @Ri, A
MOVX A, @DPTR
MOVX @DPTR ,A
İşlem
Harici RAM @Ri ‘ yi oku
Harici RAM @Ri ‘ yi yaz
Harici RAM @DPTR‘ yi oku
Harici RAM @DPTR‘ a yaz
Tablo-2-2 :Harici Veri Hafıza Alanına Erişen Veri Transfer Komutları
12
Gösterim
MOVC A, @A+DPTR
MOVC A, @A+ PC
İşlem
Prog. Hafıza @(A+DPTR)Hücresini Oku
Prog. Hafıza @ (A+PC ) Hücresini Oku
Tablo-2-3 : Tablo Okuma Komutları
Gösterim
ADD A , <byte>
ADDC A ,<byte>
SUBB A ,<byte>
INC A
INC <byte>
INC DPTR
DEC A
DEC
MUL AB
DIV AB
DIV A
İşlem
A =A +<byte>
A =A +<byte> +C
A =A -<byte>- C
A =A +1
<byte> =<byte>+1
DPTR =DPTR +1
A=A-1
<byte>=<byte> -1
B:A =BxA
A =Int (A/B)
B= Mod (A/B)
Ondalık Ayar
Adresleme modları
Dir
Ind
Reg
Imm
*
*
*
*
*
*
*
*
*
*
*
*
Sak. Özel (sadece ACC)
*
*
*
Sak. Özel (sadece DPTR)
Sak. Özel (sadece ACC)
*
*
*
Sak. Özel (sadece ACC ve B)
Sak. Özel (sadece ACC ve B)
Sak. Özel (sadece ACC)
Tablo-2-4: Aritmetik Komutlar
Gösterim
ANL A,<byte>
ANL <byte> ,A
ANL <byte>, #data
ORL A, <byte>
ORL <byte>, A
ORL <byte>, #data
XRL A, <byte>
XRL <byte>, A
XRL <byte>, #data
CLR A
CPL A
RL A
RLC A
RR A
RRC A
SWAP A
İşlem
A = A AND<byte>
<byte> = <byte> AND A
<byte> = <byte> AND #data
A=A OR <byte>
<byte> = <byte> OR A
<byte> = <byte> OR #data
A= A XOR <byte>
<byte> = <byte> XOR A
<byte> = <byte> XOR #data
A =00H
A=NOT A
ACC’ yi bir –bit sola döndür.
Sola CY üzerinden.
ACC’ yi bir-bit sağa döndür:
Sağa CY üzerinden döndür.
ACC’ deki iki 4 –bit ‘i değiştir.
Tablo-2-5 :Byte Tabanlı Lojik Komutlar
Adresleme modları
Dir
Ind
Reg
Imm
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Sak. Özel (ACC)
Sak. Özel (ACC)
Sak. Özel (ACC)
Sak. Özel (ACC)
Sak. Özel (ACC)
Sak. Özel (ACC)
Sak. Özel (ACC)
13
Gösterim
ANL C, bit
ANL C, /bit
ORL C, bit
ORL C, /bit
CLR C
CLR bit
CPL bit
SETB C
SETB bit
İşlem
C bayrağını adreslenen bit ile AND ‘le
C bayrağını adreslenen bit in tersi ile AND‘ le
C bayrağını adreslenen bir ile OR‘ la
C bayrağını temizle
Adreslenen bit ’i temizle
C bayrağını tersle
Adreslenen bit’ i tersle
C bayrağını 1 ‘le
Adreslenen bit’ i 1’ le
Tablo-2-6 : Bit Tabanlı Lojik Komutlar
Gösterim
SJMP <rel data>
AJMP <Address 11>
LJMP<Address 16>
LJMP @ A + DPTR
Açıklama
(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.
(Absolute Jump- Mutlak Dallanma) Operand 11bit bir adres olup Program Hafızanın o anki 2
Kbyte’ lık alanı içine karşı gelir.
(Long Jump – Uzun Dallanma) Operand 16- bit
bir adres olup Program Hafızanın 64 Kbyte‘ lik
alanı içinde bir yere karşı gelir.
(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
ACALL<address 11>
(Absolute Call)
LCALL<address 16>
(Long Call)
RET
(Return)
RETI
(Return from Interrupt)
Açıklama
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.
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.
Yığından ,PC olarak alınacak değer okunur.
Yığından PC olarak alınacak değer okunur ve
kesme donanımı sıfırlanır.
Tablo-2-8 : CALL ev RET komutları
14
Gösterim
JZ<rel add>
(jump if ACC zero)
JNZ<rel add>
(jump if ACC Notzero)
JC<rel add>
(jump if carry is set)
JNC<rel add>
(Jump if Carry not set)
JB<bit>, < rel add>
(jump if Bit set)
JNB <bit>, < rel add>
(jump if Bit not set)
JBC <bit>, < rel add>
(jump if Bit set and Clear bit)
CJNE A, direct, <rel add>
(Compare and Jump if not equal)
CJNE A, # data , <rel add>
(Compare and Jump if not equal)
CJNE Rn, # data ,< rel data>
(Compare and Jump if not equal)
CJNE @Ri ,# data, < rel add >
(Compare and Jump if not equal)
DJNZ Rn, <rel add>
(Decrement and Jump if not Zero)
DJNZ direct ,< rel add>
(Decrement and Jump if not Zero)
Açıklama
Eğer ACC sıfır ise , 2’ nin tümleyeni olan byte
operand PC’ye eklenir.
Eğer ACC sıfır değil ise , 2’ nin tümleyeni olan
byte operand PC’ye eklenir.
Eğer elde bayrağı 1 ise , 2’ nin tümleyeni olan
byte operand PC’ye eklenir.
Eğer elde bayrağı 1değil ise , 2’ nin tümleyeni
olan byte operand PC’ye eklenir.
Eğer ilk operand (adreslenen bit) 1 ise , 2’ nin
tümleyeni olan ikinci byte operand PC’ye eklenir.
Eğer ilk operand (adreslenen bit) 1 değil ise , 2’
nin tümleyeni olan ikinci byte operand PC’ye
eklenir.
Eğer ilk operand (adreslenen bit) 1 ise , 2’ nin
tümleyeni olan ikinci byte operand PC’ye eklenir.
Komuttan sonra bit temizlenir.
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.
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.
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.
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.
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.
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ı
15
Gösterim
ACALL<address 11>
(Absolute Call)
LCALL<address 16>
(Long Call)
RET
(Return)
RETI
(Return from Interrupt)
Açıklama
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.
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.
Yığından ,PC olarak alınacak değer okunur.
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
PC
: Akümülatör
: Program Counter
direct
: Dahili RAM bölgesinden, bit-adreslenebilir hafıza ve SFR’ lar dahil alana erişen 8bit 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.
16
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
ET1
lsb
INTERRUPT ENABLE (IE) REGISTER
msb
-
-
ES
EX1
ET0
EX0
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.
msb
-
-
PS
PT1
lsb
INTERRUPT PRIORITY (IP) REGISTER
PX1
PT0
PX0
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
17
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
msb
C/T
TIMER-1
M1
M0
GATE
lsb
C/T
M1
M0
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.
18
M1 M0
0 0
İşlem Modu
(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
msb
lsb
TIMER/COUNTER CONTROL (TCON) REGISTER
IE0
IT0
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.
19
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
msb
-
-
-
GF1
GF0
PD
IDL
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
20
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
21
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.
22
BACAK NO
1
2
3
4
ORTAK İSİM
TxD
RxD
RTS
RS232C İSMİ
AA
BA
BB
CA
5
CTS
CB
6
7
8
DSR
GND
CD
CC
AB
CF
9
10
11
12
SCF
13
SCB
14
SBA
15
DB
16
17
SBB
DD
18
19
20
SCA
DTR
CD
21
CG
22
23
CE
CH/CI
24
DA
25
Tablo-2-11- RS-232 Bacak Bağlantıları Tablosu
TANIM
Koruma toprağı
Gönderilen data
Alınan data
Gönderme için
istek
Gönderme için
serbest
Veri kümesi hazır
Sinyal toprağı
Alınan hat sinyal
algılayıcı
Veri kümesi testi
için ayrılmış
Tanımlanmamış
İkincil alınan hat
sinyali algılayıcı
İkincil gönderme
serbest
İkincil gönderme
veri
İletim sinyal
elemanı
zayıflaması (DCE)
İkincil alınan veri
Alıcı sinyal
elemanı
zayıflaması (DC)
Tanımlanmamış
İkincil gönd.içn
istek
Veri terminali
hazır
Sinyal kalitesi
algılayıcı
Halka gösterge
Veri sinyali hızı
seçici(DTE/ DCE)
İletken sinyal
elemanı
zayıflaması
Tanımlanmamış
23
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
msb
SM1
SM2
REN
TB8
RB8
lsb
SERİ PORT KONTROL (SCON) REGİSTER
TI
RI
24
SM0 SM1
0 0 0
0 1 1
1 0 2
1 1 3
mode
Baud Rate
Fosc/12
Değişken
Fosc/32 yada Fosc/64
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.
25
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
Mode-0
Max
:1.67MHz
Mode-2
Max : 625
kHz
Mode-1,3
Max : 104.2
kHz
19.2k
9.6k
4.8k
2.4k
1.2k
137.5
110
110
OSC_freq
(MHz)
20
SMOD
X
C/T
c=1,t=0
X
Mode
X
Reload
value
X
20.00
1
X
X
X
20.00
1
0
2
FFh
11.059
11.059
11.059
11.059
11.059
11.986
6.00
12.00
1
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
2
2
2
2
2
2
2
1
FDh
FDh
FAh
F4h
E8h
1Dh
72h
FEEBh
{
Timer-1 için
}
26
Ö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
COM2
COM3
COM4
00000:00400H
00000:00402H
00000:00404H
00000:00406H
03F8H
02F8H
0378H
0278H
Bu portların kullanımı için bazı registerlerin bulunması ve bunların gerekli
değerlere setlenmeleri gereklidir. Bu registerler ;
27
1.
2.
3.
4.
5.
6.
7.
Data Register
Interrupt Enable Register
Interrupt Identification Register
Data Format Register
Serial Control Register
Serial Status Register
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
msb
Data
Bit6
Data
Bit5
Data
Bit4
Data
Bit3
lsb
Data
Bit2
Data
Bit1
Data
Bit0
Bit3
Bit2
Bit1
Bit0
Bit2
Bit1
Bit0
Bit2
Bit1
Bit0
2.Interrupt Enable Register:
Bit7
Bit6
Bit5
Bit4
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
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
28
Bit0-1:Veri uzunluğu:
00
01
10
11
5bit
6bit
7bit
8bit
Bit2:Durdurma biti sayısı:
0
1
1bit
2bit
Bit3:Parity var/yok:
0
1
OFF
ON
Bit4:Parity tek/çift:
0
1
Tek
Çift
Bit5 : Stick parity
Bit6 : Set Break
Bit7 : Bölücüye erişim biti: 0
1
Diğer kütükler
Bölücü
5.Serial Control Register:
Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0
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
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.
29
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ı ;
30
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));
31
{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);
32
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
33
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('-');
34
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;
');
');
');
');
');
');
');
');
35
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);
');
36
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);
37
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.
38
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ı
39
,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
MOV
CALL
SETB
SETB
SETB
2200H
DPTR ,# MESAJ
PSTRING
IE. 7
IE. 0
TCON. 0
LOOP:
MOV DPTR , #OLCU1
CALL PSTRING
CLR
START
SETB START
CLR C
;ADC ‘nin çalıştığı
;ekrana yazılır.
;Kesmeler aktif.
;INTO aktif.
;INTO düşen kenarda aktif.
;ekranda görünecek mesaj
; gönderilir.
; ADC ‘nin çevrime başlaması için
; START=0 yapılır.
; Sonra START =1 yapılır
;Ç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
CALL PSTRING
; Ekranda görünecek mesaj
; gönderilir.
JMP
; Bir sonraki çevrim için başa dönülür.
LOOP
***************************************************************
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.
40
ORG
2000h
INTSERVIS :
CLR
MOV
SETB
SETB
RD
A, P1
RD
C
; Verinin okunması için RD=0 yapılır.
; P1’deki sayısal çevirim değeri A’ya alınır.
;Veri okunduktan sonra RD=1 yapılır.
; 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
41
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
42
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
43
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ı
44
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ı
45
Ş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.
46
;DENEME PROGRAMI 1
;YAZAN:CUNEYT URGUN
;TARİH:14-3-1997/CUMA
;8051 CPU'NUN P1 PORTUNDAN YAKLAŞIK OLARAK (KRİSTALE BAĞLI)1025 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
47
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.
48
Şekil-4-5 6264 RAM' ın Bacak Yapısı
Şekil-4-6 Birinci RAM' ın Devreye Eklenmesi
49
;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 şekil4.7.'de gösterilmiştir.
50
Ş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.
51
;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.
52
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
53
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:
54
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.
55
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)
DTE
DCE
DCE
DTE
Ş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
RxD(2)
PC
1488
+5V
TxD(3)
1489
Şekil-4-10. PC ile 8051'in Yüzleştirilmesi
TxD(11)
8031
RxD(10)
56
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 µs’ 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
1µA dan küçük bir değere sahip
bekleme (standby) akımı çeker.
57
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.
58
Şekil-5-1 Temel PIC Blok Diyagramı
External Interrupts
Interrupt Sources
I/O
Voltage Range (Volts)
_
2
Yes
4
13
3.0to 6.0 35
16- pin DIP ,16-pin SOIC ,2
_
_
2
Yes
4
13
3.0to 6.0 35
16- pin DIP ,16-pin SOIC ,2
PIC16C622
PIC16C611
PIC16C641
20
20
20
2K
1K
2K
_
_
_
_
_
_
128
36
128
_
_
_
PIC16C651
20
4K
_
_
192
_
PIC16C711
20
1K
_
_
36
_
TMR0
TMR0
TMR0
TMR1
TMR2
TMR0
TMR1
TMR2
TMR0
PIC16C731
20
4K
_
_
192
_
PIC16C741
20
4K
_
_
192
_
PIC16C841
20
_
_
_
36
_
Package
Comperators
_
_
Number of Instructions
Analog to Digital Convertor(8- bit)
_
TMR0 _
Serial Port(s) (SPI /I2C ,SCI )
TMR0 _
_
Capture /Compare /PWM Module
_
80
Timer Module(s)
80
_
Data EEPROM (bytes)
_
_
Data Memory (bytes)
_
1K
EEPROM
512
20
ROM
20
PIC16C621
EPROM
PIC16C620
Maxımum frequancyof Operation
Parallel Slave Port
59
_
_
1
_
_
SPI/
I2C
_ _
_ _
Y _
es
2
_
_
Yes
Yes
Yes
4
3
8
13
13
13
3.0to 6.0 35
3.0to 6.0 35
3.0to 6.0 35
16- pin DIP ,16-pin SOIC ,2
16- pin DIP ,16-pin SOIC
40- pin DIP,44-pin PLCC ,4
2
Y _
es
_
Yes
11
13
3.0to 6.0 35
40- pin DIP,44-pin PLCC ,4
_
SPI/
I2C
SCI
_
_
4ch
_
Yes
4
13
3.0to 6.0 35
18- pin DIP ,18-pin SOIC
TMR0 2
TMR1
TMR2
TMR0 2
TMR1
TMR2
TMR0 _
SPI/
I2C
SCI
SPI/
I2C
SCI
_
_
5ch
_
Yes
11
13
3.0to 6.0 35
28- pin DIP ,28-pin SOIC
Y 8ch
es
_
Yes
12
13
3.0to 6.0 35
40- pin DIP,44-pin PLCC ,4
_
_
Yes
4
13
2.0to 6.0 35
18- pin DIP ,18-pin SOIC
_
60
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.
61
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
62
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ç 5KΩ-100KΩ aralığında olmalıdır. 1MΩ 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,2KΩ ‘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.
63
Şekil-5-4 PIC Osilatör Devreleri
KAPASİTÖR SEÇİMİ (KRİSTAL OSİLATÖR İÇİN)
OSC TYPE
FREQ
C1
LP
32 KHz
100 KHz
200 KHz
455 KHz
1 MHz
2 MHz
4 MHz
4 MHz
8 MHz
20 MHz
XT
HS
15 pF
15-30 pF
15-30 pF
15-30 pF
15-30 pF
15 pF
15 pF
15 pF
15 pF
15 pF
C2
15 pF
200-300
PF
100-200 pF
15 –100 pF
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
XT
HS
Resonatör Frequancy
Capacitör Range C1 =C2
455 KHz
2,0 MHz
4,0 MHz
8,0 MHz
150-300 pF
20-330 pF
20-330 pF
20-230 pF
64
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 çevrilirmantı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,7MΩ 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 MΩdirenç ve
kapasitif güç kaynağıyla oluşturulmuş bir aydınlatma dimmeri, şebekeye doğrudan
bağlanarak çalıştırılabilir.
65
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.
66
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
67
frekansta hesaplandığı dikkate alınmalıdır , çünkü genelde
maksimum saat frekansında çalışmaz.
bir ailenin
her türevi
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
fosz
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
68
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ı
Komut dağarcığı(RISC/CISC)
Adresleme türleri
Veri yolu genişliği( 4...32 bit)
İç , Dış bellek (büyüklüğü)
Veri belleği olarak RAM,
EPROM
Program belleği olarak
ROM
FLASH , EPROM (OTP)
İç Çevre Birimleri
Zamanlayıcı (Compare ,
Capture , PWM)
Seri arabirimler(UART ,USART
, I2C ,SPI)
A/D çevirici (8 veya 10 Bit)
D/A çevirici
Watchdog
Paralel portlar
İç çevre Birimlerinin İnterrupt
Yeteneği
Dış interruptlar
İnterrupt Tepki Süresi
Güç Tüketimi
Akım çekişi
Power Down modları
Statik Dizayn
Sub Clock
Besleme gerilimi bölgesi
Sub Clock
Kılıf(DIP ,SDIP, SOIC, PLCC,
PQFP)
Geliştirme Desteği
Assembler Linker
Yüksek seviyeli dil(ANSI-C)
ROM –Monitörlü ,emülatörlü
geliştirme kartı
Gerçek zamanlı işletim sistemi
69
Karşılaştırma Kütükleri İçin Formüller
Periyot süresi =Yakalama değeri 2 –Yakalanan değeri 1
Karşılaştırma değeri 1 rel = Karşılaştırma Açısı 1. Periyot süresi
360 0
Karşılaştırma değeri 1 = Karşılaştırma açısı1 + Yakalama değeri 2
Karşılaştırma değeri 2 rel = Karşılaştırma Açısı 2 .Periyot süresi
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.
70
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 µs ölçüldü.
71
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
72
işlemleri sunması gerekir. Ayrıca MC68HC711 mikrokontrolörü , bu arabirim
üzerinden erişilemeyen bir EEPROM bölgesine de sahiptir.
Şekil 2 – Motorola 68HC711 ‘de iç EPROM bölgesine standart bir elemanda olduğu
gibi erişilebilir. Dıştan bir saat işareti uygulanması gerekmez. Ama programlama
cihazının ofset bölge işlemleri yapabilmesi gerekir ,çünkü iç ve dış adresler farklıdır.
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.
73
Ş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.
74
Motorola’ da Yükleyici Arabirimi :
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: memorymapping) 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.
75
Ş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.
76
“Eşitleyici”Olan Bir Programlama Cihazı :
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.
77
KAYNAKLAR
1- Mikroişlemciler ve 8051
Dr.Haluk Gümüşkaya
Ailesi(Donanım
Programa
Ve
Uygulamalar)
,
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

Benzer belgeler