Cevapla  Konu Gönder 
8051 mikrokontroller dökümanı
Yazar Mesaj
kamber
Administrator
*******


Mesajlar: 2,382
Grup Administrators
Katılım: Jan 2008
Durum: Çevrimdışı
Rep Gücü: 0
Mesaj: #1
8051 mikrokontroller dökümanı

İÇİNDEKİLER

ÖZET ...............................................................................................................................I
ABSTRACT ....................................................................................................................II
TEŞEKKÜR ..................................................................................................................III
İÇİNDEKİLER..............................................................................................................IV
ŞEKİLLER DİZİNİ .....................................................................................................VI
TABLOLAR DİZİNİ..................................................................................................VIII

BÖLÜM I.........................................................................................................................1
GİRİŞ .............................................................................................................................1

BÖLÜM  II.......................................................................................................................3
8051 ..............................................................................................................................3
2.1  8051 MİKROKONTROLÖR AİLESİ..................................................................... 3
2.1. 8051 Komut  Kümesi............................................................ ...................................11
2.1.1. Adresleme  Modlarındaki Gösterim .....................................................................15
2.2.1. 8051 Interrupt Yapısı ............................................................................................16
2.2.2. Zamanlayıcı ve  Sayıcı  Yapısı  (Timer / Counters) .............................................17
2.2.3. Güç Kontrolu (Power Control) ..............................................................................19
2.2.4.  8051 Mikrokontrolörlerde İletişim .......................................................................20
2.2.5. PC Seri  I/O Arayüz Cihazının Kontrolü ve Programlama Çalışmaları................26

BÖLÜM III ...............................................................................................................38
UYGULAMA  ÖRNEKLERİ.........................................................................................38
3.1. Kesme ile Çalışan 8-Bit  ADC Arabirimi ................................................................38
3.2- SAYISAL ANALOG ÇEVİRİM.............................................................................40

BÖLÜM  IV....................................................................................................................45
8051 GELİŞTİRME DEVRELERİ- YAZILIMLARI....................................................45
4.1.CPU-EPROM-LATCH Kurulumu ...........................................................................45
4.2.RAM (6264)' ın Eklenmesi     ..................................................................................48
4.3.İki  Mikrobilgisayar' ın Haberleştirilmesi.................................................................53
4.4. İletişim Arayüz Devre Elemanlarının (1488-1489) Eklenmesi ..............................55

BÖLÜM V ..................................................... ...............................................................57
5.1. PIC MİKROKONTROLÖRÜ ..................................................... ...........................57
5.2.1. PIC Mikrokontrolör Yapısı .............................................................................58
5.3. Gerekli Donanım  ..................................................... ..............................................61
5.3.1.Reset Devreleri ..................................................... ................................................61
5.3.2. Osilatörler ..................................................... ..................................................63
5.3.4. PIC’ lerde Kılıf Yapıları..................................................... ..................................65
5.3.5. Giriş / Çıkış Devresi ..................................................... .................................... 65
5.3.6. Şehir Şebeke Gerilimi..................................................... ..................................... 65
5.3.7. Analog  Girdiler ..................................................... ..............................................66

EK1..................................................... ...........................................................................67
MİKROKONTROLÖR TESTİ..................................................... .................................67
Kontrolörlerin   Çarpma   ve   Bölme   İşlemleri  Aracılığıyla Karşılaştırılması ..........67
Mikrokontrolörler  İçin  Seçim Kriterleri ......................................................................69
Uygulama Örneği ..................................................... .....................................................70

EK  2..................................................... .........................................................................72
EEPROMLARIN PROGRAMLANMASI ....................................................................72

ŞEKİLLER   DİZİNİ

Şekil-2-1 8051  Mikrokontrolör  Blok    Diyagramı..........................................................4
Şekil-2-2  ALE Kullanımı İle Harici Program Kodunun Okunma Zamanlaması.............4
Şekil-2-3  Ortak Adres ve Data Yolunun Program Kodu Okunması Sırasındaki   Zamanlaması .....................................................................................................................5
Şekil 2-4 Okuma İşlemi Zamanlaması .............................................................................5
Şekil-2.5 CPU-EPROM ve Latch ile Harici Program Kodunun  Okunması   İçin    Gerekli Donanım ..............................................................................................................6
Şekil-2-6 8051 Mikrokontrolör Bacak Bağlantıları .........................................................8
Şekil-2-7  8051 Portları  Giriş/Çıkış Durum Özelikleri ...................................................9
Şekil-2-8  İki Yönlü  Çıkış Yapısı ....................................................................................9
Şekil-2-9  Open Drain Çıkış Yapısı.................................................................................10
Şekil-2-10 Push-Pull Çıkış Yapısı ..................................................................................10
Şekil-2-11 Saat İşaretinin Üretilmesi İçin Kristal veya Harici  Saat Kullanımı .............10
Şekil-2-12 Power –ON Reset Devresi.............................................................................11

