ADuC841 Mikrodenetleyicisi - 8051 MimarisiBlog YazılarGömülü Sistemler

Assembly ile ADuC841 – [7] Zamanlayıcı ve Sayıcı Hesaplamaları Temelleri

8051 Zamanlayıcı ve Sayıcı Hesaplamaları Temelleri

 

    Simülasyon


İçindekiler

  1. Sistem Saat Üreteci ve Makine Çevrimi
  2. ADUC841 Makine Çevrimi
  3. Zamanlayıcı/Sayıcı Yapısı
  4. TMOD Saklayıcısı
  5. TCON Saklayıcısı
  6. Çalışma Modları (Mod 0, Mod 1, Mod 2, Mod 3)
  7. Sayma Değeri Hesaplama (DERS 10.1)
  8. Temel Zamanlayıcı Algoritması (DERS 10.2)
  9. Timer 2 (ADUC841)
  10. Özet ve Hatırlatıcılar

1. Sistem Saat Üreteci ve Makine Çevrimi

Saat Üreteci Nedir?

Mikrodenetleyicinin çalışabilmesi için bir “kalp atışına” ihtiyacı vardır. Bu kalp atışını, yani saat darbelerini üreten birime Saat Üreteci (Clock Generator) denir.

8051 ailesinde tümdevre üzeri (dahili) osilatör mevcuttur. Bu osilatörün çalışabilmesi için XTAL1 ve XTAL2 pinlerine bir kristal veya seramik rezonatör + iki kondansatör bağlanmalıdır.

📌 Pratik Not: Mikrodenetleyiciye bağlanan kristal frekansı, üretici firmanın belirlediği maksimum değeri aşmamalıdır.

  • 8051 için max: 16 MHz
  • ADUC841 için max: 20 MHz

📐 ŞEKİL 1 — Osilatör Bağlantı Devresi

 

  • Kristal (12 MHz) XTAL1 ve XTAL2 pinleri arasına bağlanır
  • Her iki pine 30 pF’lık kondansatör (C1 ve C2) seri olarak eklenir
  • Bağlantı Vss (GND) hattına tamamlanır


Makine Çevrimi (Machine Cycle)

8051 her bir işlemi makine çevrimi adı verilen birimlerle gerçekleştirir.

Nasıl hesaplanır?

Standart 8051’de:

  • 1 Makine Çevrimi = 12 Osilatör Periyodu

Örnek: 12 MHz kristal kullanılırsa;

Genel formül:

Pratik Örnek

MOV R0, 45h komutu 2 makine çevriminde çalışır. 12 MHz kristal için:


📐 ŞEKİL 2 — Makine Çevrimi Diyagramı

Şekilde şu yapı gösterilmektedir:

  • Her durum (state), P1 ve P2 olmak üzere 2 osilatör periyodundan oluşur
  • Durum 1’den Durum 6’ya kadar 6 durum vardır
  • Toplamda: 6 × 2 = 12 osilatör periyodu = 1 makine çevrimi

2. ADUC841 Makine Çevrimi

ADUC841, standart 8051’den çok daha hızlıdır. Sebebi şu:

Özellik Standart 8051 ADUC841
1 Makine Çevrimi 12 osilatör periyodu 1 osilatör periyodu
12 MHz kristal ile hız 1 MIPS 12 MIPS

ADUC841 formülü:

ADUC841 Örneği

MOV R0, 45h — 2 çevrimlik komut, 12 MHz kristal:

🔍 Karşılaştırma: Aynı komut standart 8051’de 2 µs sürerken ADUC841’de 0.167 µs sürer. Bu 12 kat hız farkı demektir! (2 / 0.167 ≈ 12)


Geliştirme Kartlarında Kullanılan Frekans

Derste kullanılan ADUC841 geliştirme kartlarında 11.0592 MHz kristal bulunur.

Bu durumda 1 makine çevrimi:

📌 Neden 11.0592 MHz? Bu özel frekans, seri haberleşmede hatasız baud rate üretimi için tercih edilir.


3. Zamanlayıcı/Sayıcı Yapısı

Neden Zamanlayıcı/Sayıcı Kullanırız?

