Bursa Mekatronik

 
  • Increase font size
  • Default font size
  • Decrease font size
  • default color
  • blue color
  • green color

Anasayfa Dökümanlar Robotic, Mikroişlemciler ve Pic 8051 Mikrokontrolcü Ailesi - 2
8051 Mikrokontrolcü Ailesi - 2 PDF Yazdır e-Posta
Zafer Erim tarafından yazıldı   
Perşembe, 28 Şubat 2008 00:27
4.  8051 Özel Fonksiyon Registerleri

8051 mikrokontrolcü, pek çok çalışma moduna sahip olan esnek bir entegredir.  Programların çalışma modunu değiştirmek için özel fonksiyon registerleri değerleri okunabilir veya değiştirilebilir. Özel fonksiyon registerlerine ulaşmak aynen normal RAM data gözlerine ulaşmak gibidir.  İç genel hafıza RAM 00h adresinden 7Fh adresine kadar uzanırken, özel fonksiyon registerleri 80h adresinden FFh adresine kadar uzanır.   Bir önceki sayfadaki tablo özel fonksiyon registerlerinin isimlerini ve adreslerini vermektedir.  

Tabloda da görülebileceği gibi, 80h adresinden FFh adresine kadar 128 data gözü bulunduğu halde, standart 8051 entegresinde bu alanların yalnızca 21 tanesi özel fonksiyon registeri olarak kullanılmıştır.  Kullanılmayan bu adreslere yazmak veya okumak beklenmedik program hatalarına sebep olabilir. 

Bu nedenle bizim önerimiz, özel fonksiyon registeri olarak ayrılmamış bu bölgeleri kullanmamanızdır. 8051 entegresinin daha yukarı modellerinde bu gözler farklı özel fonksiyon registerleri olarak tanımlanmış olabilir. 

 Not: Adres değerleri 8 ile bölünebilen tüm özel fonksiyon registerlerinde bit  işlemleri yapılabilmektedir. 

Özel Fonksiyon Data Gözü Tanımlamaları:

 Bu bölümde yukarıdaki tabloda görülen tüm özel fonksiyon data gözlerini tablodaki sırasıyla kısaca tanımlamaya çalışacağız.

 

P0 (Port0, adres 80h, bit adreslenebilir)

Bu port giriş/çıkış portlarından birisidir.  Bu özel fonksiyon data gözündeki bitlerin herbiri 8051 entegresinin bacaklarından birisine karşılık gelmektedir. Örneğin port0 registerinin 0 nolu biti,  entegrenin P0.0 bacağına, 7 nolu bit P0.7 nolu bacağa karşılık gelmektedir. Entegredeki P0 bacaklarından herhangi birisini 1 veya 0 yapmak için, P0 registerinde, entegre bacağına karşılık gelen bit değeri 0 veya 1 yapılır. Dolayısıyla port 0 pinleri bit adreslenebilir pinlerdir. Port 0'a yazmak veya okumak için aşağıdaki komutları kullanabilirsiniz.

 

MOV  P0, #0FH; 

Yukarıdaki komut port 0'ın pinlerinin düşük nibelini 1 yüksek nibelini 0 yapacaktır. Yukarıdaki komut verildikten sonra port 0 pinlerinin değerleri aşağıdaki gibi olacaktır.

 P0.0,  P0.1, P0.2, P0.3 = 1 ve P0.4, P0.5, P0.6, P0.7 = 0

 Bu porttan bir okuma yapmak için ise aşağıdaki komutlar verilir.

   MOV  P0, #0FFH;

   MOV A, P0;

 

 Görüldüğü gibi porttan okuma yapmadan önce, bütün port giriş moduna getirilir.  Port giriş moduna getirildikten sonra ise okuma işlemi gerçekleştirilir.  Yukarıdaki komutlar port 0'a 1 bayt bilgiyi yazmak veya okumakta kullanılır. Daha önce söylediğimiz gibi port 0 istenirse pin pin de kontrol edilebilir. Bit bit kontrol için kullanılabilecek 8051 assembly komutları, SETB bit , CLR bit , CPL bit,  MOV bit, C, MOV C, bit  komutlarıdır. Aşağıda bu komutların nasıl kullanılabilecğine dair örnekler verilmiştir.

 

SETB  P0.1      ;  P0.1 pinini 1 yap.

CLR  P0.5        ;  P0.5 pinini 0 yap

SETB C           ;  Elde bayrağı 1

MOV  P0.4, C   ; P0.4 pinine Elde bayrağının değerini yaz.

SETB P0.7       ; P0.7 pinini giriş için hazırla.

MOV C, P0.7    ; P0.7 pininin değerini Elde bayrağına oku.

Daha öncedende bahsedildiği gibi dış hafıza kullanılan devrelerde port 0 düşük adres baytını ve data alışverişini gerçekleştirmek üzere multiplex görev yapar. Adres ve data alışverişi CPU kontrolü altındadır.

 

SP (Yığın İşaretleyici, adres 81h)

Bu register 8051 entegresinin yığın işaretleyici registeridir. Yığın hızlı data alışverişinin bir yoludur. Yığın (Stack) last-in-first-out, son giren ilk çıkar prensibine göre çalışan bir hafıza kavramıdır.  Yığın işaretleyici, yığına en son eklenen datanın RAM hafıza adresini gösterir (TOP of stack). Yığına bir değer itilmeden önce yığın işaretleyicisinin değeri 1 artırılır. Örneğin yığın işaretleyicinin değeri 07h ise, bir PUSH komutundan sonra, yığın işaretleyicinin değeri 08h olacaktır. Yığından bir değer geri alınırken ise önce değer yığından alınır, daha sonra yığın işaretleyicisinin değeri 1 azaltılır. Yığın işaretleyicinin değeri, yığın ile çalışan tüm komutlardan sonra değişmektedir. 8051 komut kümesi içinde yığını kullanan komutlar, PUSH, POP, LCALL, RET, RETI ve kesme programı girişleridir.

8051 entegresinin ilk çalışmasıyla, yığın işaretleyicisi 07h değerini alır.  Bunun anlamı yığının başlangıç adresinin 08h olduğudur. Yığın 08h adresinden yukarı doğru genişler. Bu sebeble eğer programınınzda register bankları 1, 2 ve 3 ü kullanacaksanız dikkatli olmalısınız.  Bu durumda yığının başlangıcını üst hafıza elemanlarına işaretlemek gerekecektir. Örneğin yığın başlangıcı olarak 2Fh adresini kullanmak uygun olabilir. Kullanıcı yığın adresini nereden başlatacağına kendisi karar vermek durumundadır.  Örneğin aşağıdaki komut yığın işaretleyicisinin başlangıç değerini 2Fh değerine atar.

MOV SP, #02FH; 

 

DPL/DPH Data işaretleyicileri, adres 82h ve 83h )

DPL/DPH (data işaretleyicisi düşük ve yüksek registerleri, adres 82h ve 83h)

DPL ve DPH registerleri 16 bit bir adres oluşturmak üzere bir arada kullanılan özel fonksiyon registerleridir. Data işaretleyici, dış RAM hafıza ile veri alışverişinde ve dış kod hafıza ile ilgili bazı işlemlerde kullanılır. Data işaretleyici işaretsiz 16 bit bir sayıyı gösterdiğine göre, data işaretleyici ile 0000h dan FFFFh (0-65535) adresi aralığında hafıza adreslenebilir.

Assembler dilinde DPTR ismi ile kullandığınız data işaretleyici, aslında DPH ve DPL özel fonksiyon data gözleri tarafından oluşturulmuş 16 bit bir sayıdır.   Pek çok durumda DPTR nin DPH ve DPL baytlarını ayrı ayrı işlemek durumunda kalabilirsiniz. Örneğin DPTR değerini yığına yazmak istediğinizi varsayalım. 16 bit bir değeri tek hamlede yığına yazacak bir 8051 komutu yoktur. Bu nedenle DPH ve DPL değerlerini ayrı ayrı yığına yazmanız gerekir.  Öte yandan DPTR işaretleyicini bir artıran 8051 komutu olmasına rağmen DPTR işaretleyicisini bir azaltan bir 8051 komutu yoktur. Böyle bir durumda DPH ve DPL registerlerini kullanarak sizin bu azaltma işlemini yapmanız gereklidir. Data işaretleyicisi en çok dış veri hafıza ile data alışverişinde kullanılır.  Bu amaçla önce data okunacak veya yazılacak hafıza adresinin değeri data işaretleyicisine yüklenir. Daha sonra MOVX komutu ile bu değer hafızadan okunur veya hafızaya yazılır. Aşağıdaki komut seti 2300H adresine 13 değerini yazmak için kullanılmıştır.

 

