pemrograman timer

39
PEMROGRAMAN TIMER/COUNTER PADA 8051 BAB 9 Sasaran Setelah anda menamatkan bab ini , diharapkan anda dapat :  Menyebutkan Timer-timer dari 8051 dan register-register yang berkenaan dengannya`.  Menjelaskan beberapa mode Timer pada 8051.  Mem-program Timer pada 8051 untuk menghasilkan tundaan.  Mem-program Counter pada 8051 sebagai pencacah keadaan. 8051 memiliki dua buah Timer/Counter. Masing-masing dapat digunakan sebagai Timer untuk membuat tundaan waktu, dan dapat pula digunakan sebagai pencacah (counter) untuk mencacah keadaan (event) yang terjadi di luar mikro kontroller. Pada BAB ini kita dapat melihat bagaimana dia dapat diprogram dan digunakan. Pada SubBab 9-1 kita aka membahas tentang Timer untuk menhasilkan tundaan waktu. Dan di SubBab 9-2 akan dibahas penggunaannya sebagai pencacah keadaan di luar chip 8051. Dalam datasheet yang dikeluarkan Intel, tidak ada nama khusus dari peralatan ini. Beberapa buku menyebutnya "Timer/Counter", namun beberapa buku yang lain menyebutnya hanya dengan "Timer". Walaupun fungsi dari peralatan ini sebagai Timer dan juga bisa sebagai Counter. Sehingga kita harap kita tidak kebingungan antara nama dan fungsinya. SubBAB 9-1 PEMROGRAMAN TIMER PADA 8051 

Upload: tenanann

Post on 07-Jul-2015

108 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 1/39

 

PEMROGRAMAN TIMER/COUNTER PADA 8051

BAB 9 

Sasaran 

Setelah anda menamatkan bab ini , diharapkan anda dapat : 

  Menyebutkan Timer-timer dari 8051 dan register-register yang berkenaan dengannya`.

  Menjelaskan beberapa mode Timer pada 8051.

  Mem-program Timer pada 8051 untuk menghasilkan tundaan.

  Mem-program Counter pada 8051 sebagai pencacah keadaan.

8051 memiliki dua buah Timer/Counter. Masing-masing dapat digunakansebagai Timer untuk membuat tundaan waktu, dan dapat pula digunakan sebagaipencacah (counter) untuk mencacah keadaan (event) yang terjadi di luar mikrokontroller. Pada BAB ini kita dapat melihat bagaimana dia dapat diprogram dandigunakan. Pada SubBab 9-1 kita aka membahas tentang Timer untuk menhasilkantundaan waktu. Dan di SubBab 9-2 akan dibahas penggunaannya sebagai pencacahkeadaan di luar chip 8051. 

Dalam datasheet yang dikeluarkan Intel, tidak ada nama khusus dariperalatan ini. Beberapa buku menyebutnya "Timer/Counter", namun beberapa bukuyang lain menyebutnya hanya dengan "Timer". Walaupun fungsi dari peralatanini sebagai Timer dan juga bisa sebagai Counter. Sehingga kita harap kitatidak kebingungan antara nama dan fungsinya. 

SubBAB 9-1 PEMROGRAMAN TIMER PADA 8051 

Page 2: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 2/39

 

8051 memiliki dua Timer, yaitu Timer-0 dan Timer-1. Masing-masing bisadigunakan sebagai Timer atau sebagai counter pencacah. Untuk SubBAB ini kitaakan berkonsentrasi pada fungsinya sebagai Timer, serta membahas register-registernya, lalu juga membahas bagaimana Timer bisa digunakan untukmembentuk tundaan waktu. 

Register-register Timer 0 

Register Timer-0 adalah register selebar 16-bit (D0 s/d D15). Registersebesar ini cukup mampu untuk melakukan cacahan sampai 65356 cacahan.Register 16-bit ini dapat diakses sebagai dua buah register 8-bit (D0-D7 danD8-D15), yang mana bisa diperlakukan sebagai register biasa, seperti A, B R0,R1, R2, dll. Contohnya, instruksi " MOV TL0,#4Fh", mengisi TL0 dengan nilai

4Fh. TL0 adalah low byte dari Timer-0. Register-regiter itu pula dapat dibacasebagai register biasa. Contohnya, " MOV R5,TH0" yaitu menyalin isi registerTH0 ke R5. 

 gambar 9-1 Register-register Timer-0 

Register-register Timer 1 

Timer 1 juga memiliki register selebar 16-bit yang dibagi menjadi 2-byte, yang dinamakan sebagai TL1 (Timer-1 low byte) dan TH1 (Timer-1 highbyte). Register-register ini dapat diakses seperti juga register Timer-0 yangsudah dijelaskan di atas.

Page 3: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 3/39

 

 

 gambar 9-2 Register-register Timer-1 

Register TMOD 

Di luar itu, masing-masing Timer-0 dan Timer-1 menggunakan saturegister yang sama, yang disebut TMOD, yang digunakan untuk mengatur beragammode operasi dari Timer tersebut. TMOD adalah register 8-bit yang mana 4-bitterbawah digunakan oleh Timer-0 dan 4-bit lainnya digunakan oleh Timer-1.Pada masing-masing 4-bit tersebut 2-bit terbawah adalah penentu mode operasi.Pilihan dari mode operasi akan dijelaskan nanti. 

 gambar 9-3. Register TMOD 

keterangan gamnbar 9-3: 

GATE Pengontrol Gate jika tinggi. Timer/Counter bisa jalan, hanya jika port pin INTx tinggi dan

 bit control TRx juga tinggi. Namun saat GATE rendah, Timer/Counter bisa jalan hanya

melalui TRx tinggi.

C/¶T Adalah pemilih fungsi Timer/Counter. Jika C/¶T = 0, maka Timer/Counter akan berfungsi

sebagai menghasil tundaanwaktu (Timer), namun jika C/¶T = 1, maka Timer/Counter 

akan menjadi pencacah hitungan (Counter).

 M1 Mode bit 1

Page 4: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 4/39

 

 M0 Mode bit 0

M1 M0 Mode Mode Operasi

0 0 0 Mode Timer 13-bit. 

Timer/Counter 8-bit pada TH dengan TL sbg 5-bitprescalar 

0 1 1 Mode Timer 16-bit.

Timer/Counter 16-bit, TH dan TL sejajar. Tanpaprescalar. 

1 0 2 Mode Timer 8-bit. 

Timer/Counter auto reload 8-bit. TH adalah menyimpannilai 

yang nantinya akan disalin ke TL setiap terjadioverflows. 

1 1 3 Mode Timer Terbelah. 

 M1,M0 

M0 dan M1 adalah pemilih mode Timer. Seperti yang kita lihat padagambar di atas, terdapat mode 0, 1, 2, dan mode 3. Mode-0 adalah timer 13-bit, mode-1 adalah Timer 16-bit, mode-2 adalah Timer 8-bit, sedang mode-3adalah mode Timer terpisah yang akan kita jelaskan pada akhir bab ini. Namunsekarang kita akan berkonsentrasi pada Mode-1 dan Mode-2 karena hal iniadalah mode yang paling sering digunakan oleh para programmer saat ini. 

C/¶T (Counter/Timer) 

Bit ini adalah juga termasuk bagian dari TMOD yang digunakan untukmemilih apakan Timer ini digunakan sebagai penghasil tundaan waktu (Timer)

Page 5: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 5/39

 

