Sabtu, 07 April 2012

TIMER / COUNTER


December 3rd, 2011 1 comment

Pendahuluan
            Tidak semua mikrokonteroler dilengkapi dengan Timer / Counter, namun pada PIC16F84 ini telah terdapat sebuah Timer/Counter yang berukuran 8-bit. Dengan adanya Timer/Counter maka kita dapat memanfaatkannya misalnya untuk membuat tundaan, atau untuk menghitung kejadian ( fungsi counter ).
Sifat dari Timer/Counter pada PIC16F84 adalah sebagai berikut.
  1. Timer/Counter berukuran 8-bit
  2. Dapat dibaca atau ditulisi ( Alamat 01H )
  3. Terdapat prescaller berukuran 8-bit yang dapat diprogram
  4.  Sumber detak dapat dipilih ( internal atau eksternal )
  5. Terjadi sela ( interupsi ) pada saat terjadi limpahan ( overflow )
  6. Terdapat pemilihan tebing ( edge ) untuk detak luar

Berikut adalah diagram dari Modul Timer/Counter.
modul timer counter
Gambar  Modul Timer / Counter

Menggunakan Timer

Karena Timer/Counter merupakan modul yang sama, maka dia dapat dijadikan Timer ataupun dijadikan Counter. Nah berikut adalah syarat untuk menjadikannya sebagai Timer.
Clear ( membuat nol ) bit TOCS
Bit TOCS ( TMR0 Clock Source Select bit ) jika di clear akan terpilih fungsi Timer. Sebaliknya jika di set ( “1” ) maka akan menjadi Counter. Pada mode timer, modul akan dinaikkan hitungannya tiap siklus instruksi ( Fosc/4 ).
Perhatikan gambar berikut ini.

1111 1111b    = FFH
Modul TMR0                    0000 0000b     = 00H
Kita misalkan modul TMR0 ( beralamat di 01H ) berisi 0000 0000b maka setiap satu siklus instruksi atau Fosc/4 maka hitunganya akan bertambah satu menjadi 0000 00001b demikian seterusnya sampai hitungan maksimum yaitu 1111 1111b.
Setelah terjadi hitungan maksimum ( 1111 1111b ) dan clock masih masuk ke modul TMR0, maka hitungan akan menjadi 0000 0000b hal ini dikatakan telah terjadi limpahan ( overflow ). Pada saat terjadi limpahan ini bit TOIF akan diset ( logika 1 ). Bit ini dapat dicek untuk mengetahui Timer sudah melimpah / belum.
Berikut ini adalah contoh pemakaian timer untuk membuat tundaan ( delay ).



;——————————————————————
;Nama Progam : coba6.asm
;Tanggal           : 22 Maret 2008
; Keterangan    :  Tundaan menggunakan timer
; Revisi            :
;——————————————————————-
processor 16f84

STATUS          EQU 03h
TRISA             EQU 85h
TRISB             EQU 86h
PORTA           EQU 05h
PORTB            EQU 06h
OPTION_REG EQU 81h
TMR0              EQU 01h          ;Timer/Counter
INTCON         EQU 8Bh
RP0                 EQU 5


org 00h

;————————————————————
inisialisasi
bsf STATUS,RP0    ; ke bank 1
movlw b’11111′       ; isi W-reg dengan 11111b
movwf TRISA         ; copy isi W ke TRISA à PORTA sbg input

movlw b’00000000′ ; isi W-reg dengan 00H
movwf TRISB         ; copy isi W ke TRISB à PORTB sbg output

movlw b’10000110′  ; RBPU dilulumpuhkan, timer 1:128
movwf OPTION_REG
bcf STATUS,RP0    ; ke bank 0

;—————akhir inisialisasi———————-
clrf PORTB
tugas
bsf PORTB,0   ; nyalakan LED di RB0
call delay
call delay
call delay
bcf PORTB,0   ; matikan LED di RB0
call delay
call delay
call delay
goto tugas