Mikrodenetleyici uygulamalarında sıkça şu ihtiyaçlar ortaya çıkar:

  • Belirli bir süre beklemek (gecikme oluşturmak)
  • Bir olayın kaç kez gerçekleştiğini saymak
  • Belirli bir zaman aralığını ölçmek

Bu ihtiyaçlar için yazılım döngüsü kullanmak yerine donanımsal Zamanlayıcı/Sayıcı (Timer/Counter, T/C) birimini kullanmak çok daha verimlidir.

Neden daha verimli?

CPU, zamanlayıcıyı çalıştırdıktan sonra başka işler yapmaya devam edebilir. Zamanlayıcı arka planda bağımsız olarak sayar. Bu nedenle sayma işlemleri işlemcinin performansını etkilemez.


8051 / ADUC841’de Zamanlayıcı Yapısı

ADUC841 ve 8051’de 2 adet 16-bit zamanlayıcı/sayıcı bulunur:

  • T/C-0 (Timer/Counter 0)
  • T/C-1 (Timer/Counter 1)
  • (ADUC841’de bir de T/C-2 bulunur, ileride anlatılacaktır)

Her iki birimin temel özellikleri:

  • Yukarı yönde sayar (0’dan max değere doğru)
  • İstenirse başlangıç değeri yüklenebilir (o değerden sayılmaya devam eder)
  • Aynı donanım, hem zamanlayıcı hem de sayıcı olarak kullanılabilir

Zamanlayıcı mı, Sayıcı mı?

Zamanlayıcı modunda (C/T̄ = 0): Sistem saatinden (osilatörden) gelen darbeler sayılır. Her makine çevriminde sayma değeri 1 artar. Bu mod, geçen süreyi ölçmek için kullanılır.

Sayıcı modunda (C/T̄ = 1): Dış dünyadan gelen darbe sayısı sayılır. P3.4 (T0) veya P3.5 (T1) pinlerine bağlanan dış işaret her 1→0 geçişinde sayma değeri 1 artar.


📐 ŞEKİL 3 — Basitleştirilmiş Zamanlayıcı/Sayıcı Blok Diyagramı

Şekilde gösterilecekler:

  • Üst yol (0): OSC → Zamanlayıcı → THi/TLi saklayıcıları
  • Alt yol (1): P3.4(T0) veya P3.5(T1) → Sayıcı → THi/TLi saklayıcıları
  • Anahtar: 0=Zamanlayıcı, 1=Sayıcı seçimi yapar

Saklayıcılar

Her zamanlayıcı için anlık sayma değerini tutan 8-bitlik iki SFR (Special Function Register) vardır:

Zamanlayıcı Yüksek Byte Düşük Byte
T/C-0 TH0 TL0
T/C-1 TH1 TL1
  • Reset sonrasında bu saklayıcıların değeri 00h‘dir.
  • Herhangi bir anda mevcut sayma değeri bu saklayıcılardan okunabilir.
  • İstenen başlangıç değeri bu saklayıcılara yazılabilir.

4. TMOD Saklayıcısı

TMOD (Timer Mode Register), zamanlayıcıların çalışma ayarlarını belirleyen kontrol saklayıcısıdır.

⚠️ Önemli: TMOD saklayıcısı bit adreslenemez. Yani tek bir biti değiştirmek için SETB komutu kullanılamaz; tüm byte yazılmalıdır.

TMOD Bit Yapısı

TMOD Bit Açıklamaları

Bit İsim Açıklama
7 GATE1 T/C-1 için kapı kontrolü. 0: TR1=1 ile aktif olur. 1: TR1=1 VE P3.3(INT1)=1 olmalı
6 C/T̄1 0: Zamanlayıcı (dahili saat), 1: Sayıcı (harici darbe)
5 M1 T/C-1 çalışma modu seçimi (M1-M0 tablosuna bakınız)
4 M0 T/C-1 çalışma modu seçimi
3 GATE0 T/C-0 için kapı kontrolü. Harici start/stop: P3.2(INT0) pini
2 C/T̄0 0: Zamanlayıcı, 1: Sayıcı
1 M1 T/C-0 çalışma modu seçimi
0 M0 T/C-0 çalışma modu seçimi

5. TCON Saklayıcısı

TCON (Timer Control Register), zamanlayıcıları başlatıp durdurmak ve taşma bayraklarını kontrol etmek için kullanılır.

