[Mikrokontroller]Pribadi Adhi 10208069

9
MIKROTRAINER MCS51 SEBAGAI PEMBELAJARAN MIKROKONTROLLER Pribadi Mumpuni Adhi, M. Fauzi Sahdan, Randy Menander, Panji Achmari, Almas Hilman Muhtadi, Zamzam Ibnu Sina, Woen Welly 10208069, 10208004, 10208021, 10208040, 10208068, 10208098, 10208060 Program Studi Fisika, Institut Teknologi Bandung, Indonesia Email : [email protected] Asisten : (M. Ruqy Faishal Islamy/10207056) Tanggal Praktikum : (03-04-2011) Abstrak Mikrokontroler merupakan suatu system embedded yang memiliki prosesor, memori(RAM dan ROM), serta unit penunjang lainnya. Mikrokontroler biasa digunakan sebagai pengatur system kerja dalam perangkat elektronik. Dalam pemrograman dengan mikrokontroler biasanya digunakan bahasa assembly atau bahasa yang lebih tinggi seperti bahasa C. Kemudian dari bahasa assembly atau bahasa C decompile menjadi bahasa mesin yang dapat dimengerti oleh mikrokontroler dalam bahasa hexa. Karena merupakan system embedded mikrokontroler mampu menjalankan proses analog to digital converter(ADC) secara mandiri. Resolusi dari ADC bergantung pada jumlah bit pada mikrokontroler yang digunakan. Pada praktikum ini dilakukan variasi pemrograman dengan bahasa C yang outputnya berupa LED yang menyala. Selanjutnya dilakukan percobaan ADC untuk tegangan analog untuk melihat fungsi transfer dari ADC. Kata Kunci : ADC, LED, Mikrokontroler I. Pendahuluan Pada praktikum menggunakan KIT mikrotrainer MCS51 sebagai pembelajaran mikrokontroler memiliki tujuan : a. Mengenalkan Mikrotrainer MCS-51 sebagai alat bantu pembelajaran mikrokontroler keluarga MCS-51 b. Mampu membuat program sederhana pada mikrokontroler At89s52 untuk menjalankan modul-modul yang terdapat pada mikrotrainer MCS-51 c. Memahami prinsip kerja mikrotrainer MCS-51 d. Memahami konsep akuisisi data pada mikrotrainer MCS-51. Mikrokontroler banyak digunakan sebagai pengatur utama sistem kerja berbagai perangkat elektronik. Tedapat tiga keluarga mikrokontroler yang dikenal saat ini, yaitu keluarga AVR, PIC, dan MCS-51. Perbedaan ketiganya terletak pada arsitektur dan fitur-fitur Mikrokontroler yang digunakan dalam kit MCS-51 Microtrainer adalah AT89S52 yang dibuat oleh Atmel. Ia termasuk dalam keluarga 8051 yang dikembangkan awalnya oleh Intel, namun selanjutnya beberapa perusahaan lain juga memproduksi keluarga mikrokontroler 8 bit ini. Gambar 1. Pin dan Port pada AT89S52 [1] Mikrokontroler AT89S52 memiliki 32 pin untuk port, yang berfungsi sebagai jalur masukan dan

Transcript of [Mikrokontroller]Pribadi Adhi 10208069

Page 1: [Mikrokontroller]Pribadi Adhi 10208069

MIKROTRAINER MCS51 SEBAGAI PEMBELAJARAN MIKROKONTROLLER

Pribadi Mumpuni Adhi, M. Fauzi Sahdan, Randy Menander, Panji Achmari, Almas Hilman Muhtadi,

Zamzam Ibnu Sina, Woen Welly

10208069, 10208004, 10208021, 10208040, 10208068, 10208098, 10208060

Program Studi Fisika, Institut Teknologi Bandung, Indonesia Email : [email protected]

Asisten : (M. Ruqy Faishal Islamy/10207056)

