Anda di halaman 1dari 14

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 1

MODUL 01 I/O DASAR


Aji Suryo Wibowo (13211059)
Asisten: Eki Dwi Wijanarko/13210146
Tanggal Percobaan: 18 Februari 2014
EL3214 Praktikum Sistem Mikroprosesor
Laboratorium Dasar Teknik Elektro - Sekolah Teknik Elektro dan Informatika ITB

Abstrak

Pada modul ini, dilakukan percobaan untuk mengakses
input dan output pada sistem minimun ATMega 8535.
Percobaan pertama adalah untuk mengakses port output
yaitu PORTA yang direpresentasikan dalam LED pada
DT-51. Percobaan kedua adalah mengakses fasilitas delay
pada AVR. Kemudian, percobaan terakhir adalah
mengombinasikan PORTA sebagai output dan PORTD
sebagai input.
Kata kunci: Input, Output, Delay, ATMega8535.
1. PENDAHULUAN
ATMega merupakan sistem minimum yang sering
digunakan sebagai prosesor sebuah sistem
sederhana. Dalam hal ini, sistem minimum
ATMega, khususnya ATMega 8535 digunakan
sebagai kit praktikum, sehingga diharapkan
setelah melakukan percobaan, mahasiswa dapat:
a. memahami datasheet ATMega 8535
b. membuat aplikasi input dan output pada
AVR dengan bahasa pemrograman C pada
WinAVR
c. memahami pengesetan fuse yang berkaitan
dengan penggunaan besar dan jenis kristal
2. STUDI PUSTAKA
2.1 ATMEGA 8535, [3]

Gambar 1.1 ATMega 8535, [4]
ATMega 8535 merupakan salah satu mikro
kontroler 8 bit buatan Atmel untuk keluarga AVR
yang diproduksi secara massal pada tahun 2006.
Karena merupakan keluarga AVR, maka ATMega
8535 juga menggunakan arsitektur RISC.
Secara singkat, ATMega 8535 memiliki beberapa
kemampuan:
a. Sistem mikrokontroler 8 bit berbasis RISC
dengan kecepatan maksimal 16 MHz.
b. Memiliki memori flash 8 KB, SRAM sebesar
512 byte dan EEPROM (Electrically Erasable
Programmable Read Only Memory) sebesar
512 byte.
c. Memiliki ADC (pengubah analog-ke-digital)
internal dengan ketelitian 10 bit sebanyak 8
saluran.
d. Memiliki PWM (Pulse Width Modulation)
internal sebanyak 4 saluran.
e. Portal komunikasi serial (USART) dengan
kecepatan maksimal 2.5 Mbps.
f. Enam pilihan mode sleep, untuk menghemat
penggunaan daya listrik.
Mikrokontroler ATMega8535 memiliki 40 pin
untuk model PDIP, dan 44 pin untuk model TQFP
dan PLCC. Nama-nama pin pada mikrokontroler
ini adalah:
a. VCC untuk tegangan pencatu daya positif.
b. GND untuk tegangan pencatu daya negatif.
c. PortA (PA0 PA7) sebagai port
Input/Output dan memiliki kemampuan lain
yaitu sebagai input untuk ADC.
d. PortB (PB0 PB7) sebagai port Input/Output
dan juga memiliki kemampuan yang lain.
e. PortC (PC0 PC7) sebagai port Input/Output
untuk ATMega8535.
f. PortD (PD0 PD7) sebagai port
Input/Output dan juga memiliki
kemampuan yang lain.
g. RESET untuk melakukan reset program
dalam mikro kontroler.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 2