✅ Önemli: TCON saklayıcısı bit adreslenebilir. Tek bir biti SETB veya CLR komutuyla değiştirebilirsiniz.

TCON Bit Yapısı

TCON Bit Açıklamaları

Bit İsim Açıklama
7 TF1 T/C-1 taşma bayrağı. Taşınca donanım tarafından SET edilir. Kesme kullanılmıyorsa yazılımla temizlenmelidir.
6 TR1 T/C-1 çalıştırma biti. TR1=1 → Aktif, TR1=0 → Pasif
5 TF0 T/C-0 taşma bayrağı. TF1 ile aynı işlev
4 TR0 T/C-0 çalıştırma biti. TR1 ile aynı işlev
3 IE1 Harici kesme1 bayrağı (donanım set/temizler)
2 IT1 Harici kesme1 algılama kontrolü (0=seviye, 1=kenar)
1 IE0 Harici kesme0 bayrağı
0 IT0 Harici kesme0 algılama kontrolü

📐 ŞEKİL 4 ve 5 — T/C Detaylı Blok Diyagramları

Blok diyagramlarında şu 3 temel kontrol mekanizması görülmektedir:

  1. Giriş kaynağı kontrolü → TMOD’daki C/T̄ biti
  2. Çalışma kontrolü → GATE, TR, INT pinleri kombinasyonu
  3. Yenileme modu → Çalışma moduna göre (Mod 0/1/2/3)

6. Çalışma Modları

T/C-0 ve T/C-1, TMOD saklayıcısındaki M1-M0 bitleriyle 4 farklı modda çalışabilir:

M1 M0 Mod Açıklama
0 0 Mod 0 13-bit zamanlayıcı/sayıcı
0 1 Mod 1 16-bit zamanlayıcı/sayıcı
1 0 Mod 2 8-bit otomatik yüklemeli zamanlayıcı/sayıcı
1 1 Mod 3 Bağımsız çalışma modu

Mod 0 — 13-bit Zamanlayıcı/Sayıcı

TLi’nin düşük 5 biti + THi’nin 8 biti = toplam 13 bit kullanılır.

Maksimum sayma değeri: 2¹³ = 8192 (0 ile 8191 arası)

Her 32 darbede THi 1 artar (TLi’nin 5-bitlik sayma aralığı: 0–31 = 32 darbe).

Taşma: Sayma değeri 8192’ye ulaştıktan sonra gelen ilk darbe ile taşma gerçekleşir → TFi=1 → TLi ve THi sıfırlanır (00h’e düşer).


📐 ŞEKİL 6 — Mod-0 Blok Diyagramı

Şekilde:

  • Osilatör → C/T̄ seçim anahtarı → TL1 (5-Bit) → TH1 (8-Bit) → TF1 → Kesme
  • TR1 ve Gate1 kontrol lojik kapısı görülür

Mod 1 — 16-bit Zamanlayıcı/Sayıcı

Mod 0’dan tek farkı, TLi’nin 8-bitinin tamamının kullanılmasıdır.

Maksimum sayma değeri: 2¹⁶ = 65536 (0 ile 65535 arası → FFFFh)

Bu, ders anlatımındaki en yaygın kullanılan moddur.


📐 ŞEKİL 7 — Mod-1 Blok Diyagramı

Şekilde Mod 0’dan farkı: TL1 artık 5-bit değil 8-bit olarak gösterilmiştir.


Mod 2 — 8-bit Otomatik Yüklemeli Zamanlayıcı/Sayıcı

Bu mod, otomatik yenileme (auto-reload) özelliği ile öne çıkar.

Çalışma mantığı:

  • TLi anlık sayma değerini tutar (8-bit, 0–255 arası sayar)
  • TLi → 255’e ulaşır → Taşma gerçekleşir → TFi=1
  • THi’deki değer otomatik olarak TLi’ye yüklenir
  • TLi bu yeni değerden saymaya devam eder

Ne zaman kullanılır? Sabit periyotlu, tekrarlayan zaman gecikmeleri gerektiğinde (örn. seri haberleşme baud rate üretimi).


📐 ŞEKİL 8 — Mod-2 Blok Diyagramı

