Interface Timer Menggunakan PIC16F877A





1. Tujuan [Kembali]

Mempelajari bagaimana cara Menggunakan fitur Timer PIC 16F877A dengan rangkaian dan dengan programnya.


2. Alat [Kembali]


2.1 Mikrokontroler PIC16F877A.


2.2 LCD


3. Teori [Kembali]


3.1. Pengertian Mikrokontroler PIC 16F877A

PIC yang merupakan produk dari Microchip Technology, merupakan kepanjangan dari Peripheral Interface Controller memiliki arsitektur Harvard dan merupakan jenis RISC (Reduced Instruction Set Computing). Salah satu jenis mikrokontroler ini adalah PIC16F877A.

3.1.1 Fitur-Fitur PIC16F877A.

a. Memiliki Instruksi sebanyak 35 buah.
b. Masing-masing instruksi dieksekusi dalam satu siklus mesin kecuali untuk instruksi percabangan yaitu dua siklus.
c. Kecepatan operasi masukan clock dari DC hingga 20MHz.
d. Kapasitas memori program berukuran 8k x 14 words.
e. Kapasitas RAM 268 byte.
f. Kapasitas memory EEPROM berukuran 256 byte.

3.1.2 Pin Out PIC16F877A.


-Memiliki 5 PORT I/O (PORTA 6 pin, PORTB 8 pin, PORTC 8 pin, PORTD 8 pin, PORTE 3 pin).
-Memiliki 3 buat timer
-Memiliki 2 buah keluaran PWM.
-Komunikasi serial singkron menggunakan SPI dan I2C.
-Komunikasi USART.

3.1.3 Pemograman PIC16F877A.


Pemograman PIC ini diprogram menggunakan bahasa C dan dapat menggunakan kompiler MikroC for PIC yang dapat didownload di situs resminya.

3.1.4 Rangkaian Dasar Sistem Mikrokontroler PIC16F877A.



Di gambar dapat dilihat bahwa rangkaian dasar dari sistim mikrokontroler biasanya menggunakan rangkaian crystal sebagai clock atau oscilator eksternal sebagai jantung untuk memberikan kecepatan eksekusi dari mikrokontroler tersebut. Pada gambar juga terdapat rangkaian reset yang digunakan untuk memulai dari awal kembali program yang kita jalankan pada mikrokontroler ini.


3.2. Pengertian LCD


Untuk teori LCD sudah dibahas pada Interface LCD Menggunakan PIC

3.3. Pengertian Timer PIC 16F877A

Pada rangkaian ini kami mengunakan timer TMR0 pada PIC. adapun fitur-fitur Timer0 ini adalah;

1. Memiliki Lebar data sebesar 8bit.
2. Dapat digunakan sebagai counter
3. Bersifat dibaca dan ditulis.
4. Dapat menggunakan clock internal maupun eksternal.
5. Interupsi terjadi ketika terjadi overflow dari FFh ke 00h.

Untuk Mengakses timer0, maka harus melibatkan register lainnya yaitu Register OPTION_REG 9 bit 0 hingga bit 5) dengan kegunaan masing masing dapat dilihat pada tabel dibawah ini.



Kombinasi bit pengaturan Nilai Prescalar dapat dilihat pada tabel berikut,


Setelah reset, register OPTION_REG akan berisi FFH. Register lain yang berhubungan dengan TIMER0 adalah register INTCON yaitu untuk pengaturan interupsi.
Adapun fungsi masing-masing bit pada register ini adalah,


4. Rangkaian [Kembali]


Rangkaian di atas merupakan rangkaian sederhana dari penggunaan Fungsi timer dari PIC 16F877a. pada rangkaian terdapat LCD yang akan menampilkan penambahan waktu. yang ditampilkan pada LCD adalah Waktu jam, menit dan detik yang akan berjalan jika simulasi dihidupkan.



5. Program [Kembali]

// LCD module connections
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
// End LCD module connections

char a=0, jam=0, menit=0, detik=0;         // deklarasi dan isi variabel
char detikpul, detiksat, menitpul, menitsat, jampul, jamsat;     // deklarasi variabel
void PrintToDisplay(){                     // fungsi mencetak ke layar

jampul=jam/10;                             // mendapatkan nilai puluhan jam
jamsat=jam%10;                             // mendapatkan nilai satuan jam
menitpul=menit/10;                         // mendapatkan nilai puluhan menit
menitsat=menit%10;                         // mendapatkan nilai satuan menit
detikpul=detik/10;                         // mendapatkan nilai puluhan detik
detiksat=detik%10;                         // mendapatkan nilai satuan menit
Lcd_out(1,1,"Waktu: : : ");                // cetak ke layar
Lcd_Chr(1,7,jampul+48);                    // cetak nilai puluhan jam ke LCD
Lcd_Chr_Cp(jamsat+48);                     // cetak nilai satuan jam ke LCD
Lcd_Chr_Cp(':');                           // cetak ke LCD
Lcd_Chr_Cp(menitpul+48);                   // cetak nilai puluhan menit ke LCD
Lcd_Chr_Cp(menitsat+48);                   // cetak nilai satuan menit ke LCD
Lcd_Chr_Cp(':');                           // cetak ke LCD
Lcd_Chr_Cp(detikpul+48);                   // cetak nilai puluhan detik ke LCD
Lcd_Chr_Cp(detiksat+48);                   // cetak nilai satuan detik ke LCD
delay_ms(10);                              // delay 10 ms
}

void interrupt(){                             // aktifkan interrupt
if(a<125){                                    // jika a<125, maka
a++;INTCON=0xa0;TMR0=131;}                    //  tambah a, aktifkan TMR0, isi TMR0
else{                                         // jika tidak, maka
a=0;                                          // a diisi 0
if(detik<59){                                 // jika detik<59, maka
detik++;INTCON=0xa0;TMR0=131;}                // detik+1, aktifkan TMR0, isi TMR0

else {detik=0;                                // jika detik = 0, maka
if(menit<59)                                  // jika menit<59, maka
{menit++; INTCON=0xa0; TMR0=131;}             // menit+1, aktifkan TMR0, isi TMR0
else{menit=0;                                 // jika jika tidak,menit=0

if (jam<11){                                  // jika jam<59, maka
jam++; INTCON=0xa0; TMR0=131;}                // jam+1, aktifkan TMR0, isi TMR0

else{                                         // jika tidak
jam=0; INTCON=0xa0; TMR0=131;}                // jam=0 , aktifkan TMR0, isi TMR0
}
}
}
}

void main(){
Lcd_init();                                   // Inisialisasi LCD
Lcd_Cmd(_LCD_CLEAR);                          // bersihkan layar LCD
Lcd_Cmd(_LCD_CURSOR_OFF);                     // matikan cursor LCD
TRISB=0x00;                                   // PORTB sebagai output
OPTION_REG=0x86;                              // Input clock internal 8Mhz, Prescalar 1:128
TMR0=131;                                     // isi nilai TMR0
INTCON=0xa0;                                  // aktifkan TMR0;
do{
PrintToDisplay();                             // panggil fungsi
}
while(1);                                     // loop

}

6. Flowchart [Kembali]



7. Video Simulasi [Kembali]



           


          




Share
Tweet
Pin
Share