Timer Dan Counter Dalam MCS51

Sunday, November 27th, 2016 - Teori Mikrokontroler

Timer Dan Counter Dalam MCS51

Timer dan Counter merupakan sarana input yang kurang dapat perhatian pemakai mikrokontroler, dengan sarana input ini mikrokontroler dengan mudah bisa dipakai untuk mengukur lebar pulsa, membangkitkan pulsa dengan lebar yang pasti, dipakai dalam pengendalian tegangan secara PWM (Pulse Width Modulation) dan sangat diperlukan untuk aplikasi remote control dengan infra merah.

Pada dasarnya sarana input yang satu ini merupakan seperangkat pencacah biner (binary counter) yang terhubung langsung ke saluran-data mikrokontroler, sehingga mikrokontroler bisa membaca kedudukan pancacah, bila diperlukan mikrokontroler dapat pula merubah kedudukan pencacah tersebut.

Seperti layaknya pencacah biner, bilamana sinyal denyut (clock) yang diumpankan sudah melebihi kapasitas pencacah, maka pada bagian akhir untaian pencacah akan timbul sinyal limpahan, sinyal ini merupakan suatu hal yang penting sekali dalam pemakaian pencacah. Terjadinya limpahan pencacah ini dicatat dalam sebuah flip-flop tersendiri.

Di samping itu, sinyal denyut yang diumpankan ke pencacah harus pula bisa dikendalikan dengan mudah. Hal-hal yang dibicarakan di atas diringkas dalam Gambar 1.

Konsep dasar Timer/Counter sebagai sarana input,Timer dan Counter dalam MCS51

Gambar 1. Konsep dasar Timer/Counter sebagai sarana input

Sinyal denyut yang diumpankan ke pencacah bisa dibedakan menjadi 2 macam, yang pertama yalah sinyal denyut dengan frekuensi tetap yang sudah diketahui besarnya dan yang kedua adalah sinyal denyut dengan frekuensi tidak tetap.

Jika sebuah pencacah bekerja dengan frekuensi tetap yang sudah diketahui besarnya, dikatakan pencacah tersebut bekerja sebagai timer, karena kedudukan pencacah tersebut setara dengan waktu yang bisa ditentukan dengan pasti.

Jika sebuah pencacah bekerja dengan frekuensi yang tidak tetap, dikatakan pencacah tersebut bekerja sebagai counter, kedudukan pencacah tersebut hanyalah menyatakan banyaknya pulsa yang sudah diterima pencacah.

Untaian pencacah biner yang dipakai, bisa merupakan pencacah biner menaik (count up binary counter) atau pencacah biner menurun (count down binary counter).

Timer/Counter sebagai sarana input banyak dijumpai dalam mikrokontroler, misalnya mikrokontroler keluarga MCS48, keluarga MCS51 ataupun MC68HC11 semuanya memiliki Timer/Counter di dalam chip sebagai sarana input. Di samping itu bisa pula dijumpai chip Timer/Counter yang berdiri sendiri sebagai penunjang kerja mikroprosesor, misalnya 8253/8254 Programmable Interval Timer buatan Intel, atau MC6840 Programmable Counter/Timer buatan Motorola.

Sarana Timer/Counter dalam MCS51

Keluarga mikrokontroler MCS51, misalnya AT89C51 dan AT89Cx051, dilengkapi dengan dua perangkat Timer/Counter, masing-masing dinamakan sebagai Timer 0 dan Timer 1. Sedangkan untuk jenis yang lebih besar, misalnya AT89C52, mempunyai tambahan satu perangkat Timer/Counter lagi yang dinamakan sebagai Timer 2.

Perangkat Timer/Counter tersebut merupakan perangkat keras yang menjadi satu dalam chip mikrokontroler MCS51, bagi pemakai mikrokontroler MCS51 perangkat tersebut dikenal sebagai SFR (Special Function Register) yang berkedudukan sebagai memori-data internal.

Pencacah biner untuk Timer 0 dibentuk dengan register TL0 (Timer 0 Low Byte, memori-data internal nomor $6A) dan register TH0 (Timer 0 High Byte, memori-data internal nomor $6C).

