MODE OPERASI TIMER/COUNTER Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY E-mail :
[email protected]
1. Mode 0 : Timer/Counter 13 bit. Gambar berikut menunjukkan konfigurasi operasi timer/counter mode 0. Salah satu timer di dalam mode 0 merupakan counter 8 bit dengan prescaler dibagi 32. Register 13 bit ini terdiri dari 8 bit pada seluruh THX dan 5 bit rendah pada TLX. Sedangkan 3 bit tinggi pada TLX tidak ditetapkan dan harus diabaikan.
OSC
12 C/T = 0
TLX (5 bit)
TX
THX (8 bit)
TFX
C/T = 1 TRX Interupsi GATE INTX
Gambar : Timer/Counter Mode 0
Counter 13 bit dapat mencacah naik hingga 213 = 8192, dari 0 sanpai dengan 8191. Timer/Counter 8051 merupakan pencacah naik yang menambah 1 (increment) nilainya dari nilai awal (initial). Nilai yang telah dicacah sama dengan nilai cacahan maksimum dikurangi nilai awal. Sebagai contoh, jika sejumlah 5000 yang harus dicacah, nilai awal dari timer/counter dalam mode 0 harus di-preset pada : 8192 – 5000 = 3192 Dalam hal demikian, counter tersebut mulai mencacah dari nilai preset 3192 dan terjadi overflow setelah 5000 pulsa detak. Overflow akan men-set bit TFX yang sesuai pada register TCON dan counter tersebut kembali ke nol. Jika diinginkan pencacahan ulang dari nilai preset sebelumnya, nilai preset tersebut harus diisikan ulang dengan software. Flag overflow TFX di-clear oleh hardware ketika CPU mengeksekusi routine pelayanan interupsi dari timer/counter. Untuk mem-preset nilai cacahan awal kepada TLX dan THX, nilai preset dalam biner harus dihitung dan 5 bit rendah diisikan ke dalam TLX serta 8 bit tinggi ke dalam THX. Sebagai contoh, untuk cacahan 5000, nilai awalnya dihitung dengan : 8192 – 5000 = 3192 3192D = 0110001111000B
1
Sehingga : TLX = 11000 THX = 01100011
Karena TLX merupakan prescaler terbagi 32 dalam mode 0, nilai preset dari TLX dan THX dapat dihitung secara langsung dengan persamaan berikut : THX = Quotient dari nilai cacahan awal dibagi 32 TLX = Remainder dari nilai cacahan awal dibagi 32 Atau : THX = nilai cacahan awal / 32 TLX = nilai cacahan awal .MOD. 32 Di mana “/” merepresentasikan pembagian integer, dan “MOD” merepresentasikan sisanya (remainder). Oleh karena itu, contoh di atas dapat dicapai dengan instruksi berikut : MOV TL0,#(8192 – 5000).MOD.32 MOV TH0,#(8192 – 5000)/32 Assembler tersebut akan menghitung dan mengisikan hasilnya ke dalam TH0 dan TL0. Ingat bahwa titik desimal (.) harus ditambahkan sebelum dan sesudah MOD. Sebagai contoh, instruksi berikut : MOV TL1,#(8192 – 2500).MOD.32 MOV TH1,#(8192 – 2500)/32 Men-set counter 1 untuk mencacah 2500 pulsa.
2. Mode 1 : Counter 16 bit. Operasi mode 1 adalah sama dengan mode 0, kecuali bahwa register timer-nya akan berjalan untuk 16 bit seluruhnya. Counter 16 bit tersebut dapat mencacah naik hingga 216 = 65536, 0 sampai dengan 65535. Sebagaimana dijelaskan sebelumnya, nilai preset dari TLX dan THX dihitung sebagai : TLX = nilai cacahan awal MOD 256 THX = nilai cacahan awal / 256 Dalam kode assembly, nilai awal dari counter 0 dapat di-preset dengan : MOV TL0,#(65536 – 5000).MOD.256 MOV TH0,#(65536 – 5000)/256 Operator “>” dan “<” adalah berguna dalam penghitungan nilai awal. Operator “>” dan “<” digunakan untuk mendapatkan berturut-turut byte tinggi dan byte rendah dari counter 16 bit. Instruksi di atas dapat dituliskan sebagai :
2
MOV TL0,#<(65536 – 5000) MOV TH0,#>(65536 – 5000)
Konfigurasi Timer/Counter mode 1 ditunjukkan pada gambar berikut :
OSC
12 C/T = 0
TLX (8 bit)
TX
THX (8 bit)
TFX
C/T = 1 TRX Interupsi GATE GATE
Gambar : Timer/Counter Mode 1
3. Mode 2 : Counter 8 bit Isi-Ulang Otomatis Gambar berikut menunjukkan konfigurasi Timer/Counter pada mode 2. Mode 2 mengkonfigurasi register timer sebagai counter 8 bit (TLX) dengan isi-ulang otomatis. Nilai cacahan maksimumnya 28 = 256, 0 sampai dengan 255. Overflow dari TLX tidak hanya men-set TFX, tetapi juga mengisi ulang dengan isi dari THX yang di-preset dengan software. Pengisian ulang meninggalkan THX tidak berubah. Operasi mode 2 adalah sama untuk timer/counter 0 dan 1.
OSC
12 C/T = 0
TLX (8 bit)
TX C/T = 1
TFX Isi Ulang
TRX THX (8 bit)
GATE INTX
Gambar : Timer/Counter Mode 2
Dalam mode 2, nilai awal dihitung dengan Nilai awal = 256 – nilai cacahan
3
Interupsi
Sebagi contoh, suatu instruksi MOV TH1,#(256 – 100) menentukan timer 1 untuk mencacah 100 pulsa. Karena nilai THX dan TLX di-reset sesudah power 8051 hidup atau reset software, maka nilai cacahan awal dari YHX dan TLX harus di-preset secara awal (initially).
4. Mode 3 : Dua Counter 8 bit Individual Konfigurasi operasi timer/counter pada mode 3 ditunjukkan pada gambar berikut. Timer 1 dalam mode 3 secara langsung mempertahankan cacahannya. Akibatnya adalah sama dengan men-set TR1 = 0. Timer 0 dalam mode 3 membangun TL0 dan TH0 sebagai dua counter yang terpisah. TL0 menggunakan kendali bit timer 0, yakni C/ T , GATE, TR0, INT 0 , dan TF0. TH0 dikunci ke dalam fungsi timer (siklus mesin pencacahan) dan mengambil alih kegunaan dari TR1 dan TF1 dari timer 1. Kemudian, TH0 sekarang mengendalikan interupsi timer 1.
OSC
12 C/T = 0
TLX (8 bit)
TX
TFX
C/T = 1 TRX
Interupsi
GATE INTX Interupsi OSC
12
THX (8 bit)
TFX
TR1
Gambar : Timer/Counter Mode 3
Nilai cacahan awal TH0 dan TL0 dihitung dengan : TH0 = 256 – nilai cacahan TL0 = 256 – nilai cacahan Sebagai contoh, instruksi berikut menunjukkan TL0 timer 0 mencacah 50 pulsa dan TH0 mencacah 100 pulsa. MOV TL0,#(250 – 50) MOV TH0,#(256 – 100)
4
Mode 3 disediakan untuk keperluan aplikasi sebuah timer atau counter 8 bit tambahan (ekxtra). Dengan timer 0 dalam mode 3, 8051 dapat terlihat seperti memiliki 3 timer/counter, dan 8052 seperti memiliki 4 timer/counter. Ketika timer 0 dalam mode 3, timer 1 dapat dihidupkan atau dimatikan dengan mensaklarnya keluar dan masuk mode 3 sendiri, atau dapat tetap digunakan dengan port serial sebagai generator baud rate, atau dalam kenyataannya, dalam banyak aplikasi yang tidak memerlukan interupsi. Sebagai terlihat dapam gambar, instruksi “SETB TR1” men-start TH0 dan instruksi “CLR TR1” menghentikan TH0. Untuk menggunakan Timer/Counter, ikuti prosedur berikut : Dalam program utama : 1. Tetapkan register IE untuk meng-enable interupsi timer/counter. 2. Tetapkan register IP untuk menentukan tingkat prioritas interupsi timer/counter (jika diperlukan). 3. Tetapkan register TMOD untuk menentukan mode operasi dan kendali jalan (run control). 4. Men-set nilai awal dari THX dan TLX. 5. Men-strat timer/counter (SETB TRX). Dalam routine pelayanan interupsi : 1. 2. 3. 4. 5.
Hentikan (stop) timer/counter. Proseslah suatu tugas dari routine pelayanan interupsi. Isi ulang (reload) nilai awal dari THX dan TLX. Start kembali (re-start) timer/counter. Kembali ke program utama.
5