MOV DPTR, #2300H;

MOV A, #13;

MOVX @DPTR, A;

 

Hafızanın 2300H adreindeki bir değeri okumak için ise  

MOV DPTR, #2300H;

MOVX A, @DPTR;

 Komutları verilir. Harward mimarisine göre yapılan devrelerde, MOVC komutu yine data işaretleyicisi ile kullanılarak program hafızadan veri okunmasını sağlar. Aşağıdaki komutlar program hafızanın 0300H adresinden bir verinin okunmasında kullanılmaktadır. 

MOV A, #0;

MOV DPTR, #0300H;

MOVC A, #A+DPTR

PCON (Güç Kontrol registeri, adres 87h)

 Adresinden de anlaşılabileceği gibi PCON registeri bit adreslenebilir bir register değildir. Bit adreslenebilir registerlerin adreslerinin 8'e bölünebilmesi gerektiğini hatırlayınız. Bu registerin PD ve IDL bitleri CMOS entegrelerde güç kontrolü amacıyla kullanılmaktadır. Şimdi bu registerin bitlerini ve bit anlamlarını görelim.

 

7

6

5

4

3

2

1

0

SMOD

-

-

-

GF1

GF0

PD

IDL

 

Bit 7  SMOD seri iletişim hızı modifikasyınu bit. Bu bit SET edildiğinde seri haberleşme hızı, zamanlayıcı 1'in mod 1, 2 veya 3 ile kullanılması sonucunda hesaplanan iletişim hızının 2 katına çıkar. Bu bit 0 olduğunda, iletişim hızı zamanlayıcı 1 ile belirlenen iletişim hızı olur.

Bit 6  - Kullanılmıyor. 

Bit 5  -Kullanılmıyor. 

Bit 4  -Kullanılmıyor. 

Bit 3  GF1 Genel amaçlı bayrak. Programcı tarafından kullanılabilir. 

Bit 2  GF0 Genel amaçlı bayrak. Programcı tarafından kullanılabilir. 

Bit 1 PD CMOS entegrelerde, entegrenin güç tüketimini azaltmakta kullanılır.  

Bit 0  IDLE CMOS entegrelerin güç tüketim kontrolü için kullanılan diğer bir bit. 

 

TCON (Zamanlayıcı kontrol registeri, adres 88h, bit adreslenebilir)

Zamanlayıcı kontrolü registeri standart 8051 entegresinde bulunan iki adet zamanlayıcının ayarlarının yapılmasında kullanılır.  Bu register kullanılarak zamanlayıcılar çalıştırılabilir veya durdurulabilir. Bu registerde bulunan bitlerden birisi zamanlayıcının taşma biti olarak kullanılmaktadır. Böylece her zamanlayıcı veya sayıcı taşmasında bu bit aktiflenmektedir. Bu  özel fonksiyon registerinde bulunan bitlerden diğer birkaçı, zamanlayıcı ve sayıcının kesme üretmesi için programlanabilmektedir. 

TCON registeri  bit adreslenebilir bir registerdir. Bu registerin bitleri zamanlayıcı/sayıcıları kontrol etmekte kullanılır.   

7 6 5 4 3 2 1 0

TF1

TR1

TF0

TR0

IE1

IT1

IE0

IT0

Bit 7  TF1  Zamanlayıcı 1 taşma bayrağı.  Zamanlayıcı  taştığı anda bu bayrak SET olur.  Mikroişlemci ilgili kesme programına sıçradığı anda bu bayrak tekrar temizlenir.  Eğer kesme programı yoksa bu bayrak program tarafından temizlenmelidir.

Bit 6  TR1  Zamanlayıcı 1 çalışma kontrol biti.  Zamanlayıcı 1 çalıştmaya başlatılmak istendiğinde bu bayrak SET edilir. Bu bayrak SET olduğu sürece zamanlayıcı 1 çalışmaktadır.

Bit 5  TF0  Zamanlayıcı 0 taşma bayrağı.  Zamanlayıcı  taştığı anda bu bayrak SET olur.  Mikroişlemci ilgili kesme programına sıçradığı anda bu bayrak tekrar temizlenir.  Eğer kesme programı yoksa bu bayrak program tarafından temizlenmelidir.

Bit 4  TR0  Zamanlayıcı 0 çalışma kontrol biti.  Zamanlayıcı 0 çalışmaya başlatılmak istendiğinde bu bayrak SET edilir. Bu bayrak SET olduğu sürece zamanlayıcı 0 çalışmaktadır.

Bit 3  IE1 Harici kesme 1 kenar bayrağı. INT1 pininde yüksekten alçağa düşen bir sinyal görüldüğünde, program INT1 kesme adresi 0013h'e sıçrar.

Bit 2  IT1 Harici kesme 1 INT1 tip belirleme biti.  Eğer sinyal yüksekten düşüğe geçtiğinde kesme aktiflenmesi isteniyorsa bu bit SET edilir.  Bu bit 0 olduğunda pindeki bir 0 sinyali kesmeyi aktifler.

Bit 1  IE0  Harici kesme 0 kenar bayrağı. INT0 pininde yüksekten alçağa düşen bir sinyal görüldüğünde, program INT0 kesme adresi 0003h'e sıçrar.

Bit 0  IT0 Harici kesme 0 INT0 tip belirleme biti.  Eğer sinyal yüksekten düşüğe geçtiğinde kesme aktiflenmesi isteniyorsa bu bit SET edilir.  Bu bit 0 olduğunda pindeki bir 0 sinyali kesmeyi aktifler.

TMOD (zamanlayıcı modu registeri, adres 89h)

TMOD registerindeki bütün bitlerin ayrı ayrı anlamları olmasına rağmen TMOD registeri bit adreslenebilir bir register değildir. Bu register standart iki zamanlayıcının hangi modda çalışacağını kontrol etmekte kullanılan registerdir.  Bu register kullanılarak zamanlayıcılar, 16 bit zamanlayıcı, 8-bit tekrar yüklenen zamanlayıcı veya 13 bit zamanlayıcı olarak programlanabilmektedir. Buna ilave olarak zamanlayıcılar, sayıcı olarak ta programlanabilir. Böylece harici bir sinyalin her değişiminde zamanlayıcxının değeri 1 artacaktır. 

7 6 5 4 3 2 1 0
Gate C/T M1 M0 Gate C/T M1 M0

 Bit 7  Gate  OR kapısı enable biti.. Zamanlayıcı 1'in çalışmaya başlayabilmesi için bu bitin değerinin 0 olması gereklidir.  Yani GATE biti ve TCON registerindeki TR1 biti zamanlayıcı 1'in çalışmaya başlamasını kontrol eder.  GATE biti 1 ve TR1 biti 1 ise, zamanlayıcının çalışması INT1 pinindeki sinyale bağlıdır. Bu sinyal 1 olduğu anda zamanlayıcı 1 çalışır.

 Bit 6  C/T  Sayıcı veya zamanlayıcı seçme biti. Bu bit SET olduğu zaman zamanlayıcı/sayıcı 1 sayıcı modunda çalışmaya başlar. Bu durumda T0 pinine bağlı sinyal sayılmaya başlar. 

Bit 5  M1  Zamanlayıcı/sayıcı 1 mod seçme biti 

Bit 4  M0  Zamanlayıcı/sayıcı 1 mod seçme biti. 

