14 Mart 2014 Cuma

8051 MİKROKONTROLLER

  

BÖLÜM I

GİRİŞ




Günümüzde mikroişlemci  kelimesi  pek çok insan için  yabancı olmayıp herkese fraklı anlam ifade eder. Teknik  olmayan pek çok kişi , mikroişlemcinin , bir kişisel bilgisayarda (PC) kullanılan , bilgisayarını gücünü  belirleyen çok önemli bir elektronik tümdevre olduğunu  bilir. PC‘lerden başlayıp ,diz üstü PC’ler, minibilgisayarlara kadar bütün bilgisayarlar, mikroişlemcinin görevini gerçekleştiren , daha genel bir ifadeyle ,bir işlemciye  sahiptir. Bilgisayarlardaki  işlemciler , 1950’lerden  günümüze  çok değişik şekiller almıştır. Günümüzde tipik bir bilgisayar üç ana birimden  oluşur :

1- Merkezi İşlem Birimi(Central Processing Unit-CPU)    
2- Hafıza (Memory)               
3- Giriş/ Çıkış(I/O) Birimleri

CPU ,bilgisayarın değişik  birimleri
  arasındaki  veri akışı ve veri işleme görevlerini  yerine getirir. Veri işlemenin çoğu,  CPU içindeki aritmetik lojik birimde  gerçekleştirilir. CPU çeşitli  komutları yürüterek , bilgisayar sisteminin çalışmasını yönetir. Bilgisayar  hafızasında saklı olan komutlar, bilgisayarın yürüteceği programı oluşturur. Bir CPU‘ daki kontrol alt birimi, sistemdeki veri akışını yönetir, hafızadan  okunan komutu çözer ve komut  tarafından belirlenen  işlemi yerine getirir. İşlemler ,veri transferi veya ALU’ daki işlemlerdir. ALU  , toplama ,çıkarma .çarpma ,bölme gibi temel  aritmetik işlemler ve lojik işlemleri yerine getirir. Lojik işlemler, AND, OR ve EX-OR gibi  işlemlerdir.

Dış dünyadan CPU’ ya  veri transfer eden  alt birim giriş cihazıdır.  Giriş verisi, bir insan ,diğer bir bilgisayar veya  başka bir elektronik sistem gibi  çok değişik kaynaklardan  gelebilir. CPU  tarafından işlenen veri , hemen  çıkışa  gönderilebilir veya  daha sonra işlenmek üzere   hafızada saklanır. CPU’ dan dış dünyaya veri transfer  eden alt birim  çıkış cihazıdır. Bu birim ile, göstergeler,  yazıcılar ,diğer bilgisayarlara veya elektronik  sistemlere veri transfer eden cihazları belirtmektedir.
1971 yılında , bir bilgisayarın ALU ile kontrol  birimlerinin  bir silikon tümdevresi üzerine , INTEL firması tarafından  konulması ile , mikroişlemciler dönemi  başlamıştır.
Basit bir teknik tanım ile , mikroişlemci,  yarı iletken  tek bir tümdevre  üzerine  yerleştirilmiş CPU'’ya denir. Mikroişlemciler  genel amaçlı  cihazlar olup  bir çok uygulama için uygundur. Bir mikroişlemci temel olarak  CPU’ nun fonksiyonlarını  yerine getirdiği için ,pek çok kere , CPU ile mikroişlemci  eş anlamda  kullanılmaktadır.
Bir bilgisayarın CPU’ su   baskı devre kartında bulunuyorsa , bilgisayar , minibilgisayar diye adlandırılır. Bir mikroişlemci etrafına kurulu bilgisayar, mikrobilgisayar diye adlandırılır. Bir mikrobilgisayarın mikroişlemcisi, I/O ve hafıza cihazları ,teknolojiye ve uygulamalara göre devamlın değişim göstermektedir. Teknolojinin gelişimi  doğrultusunda , daha önce mikroişlemci tümdevresi üzerinde  olmayıp dışarıda olan , pek çok giriş/ çıkış ve hafıza alt birimleri, CPU üzerine taşınmıştır.
                       
Mikrokontrolör , bir tümdevre üzerinde  üretilen bilgisayara denir. Bir mikrokontrolör tümdevresinde  bulunan  hafıza ve giriş/ çıkış alt sistemleri, bu işlemcilerin bir çok uygulama  içinde , gömülü olarak doğrudan ve tek başına , mikroişlemcilere göre çok daha basit ve ucuz arabirim teknikleriyle , kontrol amaçlı   olarak kullanılmalarını  sağlar. Günümüzde mikroişlemciler ev mikrokontrolörler teknolojinin vazgeçilmez  birimleri olup , sayısız alanlarda  kullanılmaktadır. Bugün ,mikroişlemci ve mikrokontrolör üreten pek çok firma  bulunmaktadır. Bunların en önemlileri  INTEL ve MOTOROLA firmalarıdır.

Bir mikrokontrolör, özet olarak , kullanıldığı sistemin bir çok özeliğini aynı anda  gözleme (monitoring) ,ihtiyaç anında gerçek zamanda cevap verme (real-time response) ve sistemi   denetlemeden (control) sorumludur.

Mikrokontrolörler , örneğin , otomobillerde motor kontrol, elektrik ve iç panel kontrol ;  kameralarda , ışık ve odaklama kontrol  gibi amaçlarla kullanılmaktadır. Bilgisayarlar , telefon ve modem gibi  çeşitli haberleşme cihazları ,CD teknolojisi , fotokopi ve faks cihazları , radyo, TV,teyp,oyuncaklar, özel amaçlı elektronik  kartlar ve sayılamayacak kadar pek çok alanda , mikrokontrolörler yoğun olarak  kullanılmaktadırlar. Bu kadar  geniş uygulamalarda  kullanılan mikrokontrolörler , tümdevre –üzerinde  yer alan çok  değişik donanım  özelikleri sunmaktadır. Bu özeliklerden bazıları şunlardır :

Paralel ve Seri I/O portları ,zamanlayıcı / sayıcılar, ADC, ve RAM, ROM, EPROM ve  EEPROM gibi değişik kapasitelerde  ve özeliklerde  hafıza birimleri.

Mikrokontrolörlerin  yoğun olarak kullanıldığı  elektronik  ve kontrol uygulamalarının yapısı , mikrokontrolör , onun arkadaşı olan  genel amaçlı mikroişlemciden ayırmaktadır.  Bu uygulamalarda gerçek zaman (real time) işlemi ve çok görevlilik( multi-tasking )  özeliği bulunur. Gerçek zamanda işleme , kontrolörün , sinyalleri çalışma ortamından  hazır olduklarında alıp  ortamı bekletmeden işleyebilmesi demektir. Benzeri şekilde ,kontrolör ihtiyaç anında  çalışma  ortamına  ,gereken kontrol sinyallerini  göndermeli ve ortamı bekletmeyecek  tarzda hızlı olmalıdır. Diğer bir deyişle mikrokontrolör , sistemin çalışmasında sınırlayıcı  etmen olmamalıdır. Çok görevlilik, bir çok görevi aynı anda  veya aynı anda gibi  yapabilme kapasitesidir.













                                                           BÖLÜM  II

8051

2.1  8051 MİKROKONTROLÖR AİLESİ

           

       8051 Intel firması tarafından , 1980 ‘lerin başında piyasaya sunulan , dünyanın en popüler  8-bit mikrokontrolörüdür. Bu mikrokontrolör için ,  başta Intel olmak üzere , pek çok üretici firma (Philips , Dallas, Siemens ,Oki ve Matra/Harris gibi) geniş bir donanım ve yazılım desteği sunmuş ve bunun neticesi, 8051, 1980‘lerden  bugüne , bir endüstri standardı  olmuştur.

      8051 ailesi bazen  MCS-51  ailesi olarak da belirtilir.  “ MCS” harfleri, geleneksel olarak , Intel firmasının üretmiş olduğu , bir sistemi veya  CPU ‘lar , hafızalar, saat üreteçleri, giriş/ çıkış birimleri ve benzeri birimler içeren , mikrobilgisayar ve uyumlu parçaları (components) belirtmede kullanılmıştır. Kitapta 8051 ve MCS-51 ifadeleri , eş anlamlı olarak  aynı  aileyi belirtmek için kullanılmıştır ve genelde ,bir işlemciyi belirtmeyip  ailenin ismi olarak kullanılmaktadır.  Bununla beraber , 8051, MCS-51  ailesinin  ilk üyelerinden olan , 8051, 8751 ve  8031 mikrokontrolörlerinden  birinin de adıdır. Bugün için değişik mikrokontrolör aileleri arasında ,8051 ailesi, gelişmiş ürünleriyle beraber yaklaşık  % 40 gibi bir piyasa  payına sahiptir. 8051 ailesinin temel özelikleri aşağıda  maddeler halinde  özetlenmektedir:

Popüler :  Kolay bir şekilde bulunmakta ve desteklenmektedir. 8051 geliştiricileri için bir çok Internet  Web sayfası , kitaplar , teknik dökümanlar , yazılım ve donanım gereçleri bulunmaktadır.

Uygun, Hızlı ve güçlü : 8051  çekirdek mimarisi hedef kontrol uygulamalar  için  çok uygun olup hızlı ve güçlüdür.

Geniş  yelpaze ve uyumluluk : Çok değişik 8051  ürünleri  olmasına karşın , ikili kod düzeyinde bütün ürünler uyumludur (compatible). Diğer  mikrokontrolör aileleri , 8051 ‘in sunmuş  olduklarını  , farklı ve uyumsuz işlemcilerle (genellikle tek  üretici firma kaynaklı olarak ) ancak sağlayabilmektedir. Bu uyumluluk , kolaylık  ve esneklik , program geliştirme araçlarında , eğitiminde  ve yazılım desteğinde  de bulunmaktadır.

Çok kaynaklılık : Günümüzde çok değişik  8051 işlemcisi üreten 12 üreticinin üzerinde firma bulunmakta ve sayısız  yazılım ve bilgi kaynakları  bulunmaktadır.

Sürekli  iyileştirme:  1980‘lerden bugüne silikon ve tasarım olarak  sürekli geliştirilen 8051’ler hızını  ve gücünü  arttırmıştır.  Günümüzde  16-bit  modellerinin de bulunduğu  8051’ler değişik kapasite , boyutlarda ve fiyatlarda  kolay bir şekilde temin edilebilmektedir.

Şekil-2-1  8051  Mikrokontrolör Blok Diyagramı

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

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




Şekil-2-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 vermeye çalışır. Eğer harici INT0 kullanımda değilse servis rutini genel Program Bellek' i okumaya ve icra etmeye devam eder.

İnterrupt servis bölümleri 8 Byte' lık aralarla yerleştirilmişlerdir.

                                               Örneğin;                                     Vektör Adres
                                               Interrupt-0 :                                       0003H
                                               Timer -0:                                            000BH
                                               Interrupt-1:                                        0013H
                                               Timer-1:                                             001BH
                                               RI+TI:                                                0023H 'dir.


Program Bellek'in (ROM) , harici ROM veya dahili ROM' dan hangisinin seçileceği chip üzerindeki EA (External Access) bacağının durumuna bağlıdır. Eğer  EA bacağı +5V potansiyeline çekilirse program direk olarak dahili ROM'un 0000H ile 0FFFH adreslerinden çağrılır. Eğer program 1000H ile FFFFH adreslerinden çağırılıyorsa harici ROM kullanıldığı anlaşılır. EA bacağı toprak potansiyelinde ise tüm program harici ROM(EPROM) 'dan direk olarak çağrılır. ROM' suz versiyonlarda(8031-80C31) program' ın harici Program Bellek alanından çağrılması için EA bacağı toprak potansiyeline çekilmelidir 

            Harici program icrası için donanım konfigürasyonu şekil-2-5' de gösterilmiştir.

Şekil-2-5.  CPU-EPROM ve Latch ile Harici Program Kodunun Okunması İçin Gerekli Donanım

Burada P0 ve P2 (16-bit I/O hattı) external Program Bellek' ten programı getirmek için bum fonksiyonlarını yerine getirmek görevini üstlenmişlerdir. P0 (PORT-0) adres ve data hattının çoğullanmasından oluşmuştur. Böylece CPU' nun bacak sayısı azaltılabilmiştir. Bu çoğullama  işleminden adres ve data hatlarını birbirinden ayırma işlemi CPU' dan çıkan ALE (ADDRESS LATCH ENABLE) bacağı sayesinde olmaktadır.

Dahili Data Bellek alanı 3 bellek bloğuna bölünmüştür ve bunlar 128 Byte' n altı,üstü ve SFR (Special Function Register) olarak bilinir. Dahili Data Bellek adresleri her zaman 1Byte'lıktır. Bu yüzden bu adres alanı yalnızca 256 Byte' ı ima eder. Kuramsal olarak Data Bellek alanı 384 Byte olarak farz edilir. Bu bellek'in 7FH'dan üstüne, direk adresleme ve indirek adresleme yöntemleri ile iki farklı bellek alanına erişilir. Kuramsal olarak kabul edilen bu bellek alanından fiziksel olarak 256 Byte' ından faydalanılır. 80H ile FFH adresleri arasındaki bellek alanı SFR, 00H ile 7FH adresleri arasındaki bellek alanı ise Dahili Kullanılabilir RAM olarak adlandırılır.

Dahili RAM' n 128 Byte' lık alt kısmına direk ve indirek adresleme ile ulaşılabilir. Dahili RAM 4 Register Bankı (yığını) (Bank0'dan Bank3'e) ve bu bankların her biri 8 registerden oluşan kullanışlı bir bellek alanıdır. Bu bankların seçimi SFR içindeki PSW (Program Status Word)'deki RS0 veRS1 (Register Selection bits) bitlerinin durumuna göre belirlenir.

            SFR kısmına ise sadece direk adresleme ile ulaşılabilir. Dahili RAM' ın 128 Byte' lık üst kısmında, komut takımı komutları ile, 128 Byte direk olarak adreslenebilir. SFR ; port adresleri, timer , status ve kontrol bitlerini, akümülatör , stack pointer vs gibi kaydedicileri (register) içerir. Buradaki register' lara yukarıda da değinildiği gibi yalnız direk adresleme ile erişilebilir. SFR' nin içindeki 60 adres alanı hem byte hem de bit bit adreslenebilir. Bitleri adreslenebilen SFR alanlarının adreslerinin sonu 0H ya da 8H değerindedir.

Tüm bunların yanı sıra 8051 MCU' da;

·      2 adet 16 bitlik timer/event (zaman/olay) sayıcı
·      Full dublex seri giriş/çıkış ara yüzü
·      Boolean işlemler yapabilme
·      Entegre üzerinde dahili osilatör
·      İki öncelikli bölüm ile 5 interrupt kaynağı yapısı
·      Çarpma,bölme,çıkarma ve karşılaştırma emirleri
·      3.5MHz-15MHz arası saat frekansı
·      128 Byte stack genişliği özellikleri de vardır.


8051 CPU' nun bacak bağlantı yapısı şekil-2-6' da verilmiştir. Burada bulunan 4  port' un da ortak özellikleri çıkışlarının latch' lanmış , iki yönlü dahili pull-up' lıdır. Yani bir sonraki bilgi gelene kadar önceki bilgiyi portta tutar.













Şekil- 2-6 8051 Mikrokontrolör Bacak Bağlantıları



            RST bacağı yüksekte iken ve osilatör çalışıyorken iki makine periyodu için CPU resetlenir. Sistem çalışıyorken RST pini 0V potansiyelinde ve reset anında +5V potansiyelinde olması gerekmektedir. Eğer sürekli olarak +5V seviyesinde ise CPU sürekli resetleniyor ve herhangi bir program icra edemiyor demektir.
RxD ve TxD pinleri seri iletişim için data alma ve data gönderme işlevini yerine getirir.
Şekil 2.6. 8051 Bacak  Yapısı

            INT0 veINT1 pinleri harici interrupt giriş uçlarıdır.
            T0 ve T1 pinleri zamanlayıcı harici giriş uçlarıdır.


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




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




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



Şekil-2-10. Push-Pull Çıkış Yapısı


XTALL1 veXTALL2 pinleri ise CPU' nun dahili osilatörüne bağlı bacaklardır. Hem harici uygun frekanslı kristal bağlayarak hem de harici osilatör kullanarak CPU çalıştırılabilir.


Şekil-2-11 Saat İşaretinin Üretilmesi İçin Kristal veya Harici Saat Kullanımı

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


Şekil-2-12.  Power-ON Reset Devresi



2.1. 8051 Komut  Kümesi


8051  komut kümesi üçe ayrılır. Bunlar ; veri transfer komutları , veri işleme komutları ev program akışı kontrol komutlarıdır.