ataukah sebagai pencacah (Counter). Jika C/¶T = 1 maka Timer/Counter akandigunakan sebagai Timer. Yang biasanya digunakan untuk menghasilkan tundaanwaktu. Sumber clock pencacah disediakan oleh kristal osilator utama pada8051. Nah untuk SubBAB ini kita berkonsentrasi pada pilihan ini. Di sampingitu, jika C/¶T = 1, maka Timer/Counter digunakan sebagai Counter ataupencacah atau penghitung keadaan yang terjadi diluar 8051. Untuk yang iniakan kita bahas pada SubBAB berikutnya. 

Contoh 9-1 

Jelaskan mode mana dan Timer yang mana yang diplih dari beberapa contoh ini. 

(a) MOV TMOD,#01h (b) MOV TMOD,#20h (c) MOV TMOD,#12h 

J awaban: 

Kita dapat mengkonversi nilai tersebut ke dalam biner. Didapat.. 

(a)  TMOD = 00000001, dipilih Timer-0 Mode-1

(b)  TMOD = 00000001, dipilih Timer-1 Mode-2

(c)  TMOD = 00000001, dipilih Timer-0 Mode-2 dan Timer-1 Mode-1

Sumber Clock untuk Timer 

Seperti yang anda ketahui, bahwa setiap Timer membutuhkan "tik" denyut

clock untuk bekerja (seperti jam kuno yang membutuhkan gerakan pendulumnyauntuk menggerakkan jarum detik-nya). Lalu apa sumber clock denyut untuk Timerpada 8051? Jika C/¶T = 0, maka osilator kristal utama yang terpasang pada8051 disambung kepada Timer sebagai sumber denyutnya. Sehingga ukurankecepatan pada osilator kristal yang terpasang pada 8051 tersebut menjadisangat berpengaruh pada kecepatan "tik" dari pada Timer tersebut. Adapunfrekuensi dari Timer selalu 1/12 dari frekuensi osilator kristal yangterpasang pada 8051. Lihat Contoh 9-2 

Page 6: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 6/39

 

 

Contoh 9-2 

Cari frekuensi clock untuk Timer dan perioda dari sebuah system berbasis 8051

dengan osilator kristal sebagai berikut. 

(a) 12 MHz 

(b) 16 MHz 

(c) 11.05920 MHz 

J awaban: 

(a) 1 / 12 x 12 MHz = 1 MHz T = 1 / 1 MHz = 1 uS

(b) 1 / 12 x 16 MHz = 1.333 MHz T = 1 / 1.333 MHz = 0.75 uS

(c) 1 / 12 x 11.0592 MHz = 921.6 kHz T = 1 / 921.6 kHz = 1.085 uS

Catatan T = Tik = Waktu yang dibutuhkkan oleh Timer/Counter sekali mencacah. 

Walaupun banyak dari system yang berbasis 8051 menggunakan osilatorkristal dengan frekuensi bervariasi antara 1 ± 40 MHz, namun saat ini kitaakan berkonsentrasi pada frekuensi kristal 11.0592 MHz. Alasannya adalahfrekuensi ini adalah yang paling ideal jika kita hendak menghubungkan 8051dengan Komputer Personal, dengan tingkat error adalah nol. Perihal mengenai

Page 7: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 7/39

 

pemilihan frekuensi ini, hubungan dengan PC, dan Serial, akan kita jelaskannanti pada BAB selanjutnya tentang Komunikasi serial. 

GATE 

Bit yang lain dari register TMOD adalah bit GATE. Ingat seperti yangdijelaskan pada gambar 9-3 bahwa masing-masing kedua Timer tersebut memilikibit GATE. Lalu apa gunanya? Setiap Timer tentunya memiliki kendali untukmemulai dan berhenti, bukan?!. Beberapa Timer memiliki fungsi untukmenghidupkan dan mematikan Timer melalui software. Ada juga yang melaluihardware. Sedang Timer pada 8051 ini, dilengkapi dengan keduanya. Sehinggakita dapat menjalankan dan menghentikan Timer ini lewat software maupun lewathardware, maupun kedua-duanya. Secara software, Timer ini dikontrol oleh bit

yang dinamakan TR (Timer Run). Dua TR, yaitu TR0 dan TR1 masing-masing milikTimer-0 dan Timer-1. Untuk menjalankan dan menghentikan Timer tersebut cukupdengan instruksi "SetB TR0" dan "Clr TR0" untuk Timer-0, dan "SetB TR1" dan"Clr TR1" untuk Timer-1. Perintah ini berlaku selama GATE = 0. Lalu kemudianuntuk menghidupkan dan menjalankan Timer secara hardware dapat dilakukandengan membuat GATE = 1 pada register TMOD. Namun untuk menghindarkan andadari kebingungan akan masalah GATE, ada baiknya untuk sementara selalu kitabuat GATE = 0 dulu. Sehigga hidup matinya Timer masih dikendalikan lewatsoftware. Sehingga kita masih membutuhkan instruksi "SetB TRx" dan "Clr TRx".Adapun untuk GATE = 1 atau menghidup-matikan Timer secara hardware akan kitabahas di akhir BAB ini. 

Contoh 9-3 

Cari nilai TMOD, jika kita hendak memprogram Timer-0 pada Mode-2, menggunakanosilator kristal system 8051 sebagai sumber clocknya, dan menggunakaninstruksi software untuk menjalankan dan menghentikan Timer. 

J awaban: 

TMOD = 0000 0010 timer-0, mode-2, 

C/¶T = 0 untuk mengunakan XTAL sebagai sumber clock, 

Gate = 0 untuk menggunakan control software start dan stop. 

Page 8: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 8/39

 

 

Sekarang, setelah kita sudah mengerti dasar-dasar aturan dalam registerTMOD, kita beranjak pada mode-mode Timer dan bagaimana mereka diprogram untukdapat menghasilkan tundaan waktu. Mengingat pada kenyataannya mode-1 danmode-2 adalah mode yang paling banyak digunakan oleh para programmer, maka

untuk sementara kita akan berkonsentrasi kepada dua mode ini. 

Pemrograman pada MODE 1 

Di bawah ini adalah ciri-ciri operasi dari mode-1 

1.  Timer 16-bit. Sehingga Timer dapat melakukan cacahan dengan bilangan 0000 s/d FFFFhyang ada pada pasangan register TH dan TL.

2.  Setelah TH dan TL di isi terlebih dahulu untuk membentuk nilai awalan 16-bit, Timer harusdijalankan dengan perintah "SetB TR0" untuk Timer-0 dan/atau "SetB TR1" untuk Timer-1.

3.  Setelah Timer hidup, dia mulai mencacah ke atas. Sampi dicapai bilangan tertingginya yaituFFFFh. Selanjutnya pada cacahan berikutnya, yaitu cacahan FFFFh ke 0000. Diamengaktifkan (men-set menjadi 1s) sebuah bendera yang disebut dengan TF (Timer Flag).

Bendera ini juga dapat dimonitor. Ketika Timer Flag bergerak naik, berarti Timer sudahoverflow. Biasanya tugas selanjutnya kita segera menghentikan Timer. Hal ini cukup dengan

"Clr TR0" atau "Clr TR1" masing-masing untuk Timer-0 dan Timer-1. Sekali lagi, bahwamasing-masing Timer memiliki bendera-nya sendiri. TF0 untuk Timer-0 dan TF1 untuk 

Timer-1.

4.  Setelah Timer melewati batas-nya dan kemudian rolls over, untuk jika dibutuhkan pengulangan Timer maka register TH dan TL harus diset ulang dengan nilai yang sama

Page 9: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 9/39

 

sebelum Timer dijalankan. Jika tidak, maka kita tidak akan mendapatkan waktu rolls over yang sama seperti waktu roll over sebelumnya. Dan TF harus di-reset ke 0s sebelum Timer 