Tanggal Praktikum : (03-04-2011)

Abstrak Mikrokontroler merupakan suatu system embedded yang memiliki prosesor, memori(RAM dan ROM), serta unit penunjang lainnya. Mikrokontroler biasa digunakan sebagai pengatur system kerja dalam perangkat elektronik. Dalam pemrograman dengan mikrokontroler biasanya digunakan bahasa assembly atau bahasa yang lebih tinggi seperti bahasa C. Kemudian dari bahasa assembly atau bahasa C decompile menjadi bahasa mesin yang dapat dimengerti oleh mikrokontroler dalam bahasa hexa. Karena merupakan system embedded mikrokontroler mampu menjalankan proses analog to digital converter(ADC) secara mandiri. Resolusi dari ADC bergantung pada jumlah bit pada mikrokontroler yang digunakan. Pada praktikum ini dilakukan variasi pemrograman dengan bahasa C yang outputnya berupa LED yang menyala. Selanjutnya dilakukan percobaan ADC untuk tegangan analog untuk melihat fungsi transfer dari ADC. Kata Kunci : ADC, LED, Mikrokontroler I. Pendahuluan

Pada praktikum menggunakan KIT mikrotrainer MCS51 sebagai pembelajaran mikrokontroler memiliki tujuan :

a. Mengenalkan Mikrotrainer MCS-51 sebagai

alat bantu pembelajaran mikrokontroler

keluarga MCS-51

b. Mampu membuat program sederhana pada

mikrokontroler At89s52 untuk menjalankan

modul-modul yang terdapat pada

mikrotrainer MCS-51

c. Memahami prinsip kerja mikrotrainer MCS-51

d. Memahami konsep akuisisi data pada

mikrotrainer MCS-51.

Mikrokontroler banyak digunakan sebagai pengatur utama sistem kerja berbagai perangkat elektronik. Tedapat tiga keluarga mikrokontroler yang dikenal saat ini, yaitu keluarga AVR, PIC, dan MCS-51. Perbedaan ketiganya terletak pada arsitektur dan fitur-fitur Mikrokontroler yang digunakan dalam kit MCS-51 Microtrainer adalah AT89S52 yang dibuat oleh Atmel. Ia termasuk dalam keluarga 8051 yang dikembangkan awalnya oleh Intel, namun selanjutnya beberapa perusahaan lain

juga memproduksi keluarga mikrokontroler 8 bit ini.

Gambar 1. Pin dan Port pada AT89S52[1]

Mikrokontroler AT89S52 memiliki 32 pin untuk

port, yang berfungsi sebagai jalur masukan dan

Page 2: [Mikrokontroller]Pribadi Adhi 10208069

keluaran atau bagian dari sistem pengalamatan dan jalur data. Pin-pin pada port 0 bersifat open drain, jadi jika diberi logika 0 (low), pin menghasilkan keadaan low. Jika diberi logika 1 (high), pin bersifat mengambang dan bisa berfungsi sebagai masukan. Port 1,2, dan 3 bisa menghasilkan keadaan high dan

low dengan kemampuan arus sekitar 2 mA.

Port 0

Biasa digunakan untuk jalur masukan dan keluaran (I/O) umum.Selain itu, port 0 juga bisa digunakan sebagai jalur alamat dan data untuk memori luar. Dalam rangkaian pada kit, port 0 terhubung dengan sebuah DIP switch, keypad, dan Analog to Digital

Converter (ADC).

Port 1

Biasa digunakan untuk berhubungan dengan perangkat lain. Dalam kit, 3 bit milik port 1 digunakan untuk memilih 1 dari 7 pilihan masukan

untuk ADC.

Port 2

Bisa digunakan untuk jalur I/O umum, atau sebagai jalur alamat untuk memori luar. Dalam kit, port 2 bisa dihubungkan dengan 8 buah LED, 4 tampilan seven segment (“angka delapan”), atau tampilan

LCD.