Gösterim                                          İşlem
Adresleme modları
Dir
Ind
Reg
Imm
MOV  A ,<src>
  A = <src>
*
*
*
*
MOV <dest>, A
  <dest> =A
*
*
*

MOV <dest> ,<src>
 <dest>=<src>
*
*
*
*
MOV DPTR, #data16
 DPTR =16-bit ivedi sabit



*
PUSH  <src>
 INC SP : MOV @SP , <src>
*



POP     <dest>
 MOV<dest> , @SP : DEC  SP
*



XCH  A , <byte>
 ACC ó <byte>
*
*
*

XCHD  A ,@Ri
 ACC ó @Ri (Düşük 4-bit)

*



Tablo-2-1 :Dahili Veri Hafıza  Alanına  Veri  Transfer  Komutları


Adres genişliği
Gösterim
İşlem
8- bit
MOVX A, @Ri
Harici RAM @Ri ‘ yi oku
8- bit
MOVX @Ri, A
Harici RAM @Ri ‘ yi yaz
16- bit
MOVX A, @DPTR
Harici RAM @DPTR‘ yi oku
16- bit
MOVX  @DPTR ,A
Harici RAM @DPTR‘ a yaz

Tablo-2-2 :Harici Veri Hafıza Alanına Erişen Veri Transfer  Komutları





Gösterim
İşlem
MOVC  A, @A+DPTR
Prog. Hafıza @(A+DPTR)Hücresini Oku
MOVC  A, @A+ PC
Prog. Hafıza @ (A+PC )   Hücresini Oku

Tablo-2-3 : Tablo Okuma Komutları


Gösterim                                 İşlem
Adresleme modları
Dir
Ind
Reg
Imm
ADD  A , <byte>
A =A +<byte>
*
*
*
*
ADDC  A ,<byte>
A =A +<byte> +C
*
*
*
*
SUBB A ,<byte>
A =A -<byte>- C
*
*
*
*
INC  A
A =A +1
Sak. Özel (sadece ACC)
INC  <byte>
<byte> =<byte>+1
*
*
*
        
INC DPTR
DPTR =DPTR +1
Sak. Özel (sadece DPTR)
DEC  A
A=A-1
Sak. Özel (sadece ACC)
DEC
<byte>=<byte> -1
*
*
*

MUL  AB
B:A =BxA
Sak. Özel (sadece ACC ve B)
DIV  AB
A =Int (A/B)
 B= Mod (A/B)
Sak. Özel (sadece ACC ve B)
Sak. Özel (sadece ACC)
DIV  A
 Ondalık Ayar


Tablo-2-4: Aritmetik Komutlar

Gösterim                                    İşlem
Adresleme modları
Dir
Ind  
Reg
Imm
ANL  A,<byte>
A = A  AND<byte>
*
*
*
*
ANL <byte> ,A
<byte> = <byte> AND A
*



ANL <byte>, #data
<byte> = <byte> AND  #data
*



ORL  A, <byte>
A=A OR <byte>
*
*
*
*
ORL <byte>, A
<byte> = <byte> OR A
*



ORL <byte>, #data
<byte> = <byte>  OR  #data
*



 XRL  A, <byte>
A= A  XOR  <byte>
*
*
*
*
XRL <byte>, A
<byte> = <byte> XOR A
*



XRL <byte>, #data
<byte> = <byte> XOR #data
*



CLR  A
A =00H
Sak. Özel (ACC)
CPL  A
A=NOT A
Sak. Özel (ACC)
RL   A
ACC’ yi bir –bit sola döndür.
Sak. Özel (ACC)
RLC  A
Sola CY üzerinden.
Sak. Özel (ACC)
RR   A
ACC’ yi bir-bit sağa döndür:
Sak. Özel (ACC)
RRC  A
Sağa CY üzerinden  döndür.
Sak. Özel (ACC)
SWAP A
ACC’ deki iki 4 –bit ‘i değiştir.
Sak. Özel (ACC)

Tablo-2-5 :Byte Tabanlı Lojik Komutlar








Gösterim
İşlem
ANL  C, bit
C bayrağını adreslenen  bit ile AND ‘le
ANL  C,  /bit
C bayrağını adreslenen  bit in tersi ile AND‘ le
ORL  C, bit
C bayrağını adreslenen  bir ile OR‘ la
ORL  C, /bit
C bayrağını temizle
CLR  C
Adreslenen bit ’i  temizle
CLR bit
C bayrağını tersle
CPL bit
Adreslenen bit’ i tersle
SETB C
 C bayrağını 1 ‘le
SETB bit
Adreslenen  bit’ i  1’ le


 Tablo-2-6 : Bit Tabanlı Lojik Komutlar


Gösterim  
Açıklama
SJMP <rel data>
(Short Jump –Kısa dallanma )operand 2-nin tümleyeni tek bir byte olup değeri  PC’ ye eklenir. Bir sonraki komut, 127 byte  ileri veya 128 byte gerideki bir komut  olacaktır.
AJMP <Address 11>
 (Absolute Jump- Mutlak Dallanma) Operand 11- bit bir adres olup  Program Hafızanın o anki 2 Kbyte’ lık alanı içine karşı gelir.
LJMP<Address 16>
(Long Jump – Uzun Dallanma) Operand  16- bit bir adres  olup  Program Hafızanın 64 Kbyte‘ lik alanı içinde  bir yere karşı gelir.
LJMP @ A + DPTR
(Long Jump – Uzun Dallanma) Yürütülecek bir  sonraki komutun  adresi ,ACC ile DPTR ‘ın toplamıdır.


Tablo-2-7 : Durumdan Bağımsız Dallanma Komutları






Gösterim
 Açıklama
ACALL<address 11>
(Absolute Call)
PC yığın hafızaya atılır ,11-bit  adres PC’ye yerleştirilir.11-bit adres ile ,Program Hafızada 2K byte’ lık  bir alan içinde dallanma gerçekleşir.
LCALL<address 16>
(Long Call)
PC yığın hafızaya atılır ,16-bit  adres PC’ye yerleştirilir.16-bit adres ile ,Program Hafızada 64K byte’ lık  bir alan içinde dallanma gerçekleşir.
RET
(Return)
Yığından ,PC olarak  alınacak değer okunur.
RETI
(Return from Interrupt)
Yığından  PC olarak alınacak değer okunur ve  kesme  donanımı sıfırlanır.

Tablo-2-8 : CALL ev RET komutları


Gösterim
Açıklama
JZ<rel add>
(jump if  ACC zero)
Eğer ACC sıfır ise , 2’ nin tümleyeni  olan byte operand PC’ye eklenir.
JNZ<rel add>
(jump if  ACC Notzero)
Eğer ACC sıfır değil  ise , 2’ nin tümleyeni  olan byte operand PC’ye eklenir.
JC<rel add>
(jump if carry is set)
Eğer elde bayrağı 1 ise , 2’ nin tümleyeni  olan byte operand PC’ye eklenir.
JNC<rel add>
(Jump if  Carry not set)
Eğer elde bayrağı 1değil ise , 2’ nin tümleyeni  olan byte operand PC’ye eklenir.
JB<bit>, < rel add>
(jump if Bit set)
Eğer ilk operand (adreslenen bit) 1 ise , 2’ nin tümleyeni  olan ikinci byte operand PC’ye eklenir.
JNB <bit>, < rel add>
(jump if Bit not set)
Eğer ilk operand (adreslenen bit) 1 değil ise , 2’ nin tümleyeni  olan ikinci byte operand PC’ye eklenir.
JBC <bit>, < rel add>
 (jump  if Bit  set and Clear bit)
Eğer ilk operand (adreslenen bit) 1 ise , 2’ nin tümleyeni  olan ikinci byte operand PC’ye eklenir. Komuttan sonra bit temizlenir.
CJNE A, direct,   <rel add>
(Compare and Jump if not equal)
Birinci operand ACC ; ikinci bir dahili  saklayıcı ; ve üçüncü , göreceli adres. Eğer ACC ‘nin içeriği saklayıcıdan farklı ise, 2’ nin tümleyeni  olan üçüncü byte  operand PC ‘ye eklenir.
CJNE A, # data , <rel add>
(Compare and Jump if not equal)
Birinci operand ACC ; ikinci, bir sabit ; ve üçüncü , göreceli adres. Eğer ACC ‘nin içeriği sabitden farklı ise, 2’ nin tümleyeni  olan üçüncü byte  operand PC ‘ye eklenir.
CJNE Rn, # data ,< rel data>
(Compare and Jump if not equal)
Birinci operand  Rn ;ikinci operand ,bir sabit; ve üçüncü göreceli adres. Eğer Rn’ nin içeriği  sabitten farklı ise 2‘ nin tümleyeni  olan üçüncü  byte operand PC’ye eklenir.
CJNE @Ri ,# data, < rel add >
(Compare and Jump if not equal)
Birinci operand  Ri ile işaretli byte; ikinci  ,bir sabit ; ve üçüncü göreceli adres. Eğer @Ri’ nin içeriği  sabitten farklı ise 2‘ nin tümleyeni  olan üçüncü  byte operand PC’ye eklenir.
DJNZ Rn, <rel add>
(Decrement and Jump if not Zero)
Birinci operand Rn ;ikinic ,göreceli  adres. Eğer azaltılan Rn  içeriği sıfırdan farklı ise, 2’nin tümleyeni  olan  üçüncü  byte  operand PC’ ye eklenir.
DJNZ direct  ,< rel add>
(Decrement and Jump if not Zero)
Birinci operand bir dahili saklayıcı; ikinci  göreceli adres. Eğer azaltılan saklayıcının içeriği  sıfırdan farklı ise , 2‘ nin tümleyeni  olan üçüncü  byte operand PC’ye eklenir.


Tablo2-9 : Duruma Bağımlı  Dallanma Komutları







Gösterim
 Açıklama
ACALL<address 11>
(Absolute Call)
PC yığın hafızaya atılır ,11-bit  adres PC’ye yerleştirilir.11-bit adres ile ,Program Hafızada 2K byte’ lık  bir alan içinde dallanma gerçekleşir.
LCALL<address 16>
(Long Call)
PC yığın hafızaya atılır ,16-bit  adres PC’ye yerleştirilir.16-bit adres ile ,Program Hafızada 64K byte’ lık  bir alan içinde dallanma gerçekleşir.
RET
(Return)
Yığından ,PC olarak  alınacak değer okunur.
RETI
(Return from Interrupt)
Yığından  PC olarak alınacak değer okunur ve  kesme  donanımı sıfırlanır.

Tablo2-10 : CALL ve RET komutları


2.1.1. Adresleme  Modlarındaki Gösterim :


Adresleme modlarında kullanılan gösterim aşağıda verilmektedir :


Rn          : Aktif  saklayıcı kümesindeki  8 saklayıcıdan biri.

ACC       : Akümülatör

PC          : Program Counter

direct     : Dahili  RAM bölgesinden, bit-adreslenebilir hafıza ve SFR’ lar dahil alana erişen  8-bit adres.

@Ri        : Saklayıcı-dolaylı adresleme modunu gösterir. Aktif saklayıcı kümesinden  sadece R0 ve R1          bu modda kullanılabilir. Ri dahili RAM bölgesinden , bit-adreslenebilir hafıza ve SFR’ lar    dahil , 8-bit bir adres içerir.

# data     : İvedi adreslemede kullanılan  8-bit bir sabit ,yani komutun içindeki veri.

addr16   : 64 K program Hafıza  içinde herhangi bir yere işaret eden  iki byte adres.

addr11   : Program Hafızada 2K’lık blok içinde, herhangi bir yere işaret eden 11-bit adres.

rel          :Göreceli  dallanmada   kullanılan ,ikinin tümleyeni  ofset adres. Bu adres  ile program akışı , PC yi takip eden  öndeki –128 byte ve sonraki  127 byte‘ lık  bir alan  içinde, dallanabilir.

bit           : Bit adreslenebilir RAM veya SFR’ ın 8-bit adresi.
                                   
reg         : Saklayıcı adresleme modu.

dir          : Doğrudan (direct ) adresleme.

ind          : Saklayıcı-dolaylı( register-indirect) adresleme modu.

imm        : İvedi (immediate) adresleme  modu.

            2.2.1.   8051 Interrupt Yapısı


ROM' suz ve EPROM' lu versiyonlarda CPU' lar 5 interrupt kaynağına sahiptir. Bunlar; 2 harici interrupt, 2 timer interrupt ve seri port interrupt' ıdır.

            İnterrupt yetkileri: Interrupt kaynakları SFR içindeki IE registerinin bitleri set/reset (1/0) yapılarak yetkili veya yetkisiz kılınabilir.

       EA
      -
    -
      ES
     ET1
    EX1
     ET0
     EX0
msb                                                                                                               lsb
                        INTERRUPT ENABLE (IE) REGISTER

EA  : Tüm interrupt' ları yetkisizleştirebilir. Eğer EA=0 ise interrupt' lar yetkisizdir ve EA=1 ise diğer interrupt bitleri set/reset' lenerek interrupt' lar yetkili/yetkisiz yapılabilir.
ES   :  Seri port interrupt yetki biti
ET1 : Timer1 taşma interrupt yetki biti
EX1 : INT1 bacağından gelen interrupt yetki biti
ET0 : Timer0 taşma interrupt yetki biti
EX0 : INT0 bacağından gelen interrupt yetki biti

Interrupt Öncelikleri: Interrupt öncelikleri SFR içindeki IP registerinin programlanması ile belirlenebilir.

      -
      - 
     -
      PS
    PT1
    PX1
    PT0
    PX0
msb                                                                                                               lsb
                        INTERRUPT PRIORITY (IP) REGISTER
                       
PS    : Seri port interrupt' ı öncelik kontrol biti. 0 ise düşük ,1 ise yüksek öncelikli.
PT1  : Timer1 Int. öncelik kontrol biti
PX1 : INT1 bacağı Int. öncelik kontrol biti
PT0 : Timer0 Int. öncelik kontrol biti
PX0 : INT0 bacağı Int. öncelik kontrol biti

Eğer farklı önceliklere sahip iki interrupt isteği eşzamanlı alındığında istek yüksek öncelikliye servis verilecektir. Eğer öncelikleri yazılımla tanımamışsak CPU kendi belirlediği interrupt öncelik sırasına göre hizmet verir. Buna göre en yüksek öncelikliden en düşük öncelikliye göre sıralanmış interrupt kaynakları  şöyledir;


·      IE0
·      TF0
·      IE1
·      TF1
·      RI ya da TI .


            İnterrupt yetki bayrakları setlenmiş interrupt alındığında LCALL emiri ile belirtilen adrese atlanılır ve gerekli servis programı çalıştırılır. LCALL emirinden önce programın kesildiği yeri belirten PC (Program Counter)'nin içeriği otomatik olarak stack' e itilir ve işlem bitirildikten sonra tekrar otomatik olarak yüklenir. Eğer istenilen register' ların stack bellek' e itilmesi isteniyorsa bu işlem programcı tarafından yapılmalıdır. Örneğin ;

            PUSH IE
            MOV IE,#MASK
            CALL LABEL
            -------------------------
            POP IE
            RET
LABEL:
            RETI                                     

gibi...

 

2.2.2. Zamanlayıcı ve  Sayıcı  Yapısı  (Timer / Counters)


8051 iki 16 bitlik Timers/Counters registeri içerir. Bunlar  Timer0 ve Timer1'dir.Her ikisi de zamanlayıcı ya da olay sayıcı olarak konfigüre edilebilir.
Timer (Zamanlayıcı) işlevinde , register her makine saykılın da bir arttırılır. Bir makine saykılı ise 12 osilatör periyoduna eşittir. Böylece sayma hızı (count rate) 1/12 osilatör frekansına eşitlenir.
Counter (Olay sayıcı) işlevinde ise register harici giriş bacağı yerini tutan T0 veT1'deki her 1'den 0'a geçişte bir arttırılır.

            Timer0 ve Timer1 dört işlem moduna sahiptir. Zamanlayıcı ya da 'Olay sayıcı' işlevlerinin seçimi SFR' deki TMOD register' inin içindeki C/T kontrol biti ile sağlanır. Her iki zamanlayıcı TMOD içindeki M1-M0 bit çiftlerinin sayesinde  dört işlem moduna sahip olur

 GATE
  C/T
     M1
     M0
 GATE
  C/T
     M1
     M0
msb                                                                                                               lsb
                      TIMER-1                                                     TIMER-0

            TIMER/COUNTER MODE CONTROL (TMOD) REGISTER

            GATE: Kapı Kontrol Setlendiği zaman sadece INTX bacağı yüksek ve TRX kontrol biti 1 ise yetkili olur. Sıfırlandığı zaman, TRX kontrol biti 1 olduğunda Timer/Counter yetkilidir.

            C/T: Zamanlayıcı veya Sayıcı seçici Zamanlama işlevinde resetlenir  Sayma işlevinde setlenir.





            M1      M0                  İşlem Modu