Bit 3  Gate OR kapısı enable biti.. Zamanlayıcı 1'in çalışmaya başlayabilmesi için bu bitin değerinin 0 olması gereklidir.  Yani GATE biti ve TCON registerindeki TR1 biti zamanlayıcı 1'in çalışmaya başlamasını kontrol eder.  GATE biti 1 ve TR1 biti 1 ise, zamanlayıcının çalışması INT1 pinindeki sinyale bağlıdır. Bu sinyal 1 olduğu anda zamanlayıcı 1 çalışır. 

Bit 2  C/T Sayıcı veya zamanlayıcı seçme biti. Bu bit SET olduğu zaman zamanlayıcı/sayıcı 1 sayıcı modunda çalışmaya başlar. Bu durumda T0 pinine bağlı sinyal sayılmaya başlar. 

Bit 1  M1  Zamanlayıcı/sayıcı 0 mod seçme biti. 

Bit 0  M0 Zamanlayıcı/sayıcı 0 mod seçme biti. 

M1          M0        MOD

0               0            0

0               1            1

1               0            2

1               1            3   

 TL0/TH0 (Zamanlayıcı 0 düşük ve yüksek, adres 8Ah ve 8Bh)

Bu iki özel fonksiyon registeri zamanlayıcı 0'ı temsil eden özel fonksiyon registerleridir. Bu registerlerin nasıl davranacakları TMOD registerine yazılan kod ile konfigüre edilir.  Bilinmesi gereken önemli noktalardan birisi de zamanlayıcıların yalnızca yukarı doğru saymasıdır. TL0 ve TH0 sayıcının sayma değerlerinin bulunduğu registerlerdir.

 

TL1/TH1 (Zamanlayıcı 1 düşük ve yüksek, adres 8Ch ve 8Dh)

Bu iki özel fonksiyon registeri zamanlayıcı 1'i temsil ederler.  Zamanlayıcı/sayıcı 1'in sayma değerleri bu registerlerde bulunur. Herhangi bir anda sayma değeri okunmak istendiğinde, TL1 ve TH1 sayıcıları nın değerleri değişkenlere okunur. Örneğin kullanacağımız iki değişken TIMERH ve TIMERL olsun.

MOV TIMERH, TH1;

MOV TIMERL, TL1;

P1 (Port 1, adres 90h, bit adreslenebilir)

Bu port giriş/çıkış portlarından birisidir.  Bu özel fonksiyon data gözündeki bitlerin herbiri 8051 entegresinin bacaklarından birisine karşılık gelmektedir. Örneğin port1 registerinin 0 nolu biti,  entegrenin P1.0 bacağına, 7 nolu bit P1.7 nolu bacağa karşılık gelmektedir. Entegredeki P1 bacaklarından herhangi birisini 1 veya 0 yapmak için, P1 registerinde, entegre bacağına karşılık gelen bit değeri 0 veya 1 yapılır. Dolayısıyla port 1 pinleri bit adreslenebilir pinlerdir. Port 1'e yazmak veya okumak için aşağıdaki komutları kullanabilirsiniz.

 MOV  P1, #0FH; 

Yukarıdaki komut port 1'ın pinlerinin düşük nibelini 1 yüksek nibelini 0 yapacaktır. Yukarıdaki komut verildikten sonra port 1 pinlerinin değerleri aşağıdaki gibi olacaktır.

 P1.0,  P1.1, P1.2, P1.3 = 1 ve P1.4, P1.5, P1.6, P1.7 = 0

Bu porttan bir okuma yapmak için ise aşağıdaki komutlar verilir.

MOV P1, #0FFH;

MOV A, P1; 

Görüldüğü gibi porttan okuma yapmadan önce, bütün port giriş moduna getirilir.  Port giriş moduna getirildikten sonra ise okuma işlemi gerçekleştirilir.  Yukarıdaki komutlar port 1'e 1 bayt bilgiyi yazmak veya okumakta kullanılır. Daha önce söylediğimiz gibi port 1 istenirse pin pin de kontrol edilebilir. Bit bit kontrol için kullanılabilecek 8051 assembly komutları, SETB bit , CLR bit , CPL bit,  MOV bit, C, MOV C, bit  komutlarıdır. Aşağıda bu komutların nasıl kullanılabilecğine dair örnekler verilmiştir.

SETB  P1.1       ;  P1.1 pinini 1 yap.

CLR  P1.5         ;  P1.5 pinini 0 yap  

SETB C            ; Elde bayrağı 1

MOV  P1.4, C   ; P1.4 pinine Elde bayrağının değerini yaz. 

SETB P0.7       ; P1.7 pinini giriş için hazırla.

MOV C, P0.7    ; P0.7 pininin değerini Elde bayrağına oku.

SCON (seri kontrol, adres 98h, bit adreslenebilir)

SCON özel fonksiyon registeri 8051 seri giriş/çıkış biriminin davranışını kontrol etmekte kullanılır.  Örneğin bu register kullanılarak seri haberleşme hızı (baud rate) belirlenir.  Bu registerde, aynı zamanda seri bir karakter başarıyla yollandığında veya başarıyla okunduğunda aktiflenen bayraklar bulunur. Seri port kullanılmak istendiğinde yalnızca SCON registerinin konfigüre edilmesi yeterli olmayabilir. Bu durumda TCON ve TMOD registerlerinde de gerekli değişimler yapılmalıdır.  Çünkü seri haberleşme hızını ayarlamak için zamanlayıcılardan birisini kullanmak gerekebilir. Aşağıda SCON registerinin yapısı ve bitleri görülmektedir.

Bit

İsim

Bit Adresi

Açıklama

7

SM0

9Fh

Seri port mod bit 0

6

SM1

9Eh

Seri port mod bit 1.

5

SM2

9Dh

Birden çok işlemci ile haberleşme modu

4

REN

9Ch

Alıcı aktif biti. Karakter okuması için bu bit aktif yapılmalıdır.

3

TB8

9Bh

Yolla biti, bit 8. Mod 2 ve 3 de karakter yollamak için kullanılan bit.

2

RB8

9Ah

Mod 2 ve 3 de karakter okumak için kullanılan bit.

1

TI

99h

Yolla bayrağı. Bir karakter yollandığı zaman bu bit aktif olur.

0

RI

98h

Alıcı bayrağı. Bir karakter okunduğu zaman bu bit aktif olur.

  SM0 ve SM1 bitleri ve anlamları.

SM0

SM1

Seri Mod

 Açıklama

  Haberleşme hızı

0

0

0

 8-bit kaydırma Registeri

 Osilatör frekansı  / 12

0

1

1

 8-bit UART

 Zamanlayıcı 1 ile ayarlanır.(*)

1

0

2

 9-bit UART

 Osilatör frekansı / 32

1

1

3

 9-bit UART

 Zamanlayıcı 1 ile ayarlanır. (*)

(*) Zamanlayıcı 1 kullanılarak haberleşme hızı seçildiği durumda, eğer  PCON.7  biti aktif yapılırsa, haberleşme hızı iki katına yükselmiş olur. 

SCON registeri bit adreslenebili bir registerdir. Bu registerin bitleri isimleriyle kullanılabilir.  MCS-51 assembly programlama dilinde, bu registerin bitleri tanımlanmış durumdadır. 

SCON registerinin üst 4 biti (bit 4 - bit 7 ) konfigürasyon bitleridir.

SM0 ve SM1 bitleri seri haberleşme modunu seçmekte kullanılır. 4 farklı seri haberleşme modu vardır.  Seri haberleşme modunun seçilmesiyle haberleşme hızının nasıl hesaplanacağı da belirlenmiş olur.  Mode 0 ve    Mod 2 de haberleşme hızı kristal frekansı ile orantılı bir sayıdır ve sabittir. Mod 1 ve 3 de ise haberleşme hızı zamanlayıcı 1'in birim zamanda taşma sayısına bağlı olarak değişkendir. 

