Jumat, 26 Oktober 2007

Downloader AT89C52

Makalah Downloader AT89C52
PERANCANGAN SISTEM OTOMATIK





Disusun Oleh :



Adika Rama 0315031027
Aditya B Rianto 0315031001
Hermansyah 0315031057
Lioty Utami 0315031018
Sudarmawan Purba 0315031086


















JURUSAN TEKNIK ELEKTRO
FAKULTAS TEKNIK
UNIVERSITAS LAMPUNG
BANDAR LAMPUNG
2007

I. Pendahuluan
Mikrokontroler adalah prosesor mikro yang terdiri dari CPU di tambah dengan RAM, ROM, I/O ports, dan timer yang jumlahnya tetap dan dikemas dalam satu chip. Mikrokontroler merupakan salah satu bagian dasar dari suatu sistem komputer. Meskipun mempunyai bentuk yang jauh lebih kecil dari komputer pribadi dan komputer mainframe, mikrokontroler dibangun dari elemen-elemen dasar yang sama. Secara sederhana, komputer akan menghasilkan output spesifik berdasarkan input yang diterima dan program yang dikerjakan [Mazidi 2000, Agfianto 2002].

Terdapat perbedaan yang signifikan antara mikrokontroler dan mikroprosessor. Perbedaan utama dapat dilihat dari dua faktor utama yaitu arsitektur perangkat keras (hardware architecture) dan aplikasi masing-masing. Ditinjau dari segi arsitekturnya, mikroprosesor hanya merupakan single chip CPU, sedangkan mikrokontroler dalam chip-nya selain CPU juga terdapat komponen lain yang memungkinkan mikrokontroler berfungsi sebagai suatu single chip computer. Dalam sebuah IC mikrokontroler telah terdapat ROM, RAM, EPROM, serial interface dan paralel interface, timer, interrupt controller, konverter Analog ke Digital, dan lainnya (bergantung fitur yang melengkapi mikrokontroler tersebut). Sedangkan dari segi aplikasinya, mikroprosessor hanya berfungsi sebagai Central Processing Unit yang menjadi otak komputer, sedangkan mikrokontroler, dalam bentuknya yang mungil. Pada umumnya ditujukan untuk melakukan tugas-tugas yang berorientasi pengaturan pada rangkaian yang membutuhkan jumlah komponen minimum dan biaya rendah (low cost) [Mazidi 2000, Agfianto 2002].


II. Tinjauan Pustaka
Mikrokontroler AT89C51 merupakan salah satu jenis mikrokontroler CMOS 8 bit yang memiliki performa yang tinggi dengan disipasi daya yang rendah, cocok dengan produk MCS-51. Kemudian memiliki sistem pemograman kembali Flash Memori 4 Kbyte dengan daya tahan 1000 kali write/erase. Disampig itu terdapat RAM Internal dengan kapasitas128 x 8 bit. Dan frekuensi pengoperasian hingga 24 MHz. Mikrokontroler ini juga memiliki 32 port I/O yang terbagi menjadi 4 buah port dengan 8 jalur I/O, kemudian terdapat pula Sebuah port serial dengan kontrol serial full duplex, dua timer/counter 16 bit dan sebuah osilator internal dan rangkaian pewaktu.

a. Organisasi Memori MCS-51 (Diagram Blok dan Konfigurasi)
Mikrokontroler AT89C51 merupakan mikrokomputer CMOS 8 bit dengan 4 KBytes Flash Programmable. Mikrokontroler AT89C51 memiliki kapasitas 4 KBytes of Reprogrammable Flash Memory, kecepatan sebesar (maksimum) 24 Mhz (Fully Static Operation: 0 Hz to 24 MHz), konsumsi daya yang rendah, daya tahan 1000 kali tulis/hapus, jangkauan 3 V sampai 6 V Operating Range, Two-Level Program Memory Lock, 128 x 8-Bit Internal RAM Two 16-Bit Timer/Counters, Six Interrupt Sources.

