Tutorial Microcontroller MCS-51 ATMEL ISP
 

 

Super MCS51 Trainer

Standart MCS51 Trainer

Standart AVR Trainer

Programmer USBASP

Standart ARM Trainer

 

 

Percobaan Timer

Timer/Counter pada AT Mega 8535/16 terdiri dari 3 buah. Yaitu Timer/Counter0 (8bit ), Timer/Counter1 ( 16 bit ), dan Timer/Counter2 ( 8 Bit ).
Timer/Counter0
Timer/Counter 0 adalah 8-bit Timer/Counter yang multifungsi. Deskripsi untuk Timer/Counter 0 pada ATmega 8535 adalah sebagai berikut:
a. Sebagai Counter 1 kanal.
b. Timer di-nol-kan saat match compare (auto reload).
c. Dapat menghasilkan gelombang PWM.
d. Frekuensi generator.
e. Prescaler 10 bit untuk timer.
f. Interupsi timer yang disebabkan timer overflow dan match compare.
Pengaturan Timer/Counter 0 diatur oleh TCCR0 (Timer/Counter kontrol Register0) yang dapat dilihat pada Tabel berikut.

Prosedure percobaan:

1. Hubungkan JUMPER yang menghubungkan PB0 dan Clock dari astabil 555, atur frekuensi clock yang paling rendah.
2. Lakukan konfigurasi codevision untuk mode 0 (mode normal) yang akan mencacah pulsa dan tampung pada register TCNT0.

1. Percobaan counter dengan display LED

Pada percobaan ini data counter pada TCNT0 akan dikeluarkan pada display LED, pastikan JUMPER LED telah terhubung, dan lakukan konfigurasi pada codevision untuk PORTC.

#include<mega8535.h>
void main()
{
PORTC=0xFF;
DDRC=0xFF;
TCCR0=0b00000110;
TCNT0=0;
while(1)
{
PORTC=~TCNT0;
}
}

2. Percobaan Counter dengan Display 7 Segmen

Pada percobaan ini, akan menggunakan fungsi COUNTER pada TIMER0 dengan mengatur sumber clock pada T0 atau PB0, sehingga pada saat ada transisi High to Low maka akan menaikkan isi register TCNT0. Agar nilai TCNT0 dapat ditampilkan pada 7 segmen maka harus dilakukan pembagian nilai decimal ke Ratusan, Puluhan dan Satuan. Karena counter yang digunakan adalah TIMER0 8 bit, maka nilai cacahan yang dimungkinkan adalah 000 sampai dengan 255.


#include <mega8535.h>
#include <delay.h>
Unsigned int ubah,data, sat,pul,rat;

// Declare your global variables here

void ubah_ke_format7segment()
//fungsi untuk mengubah kedalam format 7segment
{
           if (ubah==0){ubah=0xc0;}
           if (ubah==1){ubah=0xf9;}
           if (ubah==2){ubah=0xa4;}
           if (ubah==3){ubah=0xb0;}
           if (ubah==4){ubah=0x99;}
           if (ubah==5){ubah=0x92;}
           if (ubah==6){ubah=0x82;}
           if (ubah==7){ubah=0xf8;}
           if (ubah==8){ubah=0x80;}
           if (ubah==9){ubah=0x90;}
}
void tampil_7segment()
{ 
           PORTC=rat;//mengirimkan data kedigit6 
           PORTD.5=1; 
           PORTD.6=0;
           PORTD.7=0;
           delay_ms(10); 
           PORTC=pul;//mengirimkan data kedigit7
           PORTD.5=0; 
           PORTD.6=1;
           PORTD.7=0;
           delay_ms(10); 
           PORTC=sat;//mengirimkan data kedigit8
           PORTD.5=1; 
           PORTD.6=1;
           PORTD.7=0;
           delay_ms(10);
 //lamanya waktu scanning ditentukan oleh intruksi delay
} 
void main(void)
{
 PORTC=0x00;
 DDRC=0xFF;
 PORTD=0x00;
 DDRD=0b11100000;
// Timer/Counter 0 initialization
           // Clock source: T0 pin Falling Edge
           // Mode: Normal top=FFh
           // OC0 output: Disconnected
 TCCR0=0x06;
 TCNT0=0x00;
 OCR0=0x00;
           // Timer(s)/Counter(s) Interrupt(s) initialization
 TIMSK=0x00;
ACSR=0x80; SFIOR=0x00;
while(1) 
{ 
 data = TCNT0;
 sat = data % 10; // sat = sisa dari data dibagi 10
 pul = data / 10;
 pul = pul % 10; 
 rat = data / 100;
 rat = rat % 10;
           // 
 ubah=sat;
 ubah_ke_format7segment(); 
 sat=ubah; 
           //
 ubah=pul;
 ubah_ke_format7segment(); 
 pul=ubah;
           //
 ubah=rat;
 ubah_ke_format7segment(); 
 rat=ubah;
           //
 tampil_7segment(); 
} 

}

NEXT