SM2 biti, birden fazla işlemci haberleşmesi bayrağıdır. Genelde 8051 seri hattan bir karakter okuduğunda, RI (alındı kesmesi) bayrağı aktiflenecektir. Böylece program bir karakterin alındığını ve işlenmek üzere hazır olduğunu bilebilecektir.  Fakat SM2 biti aktiflenirse,  RI bayrağı, ancak okunan  9'uncu bit "1" ise aktiflenecektir.   Bu bit  gelişmiş seri haberleşme olayı için zaman zaman son derece faydalıdır. Fakat biz hemen tüm programlarımızda bu biti "0" yapacağız Dolayısıyla her karakter okunuşunda, RI bayrağı aktiflecektir. 

Bir sonraki bit REN (receiver enable) alıcı aktifle bitidir. Bu bitin anlamı çok açıktır. Eğer seri port üzerinden okuma yapmak istiyorsanız bu biti aktiflemeniz gerekir.  

SCON registerinin son 4 biti, seri haberleşme sırasında kullanılan işlem bitleridir.  Bu bitler seri portu konfigüre etmek için değil seri yazma/okuma işlemlerini gerçekleştirmek için kullanılır. 

TB8 biti mod 2 ve mod 3 de kullanılır.  Mod 2 ve mod 3 de toplam 9 bit data yollanıp okunmaktadır. İlk 8 bit karakter değeridir, 9'uncu bit TB8 den okunarak yollanır. 

RB8 biti de mod 2 ve mod 3 de kullanılır. Mod 2 ve mod 3 de okuma yapıldığında toplam 9 bit data okunur. Okunan ilk 8 bit SBUF registerine kaydedilir. 9'uncu bit RB8 bitine okunur. 

TI (transmit interrupt) yollandı kesmesi bitidir.  Program seri porttan bir bilgi yolladığında, değerin seri porttan tamamen yollanması için belli bir zaman geçecektir. Eğer bu karakterin yollanması bitmeden, yeni bir karakter yollanmak üzere SBUF registerine yazılırsa, datalar birbirine karışacaktır.  Bunu önlemek için yollama tamanlandı (TI) biti kullanılır. TI biti "1" ise bir önceki karakter yollanmış demektir ve yeni bir karakter yollanmasında sakınca yoktur. Dolayısıyla programcı, yeni bir karakter yollamadan önce TI bitini okuyarak kontrol etmelidir. 

RI (receive interrupt) alma kesmesi bitidir.  Bu bit de TI bitine benzer bir görev görmektedir. Fakat bu defa, dışardan bir karakter okunduğunda, okumanın bittiğini bildirmek üzere bu bir "1" olmaktadır.

 

SBUF( seri kontrol, adres 99h)

Seri port bafırı, seri port üzerinden dataların yazılmasında ve okunmasında kullanılır. SBUF registerine yazılan herhangi bir değer entegrenin yolla (TXD) bacağı üzerinden seri bilgi halinde yollanılır.  Benzer şekilde entegreye oku (RXD) bacağı üzerinden gelen bir bilgi de SBUF registerinde okunmaya hazır bir şekilde tutulur. Yani bir karakter yollanacağı zaman SBUF registerine yazılır. Bir karakter okunacağı zaman ise SBUF registeri okunur. Aşağıda seri porta bir karakter yazılması için verilmesi gereken komutlar görülmektedir.

CLR TI                  ; Önce TI bitini temizle.

MOV SBUF,#'A'  ; Yollanacak karakteri seri porta yaz.

JNB TI,$            ;  Karakter yollamasının bitişini bekle.

 Seri  porttan bir karakter okunması için ise aşağıdaki komutlar verilmelidir.

JNB RI,$            ; 8051 RI bayrağının aktiflenmesini bekle

MOV A,SBUF      ; Gelen karakteri akümülatöre oku.

 

P2 (Port 2, adres A0h, bit adreslenebilir)

Bu portta diğer portlar gibi bit adreslenebilir bir porttur. Dış hafıza kullanan devrelerde bu portun görevi, dış adres hattının yüksek baytını sağlamaktır.  Mikroişlemci dış program hafızadan kod okuma yaptığı sırada kodun adresinin yüksek baytı bu port tarafından sağlanır.  Dış veri veya kod hafızadan MOVX veya MOVC komutlarıyla veri alışverişi sırasında da bu port yine okunacak adresin yüksek baytını sağlama işlevini görür. Port 2 pinlerinin dış hafızaya nasıl bağlandığını görmek için Harward ve Von Neumann mimarisine göre 8051 devre şemalarına bakınız. 

Eğer devrede dış hafıza kullanılmayacaksa, bu porrta diğer portlar gibi basit giriş çıkış işlemleri için kullanılabilir. Bu portta Port1 ve Port3 gibi dahili pull-up dirençlerine sahiptir. Bu yüzden dışarıya veri yazarken dış pull-up dirençlerine gerek yoktur. Basit giriş çıkış birimi olarak kullanıldığında, bu özel fonksiyon data gözündeki bitlerin herbiri 8051 entegresinin bacaklarından birisine karşılık gelmektedir. Örneğin port2 registerinin 0 nolu biti,  entegrenin P2.0 bacağına, 7 nolu bit P2.7 nolu bacağa karşılık gelmektedir. Entegredeki P2 bacaklarından herhangi birisini 1 veya 0 yapmak için, P2 registerinde, entegre bacağına karşılık gelen bit değeri 0 veya 1 yapılır. Port 2'ye yazmak veya okumak için aşağıdaki komutları kullanabilirsiniz.

 MOV  P2, #0FH;

Bu komutla Port2'ye bir seferde 1 bayt veri yazılmıştır. Port2'den bir seferde 1 bayt veri okumak için ise aşağıdaki komutları verebilirsiniz.

MOV P2, #0FFH;

MOV A, P2;

 

Port 2'yi bit bit kontrol etmek için ise 8051 assembly bit komutları, SETB bit , CLR bit , CPL bit,  MOV bit, C, MOV C, bit  kullanılabilir.

 

SETB  P2.1       ;  P2.1 pinini 1 yap.

CLR  P2.5         ;  P2.5 pinini 0 yap

 

SETB C            ; Elde bayrağı 1

MOV  P2.4, C   ; P2.4 pinine Elde bayrağının değerini yaz.

 

SETB P2.7       ; P2.7 pinini giriş için hazırla.

MOV C, P2.7    ; P2.7 pininin değerini Elde bayrağına oku.

IE ( Kesme aktifle registeri, adres A8h)

IE özel fonksiyon registeri, kesmelerin aktiflenmesinde ve pasiflenmesinde kullanılan registerdir.  Bit 0-1-2-3-4-5-6 , herhangi bir özel kesmeyi aktiflemekte veya pasiflemekte kullanılan bitlerdir. Bit 7 tüm kesmeleri aktiflemek ve pasiflemekte kullanılır. Bu bit pasiflendiğinde, herhangi bir özel kesmeyi aktifleyecek bit 1 olsa bile, kesme pasif kalır. 

Bit

İsim

Bit Adresi

Açıklama

7

EA

AFh

Genel kesme aktifle/engelle

6

-

AEh

Tanımsız

5

-

ADh

Tanımsız

4

ES

ACh

Seri kesme aktifle

3

ET1

ABh

Zamanlayıcı 1 kesmesi aktifle

2

EX1

AAh

Dış kesme 1 aktifle

1

ET0

A9h

Zamanlayıcı 0 kesme aktifle

0

EX0

A8h

Dış kesme 0 aktifle

 Herhangi bir kesmeyi aktiflemek için, once hangi kesme aktifleneckse o bit SET edilir. Daha sonra EA biti SET edilir. Örneğin Dış kesme 0'ın çalışmaya başlaması için, 

SETB EX0;

SETB EA

komutları verilir.  Bazı yerlerde BIT kontrolü yerine bayt seviyesinde komutlar da görebilirsiniz. Bu sizi şaşırtmasın. Fakat program okunulabilirliği açısından siz yine de BIT komutlarını tercih edin.  Yukarıdaki 2 satır kodu, örneğin başka bir kitapta, 

MOV IE, #01H ;

ORL IE, #080H;

veya,

ORL IE, #01H;

ORL IE, #080H;

veya başka formlarda görebilirsiniz. Bunların hepsinin aynı işi yaptığına dikkat ediniz.

P3 (port 3, adres B0h, bit adreslenebilir)

