Sistem Tertanam - Timer / Penghitung

SEBUAH timeradalah jenis jam khusus yang digunakan untuk mengukur interval waktu. Pengatur waktu yang menghitung dari nol ke atas untuk mengukur waktu yang telah berlalu sering disebut astopwatch. Ini adalah perangkat yang menghitung mundur dari interval waktu tertentu dan digunakan untuk menghasilkan penundaan waktu, misalnya, jam pasir adalah pengatur waktu.

SEBUAH counteradalah perangkat yang menyimpan (dan terkadang menampilkan) berapa kali peristiwa atau proses tertentu terjadi, sehubungan dengan sinyal jam. Ini digunakan untuk menghitung peristiwa yang terjadi di luar mikrokontroler. Dalam elektronik, penghitung dapat diimplementasikan dengan mudah menggunakan rangkaian tipe register seperti flip-flop.

Perbedaan antara Timer dan Penghitung

Titik-titik yang membedakan pengatur waktu dari penghitung adalah sebagai berikut -

Timer Melawan
Register bertambah untuk setiap siklus mesin. Register bertambah dengan mempertimbangkan transisi 1 ke 0 sesuai dengan pin input eksternal (T0, T1).
Tingkat penghitungan maksimum adalah 1/12 dari frekuensi osilator. Tingkat penghitungan maksimum adalah 1/24 dari frekuensi osilator.
Pengatur waktu menggunakan frekuensi jam internal, dan menghasilkan penundaan. Penghitung menggunakan sinyal eksternal untuk menghitung pulsa.

Pewaktu 8051 dan Register Terkaitnya

8051 memiliki dua timer, Timer 0 dan Timer 1. Mereka dapat digunakan sebagai timer atau sebagai penghitung peristiwa. Baik Timer 0 dan Timer 1 memiliki lebar 16-bit. Karena 8051 mengikuti arsitektur 8-bit, setiap 16 bit diakses sebagai dua register terpisah dari byte rendah dan byte tinggi.

Timer 0 Daftar

Register 16-bit dari Timer 0 diakses sebagai byte rendah dan tinggi. Register byte rendah disebut TL0 (Timer 0 low byte) dan register byte tinggi disebut TH0 (Timer 0 high byte). Register ini dapat diakses seperti register lainnya. Misalnya, instruksiMOV TL0, #4H memindahkan nilai ke dalam byte rendah dari Timer # 0.

Timer 1 Daftar

Register 16-bit dari Timer 1 diakses sebagai byte rendah dan tinggi. Register byte rendah disebut TL1 (Timer 1 byte rendah) dan register byte tinggi disebut TH1 (Timer 1 byte tinggi). Register ini dapat diakses seperti register lainnya. Misalnya, instruksiMOV TL1, #4H memindahkan nilai ke dalam byte rendah dari Timer 1.

TMOD (Mode Timer) Daftar

Baik Timer 0 dan Timer 1 menggunakan register yang sama untuk mengatur berbagai mode operasi timer. Ini adalah register 8-bit di mana 4 bit yang lebih rendah disisihkan untuk Timer 0 dan empat bit teratas untuk Timer. Dalam setiap kasus, 2 bit yang lebih rendah digunakan untuk mengatur mode pengatur waktu terlebih dahulu dan 2 bit atas digunakan untuk menentukan lokasi.

Gate - Saat disetel, pengatur waktu hanya berjalan saat INT (0,1) tinggi.

C/T - Counter / Timer pilih bit.

M1 - Mode bit 1.

M0 - Mode bit 0.

GERBANG

Setiap pengatur waktu memiliki cara untuk memulai dan menghentikan. Beberapa pengatur waktu melakukannya dengan perangkat lunak, beberapa oleh perangkat keras, dan beberapa memiliki kontrol perangkat lunak dan perangkat keras. Timer 8051 memiliki kontrol perangkat lunak dan perangkat keras. Awal dan penghentian pengatur waktu dikontrol oleh perangkat lunak menggunakan instruksiSETB TR1 dan CLR TR1 untuk timer 1, dan SETB TR0 dan CLR TR0 untuk timer 0.

Instruksi SETB digunakan untuk memulainya dan dihentikan oleh instruksi CLR. Instruksi ini memulai dan menghentikan pengatur waktu selama GATE = 0 dalam register TMOD. Pengatur waktu dapat dimulai dan dihentikan oleh sumber eksternal dengan membuat GATE = 1 di register TMOD.

C / T (JAM / TIMER)

Bit dalam register TMOD ini digunakan untuk memutuskan apakah pengatur waktu digunakan sebagai a delay generator atau sebuah event manager. Jika C / T = 0, ini digunakan sebagai pengatur waktu untuk menghasilkan penundaan pengatur waktu. Sumber jam untuk membuat waktu tunda adalah frekuensi kristal pada 8051. Jika C / T = 0, frekuensi kristal yang terpasang pada 8051 juga menentukan kecepatan di mana pengatur waktu 8051 berdetak pada interval reguler.

Frekuensi pengatur waktu selalu 1/12 dari frekuensi kristal yang terpasang pada 8051. Meskipun berbagai sistem berbasis 8051 memiliki frekuensi XTAL 10 MHz hingga 40 MHz, kami biasanya bekerja dengan frekuensi XTAL 11,0592 MHz. Itu karena baud rate untuk komunikasi serial 8051.XTAL = 11,0592 memungkinkan sistem 8051 untuk berkomunikasi dengan PC tanpa kesalahan.

M1 / M2