Şekilde THi → “Yeniden Yükle” oku → TLi geri beslemesi dikkat çekicidir.


Mod 3 — Bağımsız Çalışma Modu

T/C-1 için: Bu modda T/C-1 durdurulur, son sayma değeri TH1 ve TL1’de tutulmaya devam eder.

T/C-0 için: 2 bağımsız 8-bit’lik yapıya ayrılır:

  • TL0: T/C-0’ın kendi kontrol bitleriyle yönetilen, taşmada TF0 bayrağını set eden 8-bit zamanlayıcı/sayıcı
  • TH0: TR1 biti ile kontrol edilen ve taşmada TF1 bayrağını set eden 8-bit zamanlayıcı

📐 ŞEKİL 9 — Mod-3 Blok Diyagramı


7. Sayma Değeri Hesaplama

Bu bölüm, video dersinde gösterilen DERS 10.1 içeriğini kapsamaktadır. Zamanlayıcıya yüklenecek başlangıç değerinin nasıl hesaplandığı adım adım açıklanmaktadır.

Temel Kavramlar

Verilen:

  • Frekans: f_osc = 11.0592 MHz
  • Osilatör periyodu: T_osc = 1 / f_osc ≈ 90.4 ns (≈ 90 ns)
  • ADUC841’de 1 makine çevrimi = 1 osilatör periyodu = 90.4 ns

Mod 1’de maksimum sayma süresi (16-bit):

💡 Bu değer, zamanlayıcının hiç yüklemeden, 0000h’den başlayarak FFFFh’e kadar sayıp taşmasının ne kadar sürdüğünü gösterir.


N_sayma (Sayma Sayısı) Hesabı

İstenen gecikme süresine (t_sayma) karşılık gelen sayma sayısı:


Durum 1: t_sayma ≤ t_max (Tek Turda Sığan Gecikme)

Eğer istenilen süre t_max = 5.92 ms’den küçükse, tek bir zamanlayıcı turu yeterlidir.

Zamanlayıcıya yüklenecek değer:

Örnek: 1 ms gecikme (t_sayma = 1 ms)

Bu değer TH0 ve TL0’a (veya TH1/TL1’e) yüklenir:


Durum 2: t_sayma > t_max (Birden Fazla Tur Gereken Gecikme)

İstenen süre 5.92 ms’den büyükse tek tur yetmez. İki yöntem kullanılabilir:

Yöntem i: t_sayma / t_max → Döngü Değeri (tam sayıya yuvarla)

Bölme sonucu tam bölünmüyorsa → hata oluşur (bölünemeyen durum hatası).

Örnek: 25 ms gecikme

Bu durumda farklı bir temel süre seçmek gerekir.

Yöntem ii: Uygun Temel Süre Seçimi

t_sayma değerinin tam bölenlerinden biri olan bir temel süre seçilir:

Örnek: 25 ms için 5 ms temel seçimi

Şimdi 5 ms için başlangıç değeri hesaplanır:

Assembly’de 5 döngüyle 25 ms:

⚠️ Yöntem ii için ilk değer girişi gereklidir (döngü sayacı R7’ye başlangıç değeri atanmalı).


Görseli Açıklayan Not

Yüklediğiniz birinci görselde (DERS 10.1 tahtası) şu bilgiler yer almaktadır:

  • Üst sağda: f_osc = 11.0592 MHz → T_osc ≈ 90.4 ns
  • t_max = 65536 × 90.4 ns ≈ 5.92 ms
  • Durum 1: t_sayma ≤ t_max → N_girilen = N_max – N_sayma
  • Durum 2: t_sayma > t_max
    • i) t_sayma / t_max → döngü değeri (tam bölünmezse hata)
    • ii) t_sayma / 5ms → 25ms/5ms = 5 (döngü değeri) ✓
  • Sağ üst: TH0/TL0 bloğu ve N_sayma = t_sayma / 90.4 ns formülü

8. Temel Zamanlayıcı Algoritması

Bu bölüm, video dersindeki DERS 10.2 tahtasında gösterilen 6 adımlı temel algoritmanın kapsamlı açıklamasıdır.


6 Adımlı Temel Zamanlayıcı Algoritması


Her Adımın Detaylı Açıklaması