Bu portta diğer portlar gibi bit adreslenebilir bir porttur. Port 3 pinlerinin hepsi çift fonksiyona sahip pinlerdir.  Örneğin seri iletişim için kullanılan TxD, RxD pinleri, dış hafıza okuma yazma pinleri WR ve RD, zamanlayıcı/sayıcı pinleri T0 ve T1, Dış kesme pinleri INT0 ve INT1 hep bu portta bulunur.  Bütün bu fonksiyonlar, kendi özel fonksiyon registerleri aracılığı ile programlanır. Bu fonksiyonların kullanılmadığı pinler basit giriş/çıkış pinleri olarak kullanılabilir. Port3 de Port1 ve Port2 gibi iç pull-up dirençlerine sahiptir. Bu sebeble bu port basit giriş çıkış için kullanıldığında, harici pull-up dirençlere gerek yoktur. Diğer portlarda olduğu gibi basit giriş/çıkış işlemleri P3 özel fonksiyon registeri aracılığı ile yapılır. Aşağıdaki komutlar P3 pinlerinin P3 özel fonksiyon registeri aracılığı ile nasıl kontrol edilebileceğini göstermektedir.

 MOV  P3, #0FH;

Bu komutla Port3'e bir seferde 1 bayt veri yazılmıştır. Port3'den bir seferde 1 bayt veri okumak için ise aşağıdaki komutları verebilirsiniz.

MOV P3 #0FFH;

MOV A, P3;

 Yukarıdaki komut verildikten sonra port 1 pinlerinin değerleri aşağıdaki gibi olacaktır.

 P1.0,  P1.1, P1.2, P1.3 = 1 ve P1.4, P1.5, P1.6, P1.7 = 0

 Port 3'ü bit bit kontrol etmek için ise 8051 assembly bit komutları, SETB bit , CLR bit , CPL bit,  MOV bit, C, MOV C, bit  kullanılabilir.

SETB  P3.1       ;  P3.1 pinini 1 yap.

CLR  P3.5         ;  P3.5 pinini 0 yap

 

SETB C            ; Elde bayrağı 1

MOV  P3.4, C   ; P3.4 pinine Elde bayrağının değerini yaz.

 

SETB P3.7       ; P3.7 pinini giriş için hazırla.

MOV C, P3.7    ; P3.7 pininin değerini Elde bayrağına oku.

 

IP (kesme önceliği, adres B8h, bit adreslenebilir)

 IP özel fonksiyon registeri kesme önceliklerini tanımlamakta kullanılır. Birden çok kesme yaratan bir sistemde, aynı anlı oluşan iki kesmeden hangisin,n daha önce işleme sokulacağını belirlemek gereklidir.  8051 entegresinde bir kesme ya düşük önceliğe (0) yada yüksek önceliğe (1) sahip olarak tanımlanabilir. Örneğin birden fazla kesme kullanan bir sistemde, seri port kesmesini yüksek, diğer tüm kesmeleri düşük öncelikli olarak tanımladığımızı varsayalım. Bu durumda, her bir seri port kesmesi, kesme altprogramının çalışmasını sağlayacaktır. Seri port kesmesi sırasında, başka bir kesme aktif olsa bile önce seri port kesmesi programı  tamamlanacaktır. Aşağıda IP registerinin pinleri görülmektedir.  Herhangi bir kesmeyi öncelikli yapmak için o kesmenin bitini SET etmek yeterlidir. Örneğin seri port kesmesinin diğer kesmelerden daha öncelikli olmasını istiyorsak,

SETB PS; 

komutunu vermek yeterlidir. 

Bit

İsim

Bit Adresi

Açıklama

7

-

-

Tanımsız

6

-

-

Tanımsız

5

-

-

Tanımsız

4

PS

BCh

Seri port önceliği

3

PT1

BBh

Zamanlayıcı 1 önceliği

2

PX1

Bah

Dış kesme 1 önceliği

1

PT0

B9h

Zamanlayıcı 0 önceliği

0

PX0

B8h

Dış kesme 0 önceliği

                                 Şekil.  Kesme önceliği registeri bitleri ve anlamları.

PSW (program statüsü kelimesi, adres D0h, bit adreslenebilir)

Program statüsü kelimesi registerinde 8051 komutlarının işlemesine göre, aktiflene ve pasiflenen bayraklar bulunur. PSW registerinde, elde bayrağı, yedek elde bayrağı, taşma bayrağı ve parite bayrağı gibi önemli bitler bulunur. Buna ek olarak PSW registerinde hangi register bankasının kullanılacağını belirlemekte kullanılan bitler bulunur. Bir kesme programı yazıldığında, kesme programı başında program statüsü kelimesini yığına saklamak ve kesme programı sonunda yığından geri almak, pek çok programlama hatasını önleyecektir. Çünkü 8051 komut kümesi komutlarının pek çoğu, PSW registerinin değişmesine yol açar.

8051 matematik işlemlerinin sonucuna göre değişen 4 PSW bitine sahiptir. Bu bitler Carry (elde) biti, Auxillary Carry (yardımcı elde) biti, Overflow (taşma) biti ve Parity (parite) bitleridir.  PSW registerinde bunlardan başka RS0 ve RS1 register bank seçme bitleri ve bir tan de programcı kullanımına sunulmuş genel amaçlı bit F0 bulunur.

 

7 6 5 4 3 2 1 0

CY

AC

F0

RS1

RS0

OV

-

P

 

Bit  Sembol

7     CY    Elde bayrağı. Matematik işlemlerde, sıçra, döndür ve bit işlemlerinde kullanılır. 

6     AC         Yardımci elde. BCD sayı işlemlerinde kullanılır.    

5     F0          Kullanıcı için ayrılmış bit.

4     RS1        Register bank seçme biti  1

3     RS0        Register bank seçme biti  0

RS1     RS0

0       0       0       0         0         0         0         0         0          0           0   Register bank 0

0       0       0       0         0         0         0         0         0          0           1   Register bank 1

1       1       1       1         1         1         1         1         1          1           0   Register bank 2

1       1       Register bank 3

2     OV         Taşma bayrağı. Aritmetik işlemlerde kullanılır.

1     -              Kullanım dışı.

0     P             Akümülatörün paritesini gösterir. 1 = ODD Parity

 

ACC (akümülatör, adres E0h, bit adreslenebilir)

Akümülatör, 8051 registerleri içerisinde en çok kullanılan registerlerden birisidir.  Çünkü pek çok 8051 komutu direkt olarak akümülatörü kullanmaktadır. Akümülatör de özel fonksiyon registerlerinden birisidir. Dolayısıyla adresi veya ismi verilerek erişilebilir. Örneğin MOV A, #20h komutu ile MOV E0h, 20h komutu aynı işlemleri yapar. Bununla beraber birini komutu kullanmayı tercih etmeliyiz. Çünkü birinci komutun makina kodu karşılığı 2 bayt, fakat ikinci komutun makina kodu karşılığı 3 bayttır.

 B ( B registeri, adres F0h, bit adreslenebilir)

B registeri 8051 komut kümesi içerisinde, çarpma ve bölme işlemlerinde kullanılan bir registerdir. Fakat bu register aynı zamanda geçici dataların saklanması içinde sıklıkla kullanılır.

 

 

 5.  8051 Seri Port ile Haberleşme

8051 entegrenin güçlü özelliklerinden birisi de yapısında bulundurduğu seri haberleşme birimidir (UART).  8051 entegrenin seri bir haberleşme birimine ship olması demek, 8051 ile standart RS-232 seri haberleşmesinin yapılabilmesidir. Böyle bir birim entegre içerisinde bir parça olarak verilmeseydi, seri bir hattan bilgi yollayıp okumak oldukça uğraştırıcı bir iş olarak karşımıza çıkacaktı. Seri bir hattan bilgi yollamak için bit değerini entegrenin bir bacağına yazmak, daha sonra dikkatli bir zamanlama kullanarak sırasıyla bitleri hatta yerleştirmek gerekecekti. Bir pin üzerinden seri bilgi okunması daha da külfetli bir iş olarak karşımıza çıkacaktı. Yollanan veya okunan her bir karakterin, başlangıç biti  (start bit), bitiş biti veya bitleri (stop bit), parite kontrolünün 8051 programcısı tarafından yapılması gerekecekti. Fakat günümüz mikrokontrolcülerinin çoğunda seri haberleşme biriminin bulunması bu sorunu gidermiştir.