Berikut ini adalah gambar dari organisasi dan strukur dari MCS 51 Semua perangkat MCS-51 memiliki ruang alamat tersendiri untuk Program Memori dan data memori. Pemisahan program dan data memori ini memungkinkan pengaksesan data memori dengan pengalamatan 8 bit, sehingga dapat langsung disimpan dan dimanipulasi oleh mikrokontroler dengan kapasitas akses 8 bit. Namun demikian, untuk pengaksesan data memori dengan alamat 16 bit, harus dilakukan dengan menggunakan register DPTR (Data Pointer) Program Memori hanya dapat dibaca saja (diletakkan pada ROM/ EPROM). Untuk membaca Program Memori eksternal, mikrokontroler akan mengirim sinyal PSEN (Program Store Enable). Sebagai data memori eksternal dapat digunakan RAM eksternal (maksimum 64 Kbyte). Dalam pengaksesannya mikrokontroler akan mengirimkan sinyal RD (Read, melakukan operasi pembacaan data) dan WR (Write, melakukan operasi penulisan data). Bila diperlukan, Program Memori dan Eksternal Data dapat dikombinasikan dengan menyatukan sinyal RD dan PSEN ke dalam input gerbang AND dan menggunakan output dari gerbang tersebut sebagai sinyal read (baca) untuk Program Memori/ Eksternal Data [Agfianto 2002].



Gambar 1. Arsitektur sistem mikrokontroler AT89C51

Central Processing Unit (CPU) memulai eksekusi program dari lokasi alamat 0000H. Setiap interupsi diberi lokasi tersendiri pada Program Memori (ketentuan tersebut dikenal sebagai vektor interupsi). Interupsi yang dilakukan menyebabkan CPU melompat ke alamat interupsi yang berisi sebuah rutin khusus dan kemudian mengeksekusinya. Jika program interupsi cukup pendek, maka program tersebut dapat dimulai pada alamat vektor interupsi yang ditentukan.

Kapasitas 4K (atau 8K, atau 16K) dari Program Memori dapat difungsikan sebagai on-chip ROM (internal) atau sebagai ROM eksternal. Pemilihan ROM internal atau eksternal pada saat pembacaan oleh mikrokontroler, dilakukan dengan mengkondisikan pin EA (External Access) pada kondisi high/ low (EA = high, untuk ROM internal; EA = low, untuk ROM eksternal). Pada mikroPengaturanler dengan kapasitas ROM 4K, jika sinyal EA = Vcc, maka program dari alamat 0000H sampai 0FFFH akan diambil sebagai ROM internal. Sedangkan program dengan alamat 1000H sampai FFFFH akan dianggap sebagai program pada ROM eksternal.

Mikrokontroler AT89C51memiliki banyak register yang meliputi akumulator, register R, register B, DPTR (Data Pointer), PC (Program Counter), dan SP (Stack Pointer). Akumulator, sebagaimana namanya, digunakan sebagai register umum untuk mengakumulasikan hasil dari instruksi-instruksi. Akumulator dapat menampung 8 bit (1 byte) data dan merupakan register yang paling sering dipakai. Hampir lebih dari separuh dari instruksi mikrokontroler AT89C51 menggunakan akumulator. Sebagai contoh, jika ada operasi penjumlahan 10 dengan 20, yang menghasilkan 30, akan disimpan dalam akumulator.

Konfigurasi
Mikrokontroler ini memiliki 40 konfigurasi pin seperti digambarkan pada gambar 2.