Port 3

Bisa digunakan sebagai jalur I/O umum, dan memiliki fungsi-fungsi tambahan yang terdapat dalam Tabel 1.1. Beberapa pin milik port 3 juga bisa dihubungkan dengan sinyal kontrol ADC

PSEN (Program Store Enable)

Pin ini mengirim sinyal yang mengatur penulisan memori luar. Biasanya pin ini terhubung dengan pin OE (Output Enable) pada EPROM, yang mengatur

pembacaan data.

ALE (Address Latch Enable)

Pin ini digunakan sebagai jalur demultiplexing alamat dan data. Ketika port 0 digunakan sebagai jalur data dan byte rendah jalur alamat, sinyal ALE mengunci alamat selama setengah siklus dan data pada setengah siklus berikutnya.Pulsa ALE memiliki

kecepatan 1/6 dari osilator mikrokontroler.

EA (External Access)

Jika keadaan pin ini high, mikrokontroler sedang menjalankan program dari ROM dalam. Jika keadaan pin ini low, program yang dijalankan

berasal dari memori luar.

RST (Reset)

Jika pin ini diberi sinyal high, mikrokontroler akan memulai program dari awal dan mengisi semua

register dengan nilai awal.

Program dalam mikrokontroler disimpan dalam

ROM. Program ditulis di komputer dalam bahasa

assembly atau C, kemudian dilakukan compile untuk

mendapatkan file dalam bahasa mesin yang berisi

angka-angka heksadesimal. File ini, yang memiliki

nama dengan extension .HEX, dikirim ke dalam

mikrokontroler dengan programmer.

Saat ini telah tersedia mikrokontroler yang dapat

diprogram tanpa menggunakan EEPROM

programmer, yaitu dengan metode ISP (In System

Programming).Dengan ini mikrokontroler dapat

diprogram hanya dengan menghubungkan pin-pin

tertentu ke komputer. Selanjutnya, dengan

software tertentu, file .HEX dapat langsung diisikan

ke mikrokontroler yang terpasang pada kit. Untuk

mengisi program pada kit MCS-51 Microtrainer

diperlukan software AEC_ISP dan kabel paralel yang

dihubungkan ke port parallel komputer.

ADC adalah suatu komponen yang berfungsi

sebagai akuisisi data yaitumengambil isyarat analog

untuk diubah menjadi isyarat digital. Resolusi

darisebuah ADC dapat dinyatakan sebagai jumlah

bit (binary digit) yang digunakan untuk tiap-tiap

nilai dari signal analog. Sebuah ADC n bit, mampu

menyatakan 2n nilai yang berbeda dari suatu signal

analog. Semakin banyak jumlah bit, proses konversi

data menjadi semakin akurat karena nilai dari

isyaratanalog yang dinyatakan dalam bilangan biner

menjadi semakin banyak.

Resolusi ADC selalu dinyatakan sebagai jumlah

bit-bit dalam kode keluaran digitalnya. Misalnya,

ADC dengan resolusi n-bit memiliki 2n kode digital

yang mungkin dan berarti juga memiliki 2n tingkat

undak (step level). Meskipun demikian, karena

undak pertama dan undak terakhir hanya setengah

dari lebar penuh, maka rentang/tegangan skala-

penuh (FSR, full-scale range) dibagi dalam(2n-1)

lebar undak. Sehingga resolusi untuk ADC

dinyatakan dalam 1LSB atau Least Significant Bit

adalah :

Resolusi =

(1)

Page 3: [Mikrokontroller]Pribadi Adhi 10208069

Secara teoretis, fungsi transfer ideal untuk

konverter analog ke digital (ADC, analog to digital

converter) berbentuk garis lurus. Bentuk ideal garis

lurus hanya dapat dicapai dengan konverter data

beresolusi tak-hingga. Karena tidak mungkin

mendapatkan resolusi tak hingga, maka secara

praktis fungsi tranfer ideal tersebut berbentuk