Pencacah biner untuk Timer 1 dibentuk dengan register TL1 (Timer 1 Low Byte, memori-data internal nomor $6B) dan register TH1 (Timer 1 High Byte, memori-data internal nomor $6D).

Pencacah biner pembentuk Timer/Counter MCS51 merupakan pencacah biner menaik (count up binary counter) yang mencacah dari $0000 sampai $FFFF, saat kedudukan pencacah berubah dari $FFFF kembali ke $0000 akan timbul sinyal limpahan.

Untuk mengatur kerja Timer/Counter dipakai 2 register tambahan yang dipakai bersama oleh Timer 0 dan Timer 1. Register tambahan tersebut adalah register TCON (Timer Control Register, memori-data internal nomor $88, bisa dialamat secara bit) dan register TMOD (Timer Mode Register, memori-data internal nomor $89).

Pencacah biner Timer 0 dan 1

TL0, TH0, TL1 dan TH1 merupakan SFR (Special Function Register) yang dipakai untuk membentuk pencacah biner perangkat Timer 0 dan Timer 1. Kapasitas keempat register tersebut masing-masing 8 bit, bisa disusun menjadi 4 macam Mode pencacah biner seperti terlihat dalam Gambar 2a sampai Gambar 2d.

Pada Mode 0, Mode 1 dan Mode 2 Timer 0 dan Timer 1 masing-masing bekerja sendiri, artinya bisa dibuat Timer 0 bekerja pada Mode 1 dan Timer 1 bekerja pada Mode 2, atau kombinasi mode lainnya sesuai dengan keperluan.

Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai bersama-sama untuk menyusun sistem timer yang tidak bisa di-kombinasi lain.

Susunan TL0, TH0, TL1 dan TH1 pada masing-masing mode adalah sebagai berikut:

Mode 0 – Pencacah Biner 13 bit

Mode 0 - Pencacah Biner 13 Bit

Gambar 2a. Mode 0 – Pencacah Biner 13 Bit

Pencacah biner dibentuk dengan TLx (maksudnya bisa TL0 atau TL1) sebagai pencacah biner 5 bit (meskipun kapasitas sesungguhnya 8 bit), limpahan dari pencacah biner 5 bit ini dihubungkan ke THx (maksudnya bisa TH0 atau TH1) membentuk sebuah untaian pencacah biner 13 bit, limpahan dari pencacah 13 bit ini ditampung di flip-flop TFx (maksudnya bisa TF0 atau TF1) yang berada di dalam register TCON.

Mode ini meneruskan sarana Timer yang ada pada mikrokontroler MCS48 (mikrokontroler pendahulu MCS51), dengan maksud rancangan alat yang dibuat dengan MCS48 bisa dengan mudah diadaptasikan ke MCS51. Mode ini tidak banyak dipakai lagi.

Mode 1 – Pencacah Biner 16 bit

Mode 1 - Pencacah Biner 16 Bit

Gambar 2b. Mode 1 – Pencacah Biner 16 Bit

Mode ini sama dengan Mode 0, hanya saja register TLx dipakai sepenuhnya sebagai pencacah biner 8 bit, sehingga kapasitas pencacah biner yang tersbentuk adalah 16 bit. Seiring dengan sinyal denyut, kedudukan pencacah biner 16 bit ini akan bergerak dari $0000 (biner 0000 0000 0000 0000), $0001, $0002 … sampai $FFFF (biner 1111 1111 1111 1111), kemudian melimpah kembali menjadi $0000.

Mode 2 – Pencacah Biner 8 bit dengan Isi Ulang

Mode 2 - Pencacah Biner 8 Bit dengan Isi Ulang

Gambar 2c. Mode 2 – Pencacah Biner 8 Bit dengan Isi Ulang

TLx dipakai sebagai pencacah biner 8 bit, sedangkan THx dipakai untuk menyimpan nilai yang diisikan ulang ke TLx, setiap kali kedudukan TLx melimpah (berubah dari $FF menjadi $00). Dengan cara ini bisa didapatkan sinyal limpahan yang frekuensinya ditentukan oleh nilai yang disimpan dalam TH0.