Entegrenin seri portunu kullanmak için yapmamız gereken yalnızca bir kaç işlem vardır.   Bunun için entegrenin seri port iletişim modunu ve seri port haberleşme hızını seçmemiz gereklidir. Bu işlemler yapıldıktan sonra yapmamız gereken tek şey yazacağımız karakteri SBUF özel fonksiyon registerine yazmak ve okuyacağımız karakteri SBUF registerinden okumaktır. 8051 bir karakteri yolladığında bize karakteri yolladığını, veya seri porttan bir karakter okunduğunda okunan bir karakterin olduğunu bize bildirecektir.  Böylece programlayıcı karakterin bit bazında gönderilme işleminin sıkıntılarından kurtulmuş olmaktadır.

Seri port asenkron iletişim,  bir start biti, bir veya daha fazla stop biti kullanır. 

mekatronik_8051

 

Seri haberleşme ve Ağ Yapıları

Bir dizi bilgisayarı veya bir dizi işlemciyi birbirine bağlamak için  en uygun yöntem olarak bir kaç temel yöntem vardır. Bunlardan en önemlileri, yıldız (star) ve loop (döngü) bağlama yöntemleridir.

Yıldız bağlama yönteminde ana kontrolcüden birer hat tüm diğer ikincil kontrolcülere götürülür. Bu yöntem de tüm kontro kararı ana kontrolcü tarafından verilir ve her bir ikincil kontrolcü yalnızca ana kontrolcü ile iletişimde bulunur.

Döngü (llop) bağlama yönteminde ise bir kontrol hattı ile ana kontrolcü tüm diğer kontrolcülere bağlanır. Hangi yöntemin seçileceği bu işi düzenleyen kişinin tercihine ve pek çok dış etkene bağlı olabilir.

Temel olarak yıldız bağlama yöntemi güvenilirlik ve hata bulma açısından döngü yöntemine göre daha üstündür.  Döngü yöntemi ise maliyet ve kablo sayısı yönünden üstündür. Yıldız yöntemi eğer ikincil kontrolcülerin sayısı azsa ve ana kontrolcü ile ikincil kontrolcüler arasındaki mesafe az sa tercih edilen yöntem olabilir.  Fakat ikincil kontrolcülerin sayısı ve bu kontrolcülerin ana kontrolcüye olan uzaklığı arttıkça tercih döngü yöntemine doğru gider.

 Seri Data Modu 0

mekatronik_8051

8051 entegrenin seri haberleşme biriminin Seri data modu 0'a getirilmesi için SM0 ve SM1 bitleri 0 yapılır.  Seri data modu 0'da haberleşme hızı sabittir ve osilatör frekansının  12 de birine eşittir.  12Mhz kristal kullanılan bir 8051 devresinde bu haberleşme hızı 1 Megabyte/s dir.  Bu haberleşme modunda RxD ucu hem karekterlerin okunmasında, hem de karakterlerin yollanmasında kullanılır.  Entegre seri haberleşme modu 0'a getirildiğinde, TxD pininde ise kristal frekansının 1/12 sinde kare dalga sinyal bulunur. Bu  sinyal yalnızca haberleşme sırasında aktif duruma gelir. Hatta haberleşme olmadığı zaman, TxD hattı 1 seviyesinde bulunur. Entegreden data yollanırken, TxD hattının ilk yükselmesinden, 1 clock sonra yollanacak karakterin ilk biti RxD hattına kaydırılır. Daha sonra TxD hattının her yükselişinden 1 clock sonra diğer bitler RxD hattına konularak karakter hattan yollanmış olur. Entegreye data okunurken de, karakterler RxD hattından okunur.  TxD hattında ise yine senkronizasyon sinyali bulunur. Gelen bitler TxD hattının düşen kenarından 2 veya 3 clock sonra seri bafıra (SBUF ) alınır. Mod 0 bilgisayar ve 8051 arasında haberleşmeden daha ziyade 8051 ve mod 0 benzeri haberleşme kullanan diğer entegrelerle veya diğer 8051 işlemcilerle haberleşme için kullanılmak üzere düşünülmüş bir haberleşme modudur.

 

Seri Data Modu 1 

Seri port konfigüre edilirken yukarda da belirtildiği gibi program seri port haberleşme hızını belirleyecek düzenlemelreri yapmalıdır.  Yalnızca mod 1 ve mod 3 de seri port haberleşme hızının konfigürasyonuna gerek vardır. mod 2 ve mod 4 seri port haberleşme hızını direkt olarak kristal frekansından ürettiğinden bu modlarda haberleşme hızı ile ilgili işlem yapmaya gerek yoktur. 

Mod 1 ve Mod 3 de seri port haberleşme hızı zamanlayıcı 1 taşmalarıyla belirlenir. Zamanlayıcı 1 çok sık taşıyorsa, haberleşme hızı yüksek daha seyrek taşıyorsa haberleşme hızı daha düşük olacaktır.Zamanlayıcı 1'i haberleşme hızını belirlemek üzere çok farklı biçimde programlama olanağı vardır.  Fakat en çok kullanılan  metod, zamanlayıcı 1'i  8 bit otomatik yükle modunda (zamanlayıcı modu 2) kullanmak ve TH1 registerine gerekli tekrar yükleme değerini kaydetmektir.  TH1 registerine yüklenecek değeri bulmak için (PCON.7 = 0) iken aşağıdaki formülü kullanmamız gerekmektedir. 

TH1 = 256 - ((Kristal frekansı / 384) / Haberleşme Hızı)  

Eğer (PCON.7 = 1)  ise, haberleşme hızı iki katına çıkıyordu. Dolayısıyla PCON.7 = 1 olduğu durumda kullanmamız gereken formül, 

TH1 = 256 - ((Kristal frekansı / 192) / Haberleşme Hızı)  

olacaktır.  Örneğin 11.059 Mhz lik bir kristalimiz olduğunu düşünelim. Bu kristal frekansında, zamanlayıcı 1'i kullanarak saniyede 19,200 bit data haberleşme hızında haberleşme yapmak isteyelim. TH1 registerine yazmamız gereken değeri bulmak için, yukariaki formüllerden birincisini kulllanalım. 

TH1 = 256 - ((Kristal frekansı / 384) / Haberleşme hızı)

TH1 = 256 - ((11059000 / 384) / 19200 )
TH1 = 256 - ((28,799) / 19200)
TH1 = 256 - 1.5 = 254.5 

Yukardaki hesaplamalardan da görülebileceği 19,200 haberleşme hızında çalışabilmek için TH1'e yazmamız gereken değer 254.5 elde edilmektedir. Bir registere küsuratlı bir sayı koyma imkanı yoktur.  Dolayısıyla bu sayıyı TH1 registerine yazamayız. Bunun yerine 254 yazarsak elde edeceğimiz haberleşme hızı 14,400, 255 yazarsak ise elde edeceğimiz haberleşme hızı 28,800 olacaktır.  Öyleyse 19,200 haberleşme hızını gerçekleştirmek için  Pcon.7 bitini "1" yapıp, ikinci formülü kullanalım.

TH1 = 256 - ((Kristal frekansı / 192) / haberleşme hızı)
TH1 = 256 - ((11059000 / 192) / 19200)
TH1 = 256 - ((57699) / 19200)
TH1 = 256 - 3 = 253

Burada elde ettiğimiz değer, küsüratlı bir değer değildir. Dolayısıyla bu değeri TH1 registerine yazarak  19,200 baud için gerekli işlemleri tamamlamış oluruz. Dolayısıyla, 11,059 Mhz bir kristalle 19, 200 haberleşme hızında haberleşebilmek için yapmamız gerekenler sırasıyla şunlardır.

     1. Seri portu mod 1 veya mod 3 e getirmek gerekir.

    2. Zamanlayıcı 1'i mod 2'ye getirmemiz gerekir.

    3. TH1'e 253 değerinin yazılması gerekir.

    4. PCON.7 (SMOD)  bitini "1" yapmamız gerekir.