dijalankan kembali.

Langkah-langkah Pemnrograman Timer pada Mode-1 

Untuk membuat tundaan waktu, menggunakan Timer dengan mode-1, langkah-langkah di bawah ini harus kita kerjakan. Untuk memperjelas langkah-langkahtersebut silahkan pelihat contoh 9-4. 

1.  Isi register TMOD dengan nilai di mana Timer (Timer-0 atau Timer-1) digunakan denganmode-1.

2.  Isi register TH dan TL dengan nilai cacahan awal(initial).

3.  Jalankan Timer.

4.  Selalu monitor status dari Timer Flag (TF) dengan instruksi "JNB TFx,lokasi" untuk menunggu TF tersebut menjadi tinggi. Dan segera keluar dari loop jika keadaan tersebut

terjadi.

5.  Matikan Timer.

6. Reset TF untuk proses tundaan berikutnya. 

7. Kembali ke langkah 2 untuk mengisi TH dan TL 

Untuk menghitung tundaan waktu yang benar, dan frekuensi darigelombang kotak (square wave) yang dihasilkan dari pin P1.5, kita harus tahunilai dari XTAL osilator-nya. Lihat contoh 9-5. 

Dari Contoh 9-6 kita dapat membangun rumusan untuk perhitungantundaan dengan Timer pada mode-1 (16-bit) dan menggunakan osilator XTAL =11.0592 MHz. Seperti yang ditunjukkan oleh gambar 9-4. Kalkulator Scientificpada Microsoft Windows kita, dapat membantu kita untuk mencari nilai TH danTL tersebut. Kalkulator ini dapat menangani perhitungan data decimal,hexadecimal, dan binary.

Page 10: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 10/39

 

(a) dalam hex 

(FFFF ± YYXX + 1) x 1.085 uS dimanaYYXX adalah nilai awalan masing-

masing untuk TH dan TL. Harap dicatatbahwa YYXX adalah dalam hex 

(b) dalam desimal 

Ubah nilai YYXX dari pasanganregister TH dan TL ke desimal untuk

mendapatkan nilai desimal NNNNN.Selanjutnya (65536 ± NNNNN)x 1.085 uS 

Gambar 9-4 Perhitungan waktu tundaan Timer dengan XTAL = 11.0592 MHz 

Contoh 9-4 

Dalam program berikut ini, kita mencoba untuk membuat gelombang balok (squarewave) dengan siklus kerja 50% (sama panjang rendah dan tinggi-nya) pada portP1.5. Timer-0 digunakan untuk menghasilkan waktu tundaan. Pelajariprogrammnya. 

MOV TMOD,#01 ;Timer-0 Mode-1 (16-bit) 

MULAI: MOV TL0,#0F2h ;TL0=F2h, low byte 

MOV TH0,#0FFh ;TH0=FFh, high byte 

CPL P1.5 ;Toggle P1.5 

ACALL DELAY 

SJMP MULAI ;Isi kembali TH dan TL 

;²²²²²-Delay menggunakan Timer-0 

DELAY: SetB TR0 ;Jalankan Timer 

ULANG: JNB TF0,ULANG ;Monitor Timer, Keluar dari Loop saat 

; TF menjadi tinggi. 

Page 11: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 11/39

 

CLR TR0 ;Matikan Timer 

CLR TF0 ;reset TF 

RET 

J awaban: 

Pada program di atas kira-kira penjelasannya adalah seperti ini. 

1.  TMOD diisi.

2.  nilai FFF2 diisikan pada TH0 ± TL0

3.  P1.5 di togle untuk bagian tinggi dan rendah.

4.  Subrutine DELAY yang menggunakan Timer dipanggil

5.  dalam subrutin DELAY, Timer-0 dijalankan dengan perintah "SetB TR0".

6.  Timer-0 mencacah ke atas clock demi clock, yang dihasilkan dari osilator kristal. Saat

Timer mencacah melewati FFF3, FFF4, FFF5, FFF6, FFF7, FFF8, FFF9, FFFA, FFFB,sampai FFFF. Satu cacahan berikutnya Timer akan mengaktifkan Timer Flag (TF0=1).

Pada titik ini, program keluar dari loop dengan instruksi JNB.

7.  Time-0 dihentikan denga perintah "Clr TR0". Dan Subrutin selesai, dan kemudian proses

diulangi kembali.

Catatan: Untuk mengulang proses, kita harus mengisi kembali nilai register THdan TL, dan kemudian menjalankan Timer kembali 

Page 12: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 12/39

 

 

Contoh 9-5 

Pada Contoh 9-4, hitung seberapa banyak waktu tundaan dalam subrutin DELAYyang dihasilkan dari Timer. Anggaplah XTAL = 11.0592 MHz 

J awaban: 

Timer bekerja pada 1/12 kali dari frekuensi clock dan frekuensi osilatorkristal. Sehingga kita mendapat 11.0592 MHz / 12 = 921.6 kHz untuk frekuensi

Timer. Hasilnya adalah setiap perioda clock adalah T = 1 / 921.6 kHz = 1.085uS. Dengan kata lain, Timer-0 mencacah setiap 1.085 uS. Sehingga tundaannyaadalah Delay = jumlah-cacahan x 1.085 uS. 

Jumlah cacahan untuk roll over adalah FFFFh ± FFF2h = 0Dh (13 desimal).Selanjutnya, kita tambah 13 dengan 1 sebagai waktu yang dibutuhkan untukroll-over dari FFFFh ke 0000h dan kemudian mengaktifkana bendera TF. Hasilnyaadalah 14 x 1.085 uS = 15.19 uS untuk satu bagian dari gelombang baloktersebut. Akhirnya keseluruhan perioda gelombang yang terdiri dari dua bagiangelombang menghasilkan T = 2 x 15.19 uS = 30.08 uS adalah waktu yang butuhkanoleh Timer. 

Contoh 9-6 

Pada Contoh 9-5, hitung frekuensi dari gelombang balok pada Pin P1.5. 

J awaban: 

Pada perhitungan tundaan waktu dari contoh 9-5, kita tidak memasukkankelebihan waktu yang digunakan CPU mengeksekusi instruksi-instruksi dalamloop. Untuk memperoleh perhitungan waktu yang akurat, kita harus memasukkantambahan siklus clock yang digunakan instruksi di dalam loop. Untuk itu, kitaharus merujuk pada daftar siklus kerja mesin (ada pada lampiran), dan

Page 13: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 13/39

 

hasilnya seperti dibawah ini. 

Siklus 

MULAI: MOV TL0,#0F2h 2

MOV TH0,#0FFh 2

CPL P1.5 1

ACALL DELAY 2

SJMP MULAI 2

;²²²²²-Delay menggunakan Timer-0 

DELAY: SetB TR0 1

ULANG: JNB TF0,ULANG 14

CLR TR0 1

CLR TF0 1

RET 1

Total = 27 

Contoh 9-7 Cari waktu tundaan yang dihasilkan dari Timer-0 dari kode di bawah ini,menggunakan ke dua motode perhitungan dari gambar 9-4. Tidak perlu memasukkankelebihan siklus instruksi. 

Page 14: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 14/39

 

CLR P2.3 ;Clear P2.3 

MOV TMOD,#01 ;Timer-0 Mode-1 (16-bit) 

Mulai: MOV TL0,#3Eh ;TL0=3Eh, low byte 

MOV TH0,#0B8h ;TH0=B8h, high byte 

SETB P2.3 ;Set P2.3 

SETB TR0 ;jalankan Timer 

ULANG: JNB TF0,ULANG ;Monitor Timer Flag 

CLR TR0 ;Matikan Timer 