h. XTAL1 dan XTAL2 untuk input pembangkit
sinyal clock.
i. AVCC untuk pin masukan tegangan pencatu
daya untuk ADC.
j. AREF untuk pin tegangan referensi ADC.
Untuk melakukan pemrograman dalam mikro
kontroler AVR, Atmel telah menyediakan
software khusus yang dapat diunduh dari website
resmi Atmel. Software tersebut adalah AVRStudio.
Software ini menggunakan bahasa assembly
sebagai bahasa perantaranya. Selain AVRStudio,
ada beberapa software pihak ketiga yang dapat
digunakan untuk membuat program pada AVR.
Software dari pihak ketiga ini menggunakan
bahasa pemrograman tingkat tinggi seperti bahasa
C, Java, atau Basic. Untuk melakukan pemindahan
dari komputer ke dalam chip, dapat digunakan
beberapa cara seperti menggunakan kabel JTAG
atau menggunakan STNK buatan Atmel.
3. METODOLOGI
3.1 ALAT DAN KOMPONEN YANG DIGUNAKAN
a. Sistem Minimum ATMega 8535 (1 buah)
b. DT-51 Trainer Board (1 buah)
c. Power Supply (1 buah)
d. Komputer Terinstal WinAVR (1 buah)
3.2 LANGKAH-LANGKAH PERCOBAAN
a. Diagram 1.1 PORTA sebagai Output


b. Diagram 1.2 Fasilitas Delay pada AVR
1
Power supply diset
pada 9 V kemudian
dihubungkan pada kit
praktikum.
Kabel downloader
dihubungkan dari PC
ke sismin ATMega.
2
Dari PORTA pada
sismin, dihubungkan
kabel output ke port
output pada DT-51.
Kodingan ditulis,
kemudian didownload
ke dalam sismin.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 3




c. Diagram 1.3 PORTA sebagai Output dan
PORTD sebagai Input


4. HASIL DAN ANALISIS
4.1 PORTA sebagai Output

Gambar 1.2 Output Percobaan 1A1


Gambar 1.3 Output Percobaan 1A2

1
Power supply diset
pada 9 V kemudian
dihubungkan pada kit
praktikum.
Kabel downloader
dihubungkan dari PC
ke sismin ATMega.
2
Dari PORTA pada
sismin, dihubungkan
kabel output ke port
output pada DT-51.
Kodingan ditulis,
kemudian didownload
ke dalam sismin.
1
Power supply diset
pada 9 V kemudian
dihubungkan pada kit
praktikum.
Kabel downloader
dihubungkan dari PC
ke sismin ATMega.
2
Dari PORTA pada
sismin, dihubungkan
kabel output ke port
output pada DT-51.
Dari PORTD pada
sismin, dihubungkan
kabel ke port input
pada DT-51
Kodingan ditulis,
kemudian didownload
ke dalam sismin.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 4



Flowchart 1.1 Percobaan 1A1 dan 1A2
Analisis:
Dapat dilihat bahwa LED yang menyala
berselang-seling, mulai dari LED pada bit ke-0, ke-
2, ke-4, dan ke-6 (hanya bit yang bernilai genap).
Hal ini sesuai dengan nilai yang diassign ke dalam
PORTA yang mana hanya PAx yang mana x yang
bernilai genap yang diberi nilai 1 yang artinya
aktif (high). Dapat dilihat pula bbbahhhwa nilai
DDRA diset pada nilai 0b11111111 atau 0xFF yang
artinya semua PORTA baik dari bit ke-0 sampai
bit ke-7 diset dalam mode output.
Kemudian, dengan cara yang hampir sama, pada
PORTA diassign nilai 1 untuk PA4, PA2, PA1, dan
PA0 yang berarti nilai PORTA diassign
0b00010111 atau sama dengan nilai 23 dalam basis
desimal yang merupakan kelompok kami. Hal
tersebut bisa dilihat dari LED yang menyala.
4.2 Fasilitas Delay pada AVR

Gambar 1.4 Output Percobaan 1B1


Gambar 1.5 Output Percobaan 1B2

Pre-processing
Main Program
Set DDRA to
0xFF (PORTA
as Output)
Set PORTA to
0b01010101
(1A1) or
0b00010111
(1A2)
LED Formation
as Gambar 1.2
(1A1) or
Gambar 1.3
(1A2)
5
0
0

m
s
5
0
0

m
s
.

.

.
5
0
0

m
s
5
0
0

m
s
.

.

.

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 5



Flowchart 1.2 Percobaan 1B1 dan 1B2


Gambar 1.6 Output Percobaan 1B3