Adım 1: İlk Ayarla (TMOD)

TMOD saklayıcısına uygun değer yazılır. Hangi biti ne yapacağınızı bilmek gerekir.

Örnek: T/C-0, Mod 1, Zamanlayıcı modu, Yazılımsal start/stop (GATE=0):

Adım 2: İlk Değerleri Yükle

Hesaplanan N_girilen değeri TH0 ve TL0’a ayrı ayrı yüklenir.

📌 Değerleri hesaplamak için Bölüm 7’deki formüller kullanılır.

Adım 3: Başlama Koşulu

Zamanlayıcının ne zaman başlatılacağını belirler. Bu, probleme göre değişir:

  • Hemen başlat (sonraki adıma geç)
  • Bir butona basılınca başlat
  • Belirli bir giriş sinyali gelince başlat

Adım 4: Zamanlayıcıyı Başlat

Adım 5: Taşma Bayrağını Kontrol Et

TF0 (veya TF1) bayrağı SET olana kadar döngüde bekle:

Alternatif kullanım (etiketle):

Adım 6: Taşma Bayrağını Temizle

Kesme yapısı kullanılmıyorsa bayrak yazılımla temizlenmelidir. Aksi halde bir sonraki turda sorun çıkar.


Tam Örnek Program: 250 µs Gecikme

Problem: 11.0592 MHz kristal, T/C-0, Mod 1 kullanarak 250 µs gecikme üret.

Çözüm:

Assembly Kodu:


Görseli Açıklayan Not (DERS 10.2 Tahtası)

Yüklediğiniz ikinci görselde (DERS 10.2 tahtası) şu 6 adım yer almaktadır:

  1. İlk ayarla → MOV TMOD, #__h
  2. İlk değerler → MOV TL0, #__h ve MOV TH0, #__h
  3. Başlama koşulu → Zamanlayıcının başlatılmasına yönelik probleme göre belirtilen şart
  4. Zamanlayıcıyı başlat → SETB TR0
  5. Taşma bayrağı kontrol → JNB TF0/TF1, x : x: JNB TF0, x
  6. Taşma bayrağını temizle → (Yazılımla temizlenir)

9. Timer 2 (ADUC841)

ADUC841 mimarisinde standart 8051’den farklı olarak Timer 2 de bulunur.

T2CON Saklayıcısı

Timer 2’nin çalışma ayarları T2CON SFR’si ile yapılır. T2CON bit adreslenebilir.

Bit İsim Açıklama
7 TF2 Timer2 taşma bayrağı. RCLK=1 veya TCLK=1 durumunda set edilmez. Yazılımla temizlenir.
6 EXF2 T2EX (P1.1) pininde düşen kenar gelince set edilir (EXEN2=1 ise).
5 RCLK Seri port Mode1/Mode3’te alma (Rx) için saat kaynağı olarak Timer2 kullanılır.
4 TCLK Seri port veri gönderme (Tx) için saat kaynağı olarak Timer2 kullanılır.
3 EXEN2 T2EX pininden yakalama/yeniden yükleme işlevi aktif hale gelir.
2 TR2 Timer2 çalıştırma biti. 1=Çalışır, 0=Durur.
1 CNT2 T2 pininden (P1.0) harici sinyal sayar → Sayıcı modu.
0 CAP2 T2EX (P1.1) düşen kenarında yakalama yapılır → Yakalama modu.

Timer 2 Çalışma Modları

RCLK veya TCLK CAP2 TR2 Çalışma Modu
0 0 1 16-Bit Yeniden Yükleme
0 1 1 16-Bit Yakalama
1 X 1 Seri Haberleşme Baud-Rate Üreteci
X X 0 Timer 2 Çalışmaz

Timer 2 Saklayıcıları

Saklayıcı Açıklama
TH2, TL2 Anlık sayma değerini tutar (16-bit)
RCAP2H, RCAP2L Otomatik yükleme modunda: yüklenecek değer; Yakalama modunda: yakalanan değer

📐 ŞEKİL 10 — Timer 2 Yeniden Yükleme Modu


📐 ŞEKİL 11 — Timer 2 Yakalama Modu


10. Özet ve Hatırlatıcılar

Hızlı Formül Kartı


Hangi Mod Ne Zaman?