Mode 3 – Gabungan Pencacah Biner 16 bit dan 8 Bit

Mode 3 – Gabungan Pencacah Biner 16 Bit dan 8 Bit

Gambar 2d. Mode 3 – Gabungan Pencacah Biner 16 Bit dan 8 Bit

Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai untuk membentuk 3 untaian pencacah, yang pertama adalah untaian pencacah biner 16 bit tanpa fasiltas pemantau sinyal limpahan yang dibentuk dengan TL1 dan TH1. Yang kedua adalah TL0 yang dipakai sebagai pencacah biner 8 bit dengan TF0 sebagai sarana pemantau limpahan. Pencacah biner ketiga adalah TH0 yang dipakai sebagai pencacah biner 8 bit dengan TF1 sebagai sarana pemantau limpahan.

Register Pengatur Timer

Register TMOD dan register TCON merupakan register pembantu untuk mengatur kerja Timer 0 dan Timer 1, kedua register ini dipakai bersama oleh Timer 0 dan Timer 1.

Denah susunan bit dalam register TMOD

Gambar 3a. Denah susunan bit dalam register TMOD

Register TMOD dibagi menjadi 2 bagian secara simitris, bit 0 sampai 3 register TMOD (TMOD bit 0 .. TMOD bit 3) dipakai untuk mengatur Timer 0, bit 4 sampai 7 register TMODE (TMOD bit 4 .. TMOD bit 7) dipakai untuk mengatur Timer 1, pemakaiannya sebagai berikut :

  • Bit M0/M1 dipakai untuk menentukan Mode Timer seperti yang terlihat dalam Tabel di Gambar 3a.
  • Bit C/T* dipakai untuk mengatur sumber sinyal denyut yang diumpankan ke pencacah biner. Jika C/T*=0 sinyal denyut diperoleh dari osilator kristal yang frekuensinya sudah dibagi 12, sedangkan jika C/T*=1 maka sinyal denyut diperoleh dari kaki T0 (untuk Timer 0) atau kaki T1 (untuk Timer 1).
  • Bit GATE merupakan bit pengatur saluran sinyal denyut. Bila bit GATE=0 saluran sinyal denyut hanya diatur oleh bit TRx (maksudnya adalah TR0 atau TR1 pada register TCON). Bila bit GATE=1 kaki INT0 (untuk Timer 0) atau kaki INT1 (untuk Timer 1) dipakai juga untuk mengatur saluran sinyal denyut (lihat Gambar 4).
Denah susunan bit dalam register TCON

Gambar 3b. Denah susunan bit dalam register TCON

Register TCON dibagi menjadi 2 bagian, 4 bit pertama (bit 0 .. bit 3, bagian yang diarsir dalam Gambar 3b) dipakai untuk keperluan mengatur kaki INT0 dan INT1, ke-empat bit ini dibahas dibagian lain.

Sisa 4 bit dari register TCON (bit 4..bit 7) dibagi menjadi 2 bagian secara simitris yang dipakai untuk mengatur Timer0/Timer 1, sebagai berikut:

  • Bit TFx (maksudnya adalah TF0 atau TF1) merupakan bit penampung limpahan (lihat Gambar 2), TFx akan menjadi ‘1’ setiap kali pencacah biner yang terhubung padanya melimpah (kedudukan pencacah berubah dari $FFFF kembali menjadi $0000). Bit TFx di-nol-kan dengan istruksi CLR TF0 atau CLR TF1. Jika sarana interupsi dari Timer 0/Timer 1 dipakai, TRx di-nol-kan saat MCS51 menjalankan rutin layanan interupsi (ISRInterupt Service Routine).
  • Bit TRx (maksudnya adalah TR0 atau TR1) merupakan bit pengatur saluran sinyal denyut, bila bit ini =0 sinyal denyut tidak disalurkan ke pencacah biner sehingga pencacah berhenti mencacah. Bila bit GATE pada register TMOD =1, maka saluran sinyal denyut ini diatur bersama oleh TRx dan sinyal pada kaki INT0/INT1 (lihat Gambar 4).