gelombang tangga seragam seperti terlihat pada

gambar di bawah ini:

Gambar 2. Fungsi Transfer ADC

II. Metode Percobaan

Metode praktikum kali ini adalah :

1. Hubungkan PC/komputer dengan kit Mikrotrainer MCS51.

2. Nyalakan kit Mikrotrainer MCS51. 3. Untuk percobaan dengan LED, pastikan LED

tersambung dengan port 2 kit MCS51. 4. Buka modul program yang akan diuji, lalu

compile modul yang ditulis dalam bahasa C tersebut sehingga dihasilkan sebuah file dengan extension .hex.

5. Buka program AEC_ISP.exe, reset mikrokontroler, lakukan download program ke mikrokontroler lalu reset kembali program. Maka LED akan menyala sesuai dengan program yang dijalankan.

6. Untuk percobaan ADC, gunakan 7 segment dan LCD sebagai keluaran di port 2, lalu buka kembali program AEC_ISP.exe lakukan hal yang sama.

III. Data dan Pengolahan

Percobaan ADC :

Analog (v) Digital

0 0

0.455 25

0.907 50

1.37 75

1.827 100

2.274 125

2.736 150

3.192 175

3.66 200

4.11 225

4.77 255 Tabel 1. Data Tegangan Analog dan Digital

Apabila diplot ke dalam satu grafik maka akan

didapatkan :

Gambar 3. Grafik Transfer Analog to Digital

Converter Menggunakan persamaan (1) maka didapatkan

resolusi dari ADC 0,0188 Volt

Percobaan dengan LED : Diketahui source code dari program ledjalan2 #include<reg52.h>

void main()

{

unsigned char a;

unsigned int c;

a=0;

while(1) {

if(a==0) a=1;

else a = a << 1;

P2 = a ^ 0xff;

for(c=0;c<10000;c++); }

}

Kemudian untuk program yang dapat membuat LED berkedip apabila PUSH BUTTON mempunyai nilai 10101010, LED bergeser ke kanan apabila PUSH BUTTON mempunyai nilai 01010101, dan LED akan bergeser ke kiri apabila PUSH BUTTON mempunyai nilai 00110011 maka didapatkan source

code sebagai berikut :

Page 4: [Mikrokontroller]Pribadi Adhi 10208069

#include<reg52.h>

void tunggu (int z)

{

int k;

for(k=0;k<z;k++)

{

int i;

for(i=0;i<=150;i++);

}

}

void main ()

{

unsigned char a;

unsigned int i;

a = P3;

if (a == 0x55) { //kedip2

P2 = 0x00;

tunggu (5000);

P2 = 0xff;

tunggu (5000);

}

else if (a == 0xaa) { //geser kanan

a=0x7f;

for(i=0;i<8;i++)

{

a=((a << 1 ) | ( a>>7 ) );

P2=a;

tunggu(5000);

}

}

else if (a == 0xcc) { //geser kiri

a=0xfe;

for(i=0;i<8;i++)

{

a=((a >> 1 ) | ( a<< 7 ) );

P2=a;

tunggu(5000);

}

}

else a=0xff;

}

IV. Analisis Pada program ledjalan2 pertama-tama

dinisialisasi variabel a dengan nilai desimal 0 atau apabila dibuat dalam bentuk biner adalah 00000000. Kemudian masuk ke dalam blok while yang akan membuat program akan diulang terus apabila kondisinya benar. Selanjutnya terdapat blok percabangan if yang membandingkan nilai jika a = 0 maka nilai a akan berubah menjadi desimal 1 atau dalam bentuk biner adalah 00000001.

Kemudian nilai variabel a diamasukkan ke dalam output pada port P2 yang terhubung dengan LED. Karena LED memiliki karakteristik active low maka dilakukan operasi XOR dengan bilangan hexa 0xff atau dalam biner 11111111, sehingga keluaran dari P2 adalah nilai biner 11111110 atau dalam artian LED pada P2.0 akan menyala.

