Anda di halaman 1dari 36

BAB III

PERCOBAAN 2
Input, Output, Operasi Bit dan Operasi Byte

3.1

Tujuan Percobaan
1. Mengetahui dan memahami penggunaan dan cara mengakses input dan
2.

output pada AVR.


Mengetahui dan memahami penulisan untuk mengatur internal input,

output pada AVR.


3. Mengetahui dan memahami penggunaan operasi bit dan byte pada MCU 8
bit.
4. Mengetahui dan memahami operasi gerbang logika NOT, OR, AND dan
XOR menggunakan bahasa C untuk MCU.

3.2

DasarTeori

3.2.1

Input dan Output pada AVR


Pada dasarnya untuk mengakses I/O (input output) AVR ada beberapa

register yang harus disetting terlebih dahulu, yaitu:


1. Data Register (PORTx)
2. Data Direction Register (DDRx) dan
3. Port Input Pin (PINx)
DDRx digunakan untuk mendefinisikan port sebagai input atau output,
Jika level

logika pada register DDR bernilai 1 maka Port tersebut

dikonfigurasikan sebagai Output. Sedangkan jika level logika pada register


DDR bernilai 0 maka Port tersebut dikonfigurasikan sebagai input.
Contoh: DDRA=0xff maka Port A sebagai Output
00 hh 0
PORTx

DDRA=000 maka Port A sebagai Input


digunakan

untuk

mengeluarkan/menulis

data

ke

port

mikrokontroler, saat dikonfigurasikan sebagai output.


Contoh: PORTB=0xff maka Port B = 11111111 (biner)
0m m 0

PORTB=0xa3 maka Port B = 10100011 (biner)

PINx digunakan untuk mengambil/membaca data dari port mikrokontroler,


saat dikonfigurasikan sebagai input.
Contoh: PortB=0xCC //jika ditulis salam hexa
DDRB=0x0F //jika ditulis salam biner maka DDRB=0b00001111
Arti dari sintax di atas adalah PORTB(0-3) sebagai input dan PORTB(4-7)
sebagai input. Sedangkan dari PORT terlihat bahwa PB(0-1)= low, PA(2 3)=high, PA(45)

tanpa floating dan PA(6-7) dengan Rpull-up

3.2.2

Operasi Bit dan Byte

Operator dapat diklasifikasikan menjadi 2 bentuk, yaitu unary operator


dan binary operator. Unary operator adalah operator yang hanya melibatkan 1
operan. Sedangkan binary operator adalah operator yang melibatkan 2 operan.
Java mempunyai berbagai macam jenis operator yang dapat digolongkan menjadi
operator aritmatika, increment-decrement, bitwise, boolean, logic, shift (geser),
penugasan, kombinasi dan kondisi.
Arithmatic operator (operator aritmatika) adalah operator yang berfungsi
untuk operasi aritmatika. Yang termasuk dalam arithmatic operator bisa dilihat
pada Tabel 3.1.
Tabel 3.1 Arithmatic operator

Arithmatic Operator

Keterangan

+
-

Operasi penambahan
Operasi pengurangan

Operasi perkalian

Operasi pembagian

Operasi modulus

Increment - decrement operator adalah operator yang berguna untuk


menaikkan 1 nilai (increment) dan menurunkan 1 nilai (decrement). Yang
termasuk increment- decrement operator bisa dilihat pada Tabel 3.2. Berdasarkan
urutan eksekusi penaikkan dan penurunan nilainya, increment-decrement operator
ini dapat diklasifikasikan menjadi 2 macam, yaitu pre-increment/decrement dan
post-increment/decrement.
Tabel 3.2 Arithmatic operator

Increment-Decrement

Keterangan

Operator
++

Increment

--

Decrement

Bitwise operator adalah operator yang dipakai untuk operasi bit pada nilai
operan. Yang termasuk bitwise operator bisa dilihat pada Tabel 3.3.
Tabel 3.3 Bitwise Operator

Bitwise Operator

Keterangan

Operasi complement

&

Operasi AND

Operasi OR

Operasi XOR

Boolean operator (operator boolean) adalah operator yang mengharuskan


operannya bertipe boolean (true atau false). Yang termasuk boolean operator bisa
dilihat pada Tabel 3.4.
Tabel 3.4 Boolean Operator

Logical Operator

Keterangan

!
&

Operasi negasi (NOT)


Operasi AND

1
A

Operasi OR
Operasi XOR

&&

Operasi AND (short circuit)

Operator !, &, | dan

mempunyai implementasi yang sama sebagaimana

ketika ia menjadi bitwise operator. Hanya saja di logical operator, operan yang
dilibatkan disini harus bertipe boolean, yang hanya mempunyai nilai true atau
false.
Logical operator (operator logika) adalah operator yang sering dipakai
untuk operasi perbandingan dan selalu menghasilkan suatu nilai bertipe boolean
(true atau false). Yang termasuk logical operator bisa dilihat pada Tabel 3.5.

Tabel 3.5 Logical Operator

Logical Operator

Keterangan

==

Operasi perbandingan sama dengan

!=

Operasi

>

dengan
Operasi perbandingan lebih besar

>=

Operasi perbandingan lebih besar sama

<

dengan
Operasi perbandingan lebih kecil

<=