Durum Önerilen Mod
Tek seferlik, uzun süre (≤5.92 ms) Mod 1
Kısa, tekrarlayan, sabit periyot Mod 2 (otomatik yükleme)
Çok eski kod uyumluluğu (nadiren) Mod 0
2 bağımsız 8-bit timer gerekli Mod 3

TMOD Değerlerini Hızlı Hesaplama

T/C-0, Zamanlayıcı, Mod 1:

T/C-0, Zamanlayıcı, Mod 2:

T/C-1, Zamanlayıcı, Mod 1 (T/C-0 kullanılmıyor):


Yaygın Hatalar

  1. TF bayrağını temizlemeyi unutmak → Zamanlayıcı bir sonraki turda hemen taşıyor gibi davranır.
  2. TH ve TL’yi yanlış sırayla yüklemek → Eğer zamanlayıcı çalışıyorken yükleme yapılırsa bayt tutarsızlığı olabilir. Önce durdur, sonra yükle.
  3. TMOD’u bit adreslemek → TMOD bit adreslenemez! SETB TMOD.0 çalışmaz.
  4. Mod 2’de TH’yi boş bırakmak → TH, otomatik yükleme kaynağıdır; içinde değer yoksa 00h’den sayılır.
  5. t_sayma > t_max durumunda tek tur beklentisi → Döngü kullanmak zorunludur.

 

 

Örnek ve Uygulamalar

8051 Zamanlayıcı/Sayıcı — Kod + Donanım Örnekleri ile Sınav Rehberi

Makale Hakkında: Bu bölüm, bir önceki teorik makaleye doğrudan bağlıdır. Burada yalnızca uygulama, örnek kod, donanım bağlantısı odaklı çözümler yer almaktadır. Her örnek kendi içinde tam ve bağımsızdır: okuyup anlayın, kopyalayın, değiştirin.


📌 Bu Makalede Neler Var?

Bölüm Konu
1 TMOD değerini elle hesaplama yöntemi
2 TH/TL başlangıç değeri hesaplama yöntemi
3 Örnek 1 — Tek gecikme (250 µs)
4 Örnek 2 — LED yanıp sönme (1 Hz kare dalga)
5 Örnek 3 — 500 ms gecikme (döngüyle)
6 Örnek 4 — Kare dalga üretimi (P1.0, farklı duty cycle)
7 Örnek 5 — Mod 2 (8-bit otomatik yükleme)
8 Örnek 6 — Timer1 ile baud rate (seri haberleşme başlangıcı)
9 Örnek 7 — Sayıcı modu (harici darbe sayma)
10 Örnek 8 — İki timer’ı aynı anda kullanma
11 Sınav sorusu çözüm kalıpları
12 Hızlı başvuru kartı

1. TMOD Değerini Elle Hesaplama

Bu yöntem sınavda en çok sorulan kısımdır. TMOD’un 8 biti tek tek doldurulur.

Adım Adım TMOD Hesaplama

TMOD bit sırası:

Sorular şu 4 soruya cevap vererek çözülür:

Soru Cevap İlgili Bit
Hangi timer? T0 mu T1 mi? — Alt/üst nibble seçimi
Zamanlayıcı mı, sayıcı mı? Zamanlayıcı → 0, Sayıcı → 1 C/T̄ biti
Start/stop nasıl? Yazılımsal → GATE=0, Donanımsal → GATE=1 GATE biti
Hangi mod? 0/1/2/3 M1-M0 bitleri

TMOD Değeri Örnekleri (Ezberlemeye Değer)

Senaryo Bit Dizisi (7→0) Hex Değer
T0, Mod 1, Zamanlayıcı, yazılımsal start 0000 0001 01h
T0, Mod 2, Zamanlayıcı, yazılımsal start 0000 0010 02h
T1, Mod 1, Zamanlayıcı, yazılımsal start 0001 0000 10h
T1, Mod 2, Zamanlayıcı, yazılımsal start 0010 0000 20h
T0, Mod 1, Sayıcı, yazılımsal start 0000 0101 05h
T0 Mod1 + T1 Mod1, ikisi Zamanlayıcı 0001 0001 11h
T0, Mod 1, donanımsal start (GATE=1) 0000 1001 09h

