TIMER

menuju akhir

a.       Mempelajari aplikasi output pada mikrokontroller PIC 16F877A 
b.      Mempelajari aplikasi input pada mikrokontroller PIC 16F877A
c.   Mempelajari aplikasi I/O pada mikrokontroller PIC 16F877A

4.2 Alat dan Bahan [kembali]
a. Module PIC 16F877A
b. Motor DC
> Dasar Teori Mikrokontroler 
Mikrokontroler PIC16F877A merupakan salah satu mikrokontroler dari keluarga PICmicro yang popular digunakan sekarang ini, mulai dari pemula hingga para profesional. Hal tersebut karena PIC16F877A sangat praktis dan menggunakan teknologi FLASH memori sehingga dapat di program-hapus hingga seribu kali. Keunggulan mikrokontroler jenis RISC ini dibanding dengan mikrokontroler 8-bit lain dikelasnya terutama terletak pada kecepatan dan kompresi kodenya. Selain itu, PIC116F877A juga tergolong praktis dan ringkas karena memiliki kemasan 40 pin dengan 33 jalur I/O.

Anggota keluarga PICmicro buatan Microchip Inc. cukup banyak. Ada yang menggunakan FLASH memori dan ada pula yang jenis OTP (One Time Programmable). Mikrontroler dari keluarga PICmicro yang popular, antara lain PIC2C08, PIC16C54, PIC16F84. Agar lebih mengenal PIC16F877A, berikut ini diberikan fitur-fitur penting yang terdapat pada PIC16F877A.
 
MIkrokontroller PIC16F877A
fitur fitur PIC RISC CPU yang mempunyai performance tinggi
  1. Hanya 35 jenis instruksi yang perlu dipelajari
  2. Semua instrujsi mempunyai siklus tunggal kecuali untuk instruksi percabangan.
  3. Kecepatan Instruksi: DC – 20 MHz clock input DC – 200 ns instruction cycle
  4. 8K x 14 words of FLASH Program Memory, 368 x 8 bytes of Data Memory (RAM) , 256 x 8 bytes of EEPROM Data Memory
  5. Pinout compatible dengan PIC16C73B/74B/76/77
  6. Interrupt (14 sumber interrupt)
  7. Delapan level hardware stack
  8. Direct, indirect dan relative addressing modes
  9. Power-on Reset (POR)
  10. Power-up Timer (PWRT) dan Oscillator Start-up Timer (OST)
  11. Watchdog Timer (WDT) dengan on-chip RC oscillator
  12. Programmable code protection dan Fully static design
  13. Power saving SLEEP mode
  14. Selectable oscillator options
  15. Low power, high speed CMOS FLASH/EEPROM technology
  16. In-Circuit Serial Programming (ICSP) hanya dengan dua pin
  17. Single 5V In-Circuit Serial Programming capability
  18. Processor read/write access to program memory
  19. Wide operating voltage range: 2.0V to 5.5V
  20. High Sink/Source Current: 25 mA
  21. Commercial, Industrial and Extended temperature ranges
Deskripsi pin pin
Mikrokontroler PIC16F877A di produksi dalam kemasan 40 pin PDIP (Plastik Dual In Line) maupun 40 pin SO (Small Outline). Namun yang banyak terdapat dipasaran adalah kemasan PDIP. Pin-pin untuk I/O sebanyak 33 pin, yang terdiri atas 6 pada Port A, 8 pada Port B, 8 pada Port C, 8 pada Port D, 3 pada Port E. Ada pula beberapa Pin pada mikrokontroler yang memiliki fungsi ganda.

 
Organisasi Memori
Memori pada PIC16F877A dapat dipisahkan menjadi dua blok memori, satu untuk memori program dan satu untuk memori data. Memori EEPROM dan register GPR didalam RAM merupakan memori data, sedangkan memori FLASH merupakan memori program.
 mik
  Pembangkit Clock-Oscilator
Suatu mikrokontroler tidak akan dapat bekerja jika tidak diberi detak (clock) melalui suatu osilator. Osilator adalah rangkaian yang akan memberikan pulsa pada mikrokontroler dan berguna untuk mensinkronkan sistem dalam mikrokontroler tersebut. Untuk mengaktifkan sumber clock ini cukup dengan menambahkan rangkaian pasif saja seperti resistor dan kapasitor (RC Oscilator), kristal atau keramik resonator. Salah satu keistimewaan mikrokontroler PIC16F84 adalah terdapatnya 4 pilihan penggunaan osilator. Untuk pemakaian yang tidak memerlukan pewaktu kritis, bahkan dapat menggunakan sepasang resistor dan kapasitor saja sebagai osilator.

Nilai kristal yang dapat dipakai maksimum adalah 4 MHz atau 10 MHz, hal ini karena mikrokontroler PIC16F84 dibuat dalam 2 versi frekuensi kerja. Untuk menentukan frekuensi maksimumnya dapat dilihat pada badan mikrokontroler. Jika terdapat tulisan PIC16F84-04/P berarti frekuensi maksimum yang diijinkan adalah 4 MHz.

 
Mikroprosesor PIC16F877A

4.5 Rangkaian Simulasi [kembali]

4.6 Listing program [kembali]
       
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

}

Tidak ada komentar:

Posting Komentar