Gambar 2. Blok Diagram Micro Controller 89C51
Fungsi dari tiap – tiap dapat dikelompokkan menjadi sumber tegangan, kristal, kontrol, dan inputoutput. Disamping itu mikrokontroler ini dapat ditambahkan sebuah minimum memori eksternal atau komponen ekternal lain. Dari kedelapan line dapat digunakan sebagai suatu unit yang berhubungan ke perangkat paralel seperti printer, pengubah digital ke analog, dan sebagainya, atau tiap line dapat mengoperasikan sendiri ke perangkat single bit seperti saklar, LED, transistor, selenoid, motor, dan speaker. Sedangkan fungsi pin dari mikrokontroler seperti berikut ini.

A. Pin 1 sampai 8
Ini adalah port 1 yang merupakan saluran/bus I/O 8 bit dua arah. Dengan internal pull-up yang dapat digunakan untuk berbagai keperluan. Pada port ini juga digunakan sebagai saluran alamat pada saat pemograman dan verifikasi.

B. Pin 9
Merupakan masukan reset (aktif tinggi), pulsa transisi dari rendah ke tinggi akan me-reset mikrokontroler ini.

C. Pin 10 sampai 17
Ini adalah port 3 merupakan saluran/bus I/O 8 bit dua arah dengan internal pull-ups yang memiliki fungsi pengganti. Bila fungsi pengganti tidak dipakai, maka – ini dapat digunakan sebagai port paralel 8 bit serbaguna. Selain itu sebagian dari port 3 dapat berfungsi sebagai sinyal kontrol pada saat proses pemograman dan verifikasi. Adapun fungsi penggantinya seperti pada tabel 1.

D. Pin 18 dan 19
Ini merupakan masukan ke penguat osilator berpenguat tinggi. Pada mikrokontroler ini memiliki seluruh rangkaian osilator yang diperlukan pada serpih yang sama (on chip) kecuali rangkaian kristal yang mengendalikan frekuensi osilator. Karenanya 18 dan 19 sangat diperlukan untuk dihubungkan dengan kristal. Selain itu XTAL 1 dapat
juga sebagai input untuk inverting oscilator amplifier dan input ke rangkaian internal clock sedangkan XTAL 2 merupakan output dari inverting oscilator amplifier
Tabel 1. Fungsi pengganti dari port 3..


E. Pin 20
Merupakan ground sumber tegangan yang diberi simbol GND.

F. Pin 21 sampai 28
Ini adalah port 2 yang merupakan saluran/bus I/O 8 bit dua arah dengan internal pull-ups. Saat pengambilan data dari program memori eksternal atau selama mengakses data memori eksternal yang menggunakan alamat 16 bit (MOVX @ DPTR), port 2 berfungsi sebagai saluran/bus alamat tinggi (A8 – A15). Sedangkan pada saat mengakses ke data memori eksternal yang menggunakan alamat 8 bit (MOVX @ R1), port 2 mengeluarkan isi dari P2 pada Special Function Register.

G. Pin 29
Program Store Enable (PSEN) merupakan sinyal pengontrol untuk mengakses program memori eksternal masuk ke dalam bus selama proses pemberian/pengambilan instruksi (fetching).

H. Pin 30
Address Latch Enable (ALE)/PROG merupakan penahan alamat memori eksternal (pada port 1) selama mengakses ke memori eksternal. Pena ini juga sebagai pulsa/sinyal input pemograman (PROG) selama proses
pemograman.
I. Pin 31
External Access Enable (EA) merupakan sinyal kontrol untuk pembacaan memori program. Apabila diset rendah (L) maka mikrokontroler akan melaksanakan seluruh instruksi dari memori program eksternal, sedangkan apabila diset tinggi (H) maka mikrokontroler akan melaksanakan instruksi dari memori program internal ketika isi program counter kurang dari 4096. ini juga berfungsi sebagai tegangan pemograman (VPP = +12V) selama proses pemograman.


J. Pin 32 sampai 39
Ini adalah port 0 yang merupakan saluran/bus I/O 8 bit open colector, dapat juga digunakan sebagai multipleks bus alamat rendah dan bus data selama adanya akses ke memori program eksternal. Pada saat proses pemograman dan verifikasi port 0 digunakan sebagai saluran/bus data. External pull-ups diperlukan selama proses verifikasi.