Pre-processing
Main Program
Set DDRA to
0xFF (PORTA
as output) and
set PORTA to
0xFF (initially
turns every
LED ON)
Loop
Set PORTA to
0b00110011
(as seen on
Gambar 1.4) for
1B1 or
0b00111010
(as seen on
Gambar 1.5) for
1B2
Insert 500 ms
delays
Set PORTA to
0b11001100
(as seen on
Gambar 1.4) for
1B1 or
0b00111011
(as seen on
Gambar 1.5) for
1B2
Insert 500 ms
delays
LED will do as seen on Gambar 1.4
.

.

.
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 6



Flowchart 1.3 Percobaan 1B3


Gambar 1.7 Output Percobaan 1B4

Pre-processing
Main Program
Make variable i
(unsigned char)
then set it to
0xFE
Re-set PORTA
to i
Insert 120 ms
delays
Set i to
(i << 1) | (i >> 7)
Set DDRA to
0xFF (PORTA
as output) and
set PORTA to i
(0xFE)
Loop
LED will do as seen on Gambar 1.6
.

.

.
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0
m
s
1
2
0

m
s

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 7



Flowchart 1.4 Percobaan 1B4
Analisis:
Dari library yang digunakan, terlihat bahwa
program menggunakan/mengakses library delay.
Selain itu, program juga menggunakan nilai clock
1 MHz. Terlihat pula bahwa PORTA dijadikan
sebagai output yang terlihat pada pengassignan
DDRA pada 0xFF. Kemudian pada body program,
terdapat tiga kali pengassignan nilai PORTA yang
mana untuk kedua pengassignan PORTA diikuti
dengan perintah,
_delay_ms(500);
Kodingan ini berarti bahwa untuk pengassignan
pertama PORTA, PORTA akan aktif semua (LED
menyala semua) sebelum memasuki loop.
Kemudian pada pengassignan PORTA yang
terdapat pada loop while(1) terdapat
pengesetan nilai delay yang sesuai dengan
perintah yang dituliskan sebelumnya. Delay yang
digunakan adalah 500 ms. Sehingga jika hasilnya
sesuai dengan kodingan, maka LED akan
berkedip dengan selang 500 ms yang mana LED
akan berkedip-kedip bergantian dari LED0, LED1,
LED4, dan LED5 menyala dan yang lain mati ke
LED2, LED3, LED6, dan LED7 menyala dan yang
lain mati. Kemudian, untuk perintah while(1)
merupakan perintah untuk melakukan loop tak-
hingga kali tanpa syarat tertentu untuk keluar dari
loop tersebut.
Untuk percobaan selanjutnya (1B2), dengan
penjelasan yang sama, diperoleh LED berkedip
dengan selang 500 ms yang mana LED akan
berkedip-kedip bergantian dari LED1, LED3,
LED4, dan LED5 menyala dan yang lain mati ke
LED0, LED1, LED3, LED4, dan LED5 menyala dan
yang lain mati. Nilai LED yang berkedip tersebut
merepresentasikan nilai biner dari tiga digit
terakhir NIM kami yaitu 05810 dan 05910.
Percobaan berikutnya (1B3) menggunakan clock 8
MHz. Nilai clock ini diperoleh dengan
menggunakan sumber clock eksternal yaitu kristal.
Pengaksesan sumber clock eksternal ini dilakukan
dengan mengetikkan perintah,
avrdude c ponyser p atmega8535 P com1 U
hfuse:w:0xD9:m U lfuse:w:0xEF:m
pada command prompt MS Windows sebelum
melakukan kodingan dan pendownloadan
kodingan ke sismin.
Pada percobaan ini, juga digunakan fasilitas delay
yang terlihat dari library yang digunakan
(#include <util/delay.h>). Terlihat dalam
body program bahwa sebelum program
memasuki loop, maka dibuat variabel unsigned
char i yang diassign nilai 0b11111110 atau 0xFE.
Setelah itu, PORTA diset sebagai output dengan
mengassign nilai 0xFF ke dalam DDRA.
Kemudian nilai i ini diassign ke dalam PORTA
yang artinya, LED akan menyala semua kecuali
LED0. Berikutnya, dalam body loop dengan loop
tak-hingga, dilakukan pengassignan PORTA
dengan i sekali lagi yang bertujuan agar nilai
PORTA selalu terisi dengan nilai i yang baru. Lalu,
digunakan delay sebesar 120 ms untuk setiap
perubahan nyala LED. Terakhir, diset nilai i
dengan perintah,
i=(i<<1)|(i>>7);
Perintah ini merupakan perilaku yang akan LED-
LED nanti tampilkan yang dideskripsikan sebagai
berikut.
Pertama, i diassign nilai 0xFE atau 0b11111110,
kemudian i ini akan memasuki loop yang diakhir
loop akan diupdate dengan nilai i yang baru yaitu,
Pre-processing
Main Program
Make variable i
(unsigned char)
then set it to
0xFE
Re-set PORTA
to i
Insert 120 ms
delays
Set i to
(i << 1) | (i >> 7)
Set DDRA to
0xFF (PORTA
as output) and
set PORTA to i
(0xFE)
Set integer
counter variable
k
Re-set PORTA
to i
Insert 120 ms
delays
Set i to
(i >> 1) | (i << 7)
First loop
Main Loop
First loop will do until k = 6 (from k = 0)
First loop breaks when k = 7 then enters second loop
Second loop
Second loop will do until k = 6 (from k = 0)
Second loop breaks when k = 7 then enters first loop

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 8



( )
( )
( )( )

dengan simbol | (or) merepresentasikan
penjumlahan dalam domain biner. Nilai i ini akan
selalu diupdate oleh loop yang jika diteruskan
maka nilai bit 0 dalam nilai i seolah-olah akan
berjalan ke kiri kemudian ketika nilai bit 0 ini
mencapai bit ke-7, maka otomatis bit 0 ini akan
memosisikan diri pada bit ke-0 yang kemudian
akan berjalan ke kiri lagi, demikian nilai i ini
dalam loop sehingga, LED (yang mati) akan
terlihat seolah-olah berjalan dari kiri ke kanan
kemudian langsung ke paling kiri setelah LED
yang mati ini mencapai paling kanan (terlihat
seperti memutar).
Percobaan terakhir dari bagian B ini (1B4) adalah
memodifikasi percobaan sebelumnya (1B3)
sehingga LED yang mati tadi akan melakukan
bouncing back setelah mencapai bagian paling
ujung (paling kiri atau paling kanan). Pada
percobaan ini, dalam loop utama terdapat 2 loop
lain yang mana untuk loop pertama menangani
kasus ketika LED mati berjalan dari paling kiri ke
paling kanan dan loop kedua menangani kasus
ketika LED mati berjalan dari paling kanan ke
paling kiri. Kedua loop ini menggunakan counter
integer k. Dari kombinasi kedua loop ini dalam
loop utama while(1) diperoleh perilaku LED
mati berjalan yang dimulai dari paling kiri (LED0)
ke paling kanan (LED7) kemudian bouncing back
ke kiri dari paling kanan (LED7) ke paling kiri
(LED0) kemudian bouncing back lagi ke kanan
dan begitu seterusnya. Berikut penjelasan untuk
loop kedua dalam loop utama,

( )
( )
( )( )

Nilai bit 1 merepresentasikan LED menyala,
sementara bit 0 merepresentasikan LED mati.
Sehingga seolah-olah LED mati terlihat berjalan.
4.3 PORTA sebagai Output dan PORTD sebagai
Input

Gambar 1.8 Output Percobaan 1C1



Gambar 1.9 Output Percobaan 1C2

LED
SWITCH
.

.

.
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
LED
SWITCH
.

.

.
5
0
0

m
s
5
0
0

m
s
SWITCH
LED
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
1
2
0

m
s
SWITCH
LED

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 9



Flowchart 1.5 Percobaan 1C1


Flowchart 1.6 Percobaan 1C2
Analisis:
Dari kodingan yang digunakan, terlihat bahwa
dalam body program, DDRA diset sebagai output
dengan mengassign nilai 0xFF sementara DDRD
diset sebagai input dengan mengassign nilai 0x00
sehingga PORTDn akan dijadikan sebagai pin
input. Kemudian, resistor pull-up diset aktif
dengan cara mengassign nilai SFIOR dengan
0<<PUD. Setelah itu, nilai PORTAx diassign
dengan bit 1 semua sehingga PORTA diassign
dengan 0xFF. Pada body program, digunakan
variabel i yang bertipe unsigned char sebagai
pengeset supaya output akan sesuai dengan input.
Pada body loop dapat dilihat bahwa nilai i
diassign dengan nilai PIND atau dengan kata lain,
i menyimpan nilai PIND yang kemudian nilai
PIND yang telah disimpan pada variabel i, oleh
variabel i nilai PIND ini diassign ke dalam PORTA
sehingga nilai PORTA nantinya akan sesuai
dengan nilai PIND sehingga apa yang ditampilkan
oleh LED akan sama dengan apa yang
dimasukkan oleh switch input yang mana jika
LED pada switch input menyala artinya switch
berada pada kondisi ON.
Percobaan selanjutnya (1C2), adalah memodifikasi
percoban sebelumnya (1C1) sehingga output akan
menghasilkan output dari percobaan 1B2 jika
input switch berada dalam keadaan NIM 05810
atau 0b00111010, menghasilkan output dari
percobaan 1B4 jika input switch berada dalam
keadaan 05910 atau 0b00111011, dan menghasilkan
output 1A2 untuk keadaan input selain keadaan di
atas.
Pre-processing
Main Program
Make variable i
(unsigned char)
as storage
variable
Set DDRA to
0xFF (PORTA
as output) and
set DDRD to
0x00 (PORTD
as input, PIND)
Activate pull-up
internal resistor
and set PORTA
to 0xFF
Main Loop
Read PIND
value then store
it to i
PORTA takes i
value to its
value
LEDn will light up for every active (ON) SWITCHn
as seen on Gambar 1.8
Pre-processing
Main Program
Make variable a
(unsigned char)
as storage
variable
Set DDRA to
0xFF (PORTA
as output) and
set DDRD to
0x00 (PORTD
as input, PIND)
Activate pull-up
internal resistor
and set PORTA
to 0xFF
Main Loop
Read PIND
value then store
it to a
Compare a to
the specified
value
a = 0b00111010 Condition B a = 0b00111011
Condition C
a is not equal
to 0b00111010
and
0b00111011
Do project 1A2
Do project 1B2 Do project 1B4
LED will do as seen on Gambar 1.5
LED will do as seen on Gambar 1.7
LED will do as seen on Gambar 1.3
Condition A

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 1
0


Dapat dilihat dari kodingan yang digunakan
bahwa dilakukan pengubahan pada body
program terutama pada body loop. Digunakan
variabel a sebagai penympan nilai dari PIND
untuk kemudian dibandingkan dengan nilai
seperti yang diminta spesifikasi. Untuk memenuhi
ketiga spesifikasi yang diminta, maka digunakan
pula perintah kondisional if yang mana jika nilai
variabel a (yang berisi PIND) sama dengan
0b00111010 (05810) maka output LED akan
bertingkah seperti percobaan 1B2 (berkedip
dengan representasi tiga digit terakhir NIM
anggota kelompok), sementara jika nilai variabel a
(yang berisi PIND) sama dengan 0b00111011
(05910) maka LED akan bertingkah seperti
percobaan 1B4 (berjalan dengan mode bouncing
back di setiap ujung), dan jika nilai variabel a
tidak sama dengan kondisi tersebut di atas, maka
LED akan bertingkah seperti percobaan 1A2
(menyala dengan representasi nomor kelompok).
Nilai PIND (8 bit biner) merupakan representasi
dari input switch yang mana jika switch tertentu
aktif (ON, yang mana terlihat dari LED pada
switch menyala) maka bit yang mewakili switch
tersebut bernilai 1. Contohnya, jika SW0, SW1,
SW3, SW4, dan SW5 ON, maka nilai PIND adalah
0b00111011 yang artinya keadaan ini memasuki
kondisi 2. Nilai PIND ini kemudian akan
disimpan dalam variabel a untuk kemudian nilai
variabel a ini akan dibandingkan dalam body loop
sehingga diperoleh kondisi 2 dalam spesifikasi.
Output yang diperoleh dari kondisi ini adalah
sama dengan output yang diperoleh pada
percobaan 1B4 (LED mati berjalan dari kiri ke
kanan kemudian saat mencapai ujung bouncing
back dan berjalan ke arah sebaliknya).
5. KESIMPULAN
Dari percobaan dapat disimpulkan bahwa:
a. Untuk mengetahui apa saja yang terdapat
dan disediakan oleh ATMega 8535,
digunakan datasheet dari ATMega 8535,
termasuk di dalamnya tentang PORT, PIN,
clock, dan register.
b. Output pada ATMega 8535 dapat diset
dengan cara mengeset nilai register yang
berkaitan dengan output tersebut dengan
nilai hex 0xFF. Contohnya adalah ketika
PORTA ingin diset sebagai output, maka
pada program berbahasa C yang ditulis,
dalam body program ditulis DDRA = 0xFF.
Setelah PORTA diset sebagai output, dengan
mengeset nilai PORTAn dengan 1, maka
didapat nilai PORTA pada bit ke-n bernilai
high, begitupun sebaliknya, jika PORTAn
diset dengan nilai 0, maka PORTA pada bit
ke-n (PORTA ke-n bernilai low).
Untuk mengeset PORTx sebagai input, maka
nilai DDRx harus diset dengan 0, sebagai
contoh saat ingin mengeset PORTD sebagai
input, maka DDRD diset dengan nilai hex
0x00 dengan cara menuliskan pada body
program DDRD = 0x00. Jika nilai DDRxn
diset pada nilai 0 (atau PORTxn diset sebagai
pin input) dan nilai PORTxn diset pada nilai
0, maka akan memasuki keadaan tri-state,
sementara jika DDRxn diset pada nilai yang
sama sementara PORTxn diset pada nilai 1,
maka pull-up resistor akan aktif.
c. Untuk mengeset fuse bit, digunakan perintah:
avrdude c ponyser p atmega8535 P com1
U hfuse:w:0xD9:m U lfuse:w:0xEF:m
pada command prompt yang terdapat pada
MS Windows.
Dapat dilihat, untuk menggunakan clock dari
sumber eksternal, nilai low-fuse bitnya saja
yang diganti, yaitu dari yang bernilai 0xE1
atau 0b11100001 yang berarti masih
menggunakan clock internal menjadi 0xEF
atau 0x11101111 yang berarti sudah
menggunakan clock eksternal (kristal, 8
MHz).
6. DAFTAR PUSTAKA
[1] Hutabarat, Mervin T., Waskita Adijarto, dan
Harry Septanto, Praktikum Sistem Mikroprosesor,
Sekolah Teknik Elektro dan Informatika
Institut Teknologi Bandung, Bandung, 2013
[2] ATMega 8535 Datasheet from www.atmel.com
[3] http://id.wikipedia.org/wiki/ATMega8535
[4] www.duniaelektronika.net


Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 11

7. LAMPIRAN


//PERCOBAAN 1A1
//========================================================================

#include <avr/io.h>
int main(void)
{
DDRA = 0xFF; //inisialisasi PORTA sebagai OUTPUT
PORTA = (1<<PA6)|(1<<PA4)|(1<<PA2)|(1<<PA0); //nilai OUTPUT
return 0;
}

//========================================================================

//PERCOBAAN 1A2
//========================================================================

#include <avr/io.h>
int main(void)
{
DDRA = 0xFF; //inisialisasi PORTA sebagai OUTPUT
PORTA = (1<<PA4)|(1<<PA2)|(1<<PA1)|(1<<PA0); //nilai OUTPUT = 23 dalam
Desimal
return 0;
}

//========================================================================

//PERCOBAAN 1B1
//========================================================================

#include <avr/io.h>
#define F_CPU 1000000UL //Menggunakan Internal Clock 1MHz
#include <util/delay.h>
int main(void)
{
DDRA = 0xFF; //PORTA sebagai OUTPUT
PORTA = 0xFF; //menyalakan semua LED

//Mengeset LED supaya berkedip-kedip

while (1)
{
PORTA = 0b00110011;
_delay_ms(500);
PORTA = 0b11001100;
_delay_ms(500);
}
return 0;
}

//========================================================================

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 12




//Percobaan 1B2
//========================================================================

#include <avr/io.h>
#define F_CPU 1000000UL //Menggunakan Internal Clock 1MHz
#include <util/delay.h>
int main(void)
{
DDRA = 0xFF; //PORTA sebagai OUTPUT
PORTA = 0xFF; //menyalakan semua LED

//Mengeset LED supaya berkedip-kedip

while (1)
{
PORTA = 0b00111010; //058 in Decimal
_delay_ms(500);
PORTA = 0b00111011; //059 in Decimal
_delay_ms(500);
}
return 0;
}

//=========================================================================

//Percobaan 1B3
//=========================================================================

#include <avr/io.h>
#define F_CPU 8000000UL //Menggunakan Internal Clock 1MHz
#include <util/delay.h>
int main(void)
{
unsigned char i = 0xFE;
DDRA = 0xFF; //PORTA sebagai OUTPUT
PORTA = i; //menyalakan LED dari Bit 1 sampai Bit 7

//Mengeset LED supaya nyala memutar

while (1)
{
PORTA = i;
_delay_ms(120);
i=(i<<1)|(i>>7);
}
return 0;
}

//=========================================================================

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 13




//Percobaan 1B4
//=========================================================================

#include <avr/io.h>
#define F_CPU 8000000UL //Menggunakan Internal Clock 1MHz
#include <util/delay.h>
int main(void)
{
unsigned char i = 0xFE;
DDRA = 0xFF; //PORTA sebagai OUTPUT
PORTA = i; //menyalakan LED dari Bit 1 sampai Bit 7
int k; //counter

//Mengeset LED supaya nyala ke ujung kiri akan kembali ke kanan

while (1)
{
for (k=0; k<7; k++)
{
PORTA = i;
_delay_ms(120);
i=(i<<1)|(i>>7);
};

for (k=0; k<7; k++)
{
PORTA = i;
_delay_ms(120);
i=(i>>1)|(i<<7);
}
}
return 0;
}

//=========================================================================

//Percobaan 1C1
//=========================================================================

#include <avr/io.h>
int main(void)
{
unsigned char i;
DDRA = 0xFF; //inisialisasi PORTA sebagai OUTPUT
DDRD = 0x00; //inisialisasi PORTD sebagai INPUT
SFIOR = 0<<PUD; //aktivasi resistor pull-up internal
PORTA = 0xFF;
while(1)
{
i = PIND;
PORTA = i;
}
return 0;
}

//=========================================================================

Laporan Praktikum - Laboratorium Dasar Teknik Elektro STEI ITB 14



//Percobaaan 1C2
//=========================================================================

#include <avr/io.h>
#define F_CPU 8000000UL
#include <avr/delay.h>

int main(void)
{
unsigned char a;
DDRA = 0xFF; //inisialisasi PORTA sebagai OUTPUT
DDRD = 0x00; //inisialisasi PORTD sebagai INPUT
SFIOR = 0<<PUD; //aktivasi resistor pull-up internal
PORTA = 0xFF;
while(1)
{

a = PIND;
if (0b00111010 == a)
{
PORTA = 0b00111010; //058 in Decimal
_delay_ms(500);
PORTA = 0b00111011; //059 in Decimal
_delay_ms(500);
}
else
if (0b00111011 == a)
{
unsigned char i = 0xFE;
int k;
for (k=0; k<7; k++)
{
PORTA = i;
_delay_ms(120);
i=(i<<1)|(i>>7);
};

for (k=0; k<7; k++)
{
PORTA = i;
_delay_ms(120);
i=(i>>1)|(i<<7);
}
}
else
{
PORTA = (1<<PA4)|(1<<PA2)|(1<<PA1)|(1<<PA0); //nilai OUTPUT
}
}
return 0;
}

//=========================================================================