0   0                      (Mode 0) MCS-48 ile aynı zamanlayıcı özelliğinde TLX 5                                                                         bitlik ön ölçeklendirici gibi servis verir.

0     1                    (Mode 1) 16 bit zamanlayıcı. TLX ve THX kaskat bağlıdır. Ön                                         ölçeklendirici yoktur.           
             
   1     0              (Mode 2) 8 bitlik otomatik yeniden        yüklemeli   Timer/Counter.
           
1      1                    (Mode 3) TL0 , standart Timer0 kontrol       bitlerinin kontrol ettiği bir
Timer/ Counter. TH0 , Timer1 kontrol bitlerinin                                                                   kontrol ettiği 8 bitlik bir zamanlayıcıdır.

     1     1                     Timer1  Timer/Counter durdurulmuştur.


Mode-0 : Mode 0 'da 8051 timer aynen 8048 Timer' ın yerine konulabilir yani aynı özellikler gösterir. 8 bitlik sayıcı ve 5 bitlik ön ölçeklendirici.

Bu modda zamanlama registeri 13 bit'e ayarlanabilir. 1'den 0'a geçişler sayılır ve Timer interrupt bayrağı olan TF1 setlenir. TR1=1 ve GATE=0 ya da INT1=1  gerçeklenirse sayılmış giriş yetkilidir. TR1 kontrol biti SFR' deki TCON 'da bulunur. GATE ise TMOD 'da bulunur.

Mode-1: Mode 0 ile aynıdır,tek farkı Timer registerinin 16 bit olmasıdır.

Mode-2: Timer register 8 bitlik Counter (TL1) ile otomatik yeniden yüklemeli olarak konfigüre edilebilir. TL1 'in yeniden yükleme değeri TH1'de saklanır. Yazılım ile presetlenebilir. TH1'in yeniden yükleme değeri değiştirilemez.

Mode-3: Timer1 sayılacak değeri tutar. Etkin olabilmesi için TR1=0 'a setlenmelidir. Mode 3'de Timer0'ın TL0 ve TH0 iki ayrı sayıcı olarak atanır. Mode 3 bazı uygulamalar için gereken ekstra 8 bitlik Counter üzerindeki zamanlayıcı sağlar. Mode 3'de Timer 0 ile 8051 üç adet Timers/Counters' a sahip gibi görünür. Mode 3'de Timer/Counter, Seri port için Baud Rate üreteci gibi kullanılabilir ve interrupt istekleri oluşturmakta faydalana bilinir.


    TF1
    TR1
    TF0
    TR0
    IE1
    IT1
    IE0
    IT0
msb                                                                                                               lsb
                 TIMER/COUNTER CONTROL (TCON) REGISTER

TF1/TF0: Timer 1/0 taşma bayrağı. Timer/Counter' da taşma olduğunda donanımla setlenir ve interrupt işlendiğinde resetlenir.
TR1/TR0: Timer 1/0 koşma kontrol biti. Yazılım ile set/reset'lenir.
IE1/IE0: Interrupt 1/0 üstünlük bayrağı. Harici interrupt üstünlüğü belirtildiğinde setlenir ve interrupt işleminde resetlenir.
IT1/IT0: Interrupt 1/0 tipi kontrol biti. Yazılım ile set/reset'lenir.




            2.2.3. Güç Kontrolu (Power Control)

           
8051'de güç harcamasını minimuma indirebilmek için iki yazılım seçim modu vardır. Bunlar; Idle ve Power Down Modlarıdır. CPU Idle modda iken dahili RAM, zamanlayıcı, seri port ve interrupt sistem fonsiyonlarının işlemesine izin verir. Power Down modunda iken sadece dahili RAM değerleri korunur ve diğer bütün fonksiyonlar işlevsizdir. Bu özel modlar yazılım yolu ile aktif hale geçerler. Aktif hale geçirmek için gerekli register SFR' deki PCON
 registeridir

SMOD
-
-
-
GF1
GF0
PD
IDL
msb                                                                                                                     lsb

                        PCON(POWER CONTROL REGİSTER)

SMOD : Çift veri iletim hızı (baud) oranı biti. Eğer setlenirse veri iletim hızı iki katına çıkar. Bu halde iken seri port varolan diğer modları kullanır.
GF1 : Genel amaçlı bayrak biti.
GF0 : Genel amaçlı bayrak biti.
PD   : Power Down biti. Bu bit setlenirse Power Down moduna girilir.
IDL : Idle mode biti. Setlenirse Idle moduna girilir.

            Bazen aynı anda hem PD hem de IDL bitleri setlenmeye çalışılabilir. Bu durumda üstünlük PD' ye verilmiş olduğundan Power Down moduna girilir. PCON Registerinin reset değeri (0***0000)'dır.

            2.2.3.1. IDLE Modu

           
CPU , Idle modunda iken , Stack Pointer(SP), Program Counter (PC), Program Status Word(PSW), Akümülatör , Dahili RAM  ve bütün diğer registerlerin değerleri korunur. Idle modu, donanım ile geçerli bazı interruptlar sayesinde PCON.0'ın resetlenmesi ile sona erdirilebilir. Bu modu sona erdirmenin diğer bir yolu ise donanım reseti vermektir. Önce osilatör koşturulur ve donanım resetinin aktif olabilmesi için yalnızca 2 makine saykılı (24 Osc. Periyodu) ile karşılaşılınca reset işlemi tamamlanacaktır.


            2.2.3.2. POWER DOWN Modu

           
PCON.1 bitinin setlenmesi ile aktif olur. Power Down' da osilatör durdurulur. Çipin üzerindeki RAM' ın ve SFR' nin içeriği bu modda korunur. Bu moddan çıkmanın tek yolu donanım reseti vermektir ama donanım reseti vermek SFR yeniden tanımlanmasına rağmen dahili RAM' ın içeriği değiştirilemez. Power Down modu ile devrede en küçük güç harcaması gerçekleşir ve Vcc gerilimi yaklaşık 2V seviyesini kadar indirilebilir. Ama Power Down moduna girilene kadar Vcc geriliminin düşürülmemesi gerekir. Power Down moduna girildikten en az 10msn sonra Vcc erilimi 2V'a çekilebilir.

 

2.2.4.  8051 Mikrokontrolörlerde İletişim

           
Data bir noktadan diğer bir noktaya iletilirken ya seri ya da paralel formatta düzenlenir. Her ikisinin de birbirine göre avantaj ve dezavantajlı olduğu yönler bulunmaktadır. Paralel data transferi genelde belirli sürede çok miktarda data transferinin gerektiği yerlerde kullanılır.(PC ile Printer arasındaki gibi) . Seri data iletim metotlarında yüksek data transfer hızlarına erişilebilir fakat paralel data transferine göre en önemli üstünlüğü datanın iletilebilmesi için gerekli iletken sayısının paralele göre daha az olmasıdır.


2.2.4.1. Paralel Haberleşme


Paralel data transferinde ,bir bilgisayarın mikroişlemcisi ile çevre birimler arasındaki data bus üzerindeki bilgilerin iletimi gibi datalar bu metodda paralel olarak iletilir. Paralel ve seri  data transferinde bir karakterin iletimi 8 bit ile yapılıyorsa, paralel data iletimi seri iletime göre daha hızlı olacağı hiç şüphesizdir. Çünkü seri data iletiminde bir karakter iletmek için 8t süre harcanıyorsa (start,stop ve parity bitleri hariç) paralel data iletiminde t kadar bir sürede işlem gerçeklenmiş olacaktır(Buna diğer üç bitin eklenmediğine dikkat !). Paralel data iletiminde polling ve handshaking gibi kontrol işlemleri için de ayrı kabloların kullanılması maliyeti iyiden iyiye arttırmaktadır. Ayrıca uzak mesafelere iletimde sinyal zayıflamasını kompanze etmek için Repeater cihazının kullanılması ekonomikliği ortadan kaldırmaktadır. Böylece paralel data iletimi, bilgisayar sistemlerinin çevre birimlerle haberleşmesinde ve mesafenin kısa olması durumunda tercih edilebilir.


2.2.4.2. Seri Haberleşme

           
Uzak mesafelere dataların paralel iletimi için kablo ve diğer masrafların çok olmasından  dolayı bu durumda daha çok seri data iletimi tercih edilir. Tek bir iletim kanalı üzerinden belirli bir zamanda bir bit iletilmesi seri data transferi olarak adlandırılabilir. Seri iletişim kendi arasında ikiye ayrılır. Şimdi de bunlar hakkında kısa ve öz bilgiler verelim;



2.1.4.2.1.  Seri-Senkron Haberleşme

Senkron seri data iletiminde önemli bir konu iletim kanalının iki ucundaki alıcı ve verici düzeneklerin birbiriyle her zaman  senkronize çalışması gerekmesidir. Senkronizasyon işlemi ikinci bir iletim hattı üzerinden ortak bir clock (saat) sinyalinin hem alıcıya hem de vericiye gönderilmesi ile elde edilebilir. İletim kanalının her iki ucunda zamanlamayı sağlamak, senkronizasyonu elde etmek için her zaman bir ana saat sinyali kullanılır. Senkron seri data iletimi veri bloklarının hazır olduğu durumlarda kullanılır. Örneğin ; Harddisk' teki bilgilerin karşı tarafa gönderilmesinde. Senkron iletişim asenkron iletişime göre daha karmaşıktır. Bunun ana nedeni alıcı ünitede Byte Eşzamanlısının yapılmasının gerekmesindendir.

2.2.4.2.2.  Seri Asenkron Haberleşme
           
Asenkron seri data iletimi, veri iletişiminde kullanılan en basit ve en kolay yöntemdir. Verimliliği düşük olduğu için düşük hızlardaki veri iletiminde daha çok kullanılır. Transmitter' den gönderilen her bir karakter 8 bit ile temsil edilir ve iletim sırasında veri karakterlerinin başına start biti (lojik - 0) ve sonuna parity (hata denetimi amacıyla) ile stop bitleri eklenir.

            Her bir data dizisinin ilk biti start bitidir , lojik-1'den lojik-0'a geçişle belirtilir ve bu start biti bir bit süresince lojik-0'da kalır. Ardından data bitleri gelir ve data biti sayısı 5..8 bit arası seçilebilir. Hemen ardından hata denetimi biti ve stop biti gelir. Stop biti 1,1.5 ve 2 bit sürelerinde seçilir ve bu süre boyunca lojik-1'de kalır. Hat boş iken aradaki hat sürekli lojik-1 seviyesinde tutulur. Bunun nedeni tabi ki hattaki gürültülerden etkilenmemek içindir.

PC kullanıcıları data iletimi yapmak için bir RS-232 seri port' a ihtiyaç duyarlar. Bu konnektör için bacak numaraları ve sinyal adları aşağıdaki tabloda verilmiştir.





























BACAK NO
ORTAK İSİM
RS232C İSMİ
TANIM
        1

        AA
Koruma toprağı
        2
      TxD
        BA
Gönderilen data
        3
      RxD
        BB
Alınan data
        4
      RTS
        CA
Gönderme için istek
        5
      CTS
        CB
Gönderme için serbest
        6
      DSR
        CC
Veri kümesi hazır
        7
      GND
        AB
Sinyal toprağı
        8
       CD
        CF
Alınan hat sinyal algılayıcı
        9
        10


Veri kümesi testi için ayrılmış
        11


Tanımlanmamış
        12

       SCF
İkincil alınan hat sinyali algılayıcı
        13

       SCB
İkincil gönderme serbest
        14

       SBA
İkincil gönderme veri
        15

        DB
İletim sinyal elemanı zayıflaması (DCE)
        16

       SBB
İkincil alınan veri
        17

         DD
Alıcı sinyal elemanı zayıflaması (DC)
         18


Tanımlanmamış
         19

          SCA
İkincil gönd.içn istek
         20
       DTR
           CD
Veri terminali hazır
         21
     
           CG
Sinyal kalitesi algılayıcı
         22

           CE
Halka gösterge
         23

         CH/CI
Veri sinyali hızı seçici(DTE/ DCE)
         24

            DA
İletken sinyal elemanı zayıflaması
         25


Tanımlanmamış

Tablo-2-11- RS-232 Bacak Bağlantıları Tablosu
                                              

 


2.2.4.3. Standart Seri Arabirim


8051'deki seri portumuz Full -Dublex' tir. Yani hem alıcı hem de verici eşzamanlı olarak gerçeklenebilir. Seri portun alıcı ve verici (receiver - transmitter ) registerlerı SFR 'de  SBUF adı ile bulunmaktadır. Gönderilecek bilgiler SBUF' a yazılır, alınacak bilgiler ise SBUF' dan okunur. Seri portun dört işlem modu vardır;

Mode-0 : Seri data giriş ve çıkışı RxD üzerindendir. TxD çıkışı saat için kullanılır. Bu uç kaydırmalı-kaydedicileri (Shift -Register) uyarmak için kullanılabilir. 8 bit alınır/gönderilir. Mutlaka TTL veya CMOS kaydırmalı-kaydedicilerle senkronize I/O biçiminde kullanılmalıdır. Bu modun Baud Rate değeri 1/12 osilatör frekansına eşittir. Sistem seri ise bu modda hız, eğer osilatör 12MHz ise  baud rate 1Mbit/sn gibi UART'nin çok üstünde bir değer olabilmektedir. Ayrıca paralel sistemlerde Shift -Register' den önce sadece iki hatta (RxD ve TxD) ihtiyaç duyması avantajdır.

Mode-1 : 10 bit RxD ucundan ya da 10 bit TxD ucundan alınır/gönderilir. Bir adet başlama (start) biti,8 data biti ve birde durdurma  (stop) biti bulunur. Alıcı durumda , durdurma biti  SCON' daki RB8 bitinin içeriğine gider. Baud Rate değeri değişkendir.

Mode-2 : 11 bit RxD ucundan ya da 11 bit TxD ucundan alınır/gönderilir. Bir start biti, 8 data biti, bir adet programlanabilir 9. data biti ve bir stop biti bu modda bulunur. Gönderici durumda 9. data biti SCON registerindeki TB8 bitinin içeriğine gider. Ya da örneğin, PSW 'nin içindeki P (parity bit),TB8 'in üzerine taşınabilir. Alıcı durumda 9.data biti SCON üzerindeki RB8 değerine gider (eğer stop bitine önem verilmezse).Baud Rate değeri osilatör frekansının 1/32 veya 1/64 'ü olarak programlanabilir.        

Mode-3 : 11 bit RxD üzerinden veya 11 bit TxD üzerinden alınır/gönderilir. Bir start biti, 8 data biti, bir programlanabilir 9. data biti ve bir adet stop biti bulunur. Gerçekte Mode-3 ile Mode-2 arasındaki fark, Mode-3'ün istisnai Baud Rate değerlerine ayarlanabilmesidir. Yani Baud Rate değeri değişkendir.

Tüm bu dört modda iletişim bazı komutların SBUF gibi tanımlama registerlerini kullanması ile sağlanır.
           
SCON registerinin içeriği yalnız mod seçmek için gerekli bitleri içermeyip ,alıcı ve verici için 9.biti (TB8 ve RB8) ve seri port interrupt bitleri olan RI ve TI 'yı da içerir.




    SM0
    SM1
    SM2
    REN
    TB8
    RB8
    TI
    RI
msb                                                                                                               lsb
                    SERİ PORT KONTROL (SCON) REGİSTER





                        SM0    SM1    mode               Baud Rate
                          0          0           0                   Fosc/12
                          0          1           1                   Değişken
                          1          0           2                   Fosc/32 yada Fosc/64
                          1          1           3                   Değişken


SM0, SM1, SM2 : Seri port modu kontrol biti. Yazılımla set / resetlenir.

REN : Alma yetkili kontrol biti. Seri data alma yetkili/yetkisiz yapmak için yazılımla set / resetlenir.