Şimdi yukarıdaki işlemleri, ASSEMBLY dilinde gerçekleştirelim.

MOV SCON, #048H  ; seri port mod 1
MOV TCON, #020H  ; zamanlayıcı 1 mod 2
MOV TH1, #0FDH    ; TH1 = 253
MOV TL1,  #0FDH    ; TL1 = 253

ORL PCON, #080H   ; PCON SMODE biti = 1

Eğer kullanıdğımız frekans 12 Mhz ise,  19200 haberleşme hızı için ne yapabileceğimizi görelim.

Önce PCON.7 = 0 alıp birinci formülü deneyelim. 

TH1 = 256 - ((Kristal frekansı / 384) / Haberleşme hızı)

TH1 = 256 - ((12,000,000 / 384) / 19200 )
TH1 = 256 - ((31,250) / 19200)
TH1 = 256 - 1..63 = 254.37 

Gördüğünüz gibi, küsüratlı bir sayı elde ettik. Bu sayının TH1'e konulmasına olanak yoktur. Şimdi PCON.7 = 1 alıp ikinci formülü deneyelim. 

TH1 = 256 - ((Kristal frekansı / 192) / haberleşme hızı)
TH1 = 256 - ((12,000,000 / 192) / 19200)
TH1 = 256 - ((62500) / 19200)
TH1 = 256 - 3.26 = 252.74 

Yine küsüratlı bir sayı elde ettik. Buna göre 12 Mhz kristal kullanıldığı zaman 19200 haberleşme hızı olanaklı değildir. 

Şimdi 9600 haberleşme hızını deneyelim. İlk önce PCON.7 = 0 alalım. 

TH1 = 256 - ((Kristal frekansı / 384) / Haberleşme hızı)

TH1 = 256 - ((12,000,000 / 384) / 9600 )
TH1 = 256 - ((31,250) / 9600)
TH1 = 256 - 3.25 = 252.75 

Bu sayı da TH1'e konmak için uygun değil. PCON.7 = 1 alalım. 

TH1 = 256 - ((Kristal frekansı / 192) / haberleşme hızı)
TH1 = 256 - ((12,000,000 / 192) / 9600)
TH1 = 256 - ((62500) / 9600)
TH1 = 256 - 6.5 = 249.5 

Bu sayıda TH1'e yerleştirmek için uygun değil.   

Şimdi 4800 haberleşme hızını deneyelim. PCON.7 = 0 

TH1 = 256 - ((Kristal frekansı / 384) / Haberleşme hızı)

TH1 = 256 - ((12,000,000 / 384) / 4800 )
TH1 = 256 - ((31,250) / 4800)
TH1 = 256 - 6.5 = 249.5 

Bu sayıda uygun değil. PCON.7 = 1 alalım. 

TH1 = 256 - ((Kristal frekansı / 192) / haberleşme hızı)
TH1 = 256 - ((12,000,000 / 192) / 4800)
TH1 = 256 - ((62500) / 4800)
TH1 = 256 - 13.02 = 242.98 

Bu sayıyı 243 (F3H) olarak alıp, TH1'e yerleştirebiliriz. Dolayısıyla yukarıdaki hesaplardan da görüldüğü gibi, 12 MHz bir kristal kullanıldığında, zamanlayıcı 1 kullanılarak oluşturulabilecek maksimum haberleşme hızı, 4800 dür. 12 MHz kristalde 4800 haberleşme hızını programlamak için yazmamız fereken satırlar aşağıdadır.

MOV SCON, #048H  ; seri port mod 1
MOV TCON, #020H  ; zamanlayıcı 1 mod 2
MOV TH1, #0F3H    ; TH1 = 243
MOV TL1,  #0F3H    ; TL1 = 243

ORL PCON, #080H   ; PCON SMODE biti = 1

Biz 8051-8031 entegrelerini kullandığımız devrelerde, standard oalrak 11,0592 Mhz kristali kullanacağız. Inceleyeceğimiz 8052  entegresi üçüncü bir zamanlayıcıya sahiptir. Bu zamanlayıcı da haberleşme hızının kontrolünde kullanılabilmektedir. Bu zamanlayıcı 12 MHz kristalde 9600 haberleşme hızında seri iletişime olanak vermektedir.  80535 entegresi ise, kendi içinde  haberleşme hızı kontrol birimi bulundurmaktadır. Dolayısyla bu entegrelerle yaptığımız devrelerde 12 Mhz kristal kullanacağız. Çünkü   12 Mhz kristal kullanıldığında, zaman ölçme hesapları daha kolay olmaktadır.

Seri Porta Yazma

Seri port yukarıda açıklandığı şekilde, konfigürasyonu yapıldığında, seri port yazma ve okuma için hazır hale gelmiştir.

Seri porta bir karakter yollamak için yapmanız gereken sadece, bu karakteri

SBUF (99h) özel fonksiyon registerine yazmaktır. Örneğin seri porta "X" karakteri yollamak istiyorsanız, vermeniz gereken komut, 

MOV SBUF,#"X"  komutudur.

Yukarıdaki komut işlemci taarafından okunduğunda, işlemci "X" karakterini seri port üzerinden yollayacaktır. Elbetteki seri porttan yollama işlemi anlık bir işlem değildir ve bir zaman dilimi içerisinde gerçekleşecektir. Standart 8051 bir seri çıkış bafırına sahip olmadığından, yeni bir karakter yollamadan önce, önceki karakterin yollandığından emin olmak zorundayız. 8051 entegresi bir karakterin yollanmasının bittiğini TI bitini "1" yaparak bildirir. Dolayısıyla bu bitin değeri "1" ise karakterin yollanması bitmiştir ve yeni bir karakter yollanabilir.  Bu kontrol 8051 kodu olarak aşağıdaki şekilde yazılır. 

 SENDCHR :

 CLR TI                 ; Önce TI bitini temizle.

 MOV SBUF,#"A"    ;Yollancak karakteri seri porta yaz.

 JNB TI,$              ;Karakter yollamasının bitişini bekle.

 RET                         ;

Yukarıdaki üç komut ile bir karakter seri port üzerinden yollanır ve yollama işleminin bitişi beklenir.

 

Seri Porttan Okuma

Seri porttan okuma yapmak ta seri porta yazma kadar kolay bir  işlemdir.  Seri porttan okuma yapmak için RI bayrağına bakılır. Bu bayrak "1" ise seri porttan bir karakter gelmiş demektir. Seri porttan gelen bu karakter  SBUF registerinde bulunur. Örneğin, program kodumuz  bir karakter okumak üzere beklesin ve karakter geldiğinde bu karakteri akümülatöre okusun. Bunun için yazmamız gereken kod yalnızca iki satır olacaktır. 

GETCHR:

JNB RI,$          ; 8051 RI bayrağının aktiflenmesini bekle

MOV A,SBUF    ; Gelen karakteri akümülatöre oku.

RET;

 

Yukardaki kodun birinci satırı RI biti "1" oluncaya kadar beklemektedir. Eğer  seri hattan bir karakter gelirse RI biti "1" olacaktır .  RI biti "1" olduğunda program ikinci satıra geçecek ve MOV komutunu işleme sokacaktır.

  

Seri Data Modu 2 (Çoklu İşlemci Modu) 