CLR TF0 ;Reset TF 

CLR P2.3 

J awaban: 

(a)  (FFFF ± B93E + 1) = 47C2h = 18370 dalam desimal dan 18370 x 1.085 uS = 19.93145 mS

(b)  Mengingat TH ±TL = B83Eh = 47166 (dalam desimal) dan didapat hasil 65536 ± 47166 =

18370. Ini berarti Timer mencacah mulai B83Eh ± FFFFh. Termasuk mencacah ke 0000dibutuhkan waktu sebanyak 18370 clock, dimana setiap clock adalah 1.085 uS. Maka

18370 x 1.085 uS = 19.093145 mS adalah waktu dari panjang pulsa.

Contoh 9-8 

Ubahlah nilai TH danTL pada contoh 9-7 untuk mendapatkan waktu tundaan yangpaling lama dalam satuan mS. Tidak perlu memasukkan kelebihan siklusinstruksi dalam loop. 

J awaban: 

Page 15: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 15/39

 

 

Untuk mendapatkan tundaan paling lama kita membuat TH dan TL keduanya menjadi00. Dengan demikian cacahan benar-benar dimulai dari 0000 s/d FFFFh, danroll-over kembali ke 0. 

CLR P2.3 ;Clear P2.3 

MOV TMOD,#01 ;Timer-0 Mode-1 (16-bit) 

Mulai: MOV TL0,#0 ;TL0=3Eh, low byte 

MOV TH0,#0 ;TH0=B8h, high byte 

SETB P2.3 ;Set P2.3 

SETB TR0 ;jalankan Timer 

ULANG: JNB TF0,ULANG ;Monitor Timer Flag 

CLR TR0 ;Matikan Timer 

CLR TF0 ;Reset TF 

CLR P2.3 

Dengan membuat masing-masing TH dan TL menjadi 0. Timer akan mencacah mulaidari 0000 s/d FFFFh, dan kemudian membangkitkan bendera TF. Hasilya adalahtotal cacahan adalah 65536 cacahan. Sehingga, kita mendapatkan tundaan =(65536 ± 0 ) x 1.085 uS = 71.1065 mS  

Pada Contoh 9-7 dan 9-8 kita tidak melakukan isi ulang pada TH dan TLkarena yang diminta hanyalah untuk denyut tunggal. Lihat pada contoh 9-9,dimana kita harus meng-isi ulang nilai TH dan TL sebelum digunakan kembali. 

Contoh 9-9 

Page 16: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 16/39

 

 

Program berikut adalah untuk menghasilkan gelombang balok pada pin P1.5secara terus menerus menggunakan Timer1 sebagai tundaan waktunya. Carifrekuensi dari gelombang balok jika XTAL = 11.0592 MHz. Dalam perhitungankita, untuk kasus ini tidak diperlukan memasukkan kelebihan siklus instruksi

dalam loop. 

MOV TMOD,#10 ;Timer-1 Mode-1 (16-bit) 

Mulai: MOV TL1,#034h ;TL1=34h, low byte 

MOV TL1,#076h ;TH1=76h, high byte 

SetB TR1 ;Jalankan Timer 

ULANG: JNB TF0,ULANG ;Monitor Timer, Keluar dari Loop saat 

; TF menjadi tinggi. 

CLR TR0 ;Matikan Timer 

CPL P1.5 ;Toggle P1.5 

CLR TF0 ;Reset TF 

SJMP MULAI ;Isi kembali TH dan TL dan ulangi proses 

J awaban: 

Dari program di atas dapat kita lihat lokasi dari SJMP. Pada Mode-1, programharus me-reload (isiulang) nilai awalan pada TH dan TL setiap saat jika kitamengingikan untuk membuat gelombang yang kontinyu. Sekarang adalahperhitungannya. Mengingat FFFFh ± 7634h = 89CBh + 1 = 35276 clock cacahan,didapat 32276 x 1.085 uS = 38.274 mS atau frekuensi = 36.127 Hz. 

Harap dicatat pula bahwa bagian tinggi dari gelombang dan bagian rendah darigelombang balok adalah sama. Dan dalam perhitungan di atas, kelebihan siklusinstruksi dalam loop tidak dimasukkan. 

Page 17: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 17/39

 

 

 Mencari Nilai untuk diisikan ke dalam Timer. 

Anggaplah kita tahu waktu tundaan yang kita butuhkan, pertanyaannyaadalah mencari nilai yang dibutuhkan itu untuk diisikan pada register TH danTL. Untuk menghitung nilai tersebut lihat contoh di bawah, di mana kitamenggunakan osilator kristal dengan frekuensi 11.0592 MHz untuk system 8051kita. 

Dengan menganggap XTAL = 11.0592 MHz dari contoh 9-10 kita dapatmenggunakan langkah berikut ini untuk mencari nilai register TH dan TL yangtepat. 

1.  Bagilah waktu yang dibutuhkan dengan 1.085 uS. Hasilnya adalah n.

2.  Kurangi 65536 ± n, di mana n adalah nilai dalam desimal.

3.  Ubah hasil Langkah 2 menjadi bilangan hex. Di mana  yyxx adalah nilai awalan yang

dimasukkan pada register-register Timer.

4.  Atur TL =  xx dan TH =  yy.

Contoh 9-10 

Anggaplah XTAL = 11.0592 MHz. Berapa nilai yang dibutuhkan untuk diisikanpada register-register Timer jika kita menginginkan untuk membuat tundaanwaktu 5 mS (miliDetik)? Tuliskan kode untuk Timer-0 untuk membuat pulsa 5 mSpada P2.3. 

J awaban: 

Mengingat XTAL = 11.0592 MHz, Timer akan mencacah setiap 1.085 uS. Maksudnyaadalah berapa jumlah interval 1.085 uS untuk mencapai 5 mS. Untuk mendapatkanhasilnya kita bagi satu dengan yang lainnya. Sehingga kita butuh clock = 5 mS/ 1.085 uS = 4608 clock. Untuk itu kita harus mengisi nilai TH dan TL dengannilai = 65536 ± 4608 = 60928 = EE00h. Sehingga kita harus mengisi TH = EEh

Page 18: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 18/39

 

dan TL = 0. 

CLR P2.3 ;Clear P2.3 

MOV TMOD,#01 ;Timer-0 Mode-1 (16-bit) 

Mulai: MOV TL0,#0 ;TL0=0, low byte 

MOV TH0,#0EEh ;TH0=EEh, high byte 

SETB P2.3 ;Set P2.3 

SETB TR0 ;jalankan Timer 

ULANG: JNB TF0,ULANG ;Monitor Timer Flag 

CLR TR0 ;Matikan Timer 

CLR TF0 ;Reset TF 

Contoh 9-11 

Anggaplah XTAL = 11.0592 MHz, tulislah program untuk membuat gelombang baloksetinggi 2 kHz pada pin P1.5. 

J awaban: 

Ini mirip dengan contoh 9-10, hanya saja kita harus men-toggle port yangdimaksud untuk menghasilkan gelombang balok. Lihat langkah di bawah ini. 

(a)  T = 1 / f = 1 / 2 kHz = 500 uS, perioda dari gelombang balok.

(b)  1/2 darinya untuk bagian tinggi dan bagian rendah = 250 uS.

(c)  250 uS / 1.085 uS = 230 dan 65536 ± 230 = 65306 dec (FF1Ah).

Page 19: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 19/39

 

(d)  TL = 1A dan TH = FF (dalam hex)

Adapun programnya adalah sebagai berikut 

MOV TMOD,#10h ;Timer-0 Mode-1 (16-bit) 

Mulai: MOV TL1,#01Ah ;TL0=0, low byte 