TB8 : 9. data bitinin (mode-2 ve 3'e göre) gönderilip gönderilmeyeceğini belirlemek için kullanılan yazılım ile set/resetlenebilen bitdir.
           
RB8 : 9. data bitinin alınıp alınmayacağını belirlemek için kullanılan yazılım ile set/resetlenebilen bitdir.

TI  : Gönderme interrupt bayrağı. Byte gönderildiğinde donanım tarafından setlenir. İşlem tamamlandığında yazılım ile resetlenmelidir.
           
RI : Alma interrupt bayrağı. Byte alındığında donanım tarafından setlenir. İşlem tamamlandıktan sonra yazılım ile resetlenmelidir.
           

2.2.4.4. Çokişlemcili   Haberleşme  (Multiprocessor Communications)

           
Çokişlemcili Haberleşmede Mode-2 ve Mode-3 çok özel durumlara sahiptir. Bu modlarda 9.data biti kullanılabilir. Data alınırken 9.bit RB8'e yazılır ve arkasından stop biti gelir. Stop biti alındığında port programlanabilir böylece seri port interrupt' ı yalnız RB8=1 iken aktif olur. Bu özellik SCON üzerindeki SM2 bitinin setlenmesi ile geçerlidir. Bu özelliğin Çokişlemcili Haberleşme sistemlerinde kullanımı şu şekilde olabilir;

Birincil(Master) işlemci bir ya da birkaç İkincil(Slave) işlemciye data bloklarını göndermek isterken ,ilk olarak hedef slave işlemciyi tanımlayan adres byte' larını yollar. Burada adres byte' ı ile data byte' larının farkını 9.bit belirler. 9.bit 1 ise adres byte' ı , 0 ise data byte' ıdır. SM2=1 yapmak ile , data byte' ı ile slave işlemci interruptlanmayacaktır. Adres byte' ında tüm slave işlemciler interruptlanacaktır. Bu yüzden slave işlemciler eğer belirtilen adresin kendi başlangıç adresleri (kendilerine ayrılan adres ise) olup olmadığını aldıkları adres byte' ını inceleyerek anlayabilirler. Adreslenmiş olan slave işlemci kendi SM2 bitini temizleyecek  ve gelecek olan data byte' larını almak için kendilerini hazırlayacaklardır. Yani slave işlemciler başlama adresi verildikten sonra bunun kendi adresleri olup olmadığını test edeceklerdir ve daha sonra gelecek dataları alarak işleyeceklerdir.
           
SM2 (SCON.5) biti Mode-0 'da kullanım dışıdır ve Mode-1 'de stop bitinin sağlamlığını(doğruluğunu) test etmek için kullanılır. Mode-1 'de SM2=1 ise alınan interruptlar stop biti alınıncaya kadar aktif olmayacaktır.
2.2.4.4.1.  BAUD RATE Değerleri

            Mode-0 'da baud rate değeri (osilatör frekansı/12) 'dir. Mode-2 'de PCON registerindeki SMOD biti 1 ise baud rate 1/32 ve SMOD 0 ise 1/64 osilatör frekansına eşittir. Mode-1 ve Mode-3 'de baud rate timer-1'in taşma zamanı (overflow rate) ile karakterize edilebilir.

            Timer-1 'in Baud Rate Generatörü Olarak Kullanılması:

            Timer-1 'in baud rate generatörü olarak kullanılırken, baud rate değeri SMOD bitinin ve Timer-1 taşma değerine göre karakterize edilmiştir. Bu uygulamada Timer-1 interrupt' ı geçersiz kılınacaktır.
 
Mode-1,3 BR= (2 (SMOD) /32)*(Timer-1 taşma zamanı)
           
BR : Baud Rate

            Timer-1 bazı durumlarda otomatik yeniden yüklemeli (Auto Reload Mode) modda konfigüre edilebilir. Bu durumda baud rate değeri ise;

Mode-1,3 BR=(2* (SMOD) /32)*(O_Freq /(12*[256-(TH1)]))
ile verilebilir.Aşağıdaki tabloda Timer-1 ile çok kullanılan bazı baud rate değerlerinin elde edilmesi için gereken değerler verilmiştir.

Baud Rate

OSC_freq
  (MHz)
  SMOD
     C/T
  c=1,t=0
   Mode
Reload value
Mode-0
Max :1.67MHz
    20
      X
       X
       X
       X
Mode-2
Max :   625 kHz
    20.00
      1
       X
       X
       X
Mode-1,3
Max : 104.2 kHz
    20.00
      1
       0
       2
      FFh
   19.2k
  11.059
      1
       0
       2
      FDh
     9.6k
  11.059
      0
       0
       2
      FDh
     4.8k
  11.059
      0
       0
       2
      FAh
     2.4k
  11.059
      0
       0
       2
      F4h
     1.2k
  11.059
      0
       0
       2
      E8h
     137.5
  11.986
      0
       0
       2
      1Dh
     110
   6.00
      0
       0
       2
      72h
     110
  12.00
      0
       0 
       1
    FEEBh

                                                               {             Timer-1  için                    }




            Özetlenecek olursa seri port timer-1'in taşması tarafından saatlenecektir. Timer-1'in girişinde osilatör frekansı 12'ye bölünür ya da harici saat uygulanır. Mode-0'da 12MHz'lik bir kristal ile 1Mbit/sn ve Mode-2'de ise gene 12Mhz'lik kristal ile 187.5kHz'lik baud rate değerlerine erişilebilir. Mode-1,3'de ise baud rate timer-1'e bağlıdır ve timer yeniden yükleme değeri ile istenen frekansa eşitlenebilir.

            Şimdi bu yeniden yükleme değerinin nasıl hesaplandığına dair bir örneğe bakalım. UART işlem hızının 300 bps ve osilatör frekansının 12Mhz  olduğu durumdaki yeniden yükleme değerini hesaplayalım; (ARV:Auto Reload Value)

            ARV=(Clock rate)/(12*32*Bit rate) ; 104.16

            Eğer T1 üzerinden harici saat kullanılıyorsa;
           
            ARV=(Clock rate)/(32*Bit rate)                   ;           olur.

Yaklaşık tamsayı olarak 104 kabul edilir ve Timer için aktüel değer 256-104=152=98h ' dir. Eğer TH1 98h değeri ile yüklenirse doğru hız olan 300 bps alınır.

Buna göre bizim kullanacağımız sistemde 9600 bps için ve kristalinde 12MHZ olduğu kabulu ile hesap yapılacak olursa;

            ARV=12M/(12*32*9600)=3.25        olur.
Yaklaşık olarak 3 kabul edilir ve 256-3=253d=0FCh bulunur.


2.2.5. PC Seri  I/O Arayüz Cihazının Kontrolü ve Programlama Çalışmaları


PC' lerde seri ara yüz I/O cihazı olarak 8250 entegresi kullanılmaktadır. PC' lerde genel olarak iki seri ve bir paralel portları vardır. Bu sayı genel kullanım için yeterlidir. Amaca göre istenildiğinde arttırılabilir. Sistemde bulunan seri port ,taban vektör ve adresleri tabloda verilmiştir.

COM1
00000:00400H
03F8H
COM2
00000:00402H
02F8H
COM3
00000:00404H
0378H
COM4
00000:00406H
0278H


            Bu portların kullanımı için bazı registerlerin bulunması ve bunların gerekli değerlere setlenmeleri gereklidir. Bu registerler ;






1.    Data Register
2.    Interrupt Enable Register
3.    Interrupt Identification Register
4.    Data Format Register
5.    Serial Control Register
6.    Serial Status Register
7.    Modem Status Register' dir.


1.Data Register:

Data register göndermek ve almak için 1 byte tutar. İçindeki bitler alınacak veya gönderilecek bitleri tutar.

Data Bit7
Data Bit6
Data Bit5
Data Bit4
Data Bit3
Data Bit2
Data Bit1
Data Bit0
msb                                                                                                                  lsb
 
2.Interrupt Enable Register:

Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0

            Bit0:Veri geldiğinde interrupt üret.
            Bit1:Veri gönderme işlemi tamamlandığında interrupt üret.
            Bit2:Hat durum değişikliğinde interrupt üret.
            Bit3:Modem hattı değişikliğinde interrupt üret.
            Bit4-7:Kullanılmaz.

3.Interrupt Identification Register:

Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0

            Bit0:Interrupt bekliyor.
            Bit1-2: 00:Modem hattında değişiklik oldu.
                                   01:Gönderme tamamlandı.
                                   10:Veri geldi.
                                   11:Hattın durumunda değişiklik oldu.
            Bit3-7:Kullanılmaz.


4.Data Format Register:

Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0



            Bit0-1:Veri uzunluğu:                        00        5bit
                                                                                              01        6bit
                                                                                              10        7bit
                                                                                              11        8bit

            Bit2:Durdurma biti sayısı:      0          1bit
                                                                                              1          2bit

            Bit3:Parity var/yok:                           0          OFF
                                                                            1          ON

            Bit4:Parity tek/çift:                            0          Tek
                                                                                              1          Çift
Bit5 : Stick parity

            Bit6 : Set Break

            Bit7 : Bölücüye erişim biti:    0          Diğer kütükler
                                                                     1          Bölücü


5.Serial Control Register:

Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0

            Bit0: Terminal iletişime hazır.
            Bit1: Gönderme isteği.
            Bit2: Out1
            Bit3: Out2
Bit4: Geri beslemeli teste geç.
            Bit5-7:Kullanılmaz.


     6.Serial Status Register :


Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0


            Bit0: Veri hazır.
            Bit1: Veri ezilmesi var.
            Bit2: Parity biti hatası var.
            Bit3: Zamanlama hatası.
            Bit4: Alıcı işlemi yarıda kesti.
            Bit5: Gönderme tamamlandı.
            Bit6:  Kaydırma tamamlandı.
            Bit7 : Kullanılmaz.


7.Modem Status Register:

Bit7
Bit6
Bit5
Bit4
Bit3
Bit2
Bit1
Bit0


            Bit0: CTS değişti.
            Bit1: DSR değişti
            Bit2: RI kesildi.
            Bit3: RLSD kesildi.
Bit4: CTS' nine sıfıra tümleyeni.
Bit5: DSR' nine sıfıra tümleyeni.
Bit6: RI' nın sıfıra tümleyeni.
Bit7: RLSD' nin sıfıra tümleyeni.


2.2.5.1. Program Communicatıons' un Açıklanması



Procedure BaudRate Aktif: Data Format registerinin en anlamlı biti 1 yapılırsa , data register ile interrupt enable registeri baud rate değerinin belirlenmesinde kullanılabilir. Procedure' de data format registeri (2FB)' nin 8. Biti setlenmektedir.

Procedure DataAktif : Data Format registerinin en anlamlı biti resetlenmektedir. Data ve Interrupt Enable registerleri asıl işlevlerinde kullanılmaya başlanır.

Procedure DataHız Tanımı: BaudRate Aktif yapıldıktan sonra 2F8 ve 2F9 adreslerine verilen word baudrate değeri olarak yazılır.

Procedure DataHız Tanımı: Baud rate değeri okunuyor.

Procedure PortuSetle: Seçilen haberleşme portuna gerekli tanımlamalar yazıldı.

Function InterruptDurumu: Interrupt ID registeri okunarak verinin geldiğini veya gönderildiğini belirler.

Function PortuOku: Porttan gelen verinin okunmasını sağlar.

Procedure PortaYaz : Porta bir byte' lık veriyi koyar. Gönderilecek karakter data registerine konulur.

Function ByteToString: Byte olarak verilen veriyi string' e dönüştürür.

Function StringToByte: String olarak verilen veriyi byte' a dönüştürür.

Procedure SeriCom: PC' de 8051 işlemcisi için assembler program yazıp derlendikten sonra HEX uzantılı bir dosya oluşmaktadır. Bu HEX uzantılı dosya assembly emirlerin kodlarını ve adreslerini içermektedir. Dosyanın bir satırının formatı ;
dataların_uzunluğu+adres+kayıt_tipi+datalar+kontrol_byte'ı, şeklindedir. Bu procedure ile ismi verilen HEX uzantılı dosyadan okunmakta ve seri porttan gönderilmektedir.





Program Communications;
uses
    dos,crt;
{*************************************************************}

const
     {baud rate tanımlamaları}
     br_9600  =$000C;

     {parity biti tanımlamaları}
     pr_none =$00;
     pr_odd  =$08;
     pr_even =$18;

     {data uzunluk tanımlamaları}
     dl_6    =$01;
     dl_7    =$02;
     dl_8    =$03;

     {stop biti tanımlamaları}
     sb_1    =$00;
     sb_2    =$04;

     {seri port tanımlamaları}
     com1    =0;
     com2    =1;

     {8250 entegresi içerisindeki register tanımlamaları}
     data                                               =0;
     interrupt_enable                            =1;
     interrupt_identification     =2;
     data_format                      =3;
     seri_control                      =4;
     seri_status                                     =5;
     modem_status                               =6;

     yetkilendir                        =128;

     {register için port adresleri}
     regs:array[0..1,0..6] of word=(($3f8,$3f9,$3fa,$3fb,$3fc,$3fd,$3fe),
                           ($2f8,$2f9,$2fa,$2fb,$2fc,$2fd,$2fe));

     {interrupt_identification tanımlamaları}
     veri_geldi                =4;
     veri_gonderme_tamamlandi  =2;

     {Hexadecimal Rakamların Tanımlanması}
     Hexal:Array[1..16] of String[1]=('0','1','2','3','4','5','6','7',
                                      '8','9','A','B','C','D','E','F');


var
   sayih,sayil:byte;            {ByteToString Function'u için}
   hsayih,hsayil:string[1];     {StringToByte Function'u için}
   ch:char;


{*************************************************************}
{data_format registerinin en anlamlı biti 1 yapılıyor}
procedure BaudRateAktif(pn:byte);
var
   temp:byte;
begin
     temp:=port[regs[pn,data_format]] or yetkilendir;
     port[regs[pn,data_format]]:=temp;
end;

{*************************************************************}
{data_format registerinin en anlamlı biti 0 yapılyor}
procedure DataAktif(pn:byte);
var
   temp:byte;
begin
     temp:=port[regs[pn,data_format]] and (not yetkilendir);
     port[regs[pn,data_format]]:=temp;
end;

{*************************************************************}
{baud_rate değeri ilgili registere yerleştiriliyor}
procedure DataHizAyari(pn:byte;speed:word);
begin
     baudrateaktif(pn);
     port[regs[pn,data]]:=lo(speed);
     port[regs[pn,data+1]]:=hi(speed);
end;

{*************************************************************}
{byte tipinde olan register word olarak tanımlanıyor}
function DataHiziTanimi(pn:byte):word;
begin
     baudrateaktif(pn);
     datahizitanimi:=portw[regs[pn,data]];
end;

{*************************************************************}
{seçilen haberleşme portunun tanımlaması  yapılıyor}
procedure PortuSetle(pn:byte;speed:word;parity,datalen,stopbits:byte);
var
   kontrolreg:byte;
begin
     datahizayari(pn,speed);
     kontrolreg:=parity or stopbits or datalen;
     port[regs[pn,data_format]]:=kontrolreg;
end;

{*************************************************************}
{veri geldiğinde ilgili registeri setler}
function InterruptDurumu(pn:byte):byte;
var
   b:byte;
begin
     b:=port[regs[pn,interrupt_identification]];
     interruptdurumu:=b and (veri_gonderme_tamamlandi+veri_geldi);
end;

{*************************************************************}
{port veri koruması için setleniyor veya okunuyor}
function PortuOku(pn:byte):byte;
begin
     dataaktif(pn);
     portuoku:=port[regs[pn,data]];
end;

{*************************************************************}
{data registerine bir byte yazar}
procedure PortaYaz(pn:byte;ch:byte);
begin
     dataaktif(pn);
     port[regs[pn,data]]:=ch;
end;
{*************************************************************}

Function ByteToString(Sayi:Byte):String;
Var
   HexSayi:String[2];
   ie:Byte;
Begin
  SayiH:=Trunc(Sayi/16);
  SayiL:=Trunc(Sayi-SayiH*16);
  For ie:=0 to 15 do
      if SayiH=ie then HexSayi:=Hexal[ie+1];
  For ie:=0 to 15 do
      if SayiL=ie then HexSayi:=HexSayi+Hexal[ie+1];
  ByteToString:=HexSayi;
End;

{*************************************************************}
Function StringToByte(HexSayi1:String):Byte;
Var
   Sayi1:Byte;
   ie:Byte;
Begin
  HSayiH:=(Copy(HexSayi1,1,1));
  HSayiL:=(Copy(HexSayi1,2,1));
  For ie:=0 to 15 do
      if HSayiH=Hexal[ie+1] then Sayi1:=ie*16;
  For ie:=0 to 15 do
      if HSayiL=Hexal[ie+1] then Sayi1:=Sayi1+ie;
  StringToByte:=Sayi1;
End;
{*************************************************************}
Procedure SeriCom;
Label Oku;
Var
  DosyaAdi:String[50];
  Run:String;
  Test:Boolean;
  PortOkunan:Byte;
  Dosya:Text;
  Uzunluk,KayitTipi,RamAdrH,RamAdrL,RamData:String[2];
  UzunlukByte,RamAdrHByte,RamAdrLByte,RamDataByte:Byte;
  i,j:Integer;
Begin
    clrscr;
    TextBackGround(7);TextColor(0);
    GotoXY(18,12);Write('-');
    for i:=19 to 66 do
        Begin
             GotoXY(i,12);
             Write('-');
        End;
    GotoXY(67,12);Write('-');
    GotoXY(18,20);Write('-');
    for i:=19 to 66 do
        Begin
             GotoXY(i,20);
             Write('-');
        End;
    GotoXY(67,20);Write('-');
    for i:=13 to 19 do
        Begin
             GotoXY(18,i);
             Write('-');
        End;
    for i:=13 to 19 do
        Begin
             GotoXY(67,i);
             Write('-');
        End;
    TextBackGround(4);TextColor(30);
    GotoXY(19,13);Write('         Seri Port COM2  :9600,n,8,1   ');
    TextBackGround(7);TextColor(1);

    {Iletişim Test}
    test:=FALSE;
    GotoXY(19,14);Write('                                                                      ');
    GotoXY(19,15);Write('  İletişim Kurulmaya Çalışılıyor                ');
    GotoXY(19,16);Write('                                                                       ');
    GotoXY(19,17);Write('                                                                       ');
    while  NOT test do
    begin
         PortaYaz(1,11);
         if InterruptDurumu(com2) =veri_geldi then
         begin
              PortOkunan:=PortuOku(com2);
              if PortOkunan=11 then
                 test:=TRUE;
         end
         else
         if keypressed then
         begin
             GotoXY(19,14);Write('                                                                 ');
             GotoXY(19,15);Write('  İletişim Sağlanamıyor.                        ');
             GotoXY(19,16);Write('                                                                 ');
             GotoXY(19,17);Write('                                                                 ');
             halt;
         end;
    end;}

    GotoXY(19,14);Write('                                                                ');
    GotoXY(19,15);Write('  Yükleme Yapacağınız  Dosya Adı:   ');
    GotoXY(19,16);Write('                                                               ');
    GotoXY(19,17);Write('                                                               ');
    GotoXY(21,16);Readln(DosyaAdi);
    if DosyaAdi='' then
       begin
            TextBackGround(0);TextColor(15);GotoXY(1,21);exit;
       end;
    DosyaAdi:='C:\UTIL\ASM51\EXP\'+DosyaAdi+'.HEX';

    {$I-}
    Assign(Dosya,DosyaAdi);
    Reset(Dosya);
    if IOResult<>0 then
    Begin
       TextBackGround(0);TextColor(12);
       GotoXY(24,18);Write('  Hatalı Dosya  Adı');
        GotoXY(26,19);Write('                              ');
    {   Readkey;  }
       TextBackGround(0);TextColor(15);
       GotoXY(1,21);
       Exit;
    End;
    Close(Dosya);
    {$I+}

    TextBackGround(0);TextColor(12);
    Assign(Dosya,DosyaAdi);
    Reset(Dosya);
Oku:
    Read(Dosya,ch);
    if ch<>':' then
       Begin
       GotoXY(19,18);Write('    Çalışma dosyanız ASM51 HEX yapılı değil    ');
        GotoXY(19,19);Write('                                           ');
       Close(Dosya);
       TextBackGround(0);TextColor(15);
       GotoXY(1,21);
       Exit;
       End;
    if ch=':' then
    Begin
       GotoXY(19,18);Write(' .......... Datalar RAM a yazılıyor ...........');
       Uzunluk:='';
       For i:=1 to 2 do
           Begin
           Read(Dosya,ch);
           Uzunluk:=Uzunluk+ch;
           End;
       UzunlukByte:=StringToByte(Uzunluk);
       RamAdrH:='';
       For i:=1 to 2 do
           Begin
           Read(Dosya,ch);
           RamAdrH:=RamAdrH+ch;
           End;
       RamAdrHByte:=StringToByte(RamAdrH);
       RamAdrL:='';
       For i:=1 to 2 do
           Begin
           Read(Dosya,ch);
           RamAdrL:=RamAdrL+ch;
           End;
       RamAdrLByte:=StringToByte(RamAdrL);
       KayitTipi:='';
       For i:=1 to 2 do
           Begin
           Read(Dosya,ch);
           KayitTipi:=KayitTipi+ch;
           End;
       if (Uzunluk='00') and (RamAdrH='00') and (RamAdrL='00') and (KayitTipi='01') then
       Begin
       Delay(50);
       PortaYaz(Com2,255);
       Delay(50);
       PortaYaz(Com2,255);
       Delay(50);
       PortaYaz(Com2,00);
       Delay(50);
       Close(Dosya);
       GotoXY(19,18);Write('             Transfer Tamamlandı...            ');
GotoXY(19,19);Write('     Programı koşmak istiyor musunuz ( E/H ):   ');
       GotoXY(64,19);Readln(Run);
       if (Run='e') or (Run='E') then
          Begin
          PortaYaz(Com2,01);
          GotoXY(19,18);Write('      ......... Program Koşuluyor .........    ');
           GotoXY(19,19);Write('                                               ');
          End
          else
          Begin
          PortaYaz(Com2,00);
          GotoXY(19,18);Write('                                               ');
           GotoXY(19,19);Write('                                               ');
          End;
          TextBackGround(0);TextColor(15);
       GotoXY(1,21);
       Exit;
       End;
       For j:=1 to UzunlukByte do
           Begin
           RamData:='';
           For i:=1 to 2 do
               Begin
               Read(Dosya,ch);
               RamData:=RamData+ch;
               End;
           RamDataByte:=StringToByte(RamData);
           Delay(50);
           PortaYaz(Com2,RamAdrHByte);
           Delay(50);
           PortaYaz(Com2,RamAdrLByte);
           Delay(50);
           PortaYaz(Com2,RamDataByte);
 GotoXY(28,19);Write('Adres :',ByteToString(RamAdrHByte),ByteToString(RamAdrLByte),'  Data : ',RamData);
           RamAdrLByte:=RamAdrLByte+1;
           if RamAdrLByte=0 then RamAdrHByte:=RamAdrHByte+1;
           End;
    End;
    Readln(Dosya);
    Goto Oku;
End;

begin
PortuSetle(Com2,BR_9600,Pr_None,Dl_8,Sb_1);
DataAktif(Com2);
SeriCom;
end.

















 

BÖLÜM III

UYGULAMA  ÖRNEKLERİ


3.1. Kesme ile Çalışan 8-Bit  ADC Arabirimi


Bir önceki  bölümde , ADC ,analog sinyali sayısal  karşılığına çevirirken ,işlemci meşgul  bekleme  durumundaydı. Bu  bölümde verilecek örnekte , A/D çevirim sonu  bir kesme ile işlemciye  bildirilmektedir. ADC ‘nin  çevirim sonunu belirten  BUSY sinyali , bir inverter ile terslenerek  mikrokontrtolörnin INTO girişine bağlanır. Bu örneğin tek donanım farkı budur ve şeması aşağıda görülmektedir.



Şekil-3-1 : ZN448 A/D Çeviricisinin  Kesmeli Çalışması İçin 8051 Arabirimi


Aşağıda verilen ana programda , işlemci ,aDC’ yi çevirimi başlattıktan sonra , elde bayrağı üzeride beklemeye  başlar :


BUSY : JNC        BUSY

Bu komut  yürütülürken , ADC ,çevirimi bitirir ve BUS:Y sinyalini lojik 1 yapar. Inverter ile terslenen bu sinyal ,ADC’ den işlemciye bir kesme  hizmet programı  ,INTSERVIS ,çalışır. Bu alt programda, 8- bit örnek  okunur ev elde  bayrağı 1’ lenir. Kesme hizmet programından  döndükten sonra ,daha önce yürütülmekte olan , yukarıda verilen , bekleme  durumunda olan satırdan çıkılmış olur.





***************************************************************
INTO  kesmesi ile çalışan ADC örneği (Ana Program)
***************************************************************

ORG        2200H
MOV        DPTR ,# MESAJ       ;ADC ‘nin   çalıştığı
CALL      PSTRING                              ;ekrana yazılır.
SETB       IE. 7                                       ;Kesmeler  aktif.
SETB       IE. 0                                       ;INTO aktif.
SETB       TCON. 0                                ;INTO düşen kenarda aktif.

LOOP:
MOV  DPTR , #OLCU1                   ;ekranda görünecek mesaj
CALL PSTRING                                          ; gönderilir.

CLR    START                                                          ; ADC ‘nin çevrime başlaması için
                                                                                              ; START=0 yapılır.
           
SETB  START                                                          ; Sonra START =1 yapılır
CLR    C                                                                    ;Çevirim işleminin bitme bayrağı

BUSY:

 JNC         BUSY                                    ; ISR’ de 1 yapılması beklenir.

CALL      BIMARYTOASCII   ; İkili değeri ASCII değere çevirir ve ekrana yazdırır.
           
MOV        DPTR, #OLCU2        ; Ekranda görünecek mesaj
            CALL PSTRING                              ; gönderilir.

            JMP     LOOP                                    ; Bir sonraki  çevrim için başa  dönülür.

***************************************************************
AMAÇ : INTO kesmesi geldiğinde çevirim değerini okur.
Girişler  : P1
Çıkışlar  :ACC’ de bir örnek değer.
Call (lar) : Yok
Değişkenler :  A, P3.4, C. 
***************************************************************

; ADC  çevirimini bitirdiğinde  bu adrese dallanılır.
ORG        2000h

INTSERVIS  :

            CLR    RD                  ; Verinin okunması için RD=0 yapılır.
MOV        A, P1   ; P1’deki  sayısal çevirim değeri A’ya  alınır.
SETB       RD                  ;Veri  okunduktan sonra  RD=1 yapılır.
SETB       C                     ; Ana programdaki kesme döngüsünden çıkmak için C=1 yapılır.

RETI                               
END.



3.2- SAYISAL ANALOG ÇEVİRİM



Bazı mikrokontrtolör uygulamalarında  analog çıkışa ihtiyaç vardır. Örneğin bir DC motor kontrolünde  veya değişken voltajla bir lambanın ışık şiddetini ayarlama gibi uygulamalarda DC gerilim kullanılır. Bu  tür uygulamalarda kontrol  sinyalinin , yani yüke  uygulanan gerilimin , sürekli bir şekilde değiştirilmesi gerekmektedir. Bu işleme sayısal –analog (D/A)  çevirim denir. Bir D/A çeviriminde, çıkış gerilimi bir sayısal  değerle (8-bit ,12 –bit gibi) orantılıdır.  Şekil(a) da verilen örnekteki 3-bit  D/A çeviricide , analog  çıkış şekil(b)’ de görüldüğü  gibi doğrusaldır.







                                                                Şekil-3-2    3-Bit DAC


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

Şekil-3-3 PWM İle Üretilen Sinyalin DC Bileşeni Yoluyla  D/A Çevirim.

Kare dalga sinyalin RMS değeri ,sinyalin dolu ve boşluk oranını (duty cycle)   ayarlayarak değiştirilebilir. Dolu boşluk oranı  bir çevrimde sinyalin yüksek voltajda (lojik 1 ) tutulma oranıdır. Bir  çevrim, 0’ dan 1’e geçişte başlar ve benzeri bir  sonraki çevirimde  biter.

            Bir çevirimde eğer sinyalin lojik 1’de kalma süresi lojik 0’ da kalma süresine eşit ise çalışma  çevrimi %50 dir. Yani bu çalışma . zamanının  yarısında , sinyal yüksek değerde  tutulmuş anlamına gelir. %100 bir çalışma zamanı ise devamlı yüksek değerde olduğu demektir. % 25’lik  çalışma zamanında ise sinyal , zamanın ¼ ünde  yüksek tutulmaktadır. Aşağıdaki grafikte çalışma çevrimleri ve  çıkışın +5 V yüksek voltaj değerine   karşılık gelen , ortalama DC çıkış değerleri görülmektedir.


Şekil-3-4 Değişen Ortalama DC Çıkış İçin PWM Değeri

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



Şekil-3-5    8-bit  Bir    DAC Blok Diyagramı


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


                 CLR  P3.3                              ; DAC çevrime  hazır
MOV      P1 , #OFF       ; P1 çıkış

AZALT ;   DAC P1
                             MOV  A, P1
    CJNE A,  #00h, AZALT

ARTTIR ;  INC          P1
                             MOV         A, P1
                            CJNE   A ,#0FFh ,ARTTIR
          JMP   AZALT                  
                       





Şekil-3-6  8 Bit  DAC blok diyagramı










 


BÖLÜM  IV

8051 GELİŞTİRME DEVRELERİ- YAZILIMLARI

 

       4.1.CPU-EPROM-LATCH Kurulumu



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



           
 
Şekil-4-1 EPROM Bacak Yapısı ve  Bacak Adları

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








                                                          

Şekil-4-3 CPU-EPROM ve Latch' dan Kurulu Temel Devre

            Devre kurulduktan sonra her aşamada bu yapının çalışıp çalışmadığının testini sağlayacak bir program yazılacak olursa ileride meydana gelecek arıza durumlarının testi moduler bir şekilde yapılmış olacaktır. Bunun için yazılmış program aşağıda gösterilmiştir.



                                    

;DENEME PROGRAMI 1
;YAZAN:CUNEYT  URGUN
;TARİH:14-3-1997/CUMA
;8051 CPU'NUN P1 PORTUNDAN YAKLAŞIK OLARAK (KRİSTALE BAĞLI)10-25 sn.
;ARALIKLARLA 10101010 VE 01010101 DEĞERİNİ GÖNDERİR.

BASLA:  MOV A,#0AAH
        MOV P1,A
        MOV R0,#080H
BIR:    NOP
        DEC R0
        MOV R1,#080H
IKI:    NOP
        DEC R1
MOV R2,#080H
UC:     NOP
        DEC R2
        CJNE R2,#000H,UC
        CJNE R1,#000H,IKI
        CJNE R0,#000H,BIR

        MOV A,#055H
        MOV P1,A
        MOV R0,#080H
BIR1:   NOP
        DEC R0
        MOV R1,#080H
IKI2:   NOP
        DEC R1
        MOV R2,#080H
UC3:    NOP
        DEC R2
        CJNE R2,#000H,UC3
        CJNE R1,#000H,IKI2
        CJNE R0,#000H,BIR1
        JMP BASLA
END

                                    


           





4.2.RAM (6264)' ın Eklenmesi


            Çalışmada iki adet 6264 Statik RAM kullanılacaktır. Bacak Yapısı şekil-4-1.'de verilmiştir. Bu RAM' lardan biri ,CPU' nun genel olarak kullanacağı RAM, diğeri ise devrenin PC ile bağlantısı sonucu alınacak bilgilerin yazılacağı ve sonrada bu bilgilerin program kodu olarak çalıştırılacağı RAM' dır. Bu RAM' lar CPU' nun adresleme bölgesi içinde sırası ile 2000h-3FFFh ve 4000h-5FFFh arasına oturtulmuştur. Bu RAM' ların seçilmesi için bazı gerekli kod çözme devrelerinin gerçekleştirilmesi gerekmektedir. Ancak devrede bu kod çözme elemanlarının eklenmesi hem ek masraf hem de daha fazla donanım gerekmektedir. Devremde 8'den fazla dış cihaz kullanılmadığı için 64KB'lık adresleme bölgesi 8 eşit parçaya ayrılabilir. Bu da adres hattını en anlamlı 3 biti olan A13-A14-A15'den yararlanarak ve bir 3'den 8'e kod çözücü (74LS138) kullanılarak yapılabilir.


                                                                      

Şekil-4-4  Kod Çözme İşlevinin Gerçeklenmesi


Aslında 8051 CPU' da EPROM için bellek alanı ayırmanın gereği yoktur. Yani kod çözücünün Y0 çıkışından alınan ve EPROM' un CE ucuna verilen bağlantı gereksizdir. CPU' da EA=0 yapmak ile zaten harici program bellek' in kullanılacağı ve PSEN(Program Stere Enable) bacağınında EPROM' un OE' sine vermek ile de EPROM' un program bellek' i olduğu tanımlanmış olur. Ama yaptığım çalışmada PC' den datalar alınıp RAM' a yazıldıktan sonra program bellek alanı RAM olacağından EPROM' un ortadan kaldırılması için gereklidir.

            Aşağıdaki şekil-4.6.'de birinci RAM' ın devreye bağlanışı gösterilmiştir. RAM bağlandıktan sonra yazılacak program RAM' ın ve diğer devre elemanlarının çalışmasını da test etmiş olacaklardır. Yazılan program birinci RAM' a 01010101b ile 10101010b sayılarını 2000h ve 2001h adreslerine yazmakta  daha sonra ise onları okuyarak P1 portuna 2-3 sn.' lik aralarla çıkmaktadır.








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



Şekil-4-6 Birinci RAM' ın Devreye Eklenmesi

                                  












;DENEME PROGRAMI-2
ORG 0000H
RAM_A_YUKLE:
        MOV DPTR,#2000H
        MOV A,#055H
        MOVX @DPTR,A
        INC DPTR
        MOV A,#0AAH
        MOVX @DPTR,A
        ACALL BEKLE
GOSTER:
        MOV DPTR,#2000H
        MOVX A,@DPTR
        MOV P1,A
        ACALL BEKLE
        INC DPTR
MOVX A,@DPTR
        MOV P1,A
        ACALL BEKLE
        SJMP RESET
BEKLE:
        MOV R0,#015H
BIR:   
        DEC R0
        MOV R1,#080H
IKI:   
        DEC R1
        MOV R2,#080H
UC:    
        DEC R2
        CJNE R2,#000H,UC
        CJNE R1,#000H,IKI
        CJNE R0,#000H,BIR
RET
END   

                                  

           
İkinci RAM' ın bağlanması için önemli bazı ayrıntılar vardır. Birinci RAM' ın bağlanmasında, CPU' nun RD ve WR bacakları RAM' ın sırasıyla OE ve R/W bacaklarına karşı düşürülmüştür. Dolayısıyla direk olarak RAM' a bilgi yazılıp bu bilgiler okunabilecektir. Ama ikinci RAM' a yazılacak bilgiler bir data gibi değil de program kodu olarak okunacaktır. Dolayısı ile bu RAM program kodu olarak okunurken hem seçili olmalı hem de CPU' nun PSEN  işareti uygulanabilmelidir. Bunu sağlayacak pek çok yöntem bulunabilir. Bu işi yerine getirecek donanımımız şekil-4.7.'de gösterilmiştir.

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


 
Şekil-4-8 Kullanılan AND Kapısı İçin Bacak Yapısı ve Lojik Sembolü



Bu RAM' ın testi için yazılacak programda yazılan datalar okunurken program kodu yani 8031 CPU' su emir kodu olarak okunacaktır. Bu yüzden programın sonucunu görmek için RAM' a çok basit bir programın emir kodları yazılacak ve sonrada çalıştırılacaktır. Önce basit programımızı yazalım. Örneğin bu program P1 portuna 10000001b değerini çıkan bir program olabilir.

                                  

;DENEME PROGRAMI-3
ORG 0000H
            MOV A,#10000001B
            MOV P1,A
END.

                                  

            Bu programın hexal yani emir kodu karşılığı
           
74        81
            F5        90'dır.

            Şimdide deneme programımızı yazalım.

                                  


;DENEME PROGRAMI-4

RAM2            EQU   4000H
ORG 0000H
            MOV DPTR,#4000H
            MOV A,#074H
            MOVX @DPTR,A

            INC DPTR
            MOV A,#081H
            MOVX @DPTR,A

            INC DPTR
            MOV A,#0F5H
            MOVX @DPTR,A

            INC DPTR
            MOV A,#090H
            MOVX @DPTR,A

            INC DPTR
            MOV A,#022H
            MOVX @DPTR,A

            LCALL RAM2
END.


                                              
           
Program çalıştırıldığında eğer bir sorunla karşılaşılmaz ise ikinci RAM' ın içindeki bilgileri data gibi değil de emir kodu gibi okuduğu ve sonuç olarak P1 portuna 10000001b değerini çıktığı görülecektir. Son satırlarda ayrıca RAM' ın içine 22h değerinin de yazıldığı görülmektedir. Bunun anlamı RET komutunun çalıştırılarak LCALL ile çağrılan yere geri dönmesini sağlamak içindir.

           

4.3.İki  Mikrobilgisayar' ın Haberleştirilmesi


Yapılan uygulamalı çalışmalardan biride iki mikrobilgisayar sisteminin haberleştirilmesi olmuştur. CPU, EPROM, Latch ve RAM' dan kurulmuş iki sistem 8031'in içinde bulunan UASRT (Universal Asencrounus Receiver and Transmitter) sayesinde seri asenkron haberleşmeyi çok basit olarak yapabileceklerdir. Bu işlemi gerçekleştirecek program, seri haberleşmenin nasıl yapılacağı konusunda bilgi vermenin yanı sıra CPU' daki Timer/Counter  kullanımı ve Baud Rate değeri üretiminin nasıl gerçekleştirileceği konusunda da faydalı olacaktır. Devrenin kurulmasında dikkat edilmesi gereken nokta, birinci CPU' nun RxD  ve TxD bacaklarının sırasıyla ikinci CPU' nun TxD ve RxD bacaklarına bağlanması sonra da devrenin topraklarının birleştirilmesidir.

                                     

;DENEME PROGRAMI-5

;CUNEYT  URGUN
;VERICI 8031 ICIN PROG.
;05-04-1997/CUMARTESI
ORG 0000H
        MOV PSW,#00011000B
        LCALL RAM_A_YAZ
        LCALL TIMER_KUR
GOND:  
        LCALL DATA_GONDER
        SJMP GOND

TIMER_KUR:
        MOV TMOD,#00100010B
        CLR TR0
        MOV TL1,#0FDH
        MOV SCON,#01000000B
        SETB TR1

RET

DATA_GONDER:
        MOV R7,#003H
        MOV DPTR,#2000H
OKU:    MOVX A,@DPTR
        MOV SBUF,A
GONDER: JNB TI,GONDER
        INC DPTR
        CLR TI
        DJNZ R7,OKU

RET

RAM_A_YAZ:
        MOV A,#70H
        MOV DPTR,#2000H
        MOVX @DPTR,A
        INC DPTR
        MOV A,#52H
        MOVX @DPTR,A
        INC DPTR
        MOV A,#63H
        MOVX @DPTR,A
RET
END

                                              

;DENEME PROGRAMI-6

;CUNEYT  URGUN
;ALICI 8031 ICIN PROG.
;05-04-1997/CUMARTESI
ORG 0000H
        MOV PSW,#00011000B
        LCALL TIMER_KUR
        LCALL DATA_AL
YAZ:    LCALL RAMDAN_P1_E
        SJMP YAZ


TIMER_KUR:
        MOV TMOD,#00100010B
        CLR TR0
        MOV TL1,#0FDH
        MOV SCON,#01010000B
        SETB TR1

RET

BEKLE:
        MOV R0,#080H
BIR:   
        DEC R0
        MOV R1,#080H
IKI:   
DEC R1
        MOV R2,#080H
UC:    
        DEC R2
        CJNE R2,#000H,UC
        CJNE R1,#000H,IKI
        CJNE R0,#000H,BIR
RET

DATA_AL:
        MOV R7,#003H
        MOV DPTR,#2000H
AL:     JNB RI,AL
        MOV A,SBUF
        MOVX @DPTR,A
INC DPTR
        CLR RI
        DJNZ R7,AL

RET

RAMDAN_P1_E:
        MOV R7,#003H
        MOV DPTR,#2000H
OKU:
        MOVX A,@DPTR
        INC DPTR
        MOV P1,A
        LCALL BEKLE
        DJNZ R7,OKU
RET               

END




       4.4. İletişim Arayüz Devre Elemanlarının (1488-1489) Eklenmesi


Ara yüz elemanları iki birim arasındaki işaret seviyelerini uygunlaştırmak için kullanılan ara elemanlardır. PC(Personel Computer)' ler seri haberleşmede RS232 standardını kullanırlar. RS232'de DTE (Data Terminal Equipment) karşısındaki  DTE' yi yaklaşık 20mA'lik bir akımla sürer. Akımla sürme yöntemi hatlardaki kayıplardan dolayı daha uygun bir çözümdür. RS232 standardında lojik-0 seviyesi -15V ile --3V ve lojik-1 seviyesi ise +3V ile +15V arasındadır. Arada kalan -3Vile +3V bölgesi ise belirsizlik bölgesidir.

8051 CPU +5V'da çalıştığı için RxD ve TxD bacaklarında lojik-1 +5V ile  lojik-0 ise 0V ile ifade edilecektir. PC' lerde ise lojik-1 +12V ve lojik-0 -12V olduğundan ikisi birbirleri ile haberleştirilirken gerekli gerilim genlik dönüşümlerinin yapılması gerekmektedir. Bu iş için 1488(Quad Line Receiver) ile 1489(Quad Line Driver) entegreleri veya tamamen bunlara eşdeğer 75188-75189 entegreleri kullanılabilir.

**DCE(Data Communication Equipment)

                            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)                          1488                                TxD(11)
                      PC                        +5V                                                                   8031
                               TxD(3)                            1489                          RxD(10)
 



Şekil-4-10. PC ile 8051'in Yüzleştirilmesi

















BÖLÜM V

PIC

5.1. PIC MİKROKONTROLÖRÜ


Kod Verimliliği :

PIC Harvard mimarisi  temelli 8 bitlik bir  mikrokontrtolördir. Bu ,bellek ve veri için ayrı yerleşik bus’ ların bulunduğu anlamına gelir. Böylelikle akış miktarı veriye ve program belleğine  simültane  erişim sayesinde arttırılmış olur. Geleneksel mikrokontrtolörlerde  veri ve program taşıyan bir tek yerleşik bus bulunur. Bu ,PIC’ le karşılaştırıldığında  işlem hızını  en az iki kat yavaşlatır.

 

Güvenilirlik :

Tüm komutlar 12 veya 14 bitlik bir program bellek sözcüğüne sığar. Yazılımın programın VERİ kısmına atlamaya ve veri’yi komut  gibi çalıştırmasına  gerek yoktur.  Bu 8 bitlik bus kullanan ve Horvard mimarisi temelli  olmayan mikrokontrtolörlerde gerçekleşmektedir.

 

Komut Seti : 

16C5X ailesinde  yazılım yaratmanız  için 33 komut  öğrenmeniz yeterlidir. 16CXX araçları içinse bu sayı 35 tir. OIC tarafından kullanılan komutların hepsi yazmaç (register)  temellidir ve 16C5X ailesinde 12 bit 16CXX ailesindeyse  14 bit  uzunluğundadır. CALL, GOTO ve bit test  eden BTFSS, INCFSZ gibi komutlar dışında ,her bir komut, tek bir çevrimde çalışır.

 

Hız:

 PIC ,osilatör ve yerleşik saat yolu (clock bus) arasına  bağlı yerleşik  bir                  (divide by 4 )  4’lü bölünme’ ye  sahiptir. Bu , özelikle 4 MHz lik kristal kullanıldığında komut sürerlerinin hesaplanmasında kolaylık sağlar. Her bir komut döngüsü 1 ms’ dir.  PIC oldukça  hızlı bir mikrokontrtolördür.  Örneğin 5 milyon komutluk bir programın , 20 MHz lik bir kristalle aydınlanması  yalnız 1 saniye sürer. Bu süre  386 SX 33 hızının neredeyse 2 katıdır.

 

Statik İşlem :

 PIC tamamıyla  statik bir mikroişlemcidir.  Başka bir deyişle  saati durdurduğunuzda  ,tüm yazmaç içeriği korunur. Pratikte bunu tam olarak   gerçekleştirmeniz mümkün değildir.  PIC’i uyutma moduna getirdiğinizde  ,  saat durur ve PIC ‘e uyutma işleminden  ....hangi durumda olduğunu size hatırlatacak çeşitli bayraklar kurar. PIC uyuma modunda  yalnızca      1mA dan küçük bir değere  sahip bekleme (standby) akımı çeker.

 




Sürücü  Kapasiteleri :

PIC yüksek bir sürücü çıktı kapasitesine sahiptir.

 

Seçenekler :

 PIC ailesinde her türlü ihtiyacınızı karşılayacak çeşitli hız, sıcaklık ,kılıf, I/O hatları ,zamanlama (timer ) fonksiyonları,seri iletişim portları  ,A/D ve bellek kapasite seçenekleri  bulunur. 

 

Güvenlik :

 PIC endüstride  en üstünler arasında yer alan bir kod koruma özeliğine sahiptir. Koruma bitinin programlanmasından itibaren , program belleğinin içeriği , program kodunun yeniden yapılandırılmasına olanak verecek  şekilde  okunamaz.

 

Geliştirme :

 PIC geliştirme  amacıyla yeniden programlanabilen (EPROM)  ve seri üretim  amacıyla  OTP (one time programmable – bir kere programlanabilir)  için pencereli formda bulunabilir. Geliştirme araçlarının temini mümkündür ve fiyatları caziptir.



5.2.1. PIC Mikrokontrolör Yapısı


CPU  bölgesinin kalbi  ALU’dur. (Arithmetic Logic Unit –Aritmetik Mantık Birimi) ve W (Working-Çalışan)  yazmacı adında  bir yazmaç içerir. PIC, diğer mikroişlemcilerden  ,aritmetik  ve mantık işlemleri  için bir tek ana yazmaca sahip oluşuyla farklılaşır. W yazmacı 8 bit genişliğindedir ve CPU’daki  herhangi  bir veriyi  transfer etmek üzere kullanılır.

CPU alanında  ayrıca  iki kategoriye ayırabileceğimiz Veri Yazmaç  Dosyaları  (Data Register Files ) bulunur : I/O ve kontrol şeklinde  çalışanlar ve tamamen RAM gibi çalışanlar.

            Harvard Mimarisi temelli  mikrokontrolörlerde veri akış miktarını hızlandırmak ve yazılım güvenliğini arttırmak amacıyla aynı bus’lar kullanılır. Bu mimari , veri ve program  belleğinne simultane erişimi olanaklı kılar.









Şekil-5-1   Temel  PIC  Blok Diyagramı














Maxımum frequancyof Operation
EPROM
ROM
EEPROM
Data Memory (bytes)
Data EEPROM (bytes)
Timer Module(s)
Capture /Compare /PWM Module
 Serial Port(s) (SPI /I2C ,SCI )
Parallel Slave Port
Analog to Digital Convertor(8- bit)
Comperators
External Interrupts
Interrupt Sources
I/O
 Voltage Range (Volts)
 Number of  Instructions
Package



PIC16C620
 20
512
_
_
80
_
TMR0
_
  _
_
_
2
Yes
4
13
3.0to 6.0
35
16- pin DIP ,16-pin SOIC ,20- pin SSOP
PIC16C621
20
1K
_
_
80
_
TMR0
_
  _
_
_
2
Yes
4
13
3.0to 6.0
35
16- pin DIP ,16-pin SOIC ,20- pin SSOP
PIC16C622
20
2K
_
_
128
_
TMR0
_
  _
_
_
2
Yes
4
13
3.0to 6.0
35
16- pin DIP ,16-pin SOIC ,20- pin SSOP
PIC16C611
20
1K
_
_
36
_
TMR0
_
  _
_
_
_
Yes
3
13
3.0to 6.0
35
16- pin DIP ,16-pin  SOIC
PIC16C641
20
2K
_
_
128
_
TMR0
TMR1
TMR2
1
SPI/
I2C

Yes
_
_
Yes
8
13
3.0to 6.0
35
40- pin DIP,44-pin PLCC ,44-pin MOFP
PIC16C651
20
4K
_
_
192
_
TMR0
TMR1
TMR2
2
SPI/
I2C
SCI
Yes
_
_
Yes
11
13
3.0to 6.0
35
40- pin DIP,44-pin PLCC ,44-pin MOFP
PIC16C711
20

1K
_

_
36
_
TMR0
_
  _
 _
4ch
_
Yes
4
13
3.0to 6.0
35
18- pin DIP ,18-pin SOIC
PIC16C731
20
4K
_
_
192
_
TMR0
TMR1
TMR2
2
SPI/
I2C
SCI
 _
5ch
_
Yes
11
13
3.0to 6.0
35
28- pin DIP ,28-pin SOIC
PIC16C741
20
4K
_
_
192
_
TMR0
TMR1
TMR2
2
SPI/
I2C
SCI
Yes
8ch
_
Yes
12
13
3.0to 6.0
35
40- pin DIP,44-pin PLCC ,44-pin MOFP
PIC16C841
20
 _
_
_
36
_
TMR0

_
   _
 _
_
_
Yes
4
13
2.0to 6.0
35
18- pin DIP ,18-pin SOIC



























5.3. Gerekli Donanım  :


PIC ‘i  çalıştırmak için gereksinilen asgari donanım bir osilatörden ibarettir. Osilatör ,bir dirennç ve kapasitör veya bir kristal /seramik  rezonatör ve iki kapasitör formunda olabilir. Reset hattı kaynak gerilimine bağlanabilir. Dahili devreler , normal işletim şartlarında PIC’in yeniden  başlatılmasını  sağlayacaklardır.
           


Şekil-5-2  PIC  İçin Gerekli  Minimum   Donanım 


Bir sonraki aşama harici reset bileşenlerinin ve gerekiyorsa gerilim düşüklüğünden  kaynaklanabilecek reset korumasını sağlanmasıdır. 100nF’lik bir dekuplaj kapasitörü PIC’ e olabildiğince yakın olarak güç kaynağına bağlanmalıdır. Güç ve toprağı taşıyan bakır yollar mümkün olduğunca geniş olmalıdır.  Böylelikle elektriksel gürültü sorununu en aza  indirgemeye yardımcı olacak  bir direnç düşüklüğü  sağlanabilir.

 5.3.1.Reset Devreleri :


Mikrokontrtolör  sistemlerinde reset devreleri  aşağıda sıralanan nedenlerden ötürü  önemlidir :

-           Program  sayacı  ,I/O  ve kontrol  yazmaçları  gibi belirli  yazmaçlar için  bilinen bir durumun  varlığıundan emin  olunmasını sağlar.

-          Saatin doğru  frekansa yerleşmesi  için yeterli zamanın  verilmesine yardımcı olur.

-          Şebeke  geriliminde  bir sorun varsa ,mikrokontrtolör nin düzgün  olarak yeniden başlayacağından emin olunmasının sağlar.

PIC dahili  Power  On Reset   devrelerine sahiptir.  Eğer PIC’i besleyen  güç kaynağı  0,05 V/ms’den  daha büyük  bir oranda  artarsa  dahili  reset devreleri  yeterli olacaktır (Kaynak  geriliminin  0V’tan 5V ‘a kadar artması için  gereken süre  100ms ‘den küçük olmalıdır).

Bazı düşük  frekanslı  kristal osilatörler çalışmak için 18ms’den fazlasının gereksinirler. Bu durumda  ve güç kaynağının yükselmesinin 100 ms’den uzun sürdüğü  durumlarda   ,harici bir RC reset devresi gerekebilir.

Şebeke  geriliminin  inişli çıkışlı  olabileceği veya gerilim  düşüklüğü  olasılığı bulunduğu uygulamalarda , gerilim  düşüklüğü  durumunu  temiz bir reset’in izleyeceğinden emin olmak için  extra reset devreleri eklenmesi  gerekir.




Şekil-5-3  Kesinti Koruma Devreleri  ve  Harici Reset  Devreleri

Kusursuz kesinlikle bir reset  gerilim  ayarı  gereken uygulamalarda  ,Texas Instruments TL7705 gibi  bir cihaz kullanılabilir. Bu cihaz, şebeke gerilimi  yeniden çalıştırma öncesinde
gerekli değerin altına düşerse ,gerilim  düşüklüğü  oluşumuna karşı  koruma sağlayarak reset’ in gerçekleşmesine çalışacaktır. Bu tip uygulamalar için tasarlanmış  bir başka aygıt  ,10-92 kılıflı  Dallas  EconoReset ‘tir.

Not: 16C62X serisi  aygıtlar gerilim düşmesi  veya güç kesintisini  algılayabilecek  dahili  devrelere sahiptirler. Programın gerilim düşmesi veya güç kesintisinin ardından kendini toplayabilmesi  için yazmaçta bu durumun  belirtilmesi gerekmektedir.


5.3.2. Osilatörler

           
PIC, sayılı  seçeneklerde  kristal ve RC osilatörleri kabul  eder.
16C5X PIC sonekleri :

-XT   Kristal veya Seramik Rezonatör-genel amaçlı –4 MHz

-RC   Direnç / Kapasitör zaman sabitli – düşük maliyet –4MHz

-HS   Kristal veya Seramik Rezonatör –yüksekhız-20MHz

-LP    Kristal veya Seramik  Rezonatör-asgari  akım –40KHz

Yukarıdaki  konfigürasyon lar için  pencereli cihazlar-JW sonekleriyle programlanabilirler.
16C5X ailesinin son sürümü artık bir sayı ve kılıf tipinin izlediği A soneklerine sahiptir. A cihazlarının en büyük farkı ,osilatör tipinin astın alma aşamasında değil, programlama aşamasında seçilebilmesidir.

RC osilatör tasarımın da direnç 5KW-100KW aralığında olmalıdır. 1MW gibi yüksek  R değerleri osilatörü gürültü ,nem ve sızıntıya  duyarlı  duruma  getirir. Nem ve sızıntıyı  PCB ve çevre birimleri üretir. 2,2KW ‘un altındaki  R değerleri kararsızlığa hatta osilasyon kaybına yol açabilir.

RC osilatörünün kapasitans kısmı 20pF’den  büyük olmalıdır.
R ve C  seçiminde  büyük ve yüksek değerli C ve R ‘den kaçınılmalıdır. C’nin sızıntısı ve R’nin direnci  frekans kararlılığını etkileyebilir.
Eğer bir RC osilatör  kullanıyorsanız, OSC2/ CLKOUT bacağında saat frekansının ¼’ ü frekansta bir sinyal bulabilirsiniz. Bunu  A/D dönüştürücülerini  ve LCD sürücü yongalarını  sürmek amacıyla devrelerinizde kullanabilirsiniz.




Şekil-5-4  PIC Osilatör  Devreleri


KAPASİTÖR SEÇİMİ  (KRİSTAL OSİLATÖR İÇİN)
OSC  TYPE
FREQ
C 1
C 2




LP
32 KHz
15 pF
15  pF


XT
100 KHz
200 KHz
455 KHz
1 MHz
2 MHz
4 MHz
15-30 pF
15-30 pF
15-30 pF
15-30 pF
15  pF
15  pF
200-300                     PF
100-200  pF
15 –100  pF
15    pF
15    pF
15  pF

HS
4 MHz

           8 MHz

20 MHz
15    pF
15    pF
            15  pF
15    pF
15    pF
15  pF

KAPASİTÖR SEÇİMİ (SERAMİK RESONATÖR İÇİN)

Oscillatör  Type
Resonatör  Frequancy
Capacitör Range  C1 =C2




XT

455 KHz
2,0 MHz
4,0 MHz
150-300 pF
20-330 pF
20-330 pF
HS
8,0 MHz
20-230 pF

5.3.4. PIC’ lerde Kılıf Yapıları


PIC’ler çeşitli  kılıf tiplerinde ,hız ve osilatör fonksiyonlarına sahip  olarak üretilmektedir. 16C5X gibi cihazlar standart DIL veya SO  kılıfları  halinde bulunabilirler ve osilatör tipiyle satın alınırlar. PIC’lerde A serisi  (örneğin 16C54A) çalışabildikleri  maksimum  hıza göre (-0,4 ;10 ,-20) satın alınırlar ve   osilatör  tipi  seçimi programlama aşamasında yapılır. Bu kullanıcıya maliyette ve envanter kontrolünde kolaylık sağlar.

5.3.5. Giriş / Çıkış Devresi


Bir PIC’e arabirim oluşturabilecek en temel I/O devresi bir düğme veya bir LED olabilir. Bu PIC’le denenecek ilk örnekler için asgari gereksinimdir.
PIC,LED’leri doğrudan sürebileceği gibi ,portların bağlı olduğu her 25 mA’e kadar akım çekebilir veya 20mA’e kadar akım pompalayabilir.(En fazla port sayısı ve akım sınırları için PIC veri tablolarına bakınız)Bu akım kapasiteleri PIC’lerin LCD ve mantık devrelerinden , şehir şebekesine bağlı triyaklara kadar uzanan aygıtları doğrudan sürebilmesini sağlar.

16Cxx ailesinde, PORT B üzerinde zayıf bir yukarı çekme (pull up)olanağı vardır. Bu OPTION yazmacında yer alır ve port B girdiler için kullanıldığında ortaya çıkabilecek direnç ihtiyacını giderir.

16Cxx cihazlarında T0CLK girdisi şeklinde fonksiyon gösteren ek bir PORT A(A4) bulunur. Bu girdi olarak kullanıldığında bir Schmitt tetikleyicisi aracılığıyla tamponlanır. Çıktı olarak ayarlandığındaysa , bacak açık kollektör durumundadır.
A4 bacağının çıktı olarak kullanılması için , çıktı durumunda herhangi bir değişikliğin görülmesi gerektiğinden bir akımın varolması şarttır. Bu bir yukarı çekme direnci formunda olabilir. Çıktı açık kollektör olduğunda, bu bacağın mantığı tersine çevrilir-mantık1 transistörü açar ve bacağı mantık 0’a çeker. Bu bacak kaynak kapasitesine bağlı değildir yalnızca akım çeker.

5.3.6. Şehir Şebeke Gerilimi:


            Şehir şebekesine  doğrudan  bağlanan devreler geliştirilirken daima  bir  yalıtım transformatörü  ve toprak kaçak koruması kullanılmalıdır.
Şebekeyle  arabirim  yapılanması  iki yolla  başarılabilir:

a)      Bir opto izolatörle
b)      Şebeke girişine  seri bağlı  4,7MW dirençle

