MACAM-MACAM TIMER/COUNTER
1. Timer/Counter 0 Konfigurasi Bit Clock Select untuk Memilih Sumber
Clock
Merupakan 8 bit timer/counter, pengaturan Timer/Counter
0 diatur oleh TCCR0 (Timer/Counter control register 0) Tabel 2.3 Konfigurasi Bit Clock Select untuk Memilih
seperti berikut ini: Sumber Clock
Register TCCR0
Register TIMSK dan TIFR
Gambar 2.1 Register TCCR0
Selain register-register di atas, terdapat pula register
TIMSK (Timer/Counter Interrupt Mask Register) dan
register TIFR (Timer/Counter Interrupt Flag Register).
Bit 3 ~ 7 digunakan untuk setting PWM.
Bit 2, 1, 0 (CS02, CS01, CS00): Clock select. Ketiga bit Register TIMSK
tersebut memilih sumber clock yang akan digunakan oleh
timer/counter. OCIEx: Output Compare Match Interrupt Enable. Jika bit
tersebut diberi logika 1 dan bit I SREG juga berlogika 1,
maka bisa dilakukan enable interupsi Output Compare
Konfigrasi Bit Clock Set Match Timer/Counter x.
TOIEx: Overflow Interrupt Enable. Jika diberi logika 1
dan bit I SREG juga berlogika 1, maka bisa dilakukan
2. Timer/Counter 1 enable interupsi Overflow Timer/Counter x.
TCIE1: Timer/Counter 1, Input Capture Interrupt Enable
Merupakan 16-bit timer/counter sehingga terdapat
perbedaan cara pengaksesannya dengan 8-bit
timer/counter. 16-bit (1 word) timer/counter harus diakses Register TIFR
dengan 8 bit high dan 8 bit low. Register TIFRernilai 1 (set) jika terjadi compare match
antara Timer/Counter x dan data di OCRx (Output
Pengaturan Timer/Counter1 juga diatur oleh register Compare Register x). OCFx di-clear secara hardware
TCCR1B. ketika pengeksekusian corresponding interrupt handling
vector. Atau, jika diberi nilai 1 secara lagsung ke bit flag.
Saat bit I SREG, OCIEx, dan OCFx set (berlogika 1),
Register TCCR1B maka Timer/Counter x Compare Match Interrupt
dieksekusi.
Bit 2,1,0 (CS1 2:0): Clock Select. Ketiga bit tersebut
(CS2/CS1/CS0) mengatur sumber clock yang digunakan TOVx: Timer/Counter x Overflow Flag. Bit ini akan set
untuk Timer/Counter1. (bernilai 1) saat terjadi overflow di Timer/Counter x.
TOVx akan clear (bernilai 0) secara hardware saat
pengeksekusian corresponding interrupt handling vector.
Konfigurasi Bit Clock Select untuk Memilih Sumber Atau, diberikan logika 1 ke bit flag. Saat bit i SREG,
Clock TOIEx (Timer/Counter x Overflow Interrupt Enable), dan
TOVx set, akan terjadi pengeksekusian Timer/Counter x
Overflow Interrupt. Pada mode PWM, bit ini set ketika
Timer/Counter x mengubah arah perhitungan hingga
3. Timer/Counter 2 menuju nilai 0x00.
• Set prescaler pada 1024 ( set bit CS12 dan CS10 pada
TCCR1B)
.equ timer_value=0xD5D0;
…..
timer1d:
out TIMSK,r16
Proses yang dilakukan oleh mikrokontroler saat
ldi r16,high(timer_value) ; masukkan nilai timer melayani interrupt adalah sebagai berikut:
out TCNT1H,r16
Instruksi terakhir yang sedang dijalankan diselesaikan
ldi r16,low(timer_value) terlebih dahulu
Program Counter diisi dengan alamat yang tersimpan Maksud dari kode program di atas adalah kita membuat
dalam stack pada saat interrupt terjadi sehingga delay dengan menggunakan timer 1 (code TCNT1) dengan
mikrokontroler kembali meneruskan ukuran 16 bit dan menggunakan prescaler 1024 (TCCR1B
= 0b101) . Dengan menggunakan ini besar clock pada
program di lokasi saat interrupt terjadi ATMega 8535 dapat ditampung pada timer 1 sampai
dengan 216= 65535 bit. Setelah itu kita membagikan
Interrupt Status dikembalikan ke kondisi terakhir sebelum frekuensi clock dengan prescaler sehingga 16MHz : 1024
terjadi interrupt = 15625. Angka ini mempunyai arti 1 detik. Jika ingin
lebih dari 1 detik maka angka tersebut dikalikan dengan
jumlah detik yang diinginkan. Setelah itu angka tersebut
dikurangkan dengan waktu maksimal sehingga sesuai kode
III. HASIL ANALISIS
program 65535-15625=49910 berarti bahwa output led
A. Tugas 1 : DELAY DENGAN TIMER/ COUNTER display menyala selama 1 detik dan mati selama 1 detik
Pada percobaan pertama kita akan membuat delay begitu seterusnya.
dengan menggunakan timer / counter tanpa menggunakan
fungsi delay dari library. Untuk itu diperlukan perhitungan B. Pada percobaan kali ini kita akan membuat delay
tertentu pada register agar bisa menyesuaikan pada waktu dimana output led display akan menyala selama x detik
yang diinginkan seperti berikut ini: dan mati selama x detik begitu seterusnya, dimana x =
modulus 9 dari nomor kelompok + 1 seperti berikut ini:
TCNT1 = 49910;
TCCR1B = 0b101; TCNT1 = 49910;
while((TIFR & 0b00000100)==0); TCCR1B = 0b101;
TCCR1B = 0; while((TIFR & 0b00000100)==0);
TIFR = 0b00000100; TCCR1B = 0;
PORTB = ~PORTB; TIFR = 0b00000100;
PORTB = ~PORTB;
Hasil yang didapat:
IV. KESIMPULAN
DT-51 MinSys dapat digunakan untuk
membuat program yang memanfaatkan
control timer dan counter.
Register yang dapat digunakan untuk
menentukan mode timer dan control timer
antara lain TMOD, TCON, TH, dan TL.
Timer/Counter memiliki berbagai mode yang
dapat digunakan sesuai dengan kebutuhan,
diantaranya mode 0, 1, dan 2.
Register TMOD dan TCON merupakan
register 8 bit. Register TMOD tidak dapat
diakses per bit, sedangkan TCON dapat
diakses per bit.
Register-register yang dapat digunakan untuk
control counter antara lain IE dan IP.
LAMPIRAN
TUGAS II.A.1
#include <mega8535.h>
void main()
{
DDRB = 0xFF;
while(1)
{
TCNT1 = 49910;
TCCR1B = 0b101;
while((TIFR & 0b00000100)==0);
TCCR1B = 0;
TIFR = 0b00000100;
PORTB = ~PORTB;
}
}
TUGAS II.B.1
#include <mega8535.h>
#include <alcd.h>
#include <stdio.h>
char str[10];
void main()
{
DDRB.0 = 0;
PORTB.0 = 1;
lcd_init(16);
lcd_clear();
lcd_putsf(“Counter 0= ”);
TCCR0 = 0b110;
while(1)
TUGAS II.A.2 {
#include <mega8535.h> sprintf(str,”%i”,TCNT0);
void main() lcd_gotoxy(10,0);
{ lcd_puts(str);
DDRB = 0xFF; }
while(1) }
{
TCNT1 = 49910;
TCCR1B = 0b101;
while((TIFR & 0b00000100)==0);
TCCR1B = 0;
TIFR = 0b00000100;
PORTB = ~PORTB;
}
}
#include <mega8535.h>
#include <alcd.h>
void main()
{
DDRD.2 = 0;
DDRD.3 = 0;
PORTD.2 = 1;
PORTD.3 = 1;
GICR = 0b11000000;
MCUCR = 0b00000000;
#asm(“sei”)
lcd_init(16);
lcd_clear();
lcd_putsf(“Ext Interrupt”);
while(1);
}
TUGAS II.B.2
#include <mega8535.h> interrupt[2]void interupsi_ext0(void)
#include <alcd.h> {
#define F_CPU 1000000UL lcd_gotoxy(0,1);
#include <stdio.h> lcd_putsf(“INTExt 0”);
#include <delay.h> }
char str[10]; interrupt[3]void interupsi_ext1(void)
void main() {
{ lcd_gotoxy(0,1);
DDRA = 0xFF; lcd_putsf(“INT Ext 1”);
PORTA = 0xFF; }
DDRB.0 = 0;
PORTB.0 = 1;
lcd_init(16);
lcd_clear();
lcd_putsf(“Counter 0= ”);
TCCR0 = 0b110;
while(1)
{
sprintf(str,”%i”,TCNT0);
lcd_gotoxy(10,0);
lcd_puts(str);
if(TCCR0 != 0)
{
PORTA =0xFF;
delay_ms (1000*TCNT0);
PORTA =0x00;
delay_ms (1000*TCNT0);
}
}
}
TUGAS II.C.1