Sekarang nilai a bernilai 00000001 yang berarti tidak sama dengan 0 lagi. Maka program akan masuk ke dalam baris else yang di dalamnya nilai a

digeser sebanyak satu bit ke kiri, sehingga nilai a sekarang menjadi 00000010. Selanjutnya kembali operasi XOR dengan 0xff dilakukan sehingga didapatkan nilai 11111101 yang kemudian dikeluarkan ke P2 sehingga LED pada P2.1 akan menyala. Begitu seterusnya sehingga secara bergantian LED akan berpidah-pindah mulai dari P2.0 sampai P2.7 kemudian akan kembali lagi ke P2.0 dan bergerak ke P2.7 sampai alat dimatikan atau simulasi dihentikan.

Terdapat perbedaan antara menggunakan alat pada Mikrtotrainer MCS51 secara langsung dengan simulasi menggunakan software Topview Simulator. Bila menggunakan alat secara langsung maka LED akan bergerak dari kanan ke kiri, tetapi dalam simulasi software LED bergerak dari kiri ke kanan. Hal ini disebabkan perbedaan port P2. Apabila menggunakan mikro secara langsung port P2.0 berada di paling kanan, sedangkan port P2.7 berada di paling kiri. Tetapi pada software simulasi posisi portnya terbalik. Untuk lebih jelas dapat dilihat pada ilustrasi di bawah ini:

P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0

1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1

1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1

1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1

1 0 1 1 1 1 1 1

0 1 1 1 1 1 1 1 Tabel 2 . Ilustrasi Pergerakan Lampu LED yang

Menyala pada Kit Mikrokontrainer

P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7

0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1

1 1 0 1 1 1 1 1 1 1 1 0 1 1 1 1

1 1 1 1 0 1 1 1 1 1 1 1 1 0 1 1

1 1 1 1 1 1 0 1

1 1 1 1 1 1 1 0 Tabel 3. Ilustrasi Pergerakan Lampu LED yang

Menyala pada Software Topview Simulator

Angka nol (0) pada tabel menunjukkan posisi ketika lampu LED menyala. Berikut ini merupakan flowchart dari program ledjalan2.

Page 5: [Mikrokontroller]Pribadi Adhi 10208069

Gambar 4 . Flowchart Program ledjalan2

Apabila program ledjalan2 dimodifikasi dengan

mengubah operasi XOR menjadi operasi AND atau OR maka akan didapatkan hasil yang berbeda. Pertama apabila operasi XOR diganti dengan AND. Hasil output pada P2 akan menjadi 00000001 atau dalam kata lain selain port P2.0 akan menyala sedangkan P2.0 sendiri akan mati. Sehingga apabila diteruskan akan terjadi pergeseran lampu LED yang mati dari P2.0 ke P2.7 dan seterusnya.

Yang kedua, apabila operasi XOR diganti dengan OR maka output pada P2 akan menjadi 11111111 atau lampu LED akan mati semua. Apabila diteruskan maka lampu led tidak akan pernah menyala karena output keluaran pada P2 selalu bernilai 1 atau high sedangkan untuk LED dia butuh nilai low atau nol (0) agar bisa menyala. Berikut ini ilutrasi apabila program diganti dengan AND atau OR.

P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7

1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0

0 0 1 0 0 0 0 0

0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0

0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0

0 0 0 0 0 0 0 1 Tabel 4. Ilustrasi Pergerakan Lampu LED Apabila

Diganti dengan AND

P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

Tabel 5. Ilustrasi Pergerakan Lampu LED Apabila Diganti dengan OR

Pada program yang kedua dimana kita dapat