K. Pin 40
Merupakan positif sumber tegangan yang diberi simbol VCC.

b. Operasi Serial Port
Mikrokontroler AT89C51 mempunyai On Chip Serial Port yang dapat digunakan untuk komunikasi data serial secara Full Duplex sehingga Port Serial ini masih dapat menerima data pada saat proses pengiriman data terjadi. Untuk menampung data yang diterima atau data yang akan dikirimkan, 89C51 mempunyai sebuah register yaitu SBUF yang terletak pada alamat 99H di mana register ini berfungsi sebagai buffer sehingga pada saat mikrokontroler ini membaca data yang pertama dan data kedua belum diterima secara penuh, maka data ini tidak akan hilang. Pada kenyataannya register SBUF terdiri dari dua buah register yang memang menempati alamat yang sama yaitu 99H.

Gambar 3. Blok Diagram Port Serial

Register tersebut adalah Transmit Buffer Register yang bersifat write only (hanya dapat ditulis) dan Receive Buffer Register yang bersifat read only (hanya dapat dibaca). Pada proses penerimaan data dari Port Serial, data yang masuk ke dalam Port Serial akan ditampung pada Receive Buffer Register terlebih dahulu dan diteruskan ke jalur bus internal pada saat pembacaan register SBUF sedangkan pada proses pengiriman data ke Port Serial, data yang dituliskan dari bus internal akan ditampung pada Transmit Buffer Register terlebih dahulu sebelum dikirim ke Port Serial.
Port Serial 89C51 dapat digunakan untuk komunikasi data secara sinkron maupun asinkron Komunikasi data serial secara sinkron adalah merupakan bentuk komunikasi data serial yang memerlukan sinyal clock untuk sinkronisasi di mana sinyal clock tersebut akan tersulut pada setiap bit pengiriman data sedangkan komunikasi asinkron tidak memerlukan sinyal clock sebagai sinkronisasi. Pengiriman data pada komunikasi serial 89C51 dilakukan mulai dari bit yang paling rendah (LSB) hingga bit yang paling tinggi (MSB)

c. Komunikasi Sinkron
Sinyal clock pada komunikasi sinkron diperlukan oleh peralatan penerima data untuk mengetahui adanya pengiriman setiap bit data. Peralatan atau komponen penerima akan mengetahui adanya pengiriman bit yang pertama ataupun perubahan bit data dengan mendeteksi sinyal clock. Pada aplikasinya, komunikasi sinkron dari serial port AT89C51 selalu digunakan untuk mengakses shift register, PISO (Parallel In Serial Out) untuk proses penerimaan data dari PISO ke Port Serial AT89C51 atau SIPO (Serial In Parallel Out) untuk proses pengiriman data dari AT89C51 ke SIPO.

Shift Register tersebut dapat berupa IC Shift Register seperti 74164, 74165 atau berupa internal shift register dari mikrokontroler lain seperti Port Serial AT89C51 pula. Gambar 3.2 menunjukkan kondisi yang terjadi pada saat pengiriman data dari Register SBUF AT89C51 ke SIPO dan penerimaan data oleh Register SBUF dari PISO. Hal yang perlu diperhatikan apabila Shift Register menggunakan IC 74164 atau 74165 adalah, bentuk komunikasi serial Shift Register ini dimulai dari bit tertinggi (MSB) hingga bit terendah (LSB) sehingga data yang terkirim ataupun diterima selalu mempunyai posisi yang terbalik bobot bitnya.



II. Prosedur Kerja
Jika kita membutuhkan ruang kode yang lebih untuk aplikasi yang kita inginkan dengan menggunakan perancangan 89Cxx dengan bahasa C, maka Easy Downloader Versi 2.0 adalah solusi yang tepat. Versi ini mampu menulis file intel-HEX menjadi sebuah bentuk 89C51 (4kB), 89C52 (8kB) dan 89C55 (20kB).