Seri haberleşme modu 2, seri haberleşme modu 1'e benzer.  Mod 2'de haberleşmede 11 bit kullanılır.  Bu 11 bitin biri start biti, birisi stop biti ve 9 tane data bitidir.  Gönderilen datanın  9'uncu  biti SCON registerinin TB8 bitine yazılır. Data okuma sırasında ise bu 9'uncu bit RB8 bitine gelir. Seri data modu 2'de iletişim hızı,

 fbaud2 =  (2SMOD / 64) x fclock

 formulü ile hesaplanır. Dikkat edilirse, bu iletişim modunda da haberleşme hızı mod 1 haberleşme hızından çok daha yüksektir. Pek çok işlemci kullanılan bir ağ üzerinde, toplanan verilerin çok hızlı bir şekilde aktarılabilmesine gerek vardır.   Bu ieltişim modunun en  önemli özelliği kullanılan 9uncu data bitinde yatmaktadır. Bu data biti sayesinde yollanan bir mesajın ağdaki belli işlemciler tarafından algılanması, diğerleri tarafından ise ihmal edilmesi sağlanabilmektedir.  Seri iletişim modlarında, 8051 entegresine bir karakter geldiğinde karakterin son bitinin alınmasıyala RI bitinin 1 yapıldığını biliyoruz.  Seri data modunda RI bitinin 1 olabilmesi extra bazı şartlara da bağlanmıştır.  RI bitinin set olabilmesi için, ya son data biti 1 olmalı yada  SCON registerindeki SM2 biti 0 olmalıdır. Dolayısıyla ağdaki bir işlemci gönderilen mesajın ağdaki tüm işlemciler tarafından alınmasını istiyorsa gönderdiği bilginin son bitini 1 yapmalıdır.  Eğer ağdaki yalnız belli işlemcilerin bu mesajı alması isteniyorsa, mesaj yollayan işlemci gönderdiği bilginin son bitini 0 yapar. Bu sayede ağdaki işlemcilerden yalnızca SM2 biti 0 olanlar, gelen mesajı alırlar. 

Bu sayede bir yerel ağ oluşturulup, zaman zaman sadece belli entegrelerin sorgulama sonuçlarına cevap verebilmeleri sağlanabilir. Bu yöntem işlemci ve bilgisayar ağlarında sık kullanılan, konuşan ve dinleyenlerin belirlenmesi esasına dayanan bir yöntemdir.

 

Seri Data Modu 3  

Bu işlemci modu seri data modu 2 ile aynı çalışma mantığına sahiptir. Yalnızca bu modda haberleşme hızı sabit değildir ve aynı seri mod 1' de olduğu gibi zamanlayıcı 1 ile belirlenir.

 

RS-232 İletişiminin Temel Kavramları

RS-232 bilgisayar dışındaki cihazların bilgisayar ile haberleşmelerinde en çok kullanılan iletişim standartlarından birisidir. RS-232 temel olarak bir seri iletişim birimidir. Seri iletişim biriminde karakterler bir hat üzerinden bit bit yollanır. Seri iletişimin paralel iletişime göre en önemli üstünlüğü bağlantı kolaylığıdır.  Bilgisayardan cihaza karakter yollamak için bir hat , cihazdan gelen karakterleri okumak üzere bir hat ve bir toprak hattı olmak üzere toplam üç hat kullanılarak iletişim gerçekleştirilebilir.  Bu standardın önemli dezavantajı, haberleşme hızı arttıkça bilgi kaybına yo açmamak için kablo uzunluğunun da kısalması gerekliliğidir. Standard RS-232 19200 haberleşme hızında en fazla 20m kablo uzunluğuna izin vermektedir.  Yeni seri iletişim standartlarından RS-422, RS-449 çok daha yüksek haberleşme hızlarında çok daha uzun kablolamaya olanak vermektedir. Örneğin RS-422 1600 m uzunluğunda bir kablo üzerinden bir magabit/saniye haberleşme hızalarını desteklemektedir.

Her bilgisayar en az bir seri RS-232 iletişim birimine sahiptir. Yeni bilgisayarlarda RS-232 konnektörleri hemen hemen tamamen 9 pin erkek konnektörlerdir.  Öncelikle bilgisayarınızın arkasında böyle bir konnektör olup olmadığına bakın.  Bilgisayar herhangi bir RS-232 portuna o portun adresi aracılığı ile ulaşır.  Bilgisayarınızda bulunan RS-232 portunun adresini bilgisayar denetim masasından sistem seçeneği içinden araçlar menüsüne geçerek ulaşabilirsiniz. Araçlar menüsünde bilgisayarda var olan tüm iletişim birimlerinin (seri portlar, USB, printer portu, ekran kartı vs.)  adresleri bulunur. Seri iletişim biriminizin adresini buradan bulabilirsiniz. Bazı bilgisayarlarda yalnızca bir RS-232 çıkışı bulunabilir.  Eğer bu çıkışı seri fare için kullanılıyorsa mikroişlemci kartınızı bilgisayar ile haberleştirecek hiç bir      RS-232 biriminiz yok demektir. Yapmanız gereken seri fareden vazgeçip, bilgisayarınızın fare girişine bağlanabilecek bir fare satın almak olacaktır. Böylece RS-232 portunuz mikroişlemci kartınıza bağlamak üzere size kalacaktır.

Bu aşamada biraz da RS-232 konnektörünün yapısından ve seri iletişimden bahsetmek faydalı olacaktır. RS-232 seri iletişim standardı elektriksel özelliklerinde "1" biti  -3 volttan +25 volta kadar bir elektrik sinyali olarak tanımlanmıştır. "0" sinyali ise +3 volttan  +25 volta kadar elektrik sinyali olarak tanımlanmıştır. -3 volt ile +3 volt arasındaki herhangi bir sinyal ise belirsiz bir sinyaldir.

Daha önce de belirttiğimiz gibi yeni bilgisayarlarda RS-232 iletişimi için 9 pin erkek konnektörler kullanılmıştır Fakat bazı bilgisayarlarda ve seri iletişim kurulacak bazı cihazlarda 25 pin erkek konnektörler de bulunabilmektedir. Aşağıda 25 pin ve 9 pin DB kablolarda RS-232 sinyallerinin nasıl bağlandığını görebilirsiniz.

DB25S konnektör:

mekatronik_8051

DB9S konnektör:

mekatronik_8051

Mikrokontrolcülerle bilgisayarların iletişminde temel olarak TxD, RxD ve GND hatları kullanılır.  Pek çok mikrokontrolcüde, bilgisayarla haberleşmek üzere TxD ve RxD hatları bulunur. Fakat mikrokontrolcüler de bu hatların  sinyalleri 0 volt ve 5 volttur.  Bilgisayarla haberleşmede gereken RS-232 sinyalleri ise +12 volt ve -12 volttur. Bu yüzden mikrokontrolcü ve bilgisayar arasındaki iletişimde gerilim dönüşümünü sağlamak üzere bir gerilim dönüştürücü kullanılır. Bu tür gerilim dönüştürücülerin en çok kullanılanı MAX232 entegresidir. Aşağıda bilgisayarla mikrokontrolcü RS232 hattının bağlanmasında MAX232 entegresinin nasıl kullanıldığı görülmektedir.  

Genelde mikrokontrolcü tarafında kullanılacak RS232 konnektörü dişi yapılır.  Dolayısı ile mikrokontrolcü ile bilgisayarı bağlayacak ara kablonun bir ucuna 9 pin erkek konnektör, bir ucuna da 9 pin dişi konnektör  bağlanır Daha önce de söylediğimiz gibi gereken kablo sayısı yalnızca 3 tür.   Konnektörlerin 5 nolu uçları (GND) direkt olarak birbirine bağlanır.  2 (TxD) ve 3 (RxD) uçları ise birbirine çarpraz bağlanır. Böylece mikrokontrolcünün GONDER (TxD) ucu bilgisayarın AL (RxD) ucuna ve bilgisayarın YOLLA ucu mikrokontrolcünün AL ucuna bağlanmış olur.

Dr. Cengiz Birlikseven
Alıntı:
www.ume.tubitak.gov.tr


+/-
Yorum yaz
Adýnýz:
E-posta:
 
Web Sayfas1:
Baţlýk:
UBB Kodu:
[b] [i] [u] [url] [quote] [code] [img] 
 
 
Lütfen resimdeki güvenlik kodunu giriniz.
+/- Yorumlar
Yeni Ekle RSS

3.26 Copyright (C) 2008 Compojoom.com / Copyright (C) 2007 Alain Georgette / Copyright (C) 2006 Frantisek Hliva. All rights reserved."