memilih keluaran pada LED bila PUSH BUTTON kita atur inputnya penjelasannya sebagai berikut. Pertama PUSH BUTTON kita deklarasikan sebagai port 3 atau P3. Nilai P3 ini diisi dengan variabel a. Apabila variabel a kita ubah nilainya maka program akan mengecek ke bagian kondisional if. Bila masukkan pada PUSH BUTTON adalah 0x55 atau dalam biner adalah 01010101 maka yang dibaca pada PUSH BUTTON software simulasi adalah 10101010. Karena seperti yang sudah dijelaskan sebelumnya bahwa pada software simulator port P3.0 berada di paling kanan sedangkan program selalu membaca P3.0 berada di sisi paling kiri, sehingga ketika PUSH BUTTON menunjukkan 10101010 LED akan berkedip.

Proses berkedipnya sendiri adalah ketika nilai P2 dimasukkan angka nol semua atau dalam hexa adalah 0x00 LED akan menyala kemudian kita delay waktu setelah itu nilai P2 diubah semuanya menjadi 0xff sehingga LED akan mati, kemudian dilakukan delay. Begitulah seterusnya sehingga LED akan terlihat berkedip-kedip.

Apabila nilai a sama dengan 0xaa atau pada PUSH BUTTON di software simulasi bernilai 0x55 yang dalam biner berbentuk 01010101 . Kemudian nilai a ini diubah menjadi 0x7f atau dalam biner 01111111. Nilai ini dimasukkan ke dalam P2 yang merupakan output dari LED. Sebelum dimasukkan

Page 6: [Mikrokontroller]Pribadi Adhi 10208069

ke dalam P2, nilai bit a yang digeser ke kiri satu bit (11111110) dioperasikan OR dengan bit a yang digeser ke kanan 7 bit (00000000) sehingga didapatkan output pada P2 adalah 11111110. Karena P2.0 berada di sebelah kiri maka LED yang paling kiri akan menyala. Selanjutnya lampu LED akan terus bergeser ke kanan.

Apabila nilai a sama dengan 0xcc atau pada PUSH BUTTON di software simulasi bernilai 0x33 yang dalam biner 00110011. Kemudian nilai a ini diubah menjadi 0xfe atau dalam biner adalah 11111110. Nilai ini nanti akan dimasukkan ke dalam

output P2. Sebelum ditampilkan di P2 lakukan operasi bit, yaitu geser ke kanan satu kali sehingga bit-nya menjadi 01111111 dan dioperasikan OR dengan bit yang sudah di geser ke kiri sebanyak 7 bit yaitu 00000000. Nilai output yang ditampilkan adalah biner 01111111. Karena P2.0 berada di paling kiri maka nilai yang nol (0) hanya ada di P2.7 yang berada di kanan. Selanjutnya lampu LED akan bergeser ke kiri.

Terakhir, apabila semua masukan tidak sesuai dengan yang sudah diatur sebelumnya maka lampu LED akan mati seluruhnya.

Apabila dibuat dalam bentuk flowchart maka program tersebut dapat digambarkan sebagai berikut :

Gambar 5. Flowchart Program LED Berubah-ubah dengan PUSH BUTTON

Untuk mengubah bilangan biner menjadi desimal untuk setiap data analog tegangan langkah-langkahnya sebagai berikut. Pada percobaan ADC, konversi dari data analog ke data digital dilakukan secara otomatis oleh mikrokontroller. Nilai analog yang terbaca dikali dengan resolusinya sehingga didapatkan suatu bilangan yang menunjukkan angka digitalnya.

Pada kit ADC terhubung dengan port 0 (P0) kemudian di program nilai tersebut disimpan dalam sebuah variabel (lihat program pada lampiran ) dalam bentuk bilangan biner.

d = P0; //data ADC

Selanjutnya dalam baris dalam program

chartostr(d);

memanggil fungsi chartostr, dalam fungsi tersebut

void chartostr(unsigned char d) {

static unsigned char digit;

for(digit=0;digit<4;digit++)

{

angka[digit] = d % 10;

d = d / 10;

}

}