Her  iki yöntemin de avantajları  ve dezavantajları  vardır.Opto ,özellikle son kullanıcının  devrelere erişimi mümkün olduğunda  güvenlik sağlar. Uygulamalar  kullanıcıdan tamamen izole edilmiş olur. Öte yandan ,0V geçiş  algılanmasının (zero crossing deetection)  sağlanması   için portlardan  birine bağlanmış  4,7 MWdirenç ve kapasitif güç kaynağıyla oluşturulmuş bir aydınlatma dimmeri, şebekeye doğrudan  bağlanarak çalıştırılabilir.


5.3.7. Analog  Girdiler :


16C71,C73,C74 PIC serileri dahili bir 8 bit’lik analogdan sayısala dönüştürücüye sahiptir. A/D dönüştürücüsüne ulaşan bir gerilim ölçülür ve 256 seviyesinden birine dönüştürülür. Gerilim A/D’nin ölçebilme eşiklerinin dışında kalırsa, giriş geriliminin değişme aralığında bulunduğundan emin olmak için girişte seviye ayarı yapmak gerekebilir.
Örneğin sensör 0­-3V üretiyorsa ve A/D’nin referansı 5V ise, sensör için en iyi çözünürlük 5/256=19.5 mV olacaktır.
Diğer yandan, sensör 5V’a çıkmışsa veya A/D referansı 3V’a dönüşmüşse, çözünürlük 11.7 mV’a düşer.
Gerilim çok yüksekse, A/D’ye verilmeden önce düşürülmesi gerekir. En basit gerilim düşürücü,  kaynağa yükleme yapmayan bir potansiyel bölücü gibi davranan bir çift dirençtir.