MOV TH1,#0FFh ;TH0=DCh, high byte 

SETB TR1 ;jalankan Timer 

ULANG: JNB TF1,ULANG ;Monitor Timer Flag 

CLR TR1 ;Matikan Timer 

CPL P1.5 ;Comp. P1.5 utk tinggi dan rendah 

CLR TF1 ;Reset TF 

SJMP MULAI ;reload Timer karena mode-1 

; bukan autoreload 

Contoh 9-12 

Anggaplah XTAL = 11.0592 MHz, tulislah program untuk membuat gelombang baloksetinggi 50 Hz pada pin P2.3. 

J awaban: 

Lihat langkah di bawah ini. 

Page 20: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 20/39

 

(a)  T = 1 / 50 Hz = 20 mS, perioda dari gelombang balok.

(b)  1/2 darinya untuk bagian tinggi dan bagian rendah = 10 mS.

(c)  10 mS / 1.085 uS = 9216 dan 65536 ± 9216 = 56320 dec (DC00h).

(d)  TL = 00 dan TH = DC (dalam hex)

Adapun programnya adalah sebagai berikut 

MOV TMOD,#10h ;Timer-1 Mode-1 (16-bit) 

Mulai: MOV TL1,#0 ;TL1=0, low byte 

MOV TH1,#0DCh ;TH1=DCh, high byte 

SETB TR1 ;jalankan Timer 

ULANG: JNB TF1,ULANG ;Monitor Timer Flag 

CLR TR1 ;Matikan Timer 

CPL P2.3 ;Comp. P2.3 utk tinggi dan rendah 

CLR TF1 ;Reset TF 

SJMP MULAI ;reload Timer karena mode-1 

; bukan autoreload 

 Membuat tundaan waktu yang panjang 

Seperti yang sudah kita ketahui melalui contoh-contoh sebelumnya, lamatundaan waktu tergantung dari beberapa faktor (a) frekuensi osilator kristal,dan (b) nilai register 16-bit dari Timer pada mode-1. Kedua faktor inilahyang harus dimengerti oleh programmer 8051. Kita dapat membuat tundaan yang

Page 21: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 21/39

 

sangat panjang dengan membuat nilai awalan ke dua register Timer TH dan TLadalah 00h. Bagaimana jika itu masih belum cukup panjang? Maka Tundaan Timeryang sudah ada ditambah dengan rutin pengkali. Biasanya menggunakan instruksiDJNZ karena seluruh memory internal bisa dialamat oleh DJNZ. Contoh 9-13memperlihatkan bagaimana membuat tundaan waktu yang panjang. Terlihat di sanaR3 adalah sebagai register pengkalinya. 

 Menggunakan Kalkulator Windows untuk mencari TH dan TL. 

Kalkulator scientific pada Windows adalah sesuatu yang ringkas danmudah digunakan untuk mencari nilai TH dan TL. Sebutlah kita hendak mencariTH, TL, dan berapa waktu tundaan jika kita menggunakan 35.000 clock.Sementara setiap clock adalah setara dengan 1.085 uS. Langkah berikut adalah

menunjukan perhitungannya. 

1.  Buka Kalkulator Scientific Windows Anda, dan pilih decimal.

2.  Masukkan nilai 35000.

3.  Pilih hex. Yang kemudian merubah 35.000 menjadi 88B8h.

4.  Pilih +/-. Sehingga kita memperoleh nilai negatif menjadi -35.000 (yaitu 7748 hex).

5.  Lihat bilangan hex-nya. 2-digit terbawah adalah nilai untuk TL dan dua digit berikutnya

adalah nilain untuk TH. Sedangkan untuk digit 5 ke atas dapat kita abaikan. (suatu waktu kitamendapatkan hasil hitungan kurang dari 4 digit, sehingga digit-digit yang hilang tersebutdapat diganti dengan 0).

Contoh 9-13 

Terangkan program di bawah ini, dan cari waktu tundaan dalam satuan Detik.Tanpa memasukkan kelebihan siklus instruksi dalam loop. 

MOV TMOD,#10h ;Timer-1 Mode-1 (16-bit) 

MOV R3,#200 ;register pengkali R3 = 200 

Page 22: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 22/39

 

Mulai: MOV TL1,#0 ;TL1=0, low byte 

MOV TH1,#0DCh ;TH1=DCh, high byte 

SETB TR1 ;jalankan Timer 

ULANG: JNB TF1,ULANG ;Monitor Timer Flag 

CLR TR1 ;Matikan Timer 

CPL P2.3 ;Comp. P2.3 utk tinggi dan rendah 

CLR TF1 ;Reset TF 

DJNZ R3, MULAI ;reload Timer jika R3 <> 0 

J awaban: 

TH-TL = 108h = 264 dalam desimal dan 65536 ± 264 = 65272. Lalu 65272 x 1.085uS = 70.820 mS, dan ditambah loop register sehingga 70.820 mS x 200 =14.164024 Detik 

 Mode-0 

Mode-0 sebenarnya sama persis dengan Mode-1, kecuali lebar cacahan yangdapat ditangani hanya 13-bit. Counter 13-bit dapat menangani data 0000 s/d1FFFh pada register TH dan TL. Dengan demikian saat Counter pencacah mencapainilai 1FFFh, cacahan berikutnya adalah 0000, bersamaan dengan mengaktifkanbendera Timer (TF). 

Pemrograman Mode-2 

Di bawah ini adalah ciri-ciri operasi dari Mode-2 

Page 23: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 23/39

 

1.  Adalah Timer 8-bit, yang memungkinkan nilai mulai 00 s/d FFh yang bisa diisikan padaregister Timer, dalam mode ini adalah TH.

2.  Setelah TH di isi dnegan nilai awalan, yaitu nilai dimana Timer memulai cacahannya. 8051akan menyalin isi TH tersebut ke TL. Selanjutnya Timer dijalankan dengan perintah SetB

TR0 untuk Timer-0 dan atau SetB TR1 untuk Timer-1. Mirip dengan mode-1.

3.  Setelah Timer berjalan, dia akan memulai mencacah dengan cara mengicrement isi register TL. Saat mencacah sampai pada nilai FFh, cacahan selanjutnya adlah 00 atau disebut roll-over. Dan pada saat bersamaan Timer akan mengaktifkan bendera Timer (TF). TF0 untuk 

Timer-0 dan TF1 untuk Timer-1.

4. 

Setelah TL mencacah FFh ke 00h, dengan membuat TF menjadi =1, kemudian TL secaraotomatis segera di isi kembali (reload) dengan salinan nilai dari register TH. Selanjutnya

untuk mengulang proses tundaan waktu, kita hanya tingga me-reset bendera Timer (TF),tanpa harus mereload cacahan awal untuk mendapatkan waktu tundan yang benar dan tidak 

 berbeda tundaan pertama dan selanjutnya. Hal ini berbeda dengan Mode-1 yangmengharuskan kita untuk mereload isi cacahan (TH dan TL), sehingga akan didapat waktu

tundaan yang benar.

Kita ulangi bahwa mode-2 adalah Timer 8-bit dengan kemampuan autoreload. Padasaat auto reload ini, TH yang diisikan dengan nilai awalan cacahan akan

menyalin isinya pada TL. Yang selanjutnya TL akan selalu mencacah mulai darinilai seperti isi TH. Sementara itu isi TH sendiri tidak berubah. Banyakcontoh dari menggunaan mode-2 ini. Salah satunya adalah digunakan untukmembentuk baud rate pada komunikasi serial, yang akan kita bahas pada babselanjutnya. 

Page 24: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 24/39

 

Langkah-langkah Pemnrograman pada Mode-2 