Mengatur Timer

Gambar 4 merupakan bagan susunan rangkaian yang bisa terjadi pada Timer 1 secara lengkap, digambarkan pula hubungan-hubungan semua register pembentuk dan pengatur Timer 1. Gambar ini berlaku pula untuk Timer 0.

Dalam pemakaian sesungguhnya, rangkaian yang dipakai hanya sebagian dari rangkaian lengkap tersebut, sesuai dengan keperluan sistem yang dibangun. Rangkaian yang dikehendaki dibentuk dengan mengatur register TMODE, sedangkan kerja dari Timer dikendalikan lewat register TCON.

timer dan counter dalam mcs51,konsep dasar timer/counter sebagai sarana input,sarana timer/counter dalam mcs51,register pengatur timer,denah susunan bit dalam register tcon,skema lengkap timer 1 dalam mode 1

Gambar 4. Skema lengkap Timer 1 dalam Mode 1

Setelah MCS51 di-reset register TMOD bernilai $00, hal ini berarti :

  • bit C/T* =’0’, menurut Gambar 4 keadaan ini membuat saklar S1 ke posisi atas, sumber sinyal denyut berasal dari osilator kristal yang frekuensinya sudah dibagi 12, pencacah biner yang dibentuk dengan TL1 dan TH1 berfungsi sebagai timer. Jika sistem yang dirancang memang menghendaki Timer 1 bekerja sebagai timer maka bit C/T* tidak perlu diatur lagi.
    Tapi jika sistem yang dirancang menghendaki agar Timer 1 bekerja sebagai counter untuk menghitung pulsa yang masuk lewat kakai T1 (5), maka posisi saklar S1 harus dikebawahkan dengan membuat bit C/T* menjadi ‘1’.
  • bit GATE=’0’, hal ini membuat output gerbang OR selalu ‘1’ tidak dipengaruhi keadaan ‘0’ atau ‘1’ pada kaki INT1 (3). Dalam keadaan semacam ini, saklar S2 hanya dikendalikan lewat bit TR1 dalam register TCON. Jika TR1=’1’ saklar S2 tertutup sehingga sinyal denyut dari S1 disalurkan ke sistem pencacah biner, aliran sinyal denyut akan dihentikan jika TR=’0’.
    Sebaliknya jika bit GATE=’1’, output gerbang OR akan mengikuti keadaan kaki INT1, saat INT1=’0’ apa pun keadaan bit TR1 output gerbang AND selalu =’0’ dan saklar S1 selalu terbuka, agar saklar S1 bisa tertutup kaki INT1 dan bit TR1 harus =’1’ secara bersamaan.
    Jika sistem yang dirancang menghendaki kerja dari timer/counter dikendalikan dari sinyal yang berasal dari luar chip, maka bit GATE harus dibuat menjadi ‘1
  • bit M1 dan M0=’0’, berarti TL1 dan TH1 disusun menjadi pencacah biner 13 bit (Mode 0), jika dikehendaki Timer 1 bekerja pada mode 1 seperti terlihat dalam Gambar 4, maka bit M1 harus dibuat menjadi ‘0’ dan bit M0 menjadi ‘1’.

Pengetahuan di atas dipakai sebagai dasar untuk mengatur dan mengendalikan Timer seperti terlihat dalam contoh-contoh berikut :

Setelah reset TMOD bernilai $00, berarti Timer 1 bekerja sebagai pencacah biner 13 bit, sumber sinyal denyut dari osilator kristal atau Timer 1 bekerja sebagai ‘timer’, bit GATE =’0’ berarti kaki INT1 tidak berpengaruh pada rangkaian sehingga Timer 1 hanya dikendalikan dari bit TR1.

Dalam pemakaian biasanya dipakai pencacah biner 16 bit, untuk keperluan itu instruksi yang diperlukan untuk mengatur TMOD adalah :

MOV   TMOD,#%00010000