Operasi perbandingan lebih kecil sama

perbandingan

tidak

sama

dengan

Shift operator (operator geser) adalah operator yang berfungsi untuk


menggeser susunan bit pada suatu nilai. Yang termasuk dalam shift operator dapat
dilihat pada Tabel 3.6.
Tabel 3.6 Shift Operator

Shift Operator Keterangan


>>

right shift

>>>

unsigned

<<

shift
left shift

right

Combination operator (operator kombinasi) adalah operator yang terdiri


dari gabungan 2 operator. Biasanya combination operator ini dipakai untuk
mempersingkat waktu penulisan program. Yang termasuk operator combination
bisa dilihat pada Tabel 3.7.

Tabel 3.7 Combination Operator

Combination Operator

Keterangan

+=

Gabungan dari operator = dan

-=

+
Gabungan
dari operator = dan

*=

-Gabungan dari operator = dan

/=

*
Gabungan
dari operator = dan

%=

/
Gabungan
dari operator = dan

>>=

%
Gabungan dari operator = dan

>>>=

>>
Gabungan dari operator = dan

<<=

>>>
Gabungan
dari operator = dan

&=

<<
Gabungan
dari operator = dan

|=

&
Gabungan dari operator = dan

A=

|
Gabungan
dari operator = dan
A

Conditional operator (operator konditional) adalah operator yang dipakai


untuk operasi kondisi (persyaratan), sama sebagaimana if-then-else dan hanya
berlaku untuk pernyataan tunggal. Operator ini mengembalikan suatu nilai yang
benar sesuai dengan kondisi yang diberikan. Conditional operator (operator
konditional) ini hanya ada 1 macam, yaitu ? disertai dengan tanda : (titik dua).
Jika kondisi persyaratan yang terletak di sebelah kiri tanda ? bernilai benar, maka
pernyataan yang berada di sebelah kiri tanda : yang akan diambil. Demikian juga
sebaliknya, jika kondisi persyaratan bernilai salah, maka pernyataan yang berada
di sebelah kanan tanda : yang akan diambil.
Operasi bit adalah sistem jumlah informasi yang dapat dibawa oleh dua
pilihan yang mempunyai kemungkinan yang sama. Bit melambangkan kapasitas
dari sebuah digit biner. Satu bit sama dengan 0.693 nat (ln(2)), atau 0.301 hartley
(log10(2)).Bit lebih menekankan pada penyimpanan data sebagai digit biner, dan
biasa digunakan ketika membicarakan tentang kapasitas data. Shannon, walaupun
mempunyai arti yang sama dengan bit, lebih menekankan pada jumlah informasi
yang dikandung.
Byte adalah sebuah kumpulan bit. Saat pertama kali digunakan, byte
mempunya panjang yang tidak tetap. Sekarang, byte umumnya mempunyai

panjang sebesar delapan bit. Byte yang mempunyai panjang delapan bit juga
dikenal sebagai octet. Sebuah byte bisa mempunyai 256 nilai yang berbeda (28
nilai, 0255). Nilai sebesar empat bit disebut juga nibble, dan bisa mempunyai 16
nilai yang berbeda (24 nilai, 015).

3.3

Alat dan Bahan


1. Modul praktikum MCU EduBroad

LED
Toggle Button
2. Komputer dan software Code-Vision AVR
3. Aplikasi Chip GUI
3.4

Langkah Percobaan

3.4.1

Register DDRx, PORTx, dan Internal Pull-Up

1. Jalankan aplikasi CVAVR dan pilih File > NEW (Ctrl+N).


2. Pilih Project lalu OK dan YES untuk menggunakan
CodeWizzardAVR.

Gambar 3.1 Pembuatan proyek pada cvavr

3.

Memilih chip mikrokontroller dan clock pada mikrokontroller

Gambar 3.2 Pemilihan chip mikrokontroller dan clock pada mikrokontroller

Pada percobaan ini menggunakan Chip tipe Atmega2560 dengan


kristal/pewaktu dengan frekuensi 11,0592 MHz.
4. Atur konfigurasi komunikasi serial (USART0 )untuk tampilan pada
computer, lalu klik Program > Generate, Save and Ex

Gambar 3.3 Penggunaan USART0

5. Simpan data pada folder khusus dalam bentuk Compiler Files, Project
Files dan CodeWizard Project Files dengan nama yang sama.
6. Untuk menjalankan program yang telah disimpan sebelumnya, Klik
File>Open, dan pilih file percobaan 1.c. Amati fungsi DDR A, PORT A
dan MCUCR.
7. Untuk memprogram Mikrokontroler, hubungkan programmer atau USB
programmer, lalu Build Project (Shift+F9) atau Build All (Ctrl+F9) hingga
tidak ada Error.
8. Buka aplikasi chipGUI pada computer, lalu select hexafile sesuai file yg
telah disimpan tadi.

9. Connect program dengan mikrokontroller, lalu flash program dan start


aplikasi. Maka program yang dibuat telah dijalankan.
10. Amati LED yang ada di modul.
3.4.2

Port/Pin sebagai Input dan Output

1. Jalankan aplikasi CVAVR dan pilih File > NEW (Ctrl+N).


2. Pilih Project lalu OK dan YES untuk menggunakan
CodeWizzardAVR.