M1 M2 Mode
0 0 Mode pengatur waktu 13-bit.
0 1 Mode pengatur waktu 16-bit.
1 0 Mode muat ulang otomatis 8-bit.
1 1 Mode tumpah.

Mode Pengatur Waktu yang Berbeda

Mode 0 (Mode Timer 13-Bit)

Baik Timer 1 dan Timer 0 dalam Mode 0 beroperasi sebagai pencacah 8-bit (dengan prescaler bagi-oleh-32). Register pengatur waktu dikonfigurasi sebagai register 13-bit yang terdiri dari 8 bit TH1 dan 5 bit TL1 yang lebih rendah. 3 bit teratas dari TL1 tidak dapat ditentukan dan harus diabaikan. Menyetel bendera run (TR1) tidak menghapus register. Bendera interupsi pengatur waktu TF1 disetel ketika hitungan bergeser dari semua 1 ke semua 0. Operasi mode 0 sama untuk Timer 0 seperti untuk Timer 1.

Mode 1 (Mode Timer 16-Bit)

Mode Timer "1" adalah timer 16-bit dan merupakan mode yang umum digunakan. Ini berfungsi dengan cara yang sama seperti mode 13-bit kecuali bahwa semua 16 bit digunakan. TLx bertambah mulai dari 0 hingga maksimum 255. Setelah nilai 255 tercapai, TLx disetel ulang ke 0 dan kemudian THx bertambah 1. Sebagai pengatur waktu 16-bit penuh, pengatur waktu dapat berisi hingga 65536 nilai yang berbeda dan itu akan meluap kembali ke 0 setelah 65.536 siklus mesin.

Mode 2 (8 Bit Auto Reload)

Kedua register timer dikonfigurasi sebagai pencacah 8-bit (TL1 dan TL0) dengan reload otomatis. Overflow dari TL1 (TL0) menetapkan TF1 (TF0) dan juga memuat ulang TL1 (TL0) dengan konten Th1 (TH0), yang telah diatur sebelumnya oleh perangkat lunak. Reload meninggalkan TH1 (TH0) tidak berubah.

Manfaat mode reload otomatis adalah Anda dapat memiliki timer untuk selalu berisi nilai dari 200 hingga 255. Jika Anda menggunakan mode 0 atau 1, Anda harus memeriksa kode untuk melihat overflow dan, dalam hal ini, setel ulang timer ke 200. Dalam kasus ini, instruksi berharga memeriksa nilainya dan / atau dimuat ulang. Dalam mode 2, mikrokontroler menangani ini. Setelah Anda mengonfigurasi pengatur waktu dalam mode 2, Anda tidak perlu khawatir tentang memeriksa untuk melihat apakah pengatur waktu telah meluap, Anda juga tidak perlu khawatir tentang menyetel ulang nilainya karena perangkat keras mikrokontroler akan melakukan semuanya untuk Anda. Mode muat ulang otomatis digunakan untuk menetapkan baud rate umum.

Mode 3 (Mode Pengatur Waktu Terpisah)

Mode pengatur waktu "3" dikenal sebagai split-timer mode. Ketika Timer 0 ditempatkan dalam mode 3, ini menjadi dua timer 8-bit yang terpisah. Timer 0 adalah TL0 dan Timer 1 adalah TH0. Kedua penghitung waktu dihitung dari 0 hingga 255 dan jika terjadi luapan, reset kembali ke 0. Semua bit yang ada pada Timer 1 sekarang akan terikat ke TH0.

Ketika Timer 0 dalam mode split, Timer 1 yang sebenarnya (yaitu TH1 dan TL1) dapat diatur dalam mode 0, 1 atau 2, tetapi tidak dapat dimulai / dihentikan karena bit yang melakukan itu sekarang terhubung ke TH0. Timer nyata 1 akan bertambah dengan setiap siklus mesin.

Memulai Timer

Tentukan mode timer. Pertimbangkan pengatur waktu 16-bit yang berjalan terus menerus, dan tidak tergantung pada pin eksternal apa pun.

Inisialisasi TMOD SFR. Gunakan 4 bit terendah dari TMOD dan pertimbangkan Timer 0. Pertahankan dua bit, GATE 0 dan C / T 0, sebagai 0, karena kita ingin timer tidak bergantung pada pin eksternal. Karena mode 16-bit adalah mode timer 1, hapus T0M1 dan setel T0M0. Secara efektif, satu-satunya bit yang dihidupkan adalah bit 0 dari TMOD. Sekarang jalankan instruksi berikut -

MOV TMOD,#01h

Sekarang, Timer 0 dalam mode timer 16-bit, tetapi timer tidak bekerja. Untuk memulai pengatur waktu dalam mode berjalan, atur bit TR0 dengan menjalankan instruksi berikut -

SETB TR0

Sekarang, Timer 0 akan segera mulai menghitung, bertambah sekali setiap siklus mesin.

Membaca Timer

Pengatur waktu 16-bit dapat dibaca dengan dua cara. Baca nilai aktual pengatur waktu sebagai angka 16-bit, atau Anda mendeteksi ketika pengatur waktu meluap.

Mendeteksi Timer Overflow

Ketika pengatur waktu meluap dari nilai tertingginya ke 0, mikrokontroler secara otomatis mengatur bit TFx di register TCON. Jadi alih-alih memeriksa nilai pasti dari pengatur waktu, bit TFx dapat diperiksa. Jika TF0 diset, maka Timer 0 telah meluap; jika TF1 diset, maka Timer 1 telah meluap.