delay
clrf TMR0            ; bersihkan reg.timer (00h)
bcf INTCON,2     ; bersihkan bendera sela timer overflow (TOIF)
bsf INTCON,5     ; set pengaktif sela  ( TOIE )
cek_overflow
btfss INTCON,2   ; terjadi overflow?
goto cek_overflow
bcf INTCON,5      ; clear bit TOIE
bcf INTCON,2      ;  clear bit TOIF
return                     ; kembali dari subrutin delay
end;



Menggunakan Counter

Konsep penggunaan counter sebenarnya masih sama dengan penggunaan timer, hanya saja yang berbeda adalah sumber detaknya. Kalau pada timer sumber detaknya berasal dari internal ( Fosc/4 ), namun pada pemakaian counter sumber detaknya adalah dari luar ( eksternal ) yaitu pada pena RA4 (TOCKI).

penggunaan counter
Gambar  Penggunaan Counter

Untuk membuat sebagai fungsi Counter, maka bit TOCS ( TMR0 Clock Source Select Bit ) harus di set ( diberi logika 1 ). Setelah itu baru diatur bit TOSE ( TMR0 Source Edge Select Bit ). Jika bit TOSE = 1 maka hitungan counter terjadi pada sisi turun (            )  , namun jika bit TOSE = 0 hitungan counter terjadi pada sisi naik (              )  .
Berikut contoh program untuk menunjukkan kerja dari counter. Counter akan dinaikkan hitungannya dengan cara menekan tombol yang terhubung dengan pena RA4. Adapun gambar alatnya adalah sbb.

percobaan counter

Gambar  Percobaan untuk counter

Pada gambar diatas sebuah saklar dihubungkan dengan pena RA4/TOCKI yang merupakan masukan detak luar untuk counter.  Terlihat bahwa jika saklar tidak ditekan maka akan berlogika tinggi dan akan berubah menjadi logika rendah jika saklar ditekan. Sehingga kita pilih bit TOSE=1. Dan karena kita akan fungsi-kan sebagai counter, maka bit TOCS=1.
Jika kita tekan tombol, maka hitungan counter akan naik dan diperlihatkan sebagai nyala-padamnya LED sebagai visualisasinya. Adapun program lengkapnya adalah sebagai  berikut ini.

;——————————————————————
;Nama Progam : coba7.asm
;Tanggal           : 22 Maret 2008
; Keterangan    :  Visualisasi fungsi Counter
; Revisi            :
;——————————————————————-

processor 16f84

STATUS          EQU 03h
TRISA             EQU 85h
TRISB             EQU 86h
PORTA           EQU 05h
PORTB            EQU 06h
OPTION_REG EQU 81h
TMR0              EQU 01h   ;Timer/Counter
RP0                 EQU 5
PDel0               EQU 0Ch     ; alamat RAM
PDel1               EQU 0Dh     ; alamat RAM
PDel2               EQU 0Eh     ; alamat RAM


org 00h

;————————————————————
inisialisasi_port
bsf STATUS,RP0    ; ke bank 1
movlw b’11111′       ; isi W-reg dengan 11111b
movwf TRISA        ; copy isi W ke TRISA

movlw b’00000000′ ; isi W dengan 00H
movwf TRISB        ;  copy isi W ke TRISB

bcf STATUS,RP0    ; ke bank 0

;—————akhir inisialisasi_port———————-

inisialisasi_counter
bsf STATUS,RP0       ; ke bank 1 lagi
movlw b’10110000′     ; TOSE=1 TOCS=1
movwf OPTION_REG
bcf STATUS,RP0       ; ke bank  0 lagi
clrf TMR0                   ; hapus isi timer/counter
loop
movf TMR0,0             ; copy isi reg-TMR0 ke W-register
movwf PORTB           ; isi W-reg dicopy ke PORTB
goto loop                ; menuju label loop

end                         ;  akhir program

0 comments:

Posting Komentar