MODE OPERASI TIMER/COUNTER Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY E-mail : sumarna@uny.ac.id 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 dan 5 bit rendah pada. Sedangkan 3 bit tinggi pada tidak ditetapkan dan harus diabaikan. (5 bit) IN Gambar : Timer/Counter Mode 0 Counter 13 bit dapat mencacah naik hingga 2 13 = 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 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 di-clear oleh hardware ketika CPU mengeksekusi routine pelayanan interupsi dari timer/counter. Untuk mem-preset nilai cacahan awal kepada dan, nilai preset dalam biner harus dihitung dan 5 bit rendah diisikan ke dalam serta 8 bit tinggi ke dalam. Sebagai contoh, untuk cacahan 5000, nilai awalnya dihitung dengan : 8192 5000 = 3192 3192D = 0110001111000B 1
Sehingga : = 11000 = 01100011 Karena merupakan prescaler terbagi 32 dalam mode 0, nilai preset dari dan dapat dihitung secara langsung dengan persamaan berikut : Atau : = Quotient dari nilai cacahan awal dibagi 32 = Remainder dari nilai cacahan awal dibagi 32 = nilai cacahan awal / 32 = 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 2 16 = 65536, 0 sampai dengan 65535. Sebagaimana dijelaskan sebelumnya, nilai preset dari dan dihitung sebagai : = nilai cacahan awal MOD 256 = 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 : 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 () dengan isi-ulang otomatis. Nilai cacahan maksimumnya 2 8 = 256, 0 sampai dengan 255. Overflow dari tidak hanya men-set, tetapi juga mengisi ulang dengan isi dari yang di-preset dengan software. Pengisian ulang meninggalkan tidak berubah. Operasi mode 2 adalah sama untuk timer/counter 0 dan 1. Isi Ulang IN Gambar : Timer/Counter Mode 2 Dalam mode 2, nilai awal dihitung dengan Nilai awal = 256 nilai cacahan 3
Sebagi contoh, suatu instruksi MOV TH1,#(256 100) menentukan timer 1 untuk mencacah 100 pulsa. Karena nilai dan di-reset sesudah power 8051 hidup atau reset software, maka nilai cacahan awal dari YHX dan 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,, 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. IN 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 dan. 5. Men-strat timer/counter (SETB ). Dalam routine pelayanan interupsi : 1. Hentikan (stop) timer/counter. 2. Proseslah suatu tugas dari routine pelayanan interupsi. 3. Isi ulang (reload) nilai awal dari dan. 4. Start kembali (re-start) timer/counter. 5. Kembali ke program utama. 5