a. Perangkat Keras
Gambar 4 menunjukkan skematik Easy Downloader Versi 2.0. 89C51 dengan ez52.hex menerima sekelompok data serial dengan baud 9600 dari PC dan menghasilkan sinyal yang tepat terhadap socket ZIP. P0 untuk pengiriman data dua arah. P1 menyediakan A0-A7, P2.0-P2.6 untuk A8-A14. jika kita lihat pada A14, perangkat lunaknya menggunakan P2.6 sementara ATMEL menggunakan P3.0 sebagai gantinya. Mode pemilihan pemrograman dilakukan oleh P3.4-P3.7. Tegangan yang digunakan untuk pemrograman menunjukkan sebuah bit yang berbeda dari versi 1.1, pin Vpp hanya membutuhkan tegangan +5V dan +12V dan diaktifkan oleh P3.3. Masukan clock pin X1 dari soket ZIP didapat dari X2 tanpa menyangga. Hal ini sudah diuji dan tidak menimbulkan masalah.



Gambar 4. Skematik Easy Donwloader Vesi 2.0


Gambar 5. Komponen Easy Donwloader Vesi 2.0
Easy Downloader Versi 2.0 terdiri atas sebuah MAX232 sebagai ganti dari DS275, sebuah LED hijau untuk indikator 5Vcc dan sebuah LED merah untuk indicator 5/12Vcc, sebuah penghubung DB9F untuk hubungan serial. Sumber tegangan untuk programmer adalah sekitar +15Vcc dan masukan melalui sebuah jembatan dioda. Sekitar LM317 terdapat 3 hambatan yang membutuhkan nilai yang sangat akurat.
b. Transfer Program
Program yang akan dimasukkan ke Easy Downloader Versi 2.0 ditransfer menggunakan bantuan aplikasi SYN TEXT EDITOR. Berikut adalah cara instalasi aplikasi tersebut.
1. Instalasi
Jalankan syssetup-2.1.0.46.exe ( di direktori TextEditor_Syn pada CD) dan ikuti petunjuknya.
2. Menggabungkan SDCC
Jalankan sys Text Editor ( Star->Program-> syn Text Editor). Untuk memasang kompailer SDCC ( dapat juga program yang lainnya seperti DScope, Topview Simulator, Easy Downloader, dll), klik Tool atau ikon palu ( lihat gambar 6).

Gambar 6
Kemudian klik ikon add ( bagian yang dilingkari dari gambar 7).

Gambar 7. Gambar 8.

Kemudian isi: (lihat gambar 8)
- Icon File = File dari icon yang akan digunakan
- Toolkind = Launch Program
- Program = sdcc.exe (untuk program yang lainnya mungkin diperlukan full path).
- Argument = klik pilih “Active Document Title (Long)”.
- Workingdirectory = klik pilih “Document Path”.
- Pilih ( ) Capture Console, Hidden, dan Save befor run.
3. Membuat File Baru
Dari menu file, pilih New atau tekan ikon . Pilih C++ dan With Highlighter kosongkan Filename. (lihat gambar 9). Teks editor siap untuk menulis program. Sebelum melakukan kompilasi ( menjalankan SDCC) program yang sudah ditulis harus disimpan dahulu dengan ekstensi .c ( mis: contoh1.c).

Gambar 9.

4. Menjalankan SDCC ( atau program lain yang digabungkan)
Untuk menjalankan sdcc: dari menu Tools tekan “sdcc” atau tekan ikon
( lihat gambar 10)

Gambar 10.






Berikut adalah listing program yang akan dimasukkan untuk menjalankan Easy Downloader Versi 2.0 untuk mikrokontroller AT89C51/52.
/*
Easy-Downloader V2.0 for ATMEL 89C51/52/55 (sdcc version)
Copyright(c) 2004 Wichit Sirichote, kswichit@kmitl.ac.th, January 5, 2004

*/