Gambar 3.4 Pembuatan proyek pada cvavr

3. Memilih mikrokontroler yang akan digunakan.

Gambar 3.5 Pemilihan tipe mikrokontroller

4.

Memilih chip mikrokontroller dan clock pada mikrokontroller

Gambar 3.6 Pemilihan chip mikrokontroller dan clock pada mikrokontroller

Pada percobaan ini menggunakan Chip tipe Atmega2560 dengan


kristal/pewaktu dengan frekuensi 11,0592 MHz.
5. Atur konfigurasi komunikasi serial (USART0 )untuk tampilan pada
computer, lalu klik Program > Generate, Save and Ex

Gambar 3.7 Penggunaan USART0

6. Simpan data pada folder khusus dalam bentuk Compiler Files, Project
Files dan CodeWizard Project Files dengan nama yang sama.
7. Untuk memprogram Mikrokontroler, hubungkan programmer atau USB
programmer, lalu Build All (Ctrl+F9) hingga tidak ada Error.
8. Buka aplikasi CHIP45BOOT2 GUI pada computer, lalu select hexafile
sesuai file yg telah disimpan tadi.
9. Connect program dengan mikrokontroller, lalu flash program dan start
aplikasi. Maka program yang dibuat telah dijalankan.
10. Amati toggle dan LED yang ada di modul.
3.4.3

Operasi Bit

1. Jalankan aplikasi CVAVR dan pilih File > NEW (Ctrl+N).


2. Pilih Project lalu OK dan YES untuk menggunakan
CodeWizzardAVR.

Gambar 3.8 Pembuatan proyek pada cvavr

3. Memilih mikrokontroler yang akan digunakan.

Gambar 3.9 Pemilihan tipe mikrokontroller

4.

Memilih chip mikrokontroller dan clock pada mikrokontroller

Gambar 3.10 Pemilihan chip mikrokontroller dan clock pada mikrokontroller

Pada percobaan ini menggunakan Chip tipe Atmega2560 dengan


kristal/pewaktu dengan frekuensi 11,0592 MHz.
5. Atur konfigurasi komunikasi serial (USART0 )untuk tampilan pada
computer, lalu klik Program > Generate, Save and Ex

Gambar 3.11 Penggunaan USART0

6. Simpan data pada folder khusus dalam bentuk Compiler Files, Project
Files dan CodeWizard Project Files dengan nama yang sama.
7. Untuk memprogram Mikrokontroler, hubungkan programmer atau USB
programmer,nyalakan operasi bit, lalu Build Project (Shift+F9) atau Build
All (Ctrl+F9) hingga tidak ada Error.
8. Buka aplikasi CHIP45BOOT2 GUI pada computer, lalu select hexafile
sesuai file yg telah disimpan tadi.
9. Connect program dengan mikrokontroller, lalu flash program dan start
aplikasi. Maka program yang dibuat telah dijalankan.
10. Amati LED yang ada di modul.
11. Ulangi langkah berapa ke 7-11 untuk percobaan geser kiri dan geser
kanan.

3.4.4

Operasi Byte

1. Jalankan aplikasi CVAVR dan pilih File > NEW (Ctrl+N).


2. Pilih Project lalu OK dan YES untuk menggunakan
CodeWizzardAVR.

Gambar 3.12 Pembuatan proyek pada cvavr

3. Memilih mikrokontroler yang akan digunakan.

Gambar 3.13 Pemilihan tipe mikrokontroller

4.

Memilih chip mikrokontroller dan clock pada mikrokontroller

Gambar 3.14 Pemilihan chip mikrokontroller dan clock pada mikrokontroller

Pada percobaan ini menggunakan Chip tipe Atmega2560 dengan


kristal/pewaktu dengan frekuensi 11,0592 MHz.
5. Atur konfigurasi komunikasi serial (USART0 )untuk tampilan pada
computer, lalu klik Program > Generate, Save and Ex

Gambar 3.15 Penggunaan USART0

6. Simpan data pada folder khusus dalam bentuk Compiler Files, Project
Files dan CodeWizard Project Files dengan nama yang sama.
7. Untuk memprogram Mikrokontroler, hubungkan programmer atau USB
programmer, lalu nyalakan fungsi NOT, kemudian Build Project
(Shift+F9) atau Build All (Ctrl+F9) hingga tidak ada Error.
8. Buka aplikasi CHIP45BOOT2 GUI pada computer, lalu select hexafile
sesuai file yg telah disimpan tadi.
9. Connect program dengan mikrokontroller, lalu flash program dan start
aplikasi. Maka program yang dibuat telah dijalankan.
10. Amati toggle dan LED yang ada di modul.
11. Ulangi langkah 8-11 dengan variasi fungsi OR, AND dan XOR.
12. Untuk operasi byte amati pada fungsi PORT A.

3.5

Data Percobaan

3.5.1

Register DDRx, PORTx, dan Internal Pull-Up


Tabel 3.8 Hasil Percobaan 1

Bit 7

Bit 6

Bit 5

Bit

Bit 3

Bit 2 Bit 1

4
DDRA
1
1
1
1
1
1
1
PORTA
1
1
1
0
0
0
0
LED
1
1
1
0
0
0
0
Keterangan : nilai 1 pada baris LED menandakan LED menyala
3.5.2