Şekil-3-1  ZN 448 A/D  Çeviricisinin  Kesmeleri Çalışması  İçin 8051 Arabirimi........38
Şekil-3-2  3-bit DAC...................................................................................................... 41
Şekil-3-3  PWM  ile Üretilen  Sinyalin  DC Bileşeni Yoluyla  D/A Çevirim................41
Şekil-3-4 Değişen Ortalama  DC Çıkış  İçin  PWM Değeri...........................................42
Şekil-3-5 8-Bit Bir DAC  Blok Diyagramı ....................................................................43
Şekil-3-6 8-Bit  DAC Blok Diyagramı  ..........................................................................44

Şekil-4-1 EPROM Bacak Yapısı ve Bacak Bağlantıları.................................................45
Şekil-4-2 Latch Bacak Yapısı ve Doğruluk Tablosu .................................................... 46
Şekil-4-3  CPU-EPROM Latch ‘den  Kurulu  Temel Devre .........................................46
Şekil-4-4 Kod Çözme  İşlevinin  Gerçeklenmesi ......................................................... 48
Şekil-4-5 6264 RAM  ‘in Bacak  Yapısı .......................................................................49
Şekil-4-6  Birinci RAM ‘in Devreye Eklenmesi ...........................................................49
Şekil-4-7 Harici  RAM için Okuma Sinyalinin Elde edilmesi ......................................51
Şekil-4-8 Kullanılan AND Kapısı İçin  Bacak Yapısı ve Lojik Sembolü......................51
Şekil-4-9 DTE ve DCE  .................................................................................................56
Şekil-4-10 PC ile  8051 ‘in Yüzleştirilmesi ...................................................................56

Şekil-5-1  Temel PIC Blok Diyagramı  ..........................................................................59
Şekil-5-2  PIC İçin Gerekli Minimum Donanım ............................................................61
Şekil-5-3 Kesinti Koruma Devreleri  ve  Harici Reset  Devreleri.................................. 62
Şekil-5-4  PIC  Reset Devreleri...................................................................................... 64

TABLOLAR       DİZİNİ

Tablo-2-1  Dahili Veri Hafıza  Alanına  Veri  Transfer  Komutları  ...........................................11
Tablo-2-2  Harici Veri Hafıza Alanına Erişen Veri Transfer  Komutları....................................11
Tablo-2-3  Tablo Okuma Komutları ...........................................................................................12
Tablo-2-4: Aritmetik Komutlar         ...........................................................................................12
Tablo-2-5  Byte Tabanlı Lojik Komutlar ....................................................................................12
Tablo-2-6  Bit Tabanlı Lojik Komutlar .......................................................................................13
Tablo-2-7 : Durumdan Bağımsız Dallanma Komutları .............................................................. 13
Tablo-2-8 : CALL ev RET komutları      .................................................................................... 13
Tablo2-9 : Duruma Bağımlı  Dallanma Komutları .....................................................................14
Tablo2-10 : CALL ve RET komutları .........................................................................................15

Kayit Olmadan Linki Göremezsiniz. Lütfen Linki Görebilmek Için Kayit Olun.


04-13-2008 10:34 PM
Tüm Mesajlarını Bul Alıntı Yaparak Cevapla
kamber
Administrator
*******


Mesajlar: 2,382
Grup Administrators
Katılım: Jan 2008
Durum: Çevrimdışı
Rep Gücü: 0
Mesaj: #2
RE: 8051 mikrokontroller dökümanı

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 Big Grinahili 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

Bit2Big Grinurdurma biti sayısı: 0 1bit
1 2bit

Bit3Tonguearity var/yok: 0 OFF
1 ON

Bit4Tonguearity 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


04-13-2008 10:35 PM
Tüm Mesajlarını Bul Alıntı Yaparak Cevapla
Cevapla  Konu Gönder 

Benzeyen Konular
Konu: Yazar Cevaplar: Görüntüleyenler: Son Mesaj
  meb mikroişlemci ders notları kamber 0 72 04-09-2008 10:21 PM
Son Mesaj: kamber
  8051 ders notları(türkçe) kamber 0 106 04-09-2008 10:21 PM
Son Mesaj: kamber
  Mikroişlemciler Ders Notları.. kamber 0 101 <