#include
#include


#define xon 0x11
#define xoff 0x13

int i;
unsigned char ACCU,temp,blank,chip,VPP;
char command;
unsigned int address,chksum;

char code title[] = "\n\r Easy-Downloader V2.0 for ATMEL 89C51/52/55 (sdcc version)";
char code prompt[] = "\n\r >";
char code ok[] = "\n\r ok";
unsigned int count,bytes,nonblank;

#define LM317 P3_5
#define LE P3_7
#define prog P2_7
#define Vpp P3_3
#define rdy P3_2
#define xtal P3_1
#define p26 P3_4
#define p27 P3_5
#define p36 P3_6
#define p37 P3_7
#define p10 P1_0
#define p11 P1_1
#define p12 P1_2
#define p13 P1_3
#define p14 P1_4


pulseProg()
{
prog = 0;
prog = 0;
prog = 0;
prog = 1;
}

time1ms() /* 1 ms delay with XTAL 11.0592MHz */
{
int i;
for (i = 0; i<50; i++) // the value shown in this line, 50 was calibrated for 1ms
; // you may change it!
}

delay(int n) /* do nothing n*1ms */
{
int i;
for (i=0; i< n ; i++)
time1ms();
}

delay10us()
{
int i;
for (i=0;i<1;i++);

}
char getchar(void)
{
char c;
while(!RI);
RI =0;
c = SBUF;
putchar(c); // echo to terminal
return SBUF;
}

char getchr(void)
{
while(!RI);
RI =0;
return SBUF; // no echo for command write
}

// external function for sending character through serial port
void putchar(char c)
{
while(!TI);
TI=0;
SBUF = c;
}

// send ASCII string to screen, the string must be stored in code memory
putstr(char *s)
{
char i=0;
char c;
while((c=*(s+(i++)))!= 0) putchar(c); // while byte is not terminator, keep sending
}

sendprompt()
{
putstr(prompt);
}

prompting()
{
if (command == 0x0d) // send title and prompt when get ENTER key
{
putstr(title);
sendprompt();
}
}

// need flow control with host pc
unsigned int getnum()
{
char s[6];
char c;
char i;
unsigned int temp16;
c = 0;
i=0;
for (i = 0; c != 0xa; i++) // loop until CR has entered
{
putchar(xon); // send xon to signal host to send byte
c = getchar(); // get character from serial port
if(c == 0xd) c=0xa; // convert CR to LF to make it compatible with ez31 and ez41
s[i] = c; // save character to array
}
s[i-1] = 0; // put terminator at the end of string

// convert ascii to integer (atoi(s))
temp16 = 0;
for(i=0; s[i] != 0; i++) temp16 = 10*temp16 + s[i]-'0';
return temp16; // return 16-bit for number of byte counting
}


getcommand()
{
if (RI) command = getchar(); //
else command = -1; /* no cammand has entered */
}

putok()
{
putstr(ok);
sendprompt();
}

send_hex(unsigned char n)
{
if(n<=9) putchar(n+'0'); // send 0-9
else putchar(n+55); // send A-F
}

puthex(unsigned char n)
{
unsigned char temp;
temp = n&0xf0;
temp >>=4;
send_hex(temp);
temp = n&0xf;
send_hex(temp);
}

puthex16(unsigned int n)
{
puthex(n>>8);
puthex(n);
}

putnum(unsigned int n)
{
unsigned int k;
char s[6];
s[0] = n/10000+'0';
k = n%10000;
s[1] = k/1000+'0';
k = k%1000;
s[2] = k/100+'0';
k = k%100;
s[3] = k/10+'0';
k = k%10;
s[4] = k%10+'0';

for(k = 0; s[k] == '0' && k<5; k++);
if (k==5) k--; // if all bytes are '0', get back one position
do putchar(s[k++]);
while (k<5);
}