Catatan       dalam instruksi di atas tanda ‘#’ menyatakan bagian di belakangnya adalah bilangan konstan yang akan diisikan ke TMOD, ‘%’ merupakan awalan yang menandakan bahwa bilangan di belakangnya adalah bilangan biner. Penulisan dengan bilangan biner semacam ini, memudahkan untuk mengenali dengan cepat bit-bit apa saja yang diisikan ke TMOD.

Bilangan biner %00010000 diisikan ke TMOD, berakibat bit 7 TMOD (bit GATE) bernilai ‘0’, bit 6 (bit C/T*) bernilai ‘0’, bit 5 dan 4 (bit M1 dan M0) bernilai ‘01’, ke-empat bit ini dipakai untuk mengatur Timer 1, sehingga Timer 1 bekerja sebagai timer dengan pencacah biner 16 bit yang dikendalikan hanya dengan TR1.

Jika dikehendaki pencacah biner dipakai sebagai counter untuk mencacah jumlah pulsa yang masuk lewat kaki T1 (P3.5), instruksinya menjadi :

MOV   TMOD,#%01010000

Perbedaannya dengan instruksi di atas adalah dalam instruksi ini bit 6 (bit C/T*) bernilai ‘1’. Selanjutnya jika diinginkan sinyal dari perangkat keras di luar chip MCS51 bisa ikut mengendalikan Timer 1, instruksi pengatur Timer 1 akan menjadi :

MOV   TMOD,#%11010000

Dalam hal ini bit 7 (bit GATE) bernilai ‘1’.

Setelah mengatur konfigurasi Timer 0 seperti di atas, pencacah biner belum mulai mencacah sebelum diperintah dengan instruksi :

SETB   TR1

Perlu diingatkan jika bit GATE = ‘1’, selama kaki INT1 bernilai ‘0’ pencacah biner belum akan mencacah. Untuk menghentikan proses pencacahan, dipakai instruksi

CLR   TR1

Di atas hanya dibahas Timer 1 saja, tata canya untuk Timer 0 persis sama. Yang perlu diperhatikan adalah register TMOD dipakai untuk mengatur Timer 0 dan juga Timer 1, sedangkan TMOD tidak bisa dialamati secara bit (non bit addressable) sehingga jika jika kedua Timer dipakai, pengisian bit-bit dalam register TMOD harus dipikirkan sekali gus untuk Timer 0 dan Timer 1.

Bit TR1 dan TR0 yang dipakai untuk mengendalikan proses pencacahan, terletak di dalam register TCON (memori-data internal nomor $88) yang bisa dialamati secara bit (bit addressable). Sehingga TR0 dan TR1 bisa diatur secara terpisah (dengan perintah SETB atau CLR), tidak seperti mengatur TMOD yang harus dilakukan secara bersamaan.

Demikian pula bit penampung limpahan pencacah biner TF0 dan TF1, juga terletak dalam register TCON yang masing-masing bisa di-monitor sendiri.

Pemakaian waktu tunda

Waktu tunda banyak dipakai dalam pemerograman mikronkontroler untuk membangkitkan pulsa, membangkitkan sinyal periodik dengan frekuensi tertentu, untuk menghilangkan effek getar dari skalar dalam membuat key pad (keyboard sederhana) dan lain sebagainya.

Waktu tunda bisa dibangkitkan secara sederhana dengan menjalankan instruksi-instruksi yang waktu pelaksanaanya bisa diperhitungkan dengan tepat. Untuk mendapatkan waktu tunda yang panjang, tidak dipakai cara di atas tapi pakai Timer. Waktu tunda yang dibentuk dengan kedua cara tersebut sangat tergantung pada frekuensi kerja mikrokontroler, dalam contoh-contoh berikut dianggap mikrokontroler bekerja pada frekuensi 12 MHz.

Instruksi-instruksi berikut ini bisa dipakai untuk membangkitkan pulsa ‘0’ dengan lebar 3 mikro-detik pada kaki P1.0