🎯 Sınav ipucu: “Timer 0, Mod 1, zamanlayıcı modu” diyorsa cevap neredeyse her zaman MOV TMOD, #01h‘dir.


2. TH/TL Başlangıç Değeri Hesaplama

Genel Formül

Sık Kullanılan Değerler Tablosu (11.0592 MHz)

Bu tabloyu ezberlemeye gerek yok ama mantığını anlamak şart:

İstenen Süre N_sayma N_girilen TH TL
100 µs 1106 64430 = FBEEh FBh EEh
250 µs 2765 62771 = F533h F5h 33h
500 µs 5531 60005 = EA65h EAh 65h
1 ms 11062 54474 = D4CAh D4h CAh
5 ms 55310 10226 = 27F2h 27h F2h
50 ms 553100 Tek turda sığmaz → döngü gerekir — —

⚠️ 50 ms için t_max = 5.92 ms’den büyük → döngü kullanılmalı!

Hex’e Dönüştürme (Sınavda Hızlı Yöntem)


3. Örnek 1 — Tek Gecikme: 250 µs

Problem

11.0592 MHz kristal, Timer 0, Mod 1 kullanarak 250 µs gecikme üret. P1.0 pinini bu gecikme sonunda HIGH yap.

Hesaplama

Assembly Kodu

Donanım Bağlantısı

📌 Dikkat: P1.0 HIGH olduğunda LED yanar (aktif HIGH bağlantı). 8051’de portlar güç gelince HIGH çıkış yapar, bu yüzden LED önce yanıyor olabilir — reset sonrası P1.0 zaten HIGH’dır.


4. Örnek 2 — LED Yanıp Sönme (1 Hz Kare Dalga)

Problem

P1.0’a bağlı LED’i 1 saniyede 1 kez yanıp söndür. (500 ms ON, 500 ms OFF)

Hesaplama

Assembly Kodu

Donanım Bağlantısı

CPL Komutunun Mantığı

💡 CPL P1.0 komutu, JB/JNB ile koşullu yazmak yerine tek satırda tersler. Sınavda çok kullanışlıdır.


5. Örnek 3 — Farklı Temel Süre Seçimi (10 ms × 50 = 500 ms)

Problem

Aynı 500 ms gecikmeyi bu sefer 10 ms temel süreyle yap.

Hesaplama

🚨 tuzakı: 10 ms, 11.0592 MHz’de Mod 1 için sınırı (5.92 ms) aşar. Sınavda bu hatayı görürseniz “t_sayma > t_max, sığmaz” yazmalısınız!

Doğru Yaklaşım: 2 ms × 250 = 500 ms

📌 R6 = 250 yazılabilir. Ama R registerları maksimum 255 değer alabilir. 250 ≤ 255 olduğu için R6 kullanımı geçerlidir.


6. Örnek 4 — Kare Dalga Üretimi (P2.0, %50 Duty Cycle)

Problem

P2.0 pininden 1 kHz frekanslı kare dalga üret.

Hesaplama

Assembly Kodu

Çıkış Sinyali Görünümü

Donanım: Osiloskop ile Ölçüm


7. Örnek 5 — Asimetrik Kare Dalga (%25-%75 Duty Cycle)

Problem

P1.1’de: 100 µs HIGH, 300 µs LOW olan dalga üret.

Hesaplama

Assembly Kodu

Dalga Şekli


8. Örnek 6 — Mod 2 (8-bit Otomatik Yükleme)

Ne Zaman Mod 2 Kullanılır?

Mod 2, kısa ve sürekli tekrarlayan gecikmeler için idealdir. Özellikle baud rate üretimi için standart seçimdir.

Mod 2 Özellikleri

Problem

Timer 0, Mod 2 ile 200 µs gecikme üret. (Uyarı: 200 µs > 23.14 µs → Mod 2’de sığmaz, döngü kullanılmalı!)

📌 Bu tuzakıtır! Mod 2’de tek turda sadece ~23 µs beklenebilir.

Mod 2 İçin Gerçekçi Örnek: 20 µs Gecikme

⚠️ Kritik fark: Mod 2’de CLR TR0 yapmazsanız timer OTOMATIK devam eder! Bu, baud rate üretimi için istenen davranışdır ama tek gecikme için durdurulmalıdır.