nilai digital yang terbaca secara otomatis diubah dalam bentuk desimal oleh program kemudian. Terdapat array angka yang nantinya berfungsi untuk menampilkan hasil dalam bentukga bilangan desimal pada 7 segment. Untuk perulangan yang pertama yaitu variabel digit bernialai nol (0), array angka[0] akan bernilai modulus dari variabel d dibagi 10. Kemudian variabel d nilainya diubah menjadi variabel d dibagi 10. Setelah itu masuk ke perulangan kedua, nilai array angka[1] akan bernilai variabel d yang sudah dibagi angka 10

Page 7: [Mikrokontroller]Pribadi Adhi 10208069

dimoduluskan dengan angka 10, dan seterusnya. Apabila diilustrasikan dapat dilihat sebagai berikut.

Misalkan setelah dikonversi oleh ADC didapatkan nilai 128,

digit Angka[digit]= d %10 d=d/10 0 8 12

1 2 1 2 1 0

3 0 0

Tabel 6. Ilustrasi Pengisian array angka[digit] Maka akan didapatkan nilai angka[digit] sebagai

berikut: angka[0] = 8 angka[1] = 2 angka[2] = 1 angka[3] = 0 Rangakain 7 segment memiliki 8 bit input yang

terhubung dengan mikrokontroller. 8 bit input ini dibagi ke dalam dua bagian yaitu empat bit bawah sebagai bit data (P2.0-P2.3) dan empat bit atas sebagai bit control (P2.4-P2.7)[2]. Bit control merupakan active low sedangkan bit data merupakan active high.

Program utama kemudian memanggil fungsi display7seg(); yang merupakan fungsi untuk menampilkan bilangan desimal pada 7 segmen. Sedangkan fungsinya sendiri sebagai berikut :

void display7seg()

{

static unsigned char digit,c;

for(digit=0;digit<4;digit++)

{

P2 = angka[digit] | ((0x10<<digit)^0xf0);

for(c=0;c<100;c++); }

}

Penjelasan programnya, pada perulangan yang

pertama nilai P2 yang merupakan output yang dihubungkan ke 7 segmen akan selalu bernilai (dalam biner) 1110xxxx, dimana nilai x bergantung terhadap nilai angka[0] sehingga 7 segmen yang pertama (berada di paling kanan) akan menampikan bilangan desimal. Perulangan kedua, ketiga, dan keempat akan menghasilkan biner 1101xxxx, 1011xxxx, dan 0111xxxx.

Untuk lebih jelasnya dapat dilihat pada contoh kasus sebagai berikut. Misalkan nilai yang dibaca oleh ADC adalah 128, maka nilai variabel array angka[digit] akan seperti yang sudah dijelaskan sebelumnya. Maka dapat diilustrasikan sebagai berikut:

digit Angka[digit] 0x10<<digit ^ 0xf0 P2

0 00001000 11100000 0xe8 1 00000001 11010000 0xd1

2 00000010 10110000 0xb2 3 00000000 01110000 0x00

Tabel 7. Ilustrasi Pengisian P2

Atau dengan kata lain nilai P2-nya adalah secara berturut-turut 11101000, 11010001, 101110010, dan 00000000 yang artinya untuk 4 bit paling atas membuat 7 segment menyala apabila nilainya nol, dan untuk 4 bit paling bawah menyatakan bentuk 7 segmennya. Oleh karena itu akan terbaca nilai 0128 pada 7 segment. Begitulah proses perubahan bilangan biner ke bentuk bilangan desimal pada 7 segment.

V. Simpulan

a. Mikrokontroler hanya dapat membaca file berekstensi .hex untuk menjalankan program.

b. Lampu LED akan menyala apabila nilai low (0) yang dimasukkan pada program.

c. Resolusi dari suatu ADC bergantung kepada jumlah bit dari ADC tersebut.