01:      CLR P1.0
02:      NOP               ; 1 mikro-detik
03:      NOP               ; 1 mikro-detik
04:      SETB P1.0         ; 1 mikro-detik

Instruksi baris pertama membuat P1.0 yang mula-mula ‘1’ menjadi ‘0’, pelaksanaan instruksi NOP memerlukan waktu 1 mikro-detik (jika MCS51 bekerja pada frekuensi 12 MHz), instruksi SETB P1.0 juga memerlukan waktu 1 mikro-detik, total waktu sebelum P1.0 kembali menjadi ‘1’ adalah 3 mikro-detik (baris 2 3 dan 4). Dengan demikian terjadilah pulsa dengan lebar 3 mikro-detik pada kaki P1.0 seperti terlihat pada Gambar 5.

Pulsa 3 mikro-detik pada P1.0

Gambar 5. Pulsa 3 mikro-detik pada P1.0

Dengan sedikit perubahan instruksi-instruksi di atas bisa membangkitkan sinyal dengan frekuensi 100 KHz pada kaki P1.0 :

01: Sinyal100KHz:
02:      CPL  P1.0         ; 1 mikro-detik
03:      NOP               ; 1 mikro-detik
04:      NOP               ; 1 mikro-detik
05:      SJMP Sinyal100KHz ; 2 mikro-detik

Instruksi CPL P1.0 pada baris 1 membalik keadaan pada P1.0, bila mula-mula P1.0 bernilai ‘1’ akan dirubah menjadi ‘0’, sebaliknya bila mula-mula ‘0’ akan dirubah menjadi ‘1’. Total waktu tunda ke-empat baris di atas adalah 5 mikro-detik, sehingga yang terjadi adalah P1.0 bernilai ‘0’ selama 5 mikro-detik dan bernilai ‘1’ selama 5 mikro-detik berulang terus tanpa henti, dengan frekuensi sebesar 1/10 mikro-detik = 100.000 Hertz.

Program di atas bisa pula dibuat dengan memakai Timer 1 sebagai pengatur waktu tunda sebagai berikut :

01:      MOV  TMOD,#%00100000 ; Timer 1 bekerja pada Mode 2
02:      MOV  TH1,#$F6        ; Nilai pengisi ulang TL1
03:      SET  TR1             ; Timer 1 mulai mencacah
04: Ulangi:
05:      BIT  TF1,$           ; Tunggu sampai melimpah
06:      CPL  P1.0            ; Keadaan pada P1.0 di-balik
07:      CLR  TF1             ; Hapus limpahan pencacah
08:      SJMP Ulangi          ; Ulangi terus tiada henti…

Instruksi baris pertama mempersiapkan Timer 0 bekerja pada Mode 2 – Pencacah Biner 8 bit dengan Isi Ulang, bilangan pengisi ulang ditentukan sebesar $F0 yang disimpan ke register TH1 pada baris 2, instruksi berikutnya memerintahkan pencacah biner mulai mencacah.

Mode 2 – Pencacah Biner 8 bit dengan Isi Ulang

Gambar 6. Mode 2 – Pencacah Biner 8 bit dengan Isi Ulang

Pencacah biner yang dibentuk dengan register TL1 akan mencacah naik seirama dengan sikluas sinyal denyut, mulai dari $F6 sampai $FF, saat pencacah melimpah dari $FF ke $00 bit TR1 pada register TCON akan menjadi ‘1’ dan TL1 secara otomatis di isi ulang dengan bilangan $F0 yang tersimpan pada register TH0. Hal ini akan terjadi terus menerus dan berulang setiap 10 siklus sinyal denyut ($F6, $F7, $F8, $F9, $FA, $FB, $FC, $FD, $FE, $FF kembali ke $00, total 10 siklus)

Instruksi BIT TR1,$ menunggu bit TR1 menjadi ‘1’, yakni saat pecacah biner melimpah dari $FF ke $00 yang dibahas di atas. Lepas dari penantian tersebut, P1.0 dibalik keadaanya dengan instruksi CPL P1.0, TR1 dikembalikan menjadi 0 (harus dikembalikan sendiri dengan instruksi ini), agar bisa ditunggu lagi sampai menjadi ‘1’ kembali setelah instruksi SJMP Ulangi.