Untuk menghasilkan tundaan waktu menggunakan Timer mode-2, kita harusmengikuti langkah-langkah di bawah ini. 

1.  Isi register TMOD dengan nilai yang menunjukkan Timer mana yang kita pakai denganmenggunakan mode-2.

2.  Isikan register TH dengan nilai awalan cacahan yang sudah dihitung sebelumnya.

3.  Jalankan Timer.

4.  Selalu memonitor Bendera Flag, yang bisa dilakukkan dengan instruksi "JNB TF,Lokasi".Program akan tetap pada instruksi ini sampau ditemukan TF = 1.

5.  Reset bender Timer (TF).

6.  Ulangi langkah 4 untuk mengulang proses, jika diperlukan,

Contoh 9-14 menggambarkan bagaimana untuk mrncapai tundaan yang lebihpanjang, kita sebaiknya menggunakan register pengkali seperti yangdicontohkan contoh 9-15 

Contoh 9-14 

Anggaplah XTAL = 11.0592 MHz, carilah (a) frekuensi dari gelombang balok yangdihasilkan pin P1.0 dari program di bawah, dan (b) frekuensi terendah yangbisa dihasilkan dengan program ini, berapa nilai TH yang harus diisikan untukmelakukannya. 

MOV TMOD,#20h ;Timer-1 Mode-2 (8-bit) 

MOV TH1,#5 ;Nilai cacahan awal 

SETB TR1 ;jalankan Timer 

ULANG: JNB TF1,ULANG ;Monitor Timer Flag 

Page 25: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 25/39

 

CPL P1.0 ;Comp. P1.0 utk tinggi dan rendah 

CLR TF1 ;Reset TF 

SJMP ULANG ;reload Timer dan loop 

J awaban: 

(a)  Perhatikan alamat target dari SJMP. Pada mode-2 kita tidak perlu untuk me-reload isi THatau TL, karena sudah otomatis di-reload oleh CPU. Sekarang (250 ± 05) x 1.085 uS = 251

x 1.085 uS = 272.33 uS yang merupakan salah satu bagian dari gelombang balok.Mengingat gelombang ini adalah memiliki siklus kerja 50%, maka perioda penuh adalah

dua kalinya, sehingga hasilnya adalah T = 2 x 272.33 uS = 544.67 uS dan didapat frekuensi

setinggi 1.83597 kHz.

(b)  Untuk mendapatkan frekuensi terendah, hanya bisa dicapai dengan membuat TH padacacahan maksimun, yaitu TH = 0. Didapat clock 256 ± 0 = 256 clock yang dibutuhkan.

Sehingga waktu periodanya adalah T = 2 x 256 x 1.085 uS = 555.52 uS dengan frekuensi =1.8 kHz.

Contoh 9-15 

Cari frekuensi dari gelombang balok yang dihasilkan dari pin P1.0. 

MOV TMOD,#02h ;Timer-0 Mode-2 (8-bit,autoreload) 

MOV TH0,#0 ;TH0=0 

LAGI: MOV R3,#250 ;register pengkali R3 = 250 

ACALL DELAY 

CPL P1.0 

SJMP LAGI 

Page 26: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 26/39

 

 

DELAY: SETB TR0 ;jalankan Timer 

ULANG: JNB TF0,ULANG ;Monitor Timer Flag 

CLR TR0 ;Matikan Timer 

CLR TF0 ;Reset TF 

DJNZ R3, MULAI ;reload Timer jika R3 <> 0 

RET 

J awabanya: 

T = 2 (250 x 256 x 1.085 uS) = 138.88 mS, dan frekuensi = 72 Hz.  

Contoh 9-16a 

Anggaplah kita memprogram Timer dalam Mode-2, cari nilai (dalam Hex) yangdiisikan pada TH dari beberapa contoh di bawah ini. 

(a) MOV TH1,#-200 (b) MOV TH0,#-60 

(c) MOV TH1,#-3 (d) MOV TH1,#-12 

(e) MOV TH0,#-48 

J awaban: 

Kita dapat menggunakan Kalkulator scientific untuk menguji hasil konversiyang dikerjakan assembler. Pada Windows Kalkulator, pilih desimal danmasukkan nilai 200. Lalu pilih hex, lalu pilih +/- untuk mendapatkan nilai

Page 27: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 27/39

 

tersebut dalam hex. Harap diingat kita hanya menggunakan 2-digit paling kanandari hasil yang nampak pada kalkulator. Hal itu karena data yang kita ambiladalah data 8-bit. Dan hasilnya adalah sebagai berikut. 

Desimal 2s comple m ent (Nilai TH) 

-200 38h 

-60 C4h 

± 3 FDh 

-12 F4h 

-48 D0h 

Bahasa Assembler dan nilai Negatif 

Sebenarnya kita dapat assembler dapat (sekali lagi) memudahkan danmembantu kita untuk melakukan perhitungan dalam mencari nilai untuk TH dan TLtersebut. Caranya adalah sangat mudah, yaitu dengan menambahkan nilai yangdiinginkan dengan simbol minus. Misalnya untuk Mode-2 8-bit, kita cukupmenuliskan dengan "MOV TH,#-nnn", dimana nnn adalah bilangan desimal 0 s/d256. 

Contoh 9-16b 

Dibawah ini adalah beberapa contoh penggunaan assembler directive minus untukmempermudah perhitungan nilai register Timer. Kita tinggal memasukkan jumlahtundaan yang dibutuhkan. 

(a) MOV TH1,#-0 ; TH1 = 00h 

Page 28: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 28/39

 

(b) MOV TH1,#-1 ; TH1 = FFh 

(c) MOV TH1,#-3 ; TH1 = FDh 

(d) MOV TH1,#-255 ; TH1 = 01h 

(e) MOV TH1,#-256 ; TH1 = 00h 

(f) MOV TH1,#-357 ; TH1 = 00h dan pesan Error. 

Untuk Contoh (f) terdapat pesan kesalahan assembbler karena nilai terlalubesar. Mode-2 8-bit Maksimal adalah 256, sedang untuk mode-1 16-bit adalah65535.

(g) MOV TH0,#High(-1000) ; -1000 = FC18h ==> TH0 = FCh 

(h) MOV TL0,#Low(-1000) ; TL0 = 18h 

(i) MOV TH1,#High(-5000) ; -5000 = EC78h ==> TH1 = ECh 

(j) MOV TL1,#Low(-5000) ; TL1 = 78h 

(k) MOV TH1,#High(-65536) ; Ada pesan kesalahan 

(l) MOV TH1,#High(-8191) ; maksimal mode-0 

(m) MOV TH1,#High(-8192) ; diluar range mode-0 

Contoh g s/d j adalah contoh untuk mengisikan register timer pada mode-1.bilangan tertinggi adalah 65535. Namun yang harus diperhatikan adalah apabiladigunakan untuk mode-0, kita bisa memasukkan nilai diatas range 13-bit (8191)tanpa ada pesan kesalahan dari assembler, walaupun hal itu salah, dan programtida berjalan semestinya.

Contoh 9-17 

Page 29: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 29/39

 

 

Cari (a) frekuensi gelombang balok yang dihasilkan kode di bawah ini, dan (b)cari siklus kerja dari gelombang ini. 

MOV TMOD,#02h ;Timer-0 Mode-2 (8-bit,autoreload) 

MOV TH0,#-150 ;TH0=6Ah = 2s comp dari = -150 

LAGI: SETB P1.3 ;P1.3 = 1 

ACALL DELAY 

ACALL DELAY 

CLR P1.3 ;P1.3 = 0 

ACALL DELAY 

SJMP LAGI 