getconsole()
{
if (RI) command = getchr();
else command = -1;
}

chkXOFF() /* use XON and XOFF for controlling flow with host */

{
if(getconsole() == xoff)
{
do;
while(getconsole() != xon);
}
}

erase()
{
if (command == 'e')
{
Vpp = 1;
p26 = 1;
p27 = 0;
p36 = 0;
p37 = 0;
delay10us();
Vpp = 0;
delay(100);
for (i=0; i < 1; i++) /* erase entire PEROM array (2kB) */
{
prog = 0;
delay(10); /* 10 ms prog pulse */
prog = 1;
delay(10);
}
Vpp = 1;
delay(100);
putok();
}
}

write() /* call sequence before write: 's', 't','e','w' */
{
if (command == 'w')
{
Vpp = 1;
p26 = 0;
p27 = 1;
p36 = 1;
p37 = 1;
prog = 1;

delay10us();
if (VPP == 0xff) /* skip if VPP != 0xff,i.e., need 5Vpp for programming */
Vpp = 0;
delay(100); /* raise programming voltage to 12V */
chksum = 0;
for (i = 0; i < count; i++)
{ /* use XON & XOFF flow control */
putchar(xon); /* send XON */
address = i;
P1 = address;
P2 = (address>>8)|0x80;

delay10us();
P0 = getchr(); /* read raw bytes from console */
putchar(xoff); /* send XOFF */
chksum += P0; /* summing chksum */
pulseProg();

while(!rdy)
; // wait until ready

}
Vpp = 1; /* bring Vpp back to 5V */
delay(100);
putok();
}
}

read() /* read ACCUording to number of bytes by 'c' command */
{
unsigned int i;
if (command=='r')
{
chksum = 0; /* reset check sum word */
Vpp = 1;
prog = 1;
p26 = 0;
p27 = 1;
p36 = 1;
p37 = 1;

blank = '1';
for(i = 0; i < count; i++)
{
address = i;
P1 = address;
P2 = (address>>8)|0x80;
p27 = 0;

delay10us();
P0 = 0xff;
chksum += P0;
puthex(P0); /* read in HEX */
p27 = 1;
chkXOFF();
}
putok();
}
}

blanktest() /* if all bytes are 0FFH then blank =FF, else blank = 0 */
{
if (P0 != 0xff)
{ blank = '0'; /* full */
nonblank++;
}
}

lock() /* only protection mode 4 can be programmed,i.e., disabled further
program, verify, and external execution */

{
if (command == 'l')
{
Vpp = 0;
prog = 1;
p26 = p27 = p36 = p37 = 1;

delay(100);
pulseProg();
delay(5);
p36 = p37 = 0;

delay10us();
pulseProg();
delay(5);
p27 = 0;
p36 = 1;
p37 = 0;

delay10us();
pulseProg();
delay(5);
putok();
}

}

printchksum()
{
if (command == 'c')
{
putstr("\n\r CHKSUM = "); puthex16(~chksum+1);
putok();
}
}

signature() /* read signature ATMEL chip 51/52/55 12V or 5V Vpp */
{
Vpp = prog = 1;
p26 = 0;
p27 = 1;
p36 = p37 = 0;

address = 0x31;
P1 = address;
P2 = (address>>8)|0x80;
p27 = 0;

delay10us();
P0 = 0xff;
chip = P0;
p27 = 1;
address++;
P1 = address;
P2 = (address>>8)|0x80;
p27 = 0;
delay10us();
P0 = 0xff; /* put FF before read back */
VPP = P0; /* save Vpp 12V (FF) or 5V (5) into VPP */

}