Mod 2 Baud Rate Örneği (9600 bps)

Bu, sınavlarda ve gerçek projelerde en çok kullanılan Mod 2 uygulamasıdır:


9. Örnek 7 — Sayıcı Modu (Harici Darbe Sayma)

Sayıcı Modunun Mantığı

Problem

P3.4 (T0) pinine bağlı butondan 5 darbe gelince P1.0’ı HIGH yap.

Hesaplama

TMOD = 05h Nasıl Hesaplandı?

Donanım Bağlantısı

💡 Buton debounce (titreme) sorunu: Gerçek uygulamada mekanik butonlar tek basışta 5-50 kez “zıplar”. Sınavlarda bu genellikle ideal sinyal olarak kabul edilir.


10. Örnek 8 — İki Timer’ı Aynı Anda Kullanma

Problem

  • Timer 0: P1.0’da 200 µs periyotlu kare dalga üret
  • Timer 1: P1.1’de 800 µs periyotlu kare dalga üret

(Her iki timer bağımsız çalışır)

Hesaplama

Düzgün Yapı (Başlatma + Döngü Ayrı)


11. Örnek 9 — Alt Program Yapısıyla Gecikme (Temiz Kod Yapısı)

Problem

P1 portundaki 8 LED’i sırayla yak (knight rider efekti), her geçişte 100 ms bekle.

Hesaplama

Donanım Bağlantısı

RL ve RR Komutlarının Çalışması


12. Örnek 10 — Donanımsal Start/Stop (GATE=1)

GATE Bitinin Kullanımı

GATE=1 yapıldığında, zamanlayıcı yalnızca TR=1 VE INT pini HIGH olduğunda çalışır. Bu, harici bir sinyal ile timer’ı kontrol etmeye yarar (örn. bir olayın süresini ölçmek).

Problem

P3.2 (INT0) pinindeki bir sinyalin yüksek süresini ölç. Timer 0, Mod 1 kullan. (Sinyal genişliği < 5.92 ms)


13. Soru Çözüm Kalıpları

Bu bölüm, sınavda karşılaşacağınız soru tiplerini ve çözüm kalıplarını gösterir.


Kalıp 1: “X µs / ms gecikme üret” Sorusu

Şablon:

Aklınızda tutun:

  • t_sayma ≤ 5.92 ms → Döngüsüz (tek tur)
  • t_sayma > 5.92 ms → MOV R7, #döngü_sayısı + DJNZ R7, ETIKET

Kalıp 2: “Kare dalga üret” Sorusu

Şablon:


Kalıp 3: “X darbe say” Sorusu (Sayıcı modu)

Şablon:


Kalıp 4: “Mod 2 kullan” Sorusu

Şablon:


Yapılan Yaygın Hatalar

Hata Doğrusu
MOV TMOD, #0 sonra bit set etmek TMOD bit adreslenemez! Tüm byte yazılır
TF temizlemeyi unutmak Her zaman CLR TF0/TF1 yazılır
Mod 2’de TH ile TL’yi farklı yazmak TH ve TL’ye AYNI değer yazılır
10 ms gecikmede döngüsüz kod 10 ms > 5.92 ms → döngü şart
Sayıcı modunda P3.4’ü giriş yapmamak SETB P3.4 yazılmalı
DJNZ R7, X sonrasında R7 başlangıcını unutmak Her alt program çağrısında R7 sıfırdan başlamalı

14. Hızlı Başvuru Kartı

Formüller

TMOD Şifre Tablosu

Kritik Komutlar

Gecikme Değerleri (11.0592 MHz, Mod1, T0)


15. Bonus: 12 MHz Kristal ile Hesaplama Farkı

bazen 12 MHz kristal verilir. Değerler değişir!

🔑 ipucu: Soru 12 MHz veriyorsa T_makine = 1 µs hesapla. Soru 11.0592 MHz veriyorsa T_osc = 90.4 ns kullan.


Bu makale, SAÜ EEM 304 ders videoları, ders notları (s.108–118) ve sınav deneyimlerine dayanarak hazırlanmıştır. Tüm örnekler ADUC841 / 8051 Assembly dili ile yazılmıştır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Başa dön tuşu