Bit 0
1
0
0

Port/Pin sebagai Input dan Output


Tabel 3.9 Hasil Percobaan 2-1

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


DDR A
1
1
1
1
1
1
1
1
PORT A
0
0
0
0
0
0
0
0
DDR B
0
0
0
0
0
0
0
0
PORT B
1
1
1
1
1
1
1
1
TOGGLE
0
0
0
0
LED
0
0
0
0
0
0
0
0
Keterangan : Saat toggle = 1, bernilai high.
Saat toggle = 0, bernilai low
Tabel 3.10 Hasil Percobaan 2-2 (toggle 6-7)

DDR A
PORT A
DDR B
PORT B
TOGGLE
LED

Bit 7
1
0
0
1
0
1

Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


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

Tabel 3.11 Hasil Percobaan 2-3

DDR A
PORT A
DDR B
PORT B
TOGGLE
LED

Bit 7
1
0
0
1
0
0

Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


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

Tabel 3.12 Hasil Percobaan 2-4

Bit 7
1
0
0
1
0
0

DDR A
PORT A
DDR B
PORT B
TOGGLE
LED

Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


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

Tabel 3.13 Hasil Percobaan 2-5

Bit 7
1
0
0
1
1
0

DDR A
PORT A
DDR B
PORT B
TOOGLE
LED

3.5.3

Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


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

Operasi Bit

Tabel 3.14 Hasil percobaan 3 geser ke pin tertentu

Bit 7

Bit 6

Bit 5

Bit 4

Bit 3

Bit 2

Bit 1

Bit 0

Bit 0

Bit 1 A

Bit 1 B
LED

0
0

0
0

1
1

0
0

0
0

0
0

0
1

0
0

Keterangan : nilai 1 pada baris LED menandakan LED menyala


Tabel 3.15 Hasil percobaan 3 geser kiri geser kanan

Geser

Iterasi
0

Bit 7
0

Bit 6
0

Bit 5
0

Bit 4
0

Bit 3
0

Bit 2
0

Bit 1
0

Bit 0
1

2
3

Kiri

4
5
6

01

10

00

00

00

00

00

00

Geser

Kanan

3.5.4

Operasi Byte

Tabel 3.16 Hasil percobaan 4

PORTA= 0xf0
PORTA= 0xff

Bit7
1
1

Bit 6 Bit 5 Bit 4 Bit 3 Bit2


1
1
1
0
0
1
1
1
1
1

Bit 1 Bit 0
0
0
1
1

Tabel 3.17 Hasil percobaan nilai byte pada operasi NOT

Bit PORT A
0
1
2
3

Toggle
0
0
0
0

LED
1
1
1
1

Tabel 3.18 Hasil percobaan nilai byte pada operasi OR

PIN B.4
0
0
1
1

PIN B.5
0
1
0
1

PORT A.7
0
1
1
1

PIN B.6
0
0
1
1

PIN B.7
0
1
0
1

PORT A.6
0
1
1
1

Tabel 3.19 Hasil percobaan nilai byte pada operasi AND

PIN B.4
0
0
1

PIN B.5
0
1
0

PORT A.7
0
0
0

PIN B.6
0
0
1

PIN B.7
0
1
0

PORT A.6
0
0
0

Tabel 3.20 Hasil percobaan nilai byte pada operasi XOR

PIN B.4
0
0
1
1

PIN B.5
0
1
0
1

PORT A.7
1
0
0
1

PIN B.6
0
0
1
1

PIN B.7
0
1
0
1

3.6

Analisa dan Pembahasan

3.6.1

Register DDRx, PORTx, dan Internal Pull-Up

3.6.1.1 Flowchart

start

Inisialisasi
Library <mega2560.h>
Library <stdio.h>

PORT A: 0b11100000
DDRA: 0xFF

end

PORT A.6
1
0
0
1

Gambar 3.16 Flowchart percobaan 1

3.6.1.2 Penjelasan Listing Program


#include <mega2560.h>

// menyertakan library mega 2560.h

#include <stdio.h>

// menyertakan library stdio.h

void main(void)

// adalah fungsi program utama sekaligus

berisi inisialisasi mikrokontroller


{
PORTA = 0b1110000; // keluaran data 0b11100000 ke PORT A
DDRA = 0xFF;// nibble atas PORT A sebagai input dan nibble bawah
sebagai output
}

3.6.1.3 Pengaruh Register terhadap Kondisi LED


Saat port A bernilai 0b11100000, DDR A = 0xFF maka keluaran LED akan
seperti di bawah ini.
Tabel 3.21 Data Percobaan 1

Bit 7 Bit 6 Bit 5 Bit 4


Bit 3
Bit 2
Bit 1 Bit 0
DDRA
1
1
1
1
1
1
1
1
PORTA
1
1
1
0
0
0
0
0
LED
1
1
1
0
0
0
0
0
Dari tabel hasil percobaan di atas diketahui bahwa LED pada bit 0 sampai
4 tidak menyala. Ini disebabkan karena pada PORT A bit 0 sampai bit 4 diset ke 0
atau bernilai LOW. Sedangkan LED bit 5 sampai 7 menyala karena pada PORT A
bit 5 sampai 7 diset ke 1 alias HIGH.
3.6.2

Port/Pin sebagai Input dan Output