DELAY: SETB TR0 ;jalankan Timer 

ULANG: JNB TF0,ULANG ;Monitor Timer Flag 

CLR TR0 ;Matikan Timer 

CLR TF0 ;Reset TF 

RET 

J awaban: 

Untuk nilai TH dalam mode-2, konversi bisa dilakukan oleh assembler, selama

itu adalah bilangan negatif. Hal ini akan membuat perhitungan menjadi sangatmudah. Seperti contoh kita menggunakan 150 clock, maka kita mendapatkan waktutundaan untuk subrutin DELAY adalah = 150 x 1.085 uS = 162 uS. Karena bagiansinyal tinggi adalah dua kali dari sinyal rendah maka dapat dibilanggelombang memiliki siklus kerja 66%. Selanjutnya kita mendapatkan T = bagiantinggi + bagian rendah = 325.5 uS + 162.25 uS = 488.25 uS dan frekuensiadalah 2.048 kHz. 

Page 30: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 30/39

 

 

Harap diingat bahwa dari beberapa contoh perhitungan waktu tundaan yangsudah kita berikan, kita masih mengabaikan waktu clock tambahan yang

diperlukan komputer untuk mengeksekusi instruksi-instruksi di dalam loop itusendiri. Untuk memperoleh perhitungan waktu tundaan yang akurat, sepertiprogram untuk menghasilkan sebuah frekuensi. Jika tidak, saat kitamemeriksanya dengan osiloskop, maka kita akan mendapati frekuensi yangdihasilkan tidak sama dengan yang kita perhitungkan. 

Pada bagian ini, kita telah membahas pengunaan Timer 8051 sebagaipenghasil tundaan waktu. Namun ada penggunaan lain yang lebihkreatif, yaitumenggunakan Timer tersebut sebagai pencacah atau penghitung atau counter darisebuah keadaan yang terjadi diluar komputer. Kesemuanya itu akan kitajelaskan pada bagian Bab berikutnya. 

SubBAB 9.2 : PEMROGRAMAN COUNTER PADA 8051 

Pada SubBAB yang lalu kita menggunakan Timer/Counter dari 8051 sebagaiTimer atau sebagai penghasil tundaan waktu. Timer/Counter ini dapat jugadigunkan sebagai pencacah, atau penghitung, atau counter dari keadaan yangterjadi diluar komputer. Sejauh ini kita masih menitik-beratkan penggunaanTimer/Counter sebagai Timer, tibalah saatnya kita membahas penggunaannyasebagai Counter. Semua bahasan mengenai Timer dapat dikenakan pada Counter.Baik itu tentang register-register, Mode, roll over, jumlah cacahan, dsb.Satu-satunya yang berbeda adalah sumber denyut untuk Timer yang sebelumnyadiperoleh dari osilator kristal system utama 8051, untuk Counter sumberdenyut dihasilkan dari status salah satu port 8051 tersebut. Semua bahasantentang TH dan TL juga berlaku untuk Counter. 

C/T pada register TMOD 

Seperti yang sudah kita ketahui bahwa C/¶T adalah bit pemilih sumberdenyut. Jika C/¶T = 0, maka Timer digunakan sebagai penghasil tundaan waktuatau disebut Timer. Namun jika C/¶T = 1, maka Timer digunakan sebagaipencacah atau counter yang mengambil sumber denyut clock dari luar komputer,

Page 31: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 31/39

 

yaitu melalui pin 14 atau pin 15. Masing-masing pin itu dinamakan T0 (Timer-0input) dan T1 (Timer-1 input). Ingat bahwa pin-pin tersebut adalah bagiandari port 3. Saat Timer-0 dengan C/¶T = 1, maka sumber clock didapat dari pin14 (P3.4). Setiap adanya status rendah dari pin tersebut maka Pencacah Timer-0 akan mencacah satu kali. Begitu pula untuk Timer-1 dengan C/¶T =1, maka Pin15 (P3.5) akam mebuat pencacah Timer-0 mencacah sekali. 

Tabel 9-1 Pin-pin yang digunakan Timer-0 dan Timer-1 

Pin  Port Pin  Fungsi  Keterangan 14  P3.4  T0  Timer/Counter 0 External Input 15  P3.5  T1  Timer/Counter 1 External Input 

Contoh 9-18 

Anggaplah kita memberikan denyut clock melalui pin T1. Tulis program untukCounter-1 dengan mode-2 , yang melakukan cacahan dan menampilkan statuscacahan pada TL1 ke P2. 

J awaban: 

MOV TMOD,#01100000 ;Counter-1,Mode-2,8-bit,C/¶T=1 

; pulsa eksternal 

MOV TH0,#0 ;Clear TH 

SETB P3.5 ;Buat port sebagai input 

LAGI: SETB TR1 

ULANG: MOV A,TL1 ;Salin Counter ke A 

MOV P2,A ;Kirim A ke Port 2 

JNB TF1,ULANG ;Ulang sampai TF = 1 

Page 32: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 32/39

 

CLR TR1 ;Matikan Counter 1 

CLR TF1 ;Reset TF 

SJMP LAGI 

Perhatikan pada program di atas ini, atas penggunaan instruksi "SETB P3.5".Karena port selalu dibuat menjadi port output saat CPU di-reset, maka kitaharus membuat P3.5 menjadi port input dengan membuatnya tinggi. Dengan katalain, kita harus menjadikan pin T1 (P3.5) dalam logika tinggi, agar porttersebut dapat menerima perubahan status yang diberikan kepadanya. 

P2 Terhubung dengan 8 LED, sedang Sumber Denyut diberikan pada Port T1. 

Pada Contoh 9-18 kita menggunakan Timer-1 sebagai pencacah counter, dimana pencacah akan mencacah sekali saat adanya denyut rendah pada pin 3.5.Denyut ini dapat diumpamakan (direpresentasikan) sebagai jumlah orang yangberjalan melalui pintu bandara, jumlah putar roda kendaraan, dan semuaperubahan keadaan yang bisa diubah menjadi denyut pulsa. 

Pada contoh 9-19, Data TL ditampilan dalam bentuk biner. Dan dalamcontoh 9-19, TL dikonversi menjadi ASCII yang kemudian bisa ditampilkan pada

LCD sebagai angka. 

Page 33: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 33/39

 

 

 gambar 9-5 (a)Timer-0 Mode-1 dgn E  xternal Input (b) Timer-1 Mode-1 dgn E  xternal Input  

Contoh 9-19 

Anggaplah kita menggunakan pembangkit denyut 1 Hz yang disambungkan kepadapin 3.4. Tulis program untuk menampilkan Counter-0 pada LCD. Dan atur nilaiawalan dari TH0 adalah -60. 

J awaban: 

Untuk menampilkan cacahan TL ke LCD, kita harus mengubah data biner 8-bit kedalam bentuk data ASCII. Untuk konversi data lihat BAB 6. 

ACALL LCD_SET_UP ;Inisialisasi piranti LCD 

MOV TMOD,#0000110b ;Counter-0,Mode-2,C/¶T=1 

MOV TH0,#-60 ;mencacah 60 denyut 

SetB P3.4 ;buat T0 sebagai port Input 

LAGI: SetB TR0 ;hidupkan Counter 

ULANG: MOV A,TL0 ;salin isi TL0 ke A 

ACALL CONV ;konversi ke R2,R3,R4 

ACALL DISPLAY ;Tampilan pada LCD 

JNB TF0,ULANG ;Ulangi sampai TF = 1 

CLR TR1 ;Matikan Counter 1 

Page 34: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 34/39

 

CLR TF1 ;Reset TF 

SJMP LAGI 