Pustaka [1]http://www.atmel.com/dyn/resources/prod_documents/doc1919.pdf [2] Bejo, Agus. 2007. C & AVR Rahasia Kemudahan Bahasa C dalam Mikrokontroler ATMega8535. Yogyakarta : Graha Ilmu

Page 8: [Mikrokontroller]Pribadi Adhi 10208069

Lampiran Program ADC

#include<reg52.h>

#include<intrins.h>

#define LCD_WAIT_CLEAR 200;

#define LCD_WAIT_NORMAL 50;

static unsigned int lcdwait;

static unsigned char angka[4]; //hasil konversi chartostr.

code char kata1[20] = "MCS-51 Microtrainer";

void chartostr(unsigned char d) //misal: 523 menjadi '0', '5', '2', '3'

{

static unsigned char digit;

for(digit=0;digit<4;digit++)

{

angka[digit] = d % 10;

d = d / 10;

} //angka[0] satuan.

}

void display7seg() //angkanya ada di array global angka[4].

{

static unsigned char digit,c;

for(digit=0;digit<4;digit++)

{

P2 = angka[digit] | ((0x10 << digit) ^ 0xf0); //active low.

for(c=0;c<100;c++); //tunggu beberapa saat sebelum ganti digit.

}

}

void lcdsend(unsigned char d, unsigned char r) //r=0: perintah, r=1: data

{

static unsigned int c;

P3 &= 0xf7; //mula-mula reg select = 0.

if(r)

{

P3 |= 0x08; //kalau r=1, set bit ini.

}

P2 = d; //datanya

P3 |= 0x20; //EN high

c=1;

//nop(); //tunggu 1 siklus

P3 ^= 0x20; //EN low

for(c=0;c<lcdwait;c++); //tunggu beberapa saat selama lcdwait (variabel global)

}

void lcdstring(char *kata, unsigned char n) //n adalah jumlah huruf.

{

static unsigned char i;

for(i=0;i<n;i++) lcdsend(kata[i],1);

}

void lcdclear()

{

lcdwait=LCD_WAIT_CLEAR;

lcdsend(1,0);

lcdwait=LCD_WAIT_NORMAL; //ada di #define.

}

void main()

{

static unsigned int c;

static unsigned char a,d,leadzero;

P3 = 0xc0;

P1 |= 0x07;

//start lcd:

lcdwait=LCD_WAIT_NORMAL; //variabel global

lcdsend(0x38,0);

lcdsend(0x0c,0);

lcdsend(6,0);

lcdsend(0x14,0);

lcdclear();

Page 9: [Mikrokontroller]Pribadi Adhi 10208069

Lampiran Program ADC

//lcdstring("MCS-51 Microtrainer",19);

lcdstring(kata1,19);

lcdsend(0xc0,0);

lcdstring("Test Program",12);

for(c=0;c<50000;c++);

for(d=0;d<3;d++)

{

lcdsend(0x18,0);

for(c=0;c<50000;c++);

}

for(c=0;c<50000;c++);

lcdclear();

while(1)

{

//P3 |= 0x40; //WR high

P3 &= 0xbf; //WR low

P3 |= 0x40; //WR high. pulsa low = ADC start

//tunggu waktu konversi

while(P3 & 0x04); //pin INT0

P3 &= 0x7f; //RD low

d = P0; //data ADC

P3 |= 0x80; //RD high

chartostr(d); //ubah nilai char jadi angka-angka.

for(c=0;c<50;c++) display7seg(); //tanpa parameter. angka ada di array global

angka[4].

//display lcd:

lcdclear();

lcdstring("nilai adc: ",0x00);

leadzero=0;

for(d=0;d<3;d++)

{

a=3-d;

if(angka[a] | leadzero)

{

lcdsend(angka[a]+0x30,1); //mengubah angka jadi ascii, ribuan dulu.

hapus leading zero.

leadzero=1;

}

}

lcdsend(angka[0]+0x30,1);

} //tutup while

} //tutup main