Categories
Mikrokontroler

Memanfaatkan EEPROM internal Mikrokontroler PIC16F877

Jika Anda belum tahu apakah EEPROM itu, silahkan klik disini. Artikel kali ini akan mengulas tentang pemanfaatan EEPROM internal pada mikrokontroler PIC16F877 yang memiliki kapasitas 256 Byte. Cukup besar untuk menyimpan data-data kritis, data-data parameter dan lain sebagainya yang tidak boleh terhapus saat catu daya ke Mikrokontroler tidak ada lagi (bersifat non-volatile).

Bahasa C menggunakan kompilator CCS sudah menyediakan beberapa instruksi yang terkait dengan pemanfaatan EEPROM ini, lantas bagaimana rangkaian yang digunakan? Wah mudah banget, lha wong cuman pake EEPROM internal ya pake saja rangkaian minimum atau yang dibutuhkan saja, contohnya liat gambar berikut.

Contoh Program

Langsung saja kita lihat contoh programnya, sambil belajar instruksi-instruksi yang terkait…

// how to read and write internal EEPROM in PIC16F877 microcontroller
// written by Agfianto Eko Putra
//
#include <16f877.h>
#fuses HS, NOWDT, PUT, NOPROTECT    // this is configuration for PIC16F877
#use delay(CLOCK=20000000)          // using 20MHz resonator/crystal
#use RS232(BAUD=9600, XMIT=PIN_B7, RCV=PIN_B6, stream=pickit)     // UART Software for PICKIT2
#include "stdlib.h"
#include <input.c>
//#include "limits.h"
#rom 0x2100={1,2,3,4}         // The EEPROM is located from 2100h-21FFh
typedef int8 INTEE;
void main() {
unsigned int8 i, j, address;
 INTEE value;               // variable to save EEPROM data

 delay_ms(1000);      // just wait a seconds to display at UART Tools of PICKit2
do {
 printf("\r\n\nEEPROM:\r\n");              // Display contents of the first 64
 for(i=0; i<=3; ++i) {                     // bytes of 256 bytes data EEPROM in hex
 for(j=0; j<=15; ++j) {
 printf( "%2X ", read_eeprom( i*16+j ) );
 }
 printf("\n\r");
 }
 printf("\r\nLocation to change: ");       // type location of the EEPROM
 address = gethex();
 printf("\r\nNew value: ");                // type the new value in EEPROM
 value = gethex();
write_eeprom( address, value );           // write data to the EEPROM
} while (TRUE);
}

Penjelasan

  • Perhatikan bahwa program tersebut digunakan untuk menampillkan 64 byte pertama dari EEPROM, kemudian memberikan pilihan kepada kita untuk menuliskan alamat mana dari ke-64 lokasi tersebut yang akan diubah isinya, formatnya heksadesimal;
  • Diawali dengan menginisialisasi EEPROM dengan data-data 1, 2, 3 dan 4 (untuk 4 lokasi pertama) yang disimpan mulai alamat 0x2100 atau 2100h (ingat bahwa alamat EEPROM pada PIC16F877 ada di 2100h-21FFh). Untuk itu digunakan instruksi #rom 0x2100={1,2,3,4};
  • Instruksi lain yang digunakan adalah membaca isi EEPROM, menggunakan read_eeprom(alamat), dimana alamat dituliskan lokasi EEPROM yang akan dibaca. Dalam program ini dibaca untuk 64 byte pertama saja (untuk contoh, selanjutnya Anda bisa mengubah untuk membaca semua lokasi EEPROM jika dikehendaki);
  • Setelah menampilkan 64 byte pertama, selanjutnya ditanyakan lokasi EEPROM (dari jangkauan 64 byte pertama tersebut) yang akan diubah, menggunakan instruksi address=gethex(), agar apa yang kita ketikkan diubah dalam format heksa;
  • Kemudian ditanya lagi data berapa yang akan disimpan pada lokasi tersebut, instruksi-nya sama dengan sebelumnya, hanyasaja menggunakan variabel value;
  • Langkah terakhir adalah menuliskan data pada lokasi yang diinginkan menggunaan write_eeprom( address, value );. Begitulah seterusnya, perhatikan saat program diulang, lokasi yang Anda inginkan sudah berisi data yang Anda masukkan.
  • Any Question? Silahkan saja ajukan komentar atau pertanyaan Anda. Semoga bermanfaat!

Ditulis di Katsutadai, 05 Desember 2011.