;conversi data 8-bit biner ke ASCII 

;hasilnya disimpan pada R4,R3,R2 sebagai data ASCII (R2 = LSD) 

CONV: MOV B,#10 ;bagi dengan 10 

DIV AB 

MOV R2,B ;simpan digit terbawah 

MOV B,#10 ;bagi dengan 10 lagi 

DIV AB 

ORL A,#30h ;ubah menjadi ASCII 

MOV R4,A ;simpan MSD 

MOV A,B 

ORL A,#30h ;ubah menjadi ASCII 

MOV R3,A 

MOV A,R2 

ORL A,#30h ;ubah menjadi ASCII 

MOV R2,A ;save LSD 

RET 

Page 35: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 35/39

 

 

Dengan menggunakan 60 Hz kita dapat menghasilkan Detik,Menit,Jam 

Harap dicatat, untuk cacahan pertama couter TL0 masih dalam keadaan 0 ke1, mengingat saat reset nilai TL0 selalu menjadi 0. Untuk menghidari ini,

agar pertama sekali isikan TL0 dengan nilai seperti TH0. Sehingga TL0dalam cacahan pertamanya akan mencacah mulai dari -60. 

 gambar 9-65 (a)Timer-0 Mode-2 dgn E  xternal Input (b) Timer-1 Mode-2 dgn E  xternal Input  

Beberapa Contoh aplikasi Timer dengan C/¶T = 1, kita dapat meyambungkanpembangkit gelombang denyut 60 Hz pada Timer. Dan kemudian membuat programuntuk mendapatkan Detik, Menit, dan Jam, lalu kemudian menampilkan hasilnya

Page 36: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 36/39

 

pada LCD. Ini adalah contoh aplikasi yang sangat menarik, walau tidak terlaluakurat sebagai Jam. Contoh dari aplikasi ini dapat dilihat pada Lampiran E. 

Sebelum kita menyelesaikan subBAB ini kita harus memperhatikan dua hal

penting sebagaimana berikut ini. 

1.  Jika anda berfikir memonitor adanya TF dengan instruksi "JNB TFx,lokasi" adalahmembuang-buang waktu prosesor karena hanya melakukan satu tugas? Jawabannya adalah

 betul, karena komputer tidak dapat melakukan hal lain, sampai munculnya TF dan komputer keluar dari loop. Tentu ada solusinya, yaitu menggunakan interupsi. Dengan interupsi

monitoring TF ini dapat kita serahkan pada mekanisme interupsi, sementara itu komputer dapat melakukan hal lain, misalnya mengirim data ke LCD, atau ke motor stepper. Dan

 peralatan interupsi akan memberitahu CPU saat terjadi rolls-over yang kemudian CPUmelakukan tugas yang berkaitan dengan Timer atau Counter tersebut. Hal mengenai interusi

akan kita bahas lebih dalam pada bab lain.

2.  Anda mungkin bertanya-tanya tentang TR0 dan TR1 itu adalah anggota bagian register 

mana. Masing-masing bit tersebut adalah milik register TCON, yang mana akan kitadiskusikan nanti

Tabel 9-2. Instruksi yang sejenis untuk R egister TCON (Timer Control) 

Untuk Timer 0 

SETB TR0 = SETB TCON.4 CLR TR0 = CLR TCON.4 

SETB TF0 = SETB TCON.5 CLR TF0 = CLR TCON.5 

Untuk Timer 1 

SETB TR1 = SETB TCON.6 CLR TR1 = CLR TCON.6 

SETB TF1 = SETB TCON.7 CLR TF1 = CLR TCON.7 

Page 37: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 37/39

 

 

Register TCON 

Dari contoh yang sudah-sudah, kita selalu menggunakan TR0 dan/atau TR1untuk menjalankan Timer. Dua bit ini adalah bagian dari register TCON (TimerControl). Regsiter ini adalah register 8-bit, yang seperti ditapilkan dalamganbar 9-2, 4-bit teratas dari register ini digunakan untuk menyimpan TR0 danTR1, yang masing-maisng untk Timer-0 dan Timer-1. Sedangkan 4-bit terbawahadalah dugunkan untuk control interupsi. Harap diingat bahwa TCON adalahregister yang bisa dialamati bit. Saat kita menggunakan instruksi seperti"SetB TR1" atau "Clr TR1", alternatif lain a dalah dengan menggunakaninstruksi "SetB TCON.6" atau "Clr TCON.6". Tabel 9-2 menunjukan alternativdari instruksi-intruksi semacam ini. 

Saat GATE = 1 pada register TMOD 

GATE adalah bit terakhir dari register TMOD yang akan kita bahas. Selamini kita menggunakan Timer atau counter dalam keadaan bit GATE = 0. SehinggaTiemr dapat dijalankan dengan perintah "SetB TR1" atau "Clr TR1". Lalu apayang terjadi saat GATE = 1. Seperti yang kita lihat dalam gambar 9-8 dan 9-9,jika GATE = 1, maka Timer dapat dijalankan dan dihentikan secara eksternalmelalui pin P3.2 dan Pin P3.3 masing-masing untuk Timer-0 dan Timer-1. Dilain pihak Counter tersebut harus diaktifkan dengan perintah "SetB TRx"terlebih dahulu. Selanjutnya dengan demikian bahwa Timer dapat dijalankan dandihentikan secara eksternal kapan saja misalnya dengan menghubungkan pin-pintersebut dengan switch sederhana. Cara menhidupkan dan menghentikan Timersemacam ini, banyak dipakai oleh beberapa aplikasi. 

Seperti contoh, sebuah system 8051 yang dibangun untuk menghasilkansuara alarm setiap detik menggunakan Timer-0. Timer-0 diaktifkan dandijalankan melalui software dengan perintah "SetB TR0". Selanjutnya kitadapat mengkontrol hidup-matinya Timer-0 ini dengan harware melalui pin P3.2,termasuk misalnya untuk mematikan alarm. 

Page 38: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 38/39

 

 

 gambar 9-8: Timer/Counter 0 

 gambar 9-9: Timer/Counter 1 

Page 39: Pemrograman Timer

5/9/2018 Pemrograman Timer - slidepdf.com

http://slidepdf.com/reader/full/pemrograman-timer 39/39

 

 

RINGKASAN 

8051 memiliki dua buah Timer/Counter. Masing-masing dapat digunakansebagai Timer untuk menghasilkan tundaan waktu. Dan dapat pula digunakansebagai Counter pencacah keadaan. Pada BAB ini pula diperlihatkan beberapacontoh pemrograman Timer/Counter dengan mode-mode yang bervariasi. 

Masing-masing kedua Timer memiliki regisater 16-bit, yang masing-masingnya regtister 16-bit tersebut dapat diakses seperti register 8-bitlainnya TL0 dan TH0 untuk Timer-0, serta TL1 dan TH1 untuk Timer-1.KeduaTimer menggunakan register TMOD untuk mengatur Timer dalam mode tertetu.4-bitterendah dari register TMOD dipakai oleh Timer-0, dan 4-bit tertas digunkanoleh Timer-1. 

Ada beberap perbedaan mode yang dapat kita gunakan. Mode-0 adalah Timer

13-bit, Mode-1 adalah Timer 16-bit,Mode-2 adalah Timer 8-bit yang ditambahdengan auto reloading. 

Saat Timer/digunakan sebagai Timer, osilator kristal dari system utamnadigunakan sebagai sumber denyut, namun sebaliknya jika digunakan sebagaiCounter, adanya pulsa denyut rendah pada pin P3.4 atau pin P3.5, yang bisamembuat Timer/Counter mencacah sekali pada register-register TH dan TL-nya.