Direnç hesabı, A/D tarafından çekilen akım ihmal edilebilir olduğun düz oranla yapılabilir. Ancak yüksek gerilimin bölücü ağlardaki dirençlerin ısınmasını önlediğinden emin olmalısınız.

Örneğin  0-20 V’luk bir kaynağın 16C71’e sabit bir güç kaynağının bir parçası olarak verilmesi gerekir. 20K’lık bir direnç zinciri 20 mW tüketecektir. Direnç zinciri bir 15 K ve bir 5K’dan oluşturulabilir ve böylelikle PIC’e 05V’luk bir girdi ulaştırır.
Direnç toleransının telafi edilmesi gereklidir. 5k’nin yerine 4K7 sabit dirence seri bağlanmış 1K’lık çok turlu trimer direnç konabilir. 20V’luk bir referans 15K’lık direncin üstüne uygulanır ve gerilim, trimmer ayarlanarak A/D girdisinde tam 5V’a ayarlanır.
Opamlar kullanılarak sinyal güçlendirilebilir.

A/D ile bağlantılı olarak uğraşılması gereken üç yazmaç vardır: ADCON0, ADCON1 ve ADRES. ADRES, A/D dönüşüm süreci sonuçlarını tutan yazmaçtır.  





















EK 1

MİKROKONTROLÖR TESTİ


            Özel bir uygulama  için uygun mikrokontrolörün seçilmesi , piyasada  çok sayıda  kontrolör ailesi ve bunların  bir çok türevi bulunduğundan  kullanıcı için pek kolay değildir. Buarad verilecek  bir takım kriterler , kullanıcıya , seçimde kolaylık sağlayacaktır.