testblank() /* need to call signature function pior calling testblank */
{
unsigned int i;
signature();
switch(chip){
case (0x51): /* 89C51 */
bytes = 4096; /* if chip == 0x51 or 0x61 then bytes = 4kB */
break;
case (0x61): /* 89LV51 */
bytes = 4096;
break;
case (0x52): /* 89C52 */
bytes = 8192; /* if chip == 0x52 or 0x62 then bytes = 8kB */
break;
case (0x62): /* 89LV52 */
bytes = 8192;
break;
case (0x55): /* 89C55 */
bytes = 20480; /* if chip == 0x55 or 0x65 then bytes = 20kB */
break;
case (0x65): /* 89LV55 */
bytes = 20480;
break;
case 0xff:
bytes = 0;
}
chksum = 0; /* reset check sum word */
nonblank = 0; /* reset nonblank bytes counter */
Vpp = prog = 1;
p26 = 0;
p27 = p36 = p37 =1;
blank = '1';
for(i = 0; i < bytes; i++)
{
address = i;
P1 = address;
P2 = (address>>8)|0x80;
p27 = 0;

delay10us();
P0 = 0xff; /* put FF before read back */
chksum += P0;
blanktest();
p27 = 1; /* next address */
}
}

setcounter()

{
if (command == 's')
{
count = getnum();
putok();
}
}

getinfo()
{
if (command =='g')
{
testblank();
if(chip!=0xff)
{
putstr("\n\r found 89C");
puthex(chip);
if (VPP==0xff)
putstr("-12V");
if (VPP==5)
putstr("-5V");
putstr("\n\r nonblank ");
putnum(nonblank);
putstr(" bytes");
putstr("\n\r bytes counter ");
putnum(count);
}
else(putstr("\n\r Not found 89Cxx"));
putok();
}
}

PGMparameters() /* for simple host interfacing */
{
if (command=='p')
{
testblank();
puthex(chip);
putchar(',');
putnum(nonblank);
putchar(',');
putnum(count); // use getnum instead of printf_fast to reduce size
//printf_fast("%x,%u,%u",chip,nonblank,count);
putok();
}

}

void main(void)
{
i=0;
count =0;
SCON = 0x52; // 8-bit UART mode
TMOD = 0x20; // timer 1 mode 2 auto reload
TH1= 0xfd; // 9600 8n1
TR1 = 1; // run timer1
getchar();
putstr(title);
sendprompt();

while(1)
{
getcommand();
prompting();
setcounter();
erase();
write();
read();
lock();
printchksum();
getinfo();
PGMparameters();
}
}






IV. Kesimpulan

• Mikrokontroller umumnya ditujukan untuk melakukan tugas-tugas yang berorientasi pengaturan pada rangkaian yang membutuhkan jumlah komponen minimum dan biaya rendah (low cost).
• Mikrokontroler AT89C51 merupakan salah satu jenis mikrokontroler CMOS 8 bit yang memiliki performa yang tinggi dengan disipasi daya yang rendah, cocok dengan produk MCS-51.
• Semua produk mikrokontroller flash AT89C51/52 dari atmel memiliki ruang alamat memori data dan program yang terpisah.
• Easy Downloader Versi 2.0 adalah solusi yang tepat untuk aplikasi dengan ruang kode yang lebih mampu menulis file intel-HEX menjadi sebuah bentuk 89C51 (4kB), 89C52 (8kB) dan 89C55 (20kB).
• Penggunaan aplikasi SDCC memudahkan dalam menggunakan Easy Downloader Versi 2.0.

















DAFTAR PUSTAKA

Agfianto, Eko Putro. 2002. Belajar Mikrokontroller AT89C51/52/55. Gava Media. Yogyakarta

Budioko, Totok.2005.Pemrograman bahasa C dangan SDCC pada mikrokontroller AT89X051/AT89C51/521.Gava Media. Jogjakarta

Anonymous, Mikrokontroller AT89C51. http://batara.s5.com diakses 25 April 2006

Atmel, 1997, “Flash microcontroller : Architectural overview”, Atmel Inc.

Anonymous,http://atmel.com diakses 25 April 2007.

Tidak ada komentar: