Keluarga 8051

HALAMAN UTAMA

TIPE MEMORI
Program Memori
RAM Internal
RAM External
Memori SFR
Memori Bit

REGISTER UTAMA
Akumulator
Register R & B
DPTR, PC, & SP

MODE PENGALAMATAN
Immediate Addressing
Direct Addressing
Indirect Addressing

INTERUPSI
Pembangkit Interupsi
Setting Interupsi
Prioritas Interupsi

BACK TO MAIN MENU

Timer

Mikrokontroler 89C51 hadir dengan dua timer, keduanya bisa dikontrol, diset, dibaca, dan dikonfigurasi sendiri-sendiri. Timer 89C51 memiliki tiga fungsi umum, yaitu:

  1. Menghitung waktu antara dua kejadian (event)
  2. Menghitung jumlah kejadian itu sendiri
  3. Membangkitkan baud rate untuk port serial.

Sebuah timer bekerja dengan mencacah. Tidak tergantung pada fungsi sebagai timer, counter, atau generator baud rate, sebuah timer akan selalu ditambah satu oleh mikrokontroler.

Menggunakan Timer Untuk Mengukur Waktu

Fungsi timer yang utama adalah untuk mengukur waktu. Saat sebuah timer digunakan untuk mengukur waktu, dia akan bertambah satu setiap satu siklus mesin. Setiap siklus mesin membutuhkan 12 pulsa kristal. Maka, apabila sebuah 89C51 dengan kristal 11,059 MHz, maka timer setiap detiknya akan berharga:

11.059.000/12=921.583

Dengan kata lain, terdapat 921.583 kali pencacahan dalam setiap detiknya. Tidak seperti instruksi-instruksi yang bisa memakan satu hingga empat siklus mesin, sebuah timer selalu konsisten bertambah satu setiap satu kali siklus mesin. Sehingga, jika diinginkan sebuah timer yang berharga 50.000, berarti memakan waktu sebesar:

50.000/921.583=0,0542

Dengan kata lain, diperlukan waktu 0,052 detik untuk mendapatkan timer yang telah berharga 50.000. Melalui cara serupa, apabila diinginkan mendapatkan pewaktu 0,05 detik, maka dibutuhkan timer yang mencacah hingga:

0,05 x 921.583=46.079,15

Ini berarti kita perlu memonitor cacahan dari timer hingga mencapai harga 46.079. Walaupun tidak benar-benar presisi karena menghilangkan hitungan 0,15; namun cukup mendekati dan dapat ditoleransi.

Timer SFR

Sebagaimana telah disinggung di atas, 89C51 memiliki dua buah timer yang setiap fungsinya identik. Timer pertama disebut dengan TIMER0 dan timer kedua disebut dengan TIMER1. Kedua timer saling berbagi dua macam SFR, yaitu TMOD dan TCON, yang mengontrol timer, dan masing-masing timer memiliki dua macam SFR yang spesifik yaitu TH0/TL0 untuk TIMER0 dan TH1/TL1 untuk TIMER1. Untuk lebih jelasnya lihat tabel di bawah ini.

Daftar SFR Untuk Timer

Nama SFR

Keterangan

Alamat

TH0 Timer 0 High Byte

8Ch

TL0 Timer 0 Low Byte

8Ah

TH1 Timer 1 High Byte

8Dh

TL1 Timer 1 Low Byte

8Bh

TCON Timer Control

88h

TMOD Timer Mode

89h

TIMER0 memiliki dua macam SFR yang eksklusif bagi dirinya sendiri, yaitu TH0 dan TL0 yang membentuk harga aktual dari timer. Misalnya TIMER0 berharga 1000, maka TH0 akan berisi 3 sedangkan TL0 akan berisi 232. Untuk melihat harga sebenarnya, kalikan harga TH0 dengan 256 dankemudian tambahkan dengan TL0.

TIMER1 identik dengan TIMER0 kecuali bahwa SFR eksklusif yang dimilikinya adalah TH1 dan TL1. Dan karena kedua timer ini memiliki kapasitas dua byte, maka harga maksimum yang bisa ditampung adalah 65.535. Dengan demikian, apabila timer telah melampaui harga 65.535, maka dia akan reset atau overflow dan kemudian kembali ke harga awal 0.

SFR TMOD

SFR TMOD digunakan untuk mengontrol mode operasi dari kedua timer. Setiap bit dari SFR ini menyediakan informasi bagi mikrokontroler bagaimana menjalankan timer. Empat bit orde tinggi (bit 4 hingga bit 7) berhubungan dengan TIMER1, sedangkan empat bit orde bawah (bit 0 hingga bit 3) mempunyai fungsi sama yang diperuntukkan bagi TIMER0.

Daftar Bit SFR TMOD

Bit

Nama

Fungsi

Timer

7

GATE 1 Jika bit ini diset, timer hanya akan bekerja jika INT1 (P3.3) berlogika 1. Jika bit ini dinolkan, timer akan bekerja tanpa dipengaruhi kondisi INT1

1

6

C/T1 Jika bit ini diset, timer akan menghitung kondisi pada T1 (P3.5). Jika bit ini dinolkan, timer akan bertambah satu setiap siklus mesin

1

5

T1M1 Bit mode timer

1

4

T1M0 Bit mode timer

1

3

GATE0 Jika bit ini diset, timer hanya akan bekerja jika INT0 (P3.2) berlogika 1. Jika bit ini dinolkan, timer akan bekerja tanpa dipengaruhi kondisi INT0

0

2

C/T0 Jika bit ini diset, timer akan menghitung kondisi pada T0 (P3.4). Jika bit ini dinolkan, timer akan bertambah satu setiap siklus mesin

0

1

T0M1 Bit mode timer

0

0

T0M0 Bit mode timer

0

Seperti terlihat pada tabel di atas, ada 4 bit yang menyatakan mode untuk kedua timer. Masing-masing dua bit untuk satu timer. Adapun mode operasi yang dimaksud di sini adalah sebagaimana tercantum dalam tabel di bawah ini.

Mode Operasi Timer

TxM1

TxM0

Mode Timer

Keterangan

0

0

0

Timer 13 bit

0

1

1

Timer 16 bit

1

0

2

8 bit auto reload

1

1

3

Mode timer split

Mode Timer 13 Bit (Mode 0)

Dalam mode 0, timer yang dibentuk adalah timer 13 bit. Mode ini digunakan untuk menjaga kompatibilitas pendahulu keluarga 8051, yaitu generasi 8048. Pada saat ini timer 13 bit sudah jarang digunakan. Saat timer diset sebagai timer 13 bit, TLx akan mencacah dari 0 hingga 31. Jika TLx melebihi 31, maka dia akan reset ke harga awal 0 dan kemudian menambah harga THx. Dengan demikian, hanya 13 bit dari dua byte yang digunakan, yaitu bit 0-4 dari TLx dan bit 0-7 dari THx. Sehingga maksimum harga yang bisa dicapai adalah 8.192. Sehingga jika timer diset dalam mode ini, dia akan menjadi nol setelah 8.192 siklus mesin.

Mode Timer 16 Bit (Mode 1)

Timer mode 1 adalah timer 16 bit. Mode ini adalah mode yang paling umum digunakan. Fungsinya sama dengan timer 13 bit, namun yang didayagunakan adalah 16 bit. TLx akan mencacah dari 0 hingga 255. Jika TLx melebihi 255, dia akan reset menjadi 0 dan menambah THx dengan 1. Karena kemampuan 16 bit, maka mode ini memiliki batas maksimum harga 65.535. Sehingga jika timer diset dalam mode ini, dia akan menjadi nol setelah 65.535 siklus mesin.

Mode Timer 8-Bit Auto Reload (Mode 2)

Timer mode 2 adalah timer 8 bit dengan kemampuan pengisian ulang (auto reload). Dalam mode ini, THx akan menyimpan harga awal counter dan TLx berfungsi sebagai timer 8-bit. TLx akan memulai mencacah dengan harga yang tersimpan pada THx, dan jika telah melampaui harga 255, dia akan reset dan kembali ke harga awal yang tersimpan di THx.

Sebagai contoh, dimisalkan TH0 menyimpan harga FDh dan TL0 harga aktualnya FEh, maka untuk beberapa siklus mesin akan didapatkan urutan perubahan harga sebagai mana tercantum dalam tabel di bawah ini.

Contoh Perubahan Harga TL0

Siklus Mesin

Harga TH0

Harga TL0

1

FDh

FEh

2

FDh

FFh

3

FDh

FDh

4

FDh

FEh

5

FDh

FFh

6

FDh

FDh

7

FDh

FEh

Seperti terlihat di atas, harga TH0 tidak pernah berubah. Dengan demikian dalam mode 2, THx merupakan variabel yang menentukan waktu sedangkan TLx adalah timer yang selalu mencacah secara konstan setiap siklus mesin. TLx akan overflow dan reset ke harga yang tersimpan dalam TH0. Keuntungan yang didapatkan karena fleksibilitas penentuan tenggang waktu dengan mengatur harga pada THx.

Contohnya jika diinginkan timer yang selalu menghitung dari 200 hingga 255. Jika digunakan mode 0 atau 1, diperlukan pengecekan terus menerus apakah timer mengalami overflow atau tidak. Dan jika benar terjadi overflow, maka diperlukan kode untuk mereset timer ke harga 200. Hal ini akan memerlukan banyak instruksi dan memakan waktu sehingga tidak efisien. Namun, jika digunakan mode 2, tidak diperlukan monitor terus-menerus terhadap kondisi timer. Cukup masukkan harga 200 pada THx dan biarkan mikrokontroler yang mengatur agar timer selalu mencacah dari 200 hingga 255.

Mode Timer Split (Mode 3)

Timer mode 3 adalah mode timer split. Jika TIMER0 diset dalam mode 3, dia akan menjadi dua timer 8 bit yang berbeda. Timer 0 adalah TL0 dan Timer 1 adalah TH0. Kedua-duanya akan mencacah dari 0 hingga 255 dan jika menemui kondisi overflow akan reset ke nol. Saat TIMER0 dalam mode split, TIMER1 bisa diset pada mode 0, 1, atau bahkan 2 secara normal. Mode ini hanya dipakai jika diperlukan dua timer 8 bit yang terpisah.