3.6.2.1 Flowchart
Start

Inisialisasi
library
<mega2560h>
library <stdio h>
PORT A = 0x00
DDR A = 0X0F

PORT B = 0Xf
DDR B = 0x00
PORTA.7=PIN
B.4;
PORTA.6=PIN
B.5;
PORTA.5=PIN
B.6;

End
Gambar 3.17 Flowchart Percobaan 2

3.6.2.2 Penjelasan Listing Program


#include <mega2560.h>

// menyertakan library Mega 2560.h

#include <stdio.h>

// menyertakan library stdio.h

void main(void)

// adalah fungsi program utama sekaligus

{
PORTA = 0x00;

// keluaran data 0 x 00 ke port A

DDRA = 0xFF;

// data direction register (DDR) A

diberikan nilai 0xFF


PORTB = 0xFF;

// keluaran data 0 x FF ke PORT B

DDRB = 0x00;

// DDR B diberikan nilai 0x00

while(1)
{
PORTA.7=PINB.4;

//PORT A.7 disamadengankan PORTB.4= ketika

ada penekanan toggle PIN 4 maka PORT A, PIN 4 akan menjadi high
PORTA.6=PINB.5;

//PORT A.6 disamadengankan PORTB.5= ketika

ada penekanan toggle PIN 1 maka PORT A, PIN 5 akan menjadi high
PORTA.5=PINB.6;

//PORT A.5 disamadengankan PORTB.6= ketika

ada penekanan toggle PIN 2 maka PORT A, PIN 6 akan menjadi high
PORTA.4=PINB.7;

//PORT A.4 disamadengankan PORTB.7= ketika

ada penekanan toggle PIN 3 maka PORT A, PIN 7 akan menjadi high
}
}

3.6.2.3 Hubungan Toggle Button dengan LED

Saat program di atas telah didownload ke mikrokontroller maka ketika


toggle button dalam posisi 1 (high) akan membuat LED menyala. Ini dikarenakan
ada state program
While (1)
{
PORTA.7=PINB.4;
PORTA.6=PINB.5;
PORTA.5=PINB.6;
PORTA.4=PINB.7;
}
Dari penggalan di atas dapat dijelaskan bahwa saat toggle button (PIN B)
pada posisi 1 (high) maka PORT A juga 1 (high)
Contoh :
Saat toggle button 1 (PIN B.4) ada di posisi high maka PORT A.7 bernilai
high dan membuat LED menyala. Begitu juga sebaliknya ketika toggle button 0
(PIN B.4) ada di posisi 0 (low) maka PORT A.7 bernilai 0 (low)

juga

akan

menyebabkan LED padam.


3.6.2.4 Konfigurasi LED dan Pengaruhnya
Pada percobaan di atas digunakan konfigurasi LED common cathoda
(CC). Konfigurasi LED common cathoda dapat dilihat seperti gambar dibawah
ini.

Gambar 3.18 a. Konfigurasi LED common cathoda (CC)

Bila mikrokontroler mengeluarkan output high (1) maka LED akan


menyala pada rangkaian common cathoda. Pada fungsi ini mikrokontroler

berguna

sebagai

sourcing

(sumber

tenaga)

yaitu

mengaliri

arus

dari

mikrokontroller melalui LED dan menuju ke GND. Sedangkan pada konfigurasi


common anoda mikrokontroler akan menyalakan LED jika keluarannya 0 (low)
karena disini mikrokontroler berfungsi sebagai sinking. Yaitu menyerap arus dari
Vcc menuju ke mikrokontroller yang menyalakan LED tersebut.

3.6.3

Operasi Bit

3.6.3.1 Flowchart Operasi Bit


Start

inisialisai
#include<mega2560.h>
#include<stdio.h>
#include<delay.h>