Günümüzde  mikrokontrolörler yarım düzineden  fazla kriterlerle  değerlendirilir  ve sınıflandırılır.  Bu kriterler arasına  CPU‘nun performansı ,iç ve dış belleğin büyüklüğü , iç çevre birimler ve  onların interrupt yetenekleri , güç tüketimi , kılıf, sunulan geliştirme desteği , fiyatı  ve istenen  miktarın temin  edilebilmesi girmektedir. Bu özelikler ,yan  taraftaki  “Mikrokontrolörler için  seçim kriterleri” adlı  kutuda  ayrıntılı  olarak gösterilmektedir.

Elbette  genel geçerli  performans  verilerinin  yanı sıra  gerçekleştirilecek  uygulama da seçimi  etkiler. Burada  birincil hedef daima , geliştirilecek sistemin  beklentilerinin minimuma indirgenerek  karşılanmasıdır. Mikrokontrolör kullanımındaki şu anki eğilime bakılırsa  gittikçe 4 bitlik elemanların  yerini 8 bitliklerin aldığı  görülebilir.  8 bit mimarilerinin avantajlarından    biri ise  hesap gücünün daha yüksek  olmasıdır.
Böylece  klasik kumanda görevlerinin yanı sıra kontrol problemlerinin de çözülmesi mümkün olmuştur. Öte yandan  da kullanıcı ,belleğin  büyütülebilmesi ve uygun derleyicilerin  bulunması sayesinde  elemanı   yüksek seviyeli  bir  dille programlayabilme  imkanına kavuşmuştur.

 

 

Kontrolörlerin Çarpma ve Bölme İşlemleri Aracılığıyla Karşılaştırılması


Burada  tamsayı  çarpma ve bölme  işlemleriyle bazı  kontrolör ailelerinin  hesap gücü karşılaştırılacak.  Bunun için ilk önce ilgili  kontrolörün  hangi işlemleri desteklediği  incelenmelidir.  Ayrıca bazı teknik  özeliklerin de bilinmesi  gerekir.  Nitekim bir de ilgili  işlemlerin  süresi önem taşır. Bu,  osilatör frekansı , makine çevrimi başına  saat periyotları sayısı  ve makine  komutu  başına makine çevrimleri sayısı  gibi değerler üzerinden hesaplanır.(“Tam sayı hesap gücünün  değerlendirilmesi” adlı kutuya   bakınız).


            Tabloda  birtakım 8 bitlik  kontrolör  aileleri  karşılaştırılmaktadır. Bu tabloda  osilatör frekansı  ve makine çevrimleri  sayısının  yanı sıra  çeşitli  komutların işlenmesi  için kaç çevrim  gerektiği de gösterilmektedir. Ayrıca  donanım  olarak  gerçekleştirilen  çarpma ve bölme  komutları  ve onların  ilgili kontrolöre  göre işlem süreleri  de Tabloda verilmiştir. Bu  sürelerin  verilen maksimum  saat frekansında  değil , tipik bir frekansta hesaplandığı dikkate alınmalıdır , çünkü genelde  bir ailenin  her türevi maksimum  saat  frekansında çalışmaz.



Tamsayı Hesap Gücünün Değerlendirilmesi

1-Donanım aritmetik komutlarının  analizi
Çarpma (8x8 , 16x16) , bölme (8/8 , 16 /16) (ön işaretli / ön işaretsiz)

2- Komut işleme süresinin  hesaplanması
fos osilatör frekansı

Makine çevrim sayısı(osilatör saatleri / makine çevrimi)
NCYCL

Komut çevrimi sayısı (makine çevrimi / komut)

NINSTR


Komut işleme  süresi (t INSTR)
           

                        t INSTR   =         NCYCL           NINSTR

                                                              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 kontrolörlerle   bile rekabet edebilir. Ama yüksek  saat  frekanslarında  hesap gücünün değerlendirilmesi  8 bitliklerde  olduğu  kadar kolay  değildir. Burada verilen değerler , yalnızca iç  kod belleği  aracılığıyla  yapılan program  işlemlerinde elde edilen minimum komut işleme  sürelerine dayanmaktadır. Dış bellekle  çalışıldığında  bu süreler , konfigüre  edilen bellek arabirimine  bağlı  olarak  bir hayli uzayabilir.
           

           

Mikrokontrolörler  İçin  Seçim Kriterleri

CPU’ nun  Performansı                                      İç çevre Birimlerinin İnterrupt

                                                                                                                                                         Yeteneği

Komut dağarcığı(RISC/CISC)                              Dış interruptlar  

Adresleme türleri                                                                     İnterrupt Tepki Süresi         
Veri yolu genişliği( 4...32 bit)
 
İç , Dış bellek (büyüklüğü)                                      Güç Tüketimi
Veri belleği olarak RAM,                                          Akım çekişi
 EPROM                                                                                Power Down modları