SFR TCON

SFR ini mengontrol kedua timer dan menyediakan informasi yang sangat berguna berkaitan dengan timer-timer tersebut. Struktur SFR TCON dapat dilihat pada tabel di bawah ini.

Bit-bit SFR TCON

Bit

Nama

Alamat

Fungsi

Timer

7

TF1

8Fh

Timer 1 Overflow. Bit ini diset oleh mikrokontroler jika Timer 1 overflow

1

6

TR1

8Eh

Timer 1 Run. Jika bit ini diset maka Timer 1 akan bekerja. Sebaliknya jika direset maka Timer 1 akan mati.

1

5

TF0

8Dh

Timer 0 Overflow. Bit ini diset oleh mikrokontroler jika Timer 0 overflow

0

4

TR0

8Ch

Timer 0 Run. Jika bit ini diset maka Timer 0 akan bekerja. Sebaliknya jika direset maka Timer 1 akan mati.

0

Dalam tabel hanya dicantumkan 4 bit dari 8 bit yang ada pada SFR TCON. Hal ini karena hanya 4 bit (bit 4 hingga bit 7) yang berkaitan dengan timer, sedangkan bit sisanya berkaitan dengan interupsi yang akan dibahas selanjutnya. Untuk mengeset atau mereset bit-bit SFR tidak perlu dengan memberikan nilai 8 bit. Bit-bit SFR bisa dialamati per bit. Dengan demikian perubahan satu atau beberapa bit tidak akan mengganggu status bit-bit yang lain.

Membaca Status Timer

Membaca status timer ada dua cara. Yang pertama dengan membaca harga aktual 16 bit dari timer, dan yang kedua adalah mendeteksi apakah timer menemui kondisi overflow. Jika timer yang digunakan adalah timer mode 8-bit, pembacaan harga aktual cukup mudah. Bacalah harga 1 byte tersebut dan selesailah sudah.

Namun jika timer yang digunakan adalah mode 13 bit atau 16 bit, permasalah menjadi lebih rumit. Bagaimana jika harga aktual low byte adalah 255 dan pembacaan high byte adalah 15. Seharusnya harga sebenarnya adalah high byte 14 dan low byte adalah 255, karena saat membaca low byte sebesar 255, beberapa ssat kemudian high byte akan bertambah satu saat pembacaan, sehingga pembacaan menjadi meleset sebesar 256 hitungan karena terletak pada high byte.

Pemecahannya adalah dengan membaca high byte terlebih dahulu dan kemudian membaca low byte. Setelah itu high byte dibaca lagi dan kemudian dibandingkan dengan pembacaan semula, bila berbeda, maka yang dipakai adalah pembacaan high byte yang pertama.

Kadang yang perlu diketahui hanyalah saat timer reset menjadi nol. Dengan kata lain, tidak penting berapa harga aktual dari timer, namun kapan timer overflow dan kembali menjadi nol. Saat overflow, mikrokontroler secara otomatis mengeset bit TFx dalam register TCON. Ini berarti pengecekan overflow cukup dengan mengecek apakah bit TFx set atau tidak. Dengan cara ini bisa dibuat program untuk menentukan selang yang pasti. Dari pembahasan sebelumnya, diketahui bahwa untuk mendapatkan selang 0,05 detik diperlukan pencacahan hingga 46.079 kali. Penggunaan mode ini akan menginisialisasi timer dengan harga selisih antara 65.535 dan 46.079, yaitu 19.457. Sehingga 46.079 cacahan berikutnya setelah 19.457 akan menyebabkan timer overflow.

Segmen Program Contoh Timer

  1. MOV TH0,#76 ; (76X256=19.456)
  2. MOV TL0,#01 ; (19.456+1=19.457)
  3. MOV TMOD,#01 ; Timer 0 Mode 16-bit
  4. SETB TR0 ; Start Timer 0
  5. JNB TF0,$ ; Loop sampai overflow

Timer Sebagai Penghitung Kejadian

Di atas telah dibahas mengenai timer sebagai penghitung selang waktu. Namun 89C51 juga mengijinkan timer digunakan sebagai penghitung (counter). Sebagai contoh, sebuah sensor dipasang di jalan untuk menghitung jumlah mobil yang lewat. Setiap mobil lewat, dia akan mengirim pulsa yang dapat dihubungkan dengan kaki 89C51 sebagai monitor.

Jika digunakan TIMER0 untuk menghitung jumlah mobil yang lewat, bit C/T0 yang dimanfaatkan. Jika bit C/T0 ini diset maka TIMER0 akan memonitor kaki P3.4. Sehingga jika jumlah mobil aktual yang ingin diketahui, cukup dengan membaca harga yang tersimpan dalam TIMER0.

Contact me at: hsutanto@milis.stts.edu

Copyright (c) Hermawan Sutanto
Written in November 1998
Copying content must have permission from me !

Visit Our Sponsor
adClix Sponsorship Information