PORTA=(1<<1)|(1<<5); delay_ms(250);
for(x=0;x<8;x++){PORTA=1<<x;delay_ms(1000);
for(x=0;x<8;x++)
{PORTA=0b10000000>>x;delay_ms(50);}
Pemanggilanfungsi
operasi_bit( );
geser_kiri( );
geser_kanan( );
END

Gambar 3.19 Flowchart percobaan 3 : Operasi bit

Flowchart Fungsi operasi_bit ( )


start

PORTA=(1<<1)|(1<<5)

delay_ms (250)
return
Gambar 3.20 Flowchart fungsi operasi_bit ( )

Flowchart Fungsi Geser_kiri( )


start

for(x=0;x<8;x++){PORTA=1<<x
delay_ms (1000)

return

Gambar 3.21 Flowchart fungsi geser_kiri ( )

Flowchart Fungsi Geser_kanan ( )

start

for(x=0;x<8;x++)
{
PORTA=0b10000000>>x;
delay_ms (50)
}

return
Gambar 3.22 Flowchart fungsi geser_kanan ( )

3.6.3.2 Penjelasan Listing Program


#include <mega2560.h>

//menyertakan library mega 2560

#include <stdio.h>

//menyertakan library stdio

#include <delay.h>

//menyertakan library delay

int x;

//menyertakan

bahwa

variable

sebagai

integer
void operasi_bit()

//Fungsi oprasi_bit

{
PORTA=(1<<1)|(1<<5);

// logika 1 bergeser 1 ditambah logika 1

bergeser 5 pada port A


delay_ms(250);

// menunda dalam waktu 250ms

}
void geser_kiri()

// fungi geser_kiri

{
for(x=0;x<8;x++)

//

fungsi

perulangan

yang

berarti

saat

nilai x=0 maka bit 0 akan bernilai 1 dan akan terus bertambah
sampai x < 8.
{PORTA=1<<x;

//PORT

bernilai

bergeser

ke

kiri

berarti

saat

sesuai dengan perubahan x


delay_ms(1000);}

// menunda dalam waktu 1000ms

}
void geser_kanan()

// fungsi geser_kanan

{
for(x=0;x<8;x++)

//

fungsi

perulangan

yang

nilai x=0 maka bit 0 akan bernilai 1 dan akan terus bertambah
sampai x < 8.
{PORTA=0b10000000>>x;

// PORT A menentukan nilai bit dari bit

ke-7 bergeser ke kanan sesuai dengan nilai perubahan x.


delay_ms(50);}

//menunda dalam waktu 50ms

3.6.3.3 Analisa Tiap Fungsi terhadap Keluaran

Fungsi Operasi_bit ( )
Fungsi Oprasi_bit ( ) ini digunakan untuk menyalakan LED pada
port A dengan bit 1 dan bit 5 menyala lainnya padam. Hal ini dikarenakan
ada statement:
PORTA=(1<<1)|(1<<5)

Instruksi tersebut untuk menggeser nilai 1 (high) ke bit 1 dan nilai


1 ke bit 5 sehingga hasilnya:
Tabel 3.22 Hasil percobaan nilai byte pada operasi_bit ()

LED
Kondis

Bit 7
0

Bit 6
0

Bit 5
1

Bit 4
0

Bit 3 Bit 2 Bit 1


0
0
1

Bit 0
0

Fungsi geser _kiri ( )


Fungsi geser_kiri ( ) ini hanya mengatur nyala LED (high) dari
kanan ke kiri dengan delay 1 detik. Hal ini dikarenakan adanya statement:
for(x=0;x<8;x++){PORTA=1<<x
Statement tersebut menggunakan fungsi perulangan yang berarti
saat nilai x=0 maka bit 0 akan bernilai 1 dan akan terus bertambah sampai
x < 8. PORT A bernilai 1 bergeser ke kiri sesuai dengan perubahan x.
PORTA=1<<x = geser kiri
Delay_ms (1000)
Lalu karena 2 instruksi diatas nilai pada LED dari bit ke 1 sampai
bit ke 7 dengan delay 1 sekon.
Dikarenakan pada program utama variable kiri diberikan perintah
for(x=0;x<8;x++){PORTA=1<<x, maka untuk jelasnya:

Tabel 3.23 Hasil percobaan nilai bit pada geser_kiri ()

LED

Bit

Bit

Bit

Bit

Bit

Bit

Bit

Bit

Kondisi awal
Iterasi 2
Iterasi 3
Iterasi 8

7
0
0
0
1

6
0
0
0
0

5
0
0
0
0

4
0
0
0
0

3
0
0
0
0

2
0
0
1
0

1
0
1
0
0

0
1
0
0
0

Sesudah iterasi ke 8, maka LED yang menyala akan seperti kondisi

awal dan seterusnya


Fungsi Geser_kanan ( )

Fungsi geser_kanan ( ) hanya menggeser nyala LED (high) dari


kiri ke kanan dengan delay 50 ms. Hal ini dikarenakan adanya statement
for(x=0;x<8;x++){PORTA=0b10000000>>x
Statement tersebut berarti saat nilai x=0 maka bit 0 akan bernilai 1
dan akan terus bertambah sampai x < 8. PORT A menentukan nilai bit dari
bit ke-7 bergeser ke kanan sesuai dengan nilai perubahan x.
PORTA=0b10000000>>x= kanan
Delay_ms (50)
Lalu karena 2 instruksi diatas maka nilai pada variable kanan
dikeluarkan ke PORTA dengan tunda 50 milisekon.
Dikarenakan pada program utama nilai variable kanan adalah
0b10000000, maka untuk lebih jelasnya:
Tabel 3.24 Hasil percobaan nilai bit pada geser_kanan ()

LED

Bit

Bit

Bit

Bit

Bit

Bit

Bit

Bit

Kondisi awal
Iterasi 2
Iterasi 3
Iterasi 8

7
1
0
0
0

6
0
1
0
0

5
0
0
1
0

4
0
0
0
0

3
0
0
0
0

2
0
0
0
0

1
0
0
0
0

0
0
0
0
1

Sesudah iterasi ke 8 maka LED yang menyala akan seperti kondisi


awal dan seterusnya.

3.6.4

Operasi Byte

3.6.4.1 Flowchart Program Utama


start

Inisialisasi
#include <mega2560.h>
#include <delay.h>
#include <stdio.h>

PemanggilanFungsi
gerbang_not ()
gerbang_or ()
gerbang_and()
gerbang_xor ()
delay_ms (500)

PORTA=0xf0;delay_ms(500);
PORTB=0xff; delay_ms(500);
PORTA.7=~PINB.4; PORTA.6=~PINB.5;
PORTA.5=~PINB.6;PORTA.4=~PINB.7;
PORTA.7=PINB.4|PINB.5;PORTA.6=PINB.6|PINB.7;
PORTA.7=PINB.4&PINB.5;PORTA.6=PINB.6&PINB.7;
PORTA.7=PINB.4^PINB.5;PORTA.6=PINB.6^PINB.7;

start
Gambar 3.23 Flowchart fungsi operasi byte

Flowchart Fungsi gerbang_not ()


start

PORTA.7=~PINB.4;
PORTA.6=~PINB.5;
PORTA.5=~PINB.6;
PORTA.4=~PINB.7;

return

Gambar 3.24 Flowchart Fungsi gerbang_not ()

Flowchart Fungsi gerbang_or ()


start

PORTA.7=PINB.4|PINB.5;
PORTA.6=PINB.6|PINB.7;

return
Gambar 3.25 Flowchart Fungsi gerbang_or ()

Flowchart Fungsi gerbang_and ()


start

PORTA.7=PINB.4&PINB.5;
PORTA.6=PINB.6&PINB.7;

return

Gambar 3.26 Flowchart Fungsi gerbang_and ()

Flowchart Fungsi gerbang_xor ()


start

PORTA.7=PINB.4^PINB.5;
PORTA.6=PINB.6^PINB.7;

return

Gambar 3.27 Flowchart Fungsi gerbang_xor ()

3.6.4.2 Penjelasan Listing Program


#include<mega2560.h>

//menyertakan library mega 2560.

#include<stdio.h> //menyertakan library stdio.


#include<delay.h> // tambahkan library delay.
Void gerbang_not()

//fungsi operasi not.

{
PORTA.7=~PINB.4;

// output pada port A.7 merupakan kebalikan dari

pin B.4
PORTA.6=~PINB.5;

//output pada port A.6 merupakan kebalikan dari

pin B.5
PORTA.5=~PINB.6;

//output pada port A.5 merupakan kebalikan dari

pin B.6
PORTA.4=~PINB.7;

//output pada port A.4 merupakan kebalikan dari

pin B.7
}
Void gerbang_or()

//fungsi Operasi_OR.

{
PORTA.7=PINB.4|PINB.5;

//output

pada

port

A.7

merupakan

pada

port

A.6

merupakan

penjumlahan dari pin B.4 dan pin B.5


PORTA.6=PINB.6|PINB.7;

//output

penjumlahan dari pin B.6 dan pin B.7


}
Void gerbang_and()
{

//fungsi Operasi_AND.

PORTA.7=PINB.4&PINB.5; //output pada port A.7 merupakan perkalian


dari pin B.4 dan pin B.5
PORTA.6=PINB.6&PINB.7; //output pada port A.6 merupakan perkalian
dari pin B.6 dan pin B.7
}
Void gerbang_xor() //Fungsi Operasi_XOR.
{
PORTA.7=PINB.4^PINB.5;//

output

pada

port

A.7

dihasilkan

dari

nilai yang berbeda antara pin B.4 dan pin B.5


PORTA.6=PINB.6^PINB.7;//output pada port A.6 dihasilkan dari nilai
yang berbeda antara pin B.6 dan pin B.7
}
void main(void)

//fungsi program utama.

{
{
while(1)

//melakukan looping

{
gerbang_not();

//memanggil fungsi Operasi_not.

gerbang_or();

//memanggil fungsi Operasi_OR

gerbang_and();

//memanggil fungsi Operasi_AND.

gerbang_xor();

//memanggil fungsi Operasi_XOR.

//end for while

// end for void main

3.6.4.3 Analisa Tiap Fungsi terhadap Keluaran

Fungsi gerbang_not ( )
Ketika kita memanggil fungsi

gerbang_not ( ) output PORTA

untuk bit 4, bit 5 , bit 6, bit 7, akan berkebalikan dari input Pin 7, pin 6,
pin 5, pin 4. Hal ini dikarenakan :
PORTA.7=~PINB.4;
PORTA.6=~PINB.5;
PORTA.5=~PINB.6;
PORTA.4=~PINB.7;
Sebagai contoh pin_1 berada pada posisi 1 (high), maka output
akan berlogika 0 (low) atau LED padam, begitu juga sebaliknya.
)

Tabel 3.25 Fungsi gerbang_not (

Bit
0

Toggle
0

LED
1

Fungsi gerbang_or ( )
Ketika kita memanggil fungsi gerbang_or ( ) output PORT A akan
berlogika high (1) ketika salah satu input toggle bernilai 1. Hal ini
disebabkan oleh:
PORTA.7=PINB.4|PINB.5;
PORTA.6=PINB.6|PINB.7;
Dapat di lihat pada tabel di bawah ini :
Tabel 3.26 Fungsi gerbang_or

()

PIN B.4

PIN B.5

PORT A.7

PIN B.6

PIN B.7

0
0
1
1

0
1
0
1

0
1
1
1

0
0
1
1

0
1
0
1

PORT
A.6
0
1
1
1

Berikut tabel kebenaran gerbang OR


Tabel 3.27 Fungsi gerbang_or ( )
X
0
0
1
1

Y
XY
0
0
1
1
0
1
1
1
Dari kedua tabel diatas dapat dilihat bahwa percobaan sudah sesuai

dengan tabel kebenaran.


Fungsi gerbang_and()
Ketika kita memanggil fungsi gerbang_and() output PORT A akan
high apabila kedua inputannya berlogika high. Hal ini disebabkan:
PORTA.7=PINB.4&PINB.5;
PORTA.6=PINB.6&PINB.7
Sesuai pada tabel di bawah ini :
Tabel 3.28 Fungsi gerbang_and()
PIN B.4

PIN B.5

PORT A.7

PIN B.6

PIN B.7

0
0
1
1

0
1
0
1

0
0
0
1

0
0
1
1

0
1
0
1

PORT
A.6
0
0
0
1

Berikut tabel kebenaran gerbang AND


Tabel 3.29 Tabel Kebenaran Gerbang AND

X
0
0
1
1

Y
XY
0
0
1
0
0
0
1
1
Dari kedua tabel diatas dapat di simpulkan bahwa hasil pecobaan

sudah sesuai dengan tabel kebenaran.

Fungsi gerbang_xor ( )
Ketika kita memanggil fungsi gerbang_xor ( ) output akan high
apabila inputnya saling berbeda. Hal ini disebabkan oleh:
PORTA.7=PINB.4^PINB.5;
PORTA.6=PINB.6^PINB.7;
Untuk lebih jelasnya dapat dilihat juga pada tabel berikut:
Tabel 3.30 Fungsi gerbang_xor ( )
PIN B.4

PIN B.5

PORT A.7

PIN B.6

PIN B.7

PORT

0
0
1
1

0
1
0
1

1
0
0
1

0
0
1
1

0
1
0
1

A.6
1
0
0
1

Berikut tabel kebenaran pada gerbang XOR


Tabel 3.31 Tabel Kebenaran gerbang XOR

X
0
0
1
1

Y
0
1
0
1

XY
1
0
0
1

Dari kedua tabel diatas dapat di simpulkan bahwa hasil pecobaan sudah
sesuai dengan tabel kebenaran.

3.7

Kesimpulan
1. Pada percobaan 1, dapat diketahui bahwa LED pada bit 0 sampai 4 tidak
menyala. Ini disebabkan karena pada PORT A bit 0 sampai bit 4 diset ke 0
atau bernilai LOW. Sedangkan LED bit 5 sampai 7 menyala karena pada
PORT A bit 5 sampai 7 diset ke 1 alias HIGH.
2. Pada percobaan 2, saat toggle button 1 (PIN B.4) ada di posisi high maka
PORT A.7 bernilai high dan membuat LED menyala. Begitu juga
sebaliknya ketika toggle button 0 (PIN B.4) ada di posisi 0 (low) maka
PORT A.7 bernilai 0 (low) juga akan menyebabkan LED padam.

3. Pada percobaan 3 , fungsi Operasi_bit ( ) digunakan untuk menyalakan


LED pada port A dengan bit 1 dan bit 5 menyala lainnya padam. Hal ini
dikarenakan ada statement PORTA=(1<<1)|(1<<5) . Instruksi tersebut
untuk menggeser nilai 1 (high) ke bit 1 dan nilai 1 ke bit 5
4. Pada percobaan 3 , fungsi geser_kiri ( ) ini hanya mengatur nyala LED
(high) dari kanan ke kiri. Hal ini dikarenakan adanya statement
for(x=0;x<8;x++){PORTA=1<<x. Statement tersebut menggunakan fungsi
perulangan yang berarti saat nilai x=0 maka bit 0 akan bernilai 1 dan akan
terus bertambah sampai x < 8. PORT A bernilai 1 bergeser ke kiri sesuai
dengan perubahan x.
5. Pada percobaan 3, fungsi geser_kanan ( ) hanya menggeser nyala LED
(high) dari kiri ke kanan.

Hal ini dikarenakan adanya statement

for(x=0;x<8;x++){PORTA=0b10000000>>x. Statement tersebut berarti


saat nilai x=0 maka bit 0 akan bernilai 1 dan akan terus bertambah sampai
x < 8. PORT A menentukan nilai bit dari bit ke-7 bergeser ke kanan sesuai
dengan nilai perubahan x.
6. Pada percobaan 4, ketika kita memanggil fungsi gerbang_or ( ) output
PORT A akan berlogika high (1) ketika salah satu input toggle bernilai 1.
Hal ini disebabkan oleh:
PORTA.7=PINB.4|PINB.5;
PORTA.6=PINB.6|PINB.7;
7. DDRx digunakan untuk mendefinisikan port sebagai input atau output,
Jika level

logika pada register DDR bernilai 1 maka Port tersebut

dikonfigurasikan sebagai Output


8. Operator dapat diklasifikasikan menjadi 2 bentuk, yaitu unary operator
dan binary operator. Unary operator adalah operator yang hanya
melibatkan 1 operan.
9. Conditional operator (operator konditional) adalah operator yang dipakai
untuk operasi kondisi (persyaratan), sama sebagaimana if-then-else dan
hanya berlaku untuk pernyataan tunggal.
10. PINx digunakan untuk mengambil/membaca data dari port mikrokontroler,
saat dikonfigurasikan sebagai input. Contoh: PortB=0xCC //jika ditulis
salam

hexa

DDRB=0x0F

DDRB=0b00001111

//jika

ditulis

salam

biner

maka

Anda mungkin juga menyukai