Program belleği olarak                                                     Statik Dizayn      
 ROM                                                                                    Sub Clock                             
FLASH , EPROM (OTP)                                   Besleme gerilimi bölgesi
                                                                                                    Sub Clock                                    

                                               Kılıf(DIP ,SDIP, SOIC, PLCC,
                                                           PQFP)
İç Çevre Birimleri                                                    Geliştirme Desteği
Zamanlayıcı (Compare ,                                        Assembler Linker          
Capture , PWM)                                                   Yüksek seviyeli dil(ANSI-C)                
Seri arabirimler(UART ,USART      ROM –Monitörlü ,emülatörlü
,  I2C ,SPI)                                          geliştirme kartı
A/D çevirici (8 veya 10 Bit)                   Gerçek zamanlı işletim sistemi
D/A çevirici
Watchdog
Paralel  portlar
















 

          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.
           
Burada  bir de karşılaştırma  kütükleri  için gerekli  değerlerin   gerçek zamanlı  olarak hesaplanması  sorunu  çıkıyor. “karşılaştırma  kütükleri için formüller”   adlı  kutuda gerekli  matematiksel  bağıntılar verilmiştir. Periyot  süresi iki 16 bit  yakalama  değerinin  farkından elde edilir  ve   16 bit  büyüklüğünde  bir değer olabilir. Açılar  0.5 derece kadar  bir çözünürlükle  işlendiğinden  onların  veri genişliği 10 Bit olur.
Dolayısıyla  ikinci  denklemde   bir 10x16 bit  çarpma ve ardından  bir 10 bit değerinde bölme işleminde  16 bitlik  bir sonuç elde edilir.  Ardından  yapılan bir 16x16  Bit toplama işleminin sonucu  ise 16 bitlik   bir karşılaştırma  değeridir. İkinci karşılaştırma değeri için de aynı akış geçerlidir.

Maksimum devir sayısında  (15000 devir /dakika) giriş  işaretinin  minimum periyot süresi  4 ms olur. Hesapların giriş işaretiyle senkron   yapılması gerektiğinden  bunlar  devir sayısı işaretinin ISR’ sinde halledilir.
Hesaplar  tablodaki yazılım  aritmetik  rutinleriyle  gerçekleştirilmiştir.  Devir sayısı yakalama ISR’ sinin toplam  çalışma süresi olarak 2.5 ms kadar  bir süre  ölçülmüştür.  Bundan , söz konusu  hesapların CPU ‘nun işlem kapasitesinin % 62 ‘sini gerektirdiği anlaşılmaktadır.  İkinci  bir işaretin üretilmesi ise kontrolörün kapasitesini aşardı. Kontrolörün  saat frekansının yükseltilmesi de  çözüm değildir ,çünkü  onunla birlikte zamanlayıcının  giriş frekansı da  yükselir. Gerçi  daha yüksek giriş frekansında  periyot süresi ölçümünün çözünürlüğü  yükselir ,ama bununla  birlikte  ölçülebilir en kısa  periyot süresi de artar( 12 MHZ saat frekansı ve 458 dev /dak kadar bir devir sayısında 0.131 ms)
           
Daha iyi  bir çözüm ise  yazılımın  , SAB80C535 ‘e karşılık  daha kapsamlı bir iç çevre  birimlerine  sahip  olan ve aritmetik  yardımcı işlemcisiyle  dikkatleri çeken  SAB80C537 ‘ye taşınmasıdır. Bu nedenle  karşılaştırma değerlerini  hesaplama rutinleri  SAB80C537 ‘nin imkanlarına uyarlandı. Sonuç olarak  yakalama ISR’ sinin  çalışma süresi olarak (iki karşılaştırma  değeri hesaplandığında ) 230 ms ölçüldü.  


















 



EK  2

EEPROMLARIN PROGRAMLANMASI



Genelde basit türden  programlanabilir bellek elemanlarının  hedef donanıma bağlanmaları için standart arabirimleri vardır. Birkaç istisna  dışında bellek bölgesi  genelde homojen olduğundan programlama olaylarının  gerçekleştirilmesi için böyle  bir arabirim  yeterlidir. Kumanda için OE ile CS işaretleri  ve çoğu zaman özel  bir programlama  gerilimi  bacağı (Vpp) kullanılır (şekil-1). Ayrıca bu elemanların  uygulama alanı da basit  ve standart bir programlama arabirimi  gerektirir.


            Programlanabilir belleği  olan mikrokontrolörlerde ise iş daha karmaşıktır. Burada CPU ile bellek   arasındaki  arabirimi olsa bile  onun yapısı  uygulama  alanına ,
elemanın fonksiyon kapsamına  ve elbette  yapımcının konseptine  bağlıdır.

Şekil –1 Basit Bir Programlanabilir Belleğin Standart Arabirimi. Bellek Bölgesi Homojen Olduğundan Böyle  Bir Arabirim Programlama İçin Yeterlidir. 



Motorola’da Standart Arabirim :

Motorola’ nın MC68HC711 mikrokontrolörün’ de EPROM  birimi , kontrolör EPROM  bölgesi  açısından  standart bir bellek elemanı (örn :27256) gibi  programlanabilecek  ve okunabilecek  şekilde  düzenlenmiştir.(şekil-2). Burada  işaretlerin  doğru sıralanması için  sadece pasif bir adaptör gerekir.  Saat  işareti  gerekli değildir, erişme süreleri ve akım  çekimi  ise standart  bellek elemanınkiyle  aynıdır. Ama kontrolördeki  EPROM belleğinin  iç adres bölgesi D000H  ile FFFFH arasındadır ,oysa bakılırsa –programlama cihazından –EPROM  için 0 ...7FFFH adres bölgesi ayrılmış. Bu  çelişkinin çözülmesi  için programlama cihazının  belirli ofset ve bölge işlemleri  sunması  gerekir. Ayrıca  MC68HC711 mikrokontrolörü , bu arabirim  üzerinden  erişilemeyen  bir EEPROM  bölgesine de sahiptir.





INTEL’ de  Aktif  Parelel Arabirim :

8051 mikrokontrolörün’ de (Intel –Siemens, AMD)  şu yöntem  seçildi ;  Önceden belirlenmiş   tolerans bölgesinde  bir saat frekansı  uygulanarak  iç yol fonksiyonları  kumanda edilir.  Mikrokontrolörünün kendisi ise  aktif çalıştırılır. Kumanda girişlerine( örn :RDY, EA , PSEN ,P1.0 v.b) uygulanan  belirli  seviyelerle  eleman programlama moduna getirilir  ve port  bacakları iç adres  ve veri yollarına bağlanır(şekil-3). EA bağlantısı üzerinden de programlama gerilimi uygulanır. Programlama cihazı ise serbest erişimle  bellek  hücrelerini okuyup  programlayabilir. Ama paralel modda bir kaç elemanın aynı anda programlanması gerektiğinde  (üretimde) ne yazık ki  her zaman belirlenmemiş olan  özel işaret kombinasyonları gerekir.  Bazı 8051 versiyonlarında  güvenlik fonksiyonları  tümleştirilmiştir.  Örneğin  programlanmış belleğin  okunmasını engelleyen  güvenlik  bitleri  ve hata kontrolü  sağlayan  deşifre tabloları.  Bu özel fonksiyonlar ise  basit programlama cihazlarının  standart fonksiyon kapsamını aşar. Bu özel fonksiyonların  çalıştırılabilmesi için en azından kullanıcı arabiriminde gerekli düzenlemelerin yapılmış  olması, elemanda  ise özel kumanda işaretlerinin  uygulanması gerekir.


           


Şekil –3 8051 ailesinde  kumanda işaretleriyle  programlama modu seçildikten sonra  port bağlantıları iç veri ve adres  yoluna bağlanmış olur.


SIEMENS’ te  Kütük Arabirimi :

            Siemens’in SAB88C166(16-bit)ve SAB80C512( 8051 varyasyonu) mikrokontrolörlerinde  programlama arabirimi (şekil-4)  şu şekilde düzenlenmiştir. Programlama  modunda  port bağlantıları üzerinden ,gerekli  bilgilerin (adresler, bölgeler, veriler) yazıldığı  ve işlemlerin sonuçlarının bulunduğu iç kütüklere erişebilir.  Asıl  okuma ve programlama olayı  elemanın içinde gerçekleşir.  Programlama cihazı açısından bu yöntem daha karmaşık değil  ,ama farklı.


Şekil- 4  8051 ‘in Siemens  versiyonu   olan 80C512 ‘de programlama  içte yapılır. Programlama  cihazı , C512’ yi  programlama moduna getirmek için  kontrolörnin belir        li kütüklerine verilir.

68HCXX mikrokontrolör ailesinin  tam servisten  yararlanmadan  salt programlanması için yapımcı, özel devreler kullanılmasını öneriyor. Bunları ya kullanıcın kendisi  hazırlaması ya da bu devrelerin bulunduğu  bir geliştirme kiti astın alması  gerekiyor. Bu devrelerde ,iç belleği kullanılacak master EEPROM ‘un içeriğiyle  besleyen  sabit olarak  programlanmış  bir yazılımı aktifleştirilir. (şekil-5). Geliştirmede zahmetli  olan ve üretimde  gerekli  kalite güvencesini  sağlamayan (çünkü elemanın  okunarak kontrol edilmesi mümkün değil) bir yöntem. 

Buna  karşılık  PGS53 vePGS67 ertec sistemleri  eksiksiz bir yöntem sunuyor: gerçi  biraz zahmetli , ama kullanıcı  bunu  fark etmiyor ; üstelik bu sistem tüm özel fonksiyonlarla  donatılmış. Burada programlama cihazıyla yükleyici üzerinden elemana seri  olarak  bir program yüklenir ve orada  başlatılır. Bu servis  rutini sadece  programlama cihazıyla  iletişimi sürdürmek  ve elemandaki  programlama fonksiyonlarını kumanda  etmek için kullanılır. İletişim ya seri ya da hızı yükseltmek amacıyla  port bağlantıları üzerinden  paralel  yapılabilir.  O zaman örneğin MC68HC711 elemanının EEPROM  bölgesi de okunup  programlanabilir.  Ayrıca güvenlik  bitleri  ve konfigürasyon kütüklerinin  aktifleştirilmesi de  mümkündür.

Bir başka sorun da mikrokontrolör  içindeki  belleklerin  homojen bir yapıya sahip   olmamasıdır. Ama bu sorun , programlama  cihazının kullanıcı arabirimindeki  ofset ve bölge operatörleriyle  çözülebilir. Ne yazık ki kullanılan  yazılım çeviricileri  bu tür elemanların içeriğini  eksiksiz ve çelişkisiz gösteren – ki bu üretim  için gereklidir. –kod  dosyaları  sağlamıyor.  Burada programlama  cihazı  yapımcıları  tarafından verilmesi gereken  dönüştürme  araçları  yardımcı olur.

Ayrıca MC68HC11F1’de ,yükleyici  üzerinden de dıştan  erişilmeyen  bir EPROM  hücresi ( konfigürasyon kütüğü ) vardır. Ama elemanın tüm davranışları  (örn: memory-mapping) bu hücre üzerinden  belirlendiği  için bu hücrenin  içeriğini mutlaka –en azından  üretimde-erişilebilmelidir. Burada da yüksek performanslı  programlama cihazları  bir çıkar yol sunuyor :Elemana ,zamanlama spesifikasyonlarına  uyarak bir dış kod belleği bağlanır ve ardından  aktif  dış veri yolu üzerinden  konfigürasyon  kütüğünün içeriği  okunur.



Şekil-5  Karmaşık : 8HC11 mikrokontrolör bir master-EPROM üzerinden programlanır. EPROM  içeriğinin kontrol amacıyla  okunması mümkün değildir. Kalite güvencesi açısından kötü. İyi programlama cihazlarıyla bu dezavantajlar giderilebilir. Yükleyici  üzerinden mikrokontrolöre , programlama olaylarını  kumanda  eden bir servis  rutini yüklenir.

PIC’ lerde  Mantıksal Arabirim :



Microchip  firmasının PIC mikrokontrolörlerinin   programlama  arabirimi basittir , ama programlama  cihazından birtakım zeki  fonksiyonlar  bekler(şekil-6) : Elemanın  kendi içindeki bazı kütükler dış programlama  ve okuma  erişimlerini kumanda eder. Ama bu kütüklerin  hepsine dıştan erişilemez. Örneğin adres kütüğü sadece silinebilir ve saatle  saydırılabilir. İç bellek  hücrelerine  erişilmesi için  bu kütüğün kontrollü  olarak  çok kez saatlenmesi gerekir.

Şekil 6  -Gerçi  PIC ailesinin programlama arabirimi  basit , ama programlama  cihazının zeki  olması gerekir. Dış okuma / yazma  erişimlerini kumanda eden her kütüğe  dıştan erişilemez.




Sözü edilen  mikrokontrolörde  erişim ne kadar  karmaşık  ve değişik olursa olsun ; Bu  kullanıcıdan  gizli kalmalıdır. Kullanıcının beklentileri şunlardır : Bütün iç EPROM ve EEPROM  hücrelerine  serbest ve parametrelenebilir şekilde  erişmek.  Bu standart fonksiyonlara ek olarak konfigürasyon ve güvenlik kütüklerine  yazma ve kontrol amacıyla okuma için yöntemlerde bulunmalıdır.  Özelikle üretim alanında  proseslerin daha fazla otomatikleştirilmesi  için cihaz fonksiyonlarının  kullanıcı için sadece inter aktif olarak değil , açık ve kesin belirlenmiş komutlar  üzerinden de  başlatılabilmesinde yarar  vardır. O zaman  işçilerin de kullanabileceği projeye özel yığın  işlemlerinin hazırlanması  da mümkün olur.

Örneğin ertec  GmbH ‘nın  geliştirme için PGS53 ve üretim  için PGS67      (şekil –7) programlama  sistemlerinde , özellikle  yukarıda  belirtilen son  beklentiyi karşılayan bir komut dili  kullanılmaktadır. Burada bir elemanın programlama sı için gereken çağrı  şu şekilde yapılır.

            PGS67 w –emc68hc11f1_ee  -fproject.rel

Bu çağrı Motorola nın MC68HC11F1 mikrokontrolörsinin  EEPROM  bölgesini PROJECT.REL dosyasındaki  verilerle programlar. Bu Motorola-S  formatlı  doya tüm EPROM bölgesini  kesin olarak  tanımlarsa  başka ofset  veya uzunluk bilgileri verilmesi gerekmez. İkinci  bir çağrıyla da

            PGS67 c –emc68hc11f1_ee  -fproject.hex

Programlamanın sonucu bir kez daha kaynak  dosyayla karşılaştırılır. Ancak bu şekilde programlamanın kesin olarak doğru  yapıldığı kanıtlanabilir.  Konfigürasyon kütüğünün yazılması ise şu şekilde yapılır.

            PGS67   #3,0x1f     -emc68hc11f1_ee

Bir  özel fonksiyon olan  #3 ,ardından gelen hexadesimal sayıyı kütüğe  yazar ve içeriğini geri bildirir.

Gerçi  bu programlama  sistemleri için Windows versiyonları da vardır, ama fonksiyon dizilerinin  toplu işlem dosyaları içinde işlenmesi oldukça  etkili  ve her zaman tekrarlanabilir  bir  çalışma yöntemi teşkil etmektedir.  Hata kodlarının ve onunla kumanda edilen çalışma akışlarının değerlendirilmesi nedeniyle böyle bir kumanda dili , üretime uygun programlama  için idealdir.  Programlama   görevi kesin olarak tanımlandıktan sonra cihazı, üretimde çalışan elemanlar da   basit çağrılarla ( yanlış kullanma tehlikesi çok az ) kullanılabilir. İster basit bellek elemanı, ister karmaşık mikrokontrolör, ister basit kod programlaması  veya elemana özel fonksiyonlar olsun  kullanıcı için hepsi bir.



 
 
 
KAYNAKLAR



1-      Mikroişlemciler ve 8051 Ailesi(Donanım Programa Ve Uygulamalar) ,            Dr.Haluk Gümüşkaya

2-      ELO, Elektronik  Dergisi , Sayı-92 –S.54-57

3-      ELO, Elektronik  Dergisi , Sayı-92 –S.58-60

4-      PIC Programlama El Kitabı

5-      MCS51 Microcontroller Family User’s Manuel , Intel  ,1994

6-      The  8051 Family Of Microcontroller, Richard H. Barnett , Prentice Hall ,1995   (164 Sayfa)

7-      Applications Notes For 80C51 –Based      8-Bit Microcontroller, Intel

























Hiç yorum yok:

Yorum Gönder