Frekuensi dari sinyal di P1.0 sebesar 1 / 16 mikro-detik = 31,25 KHz.

Nilai awal yang diisikan ke pencacah biner di atas, adalah nilai negatip dari faktor pembagi yang dikehendaki. Dalam contoh di atas, bilangan pembaginya adalah 16 (atau $10 heksadesimal), nilai negatip dari $10 adalah $F0 (bilangan negatip komplemen 2 diturunkan dengan cara bilangan asal dibalik/di-not-kan kemudian ditambah 1, dalam hal ini $10 di-not-kan menjadi $EF dan ditambah 1 menjadi $F0).

Cara menentukan bilangan negatip di atas cukup merepotkan, tapi hal ini mudah diselesaikan dengan bantuan assembler, instruksi MOV TH1,#$F0 di atas bisa digantikan dengan MOV TH1,#-$10, assembler yang akan menghitung -$10 menjadi $F0.

Contoh pemakaian waktu tunda berikutnya adalah untuk mengatasi getaran saklar dalam membuat key pad (keyboard sederhana).

Pada saat saklar mekanis di tekan atau pada saat tekanan pada saklar dilepas, selama lebih kurang 30 mili-detik saklar tersebut akan bergetar atau sebelum mencapai keadaan stabil saklar tersebut akan on/off selama waktu lebih kurang 30 detik, mengakibatkan program mikrokontroler merasakan tombol berulang-ulang ditekan, meskipun sesungguhnya hanya ditekan satu kali saja.

Hal ini bisa diatasi dengan cara menunda waktu sekitar 50 mili-detik setelah program merasakan sebuah tombol ditekan, seperti berikut:

01: BacaTombol:
02:      MOV  TMOD,#%00010000   ; Timer 1 bekerja pada mode 1
03:      JB   T1,$              ; tunggu di sini sampai tombol ditekan
04:      MOV  TL1,#-50000/256   ; siapkan waktu tunda 50 mili-detik
05:      MOV  TH1,#-50000
06:      CLR  TF1               ; me-nol-kan bit limpahan
07:      SETB TR1               ; timer mulai bekerja
08:      JNB  TF1,$             ; tunggu di sini sampai melimpah
09:      CLR  TR1               ; timer berhenti kerja
10:      RET

Dalam program di atas, saklar dipasangkan antara kaki T1 dan Ground, pencacah biner yang dipakai adalah pencacah biner 16 yang sudah ditentukan dengan instruksi MOV TMOD,#%00010000. Pada baris berikut program menunggu saklar yang terhubung pada T1 ditekan, selama saklar belum ditekan mikrokontroler akan tertahan pada instruksi JB T1,$.

Dua baris berikutnya adalah cara mengisikan nilai –50000 yang terdiri dari 2 byte ke register TL1 dan TH1. Bit TF1 di-nol-kan dan akan kembali menjadi ‘1’ setelah Tl1/TH1 mencacah dari –50000 kembali menjadi $0000. Waktu tunda dimulai segera setelah instruksi SETB TR1, dan selesainya waktu tunda ditunggu dengan instruksi JNB TF1,$. Jika MCS51 bekerja dengan kristal 12 MHz, waktu tunda selama 50000 siklus sama dengan 50.000 x 1 mikro-detik = 50 mili-detik,

Setelah menunggu selama 50 mili-detik, pencacah biner kembali di-non-aktipkan dengan CLR TR1 dan berikutnya meninggalkan sub-rutin ini dengan instruksi RET. Dengan demikian mikrokontroler akan menungu saklar stabil, selama saklar masih bergetar mikrokontroler masih tertahan di dalam su-rutin BacaTombol.

Selamat belajar, semoga uraian tentang “Timer Dan Counter Dalam MCS51” diatas mudah dipahami.

Title : Timer Dan Counter Dalam MCS51
Archive : Teori Mikrokontroler

You may also like, related Timer Dan Counter Dalam MCS51