Anda di halaman 1dari 13

Percobaan I

I/O DASAR

ERIKSON MANGIHUT TUA SILABAN (14S16028)


Tanggal Percobaan : 22/02/2019
ELSS3203 Praktikum Sistem Mikroprosesor
Laboratorium Sistem Digital – Teknik Elektro
Institut Teknologi Del

Abstrak— In the module 1 practicum the microprocessor Kedua, praktikan akan mengamati penggunaan
system will discuss more deeply about the basic input delay pada AVR gcc. Delay bertujuan untuk mengatur
output components on the ATMega 8535 board. Praktikan seberapa cepat lampu LED hidup dan mati. Sama
will study how the ports are used as input or output. Input
seperti percobaan sebelumnya, port A akan
output applications will be made using WinAVR software
in C language. In addition, practicum also aims to digunakan sebagai output. Nilai biner port A akan
understand the setting of Ude related to the use of large and berubah dari kondisi satu ke kondisi dua dalam
types of crystals selang delay yang telah ditentukan. Kemudian
representasi biner bisa dilihat pada nyala dan matinya
Keyword: ATmega 8535, input, output, fuse, WinAVR, delay LED.
Ketiga, praktikan akan mulai
menggunakan sebuah port sebagai input. Port D
PENDAHULUAN akan digunakan sebagai input di mana port D akan
dihubungkan langsung dengan toggle/switch.
Pengaturan input output merupakan dasar yang harus Konfigurasi dari toggle yang nyala atau mati akan
dilakukan terlebih dahulu untuk aplikasi ATMega8535. merepresentasikan biner dari port D. Port A
Pengaturan tersebut salah satunya digunakan dengan akan digunakan lagi sebagai output dan dihubungkan
menggunakan berbagai perintah logika yang sederhana ke LED untuk mengamati keluaran program.
untuk mengetahui apakah hubungan input-output sudah Program akan diatur sedemikian rupa sehingga
benar atau belum dengan mengetahuinya melalui pola untuk konfigurasi input tertentu akan
nyala LED. Pada praktikum ini tujuan yang ingin dicapai menghasilkan konfigurasi output yang sesuai
antara lain : dengan apa yang telah ditentukan.
1. Praktikan memahami datasheet ATmega 8535
2. Praktikan mampu membuat aplikasi input dan
output pada AVR dengan menggunakan bahasa
pemograman C pada winAVR
3. Praktikann memahami pengesetan fuse yang
berkaitan dengan pengunakan besa dan jenis
Kristal.

Praktikan terdiri dari beberapa sub percobaan, percobaan


yang pertama berkaitan dengan penggunaan Port A
sebagai output. Program akan dibuat sedemikian rupa
sehingga menghasilkan konfigurasi output port A
yang telah ditentukan. Kemudian port A akan
dihubungkan ke LED sebagai representasi biner dari
port A.
I. LANDASAN TEORETIS Metode paling sederhana untuk mendefinisikan suatu
pin yang tidak digunakan adalah untuk mengaktifkan pull-
A. Skematik I/O up internal pada kasus ini, pull-up akan dinonaktifkan saat
reset. Jika konsumsi daya rendah ketika reset itu penting,
maka disarankan untuk menggunakan pull-up atau pull-
down eksternal. Menghubungkan pinpin yang tidak
digunakan ke Vcc atau GND langsung tidak disarankan
karena dapat mengakibatkan kelebihan arus jika pin secara
tidak sengaja dikonfigurasikan sebagai output.

D. Deskripsi Register (Untuk Port A)

Semua register dan referensi bit pada bagian ini ditulis


dalam bentuk umum. Huruf ”x” merepresentasikan nomor
untuk port dan huruf ”n” merepresentasikan nomor bit nya.
Bagaimanapun, ketika menggunakan register atau bit yang
ditetapkan di program, maka bentuk tepatnya harus
digunakan. Sebagai contoh, PORTB3 untuk nomor 3 di Port
B, ditulis secara general sebagai PORTxn. I/O Registers
dan lokasi bit secara fisik terdaftar di ”Register Description
for I/O-Ports”.
II. METODOLOGI
Tiga lokasi alamat memori I/O dialokasikan untuk tiap
port, satu untuk tiap Data Register – PORTx, Data Direction A. Alat dan Komponen yang digunakan
Register – DDRx, dan Port Input Pins – PINx. I/O Port 1. Sistem Minimum ATMega 8535 (1 buah)
Input Pins adalah read only, sedangkan Data Register dan
Data Direction Register adalah read/write. Sebagai 2. DT-51 Trainer Board (1 buah)
tambahan, bit Pull-up Disable – PUD pada SFIOR 3. Power Supply (1 buah)
menonaktifkan fungsi pull-up untuk semua pin di semua
port saat diaktifkan. 4. Komputer Terinstal WinAVR (1 buah)

B. Konfigurasi PIN Port


B. Langkah langkah percobaan

1. Percobaan 1A : PORTA sebagai Output


 Buat program seperti yang tertera di modul. Atur
target makefile sesuai nama file percobaan
 Jalankan program dan amati keluaran pada LED.
Analisa kode program dan catat hasil pada BCL
 Ubah kode program sehingga keluaran LED sesuai
dengan representasi biner dari kelompok praktikan

C. PUD pada SFIOR


2. Percobaan 1B : Fasilitas Delay pada AVR
 Buat program seperti yang tertera di modul. Atur
target makefile sesuai nama file percobaan
 Jalankan program dan amati keluaran pada LED.
Analisa kode program dan catat hasil pada BCL
Rekomendasi untuk inisialisasi pada pin input  Modifikasi kode program sehingga keluaran LED
secara bergantian sesuai dengan representasi biner
Jika ada pin yang tidak terpakai, direkomendasikan agar dari tiga angka terakhir. Catat hasil pada BCL
tiap pin ini terdefinisikan. Walaupun kebanyakan input  Untuk tugas 1.B.3 buat kembari program seperti
digital dinonaktifkan dalam mode deep sleep seperti yang yang tertera di modul. Jalankan program dan amati
dideskripsikan diatas, input yang mengambang harus keluaran pada LED. Analisa kode program dan
dihindari untuk mengurangi konsumsi arus pada semua catat hasil pada BCL
mode lain di mana input digital diaktifkan (Reset, Active
mode, and Idle mode).
 Modifikasi kode program 1.B.3 sehingga keluaran telah di set masing masing bitnya dimana saat
LED nyala dari kiri ke kanan kemudian kembali direpresentasikan keluarannya pada LED, maka LED yang
lagi ke kiri.Catat hasil keluaran pada BCL akan menyala adalah bit 6.4.2.0, dan yang lainnya padam.
Kemudian program diatas dimasukkan kedalam
ATMega8535, dan setelah dihubungkan dengan board
3. Percobaan 1C : PORTA sebagai Output dan ATMega8535, maka hasil output pada LED adalah sebagai
PORTD sebagai Input berikut:
 Buat program seperti yang tertera di modul. Atur
target makefile sesuai nama file percobaan
 Jalankan program dan amati keluaran pada LED.
Analisa kode program dan catat hasil pada BCL
 Modifikasi kode program sehingga kondisi berikut
terpenuhi : 1. Jika input sama dengan representasi
biner tiga angka NIM Anda, maka kondisi LED
sama seperti tugas 1.B.2 2. Jika input sama dengan
representasi biner tiga angka NIM terakhir teman
sekelompok, maka kondisi les seperti tugas 1.B.A
3. Jika input tidak sama dengan kedua representasi
di atas, maka kondisi les seperti tugas 1.A.2 Catat
hasil keluaran LED pada BCL.

Dari gambar diatas yang merupakan hasil dari percobaan


III. HASIL DAN ANALISIS ini, terlihat bahwa hasil konfigurasi dari LED sama dengan
perintah pada program dimana LED yang akan menyala
adalah LED ke 6,4,2,0. Oleh karena itu percobaan ini
A. Percobaan 1.A : PORTA sebagai Output dinyatakan berhasil.
Pada percobaan yang akan digunakan sebagai output
adalah PORT A dimana programnya telah dibuat pada
winAVR.
2. TUGAS 1.A.2
1. TUGAS 1.A.1 Adapun program yang digunakan pada percobaan ini
Adapun program yang digunakan pada percobaan ini adalah sebagai berikut:
adalah sebagai berikut: #include <mega8535.h>
#include <mega8535.h>
void main()
void main() {
{ DDRA = 0xFF ;
DDRA = 0xFF ; PORTA = 0b00001011;
PORTA = 0b10101010; }
}

Flow chart dari program dapat dilihat sebagai berikut.


Flow chart dari program dapat dilihat sebagai berikut.

START
START

DDRA = 0xFF
DDRA = 0xFF

PORTA = (1<<PA6)|(1<<PA4)|(1<<PA2)|(1<<PA0) PORTA= (1<<PA3)|(1<<PA1) (1<<PA0)

END END

Dari program diatas terlihat bahwa PORTA di set sebagai


Dari program diatas terlihat bahwa PORTA di set sebagai output dan DDRA sebagai input. Selain itu, pada PORTA
output dan DDRA sebagai input. Selain itu, pada PORTA telah di set masing masing bitnya dimana saat
direpresentasikan keluarannya pada LED, maka LED yang Flow chart dari program dapat dilihat sebagai berikut.
akan menyala adalah bit 3,1,0, dimana itu sesuai dengan
nomor kelompok yakni kelompok 11. Selain tiga angka bit
START
diatas maka LED yang lain padam. Kemudian program
diatas dimasukkan kedalam ATMega8535, dan setelah
dihubungkan dengan board ATMega8535, maka hasil DDRA = 0xFF
output pada LED adalah sebagai berikut:

PORTA = 0b00110011
END
Delay_ms(5000)

PORT A = 0b11001100

Delay_ms(5000)

Dari program diatas terlihat bahwa PORTA di set sebagai


Dari gambar diatas yang merupakan hasil dari output dan DDRA sebagai input. Selain itu, program juga
percobaan ini, terlihat bahwa hasil konfigurasi dari LED menggunakan nilai clock 1 MHz. Terlihat pula bahwa
sama dengan perintah pada program dimana LED yang PORTA dijadikan sebagai output yang terlihat pada
akan menyala adalah LED ke 3,1,0. Oleh karena itu pengassignan DDRA pada 0xFF. Kemudian pada body
percobaan ini dinyatakan berhasil. program, terdapat tiga kali pengassignan nilai PORTA yang
mana untuk kedua pengassignan PORTA diikuti dengan
B. Percobaan 1.B : Fasilitas Delay pada AVR GCC perintah,
Pada percobaan ini, seluruh kode program _delay_ms(500);
memanfaatkan fasilitas delay yang ada pada ATMega8535. Kodingan ini berarti bahwa untuk pengassignan pertama
Pada dasarnya, di dalam ATMega8535 sudah terdapat clock PORTA, PORTA akan aktif semua (LED menyala semua)
internal dengan frekuensi clock 1 MHz. Dengan demikian, sebelum memasuki loop. Kemudian pada pengassignan
semua kode program pada tugas-tugas di bawah ini akan PORTA yang terdapat pada loop while(1) terdapat
selalu mendefinisikan clock sebesar 1 MHz. pengesetan nilai delay yang sesuai dengan perintah yang
dituliskan sebelumnya. Delay yang digunakan adalah 500
1. TUGAS 1.B.1 ms. Kemudian program diatas dimasukkan kedalam
Adapun program yang digunakan pada percobaan ini ATMega8535, dan setelah dihubungkan dengan board
adalah sebagai berikut: ATMega8535, maka hasil output pada LED adalah sebagai
berikut:
#include<mega8535.h>
#define F_CPU 1000000UL
#include <delay.h>
void main()
{
DDRA = 0xFF;
PORTA = 0xFF;
while (1)
{
PORTA = 0b00110011;
delay_ms(500);
PORTA = 0b11001100;
delay_ms (500);
}
}
Flow chart dari program dapat dilihat sebagai berikut.

START

DDRA = 0xFF

PORTA = 0b00011011
END
Delay_ms(5000)

PORTA = 0b00011100

Delay_ms(5000)

Hasilnya sesuai dengan kodingan, dimana LED akan Kemudian program diatas dimasukkan kedalam
berkedip dengan selang 500 ms yang mana LED akan ATMega8535, dan setelah dihubungkan dengan board
berkedip-kedip bergantian dari LED0, LED1, LED4, dan ATMega8535, maka hasil output pada LED adalah sebagai
LED5 menyala dan yang lain mati ke LED2, LED3, LED6, berikut:
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. Sehingga percobaan ini dinyatakan berhasil.

2. TUGAS 1.B.2
Adapun program yang digunakan pada percobaan ini
adalah sebagai berikut:

#include<mega8535.h>
#define F_CPU 1000000UL
#include <delay.h>
void main()
{
DDRA = 0xFF;
PORTA = 0xFF;
while (1)
{
PORTA = 0b00011011;
delay_ms(500);
PORTA = 0b00011100;
delay_ms (500);
}
}
Untuk percobaan selanjutnya, dengan penjelasan yang Pengaksesan sumber clock eksternal ini dilakukan
sama, diperoleh LED berkedip dengan selang 500 ms yang dengan mengetikkan perintah,
mana LED akan berkedip-kedip bergantian dari LED0,
avrdude –c ponyser –p atmega8535 –P com1 –U
LED1, LED3, dan LED4 menyala dan yang lain mati hfuse:w:0xD9:m –U lfuse:w:0xEF:m
kemudian LED2, LED3, LED4 menyala dan yang lain mati.
Nilai LED yang berkedip tersebut merepresentasikan nilai pada command prompt MS Windows sebelum
biner dari tiga digit terakhir NIM kami yaitu 027 10 dan melakukan kodingan dan pendownloadan kodingan
02810. Keluaran ini akan berlangsung terus menerus. Output ke sismin.
yang dikeluarkan sudah sesuai dengan apa yang diminta
pada program, maka percobaan dinyatakan berhasil.
Pada percobaan ini, juga digunakan fasilitas delay
yang terlihat dari library yang digunakan (#include
3. TUGAS 1.B.3 <util/delay.h>). Terlihat dalam body program
Adapun program yang digunakan pada percobaan ini bahwa sebelum program memasuki loop, maka
adalah sebagai berikut: dibuat variabel unsigned char i yang diassign nilai
#include<mega8535.h>
0b11111110 atau 0xFE. Setelah itu, PORTA diset
#define F_CPU 8000000UL sebagai output dengan mengassign nilai 0xFF ke
#include <delay.h> dalam DDRA. Kemudian nilai i ini diassign ke dalam
void main() PORTA yang artinya, LED akan menyala semua
{
unsigned char i = 0xFE; kecuali LED0. Berikutnya, dalam body loop dengan
DDRA = 0xFF; loop tak-hingga, dilakukan pengassignan PORTA
PORTA = i; dengan i sekali lagi yang bertujuan agar nilai PORTA
while(1)
selalu terisi dengan nilai i yang baru. Lalu, digunakan
{
PORTA = i; delay sebesar 120 ms untuk setiap perubahan nyala
delay_ms(120); LED. Terakhir, diset nilai i dengan perintah,
i = (i<<1)| (i>>7);
} 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,
Flow chart dari program dapat dilihat sebagai berikut. kemudian i ini akan memasuki loop yang diakhir loop
akan diupdate dengan nilai i yang baru yaitu,

START
i = 0b11111110

DDRA = 0xFF
(i<<1) = 0b11111100
(i>>7) = 0b00000001
i = (i<<1) | (i>>7) = 0b11111100 + 0b00000001
i = 0xFE
= 0b11111101

1
dengan simbol | (or) merepresentasikan
penjumlahan dalam domain biner. Nilai i ini akan
PORTA = i selalu diupdate oleh loop yang jika diteruskan maka
nilai bit 0 dalam nilai i seolah-olah akan berjalan ke
END kiri kemudian ketika nilai bit 0 ini mencapai bit ke-7,
Delay_ms(5000) 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
i = (i<<1)|(i>>7)
mati) akan terlihat seolah-olah berjalan dari kiri ke
kanan kemudian langsung ke paling kiri setelah LED
Percobaan berikutnya (1B3) menggunakan clock yang mati ini mencapai paling kanan (terlihat seperti
8 MHz. Nilai clock ini diperoleh dengan memutar). Kemudian program diatas dimasukkan
menggunakan sumber clock eksternal yaitu kristal. kedalam ATMega8535, dan setelah dihubungkan dengan
board ATMega8535, maka hasil output pada LED adalah {
sebagai berikut: PORTA = i;
delay_ms(120);
i = (i>>1)| (i<<7);
}
}
}

Flow chart dari program dapat dilihat sebagai berikut.

START

DDRA = 0xFF

i = 0xFE
END

i != 0b01111111

PORTA =
i != 0b01111111
Delay_ms(5000)
PORTA =
i = (i<<1)|(i>>7)
Delay_ms(5000)

i = (i>>1)|(i<< 7)

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
Keluaran ini akan berlangsung terus menerus. Output yang
dikeluarkan sudah sesuai dengan apa yang diminta pada atau paling kanan). Pada percobaan ini, dalam loop
program. Sehingga percobaan ini dikatakan berhasil. 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
4. TUGAS 1.B.4 menangani kasus ketika LED mati berjalan dari paling
kanan ke paling kiri. Kedua loop ini menggunakan
Adapun program yang digunakan pada percobaan ini adalah
counter integer k. Dari kombinasi kedua loop ini
sebagai berikut:
dalam loop utama while(1) diperoleh perilaku LED
#include<mega8535.h> mati berjalan yang dimulai dari paling kiri (LED0) ke
#define F_CPU 8000000UL
#include <delay.h>
paling kanan (LED7) kemudian bouncing back ke kiri
void main() dari paling kanan (LED7) ke paling kiri (LED0)
{ kemudian bouncing back lagi ke kanan dan begitu
unsigned char i = 0xFE; seterusnya. Berikut penjelasan untuk loop kedua
DDRA = 0xFF;
PORTA = i; dalam loop utama,
while (1)
i = 0b01111111
{
while(i != 0b01111111) (i<<1) = 0b00111111
{
PORTA = i; (i>>7) = 0b10000000
delay_ms(120);
i = (i<<1)| (i>>7); i = (i<<1) | (i>>7) = 0b00111111 + 0b10000000
}
while (i != 0b11111110) = 0b10111111
Nilai bit 1 merepresentasikan LED menyala, C. Percobaan 1C : PORTA sebagai Output dan PORTD
sementara bit 0 merepresentasikan LED mati. sebagai Input
Sehingga seolah-olah LED mati terlihat berjalan. 1. TUGAS 1.C.1
Kemudian program diatas dimasukkan kedalam
ATMega8535, dan setelah dihubungkan dengan board Adapun program yang digunakan pada percobaan ini
ATMega8535, maka hasil output pada LED adalah sebagai adalah sebagai berikut:
berikut: #include<mega8535.h>
#include<delay.h>
void main()
{

DDRA = 0xFF;
DDRD = 0x00;
SFIOR = 0<< PUD;
PORTA = 0xFF;
while (1)
{
PORTD = 0b01101111; //kolom 1---
delay_us(10);
if(PIND.0==0)
{
PORTA = 0b11111110;
}

PORTD = 0b10111111; //kolom 2---


delay_us (10);
if (PIND.0==0)
{
PORTA = 0b11111101;
}

PORTD = 0b01111111; //kolom 3--


delay_us (10)
if(PIND.0==0)
{
PORTA = 0b11111011;
}
}
}

Flow chart dari program dapat dilihat sebagai berikut.

START DDRA= 0xFF DDRD


= 0x00
END

1 i = 0xFF
0b011011
11

0b10111
Keluaran ini akan berlangsung terus menerus. Output 111
yang dikeluarkan sudah sesuai dengan apa yang
0b011111
diminta pada program. Sehingga percobaan ini dapat PORTA = 11
dikatakan berhasil. 0b11111110

PORTA =
0b11111101 PORTA =
0b11111011
while (1)
{
Kemudian program diatas dimasukkan kedalam PORTD = 0b1101111; //kolom 1---
ATMega8535, dan setelah dihubungkan dengan board delay_ms(500);
ATMega8535, maka hasil output pada LED adalah sebagai if(PIND.0==0)
{
berikut:
PORTA = 0b11111110;
}
if(PIND.1==0)
{
PORTA = 0b11110111;
}
if(PIND.2==0)
{
PORTA = 0b10111111;
}
if(PIND.3==0)
{
PORTA = 0b11111111;
}

PORTD = 0b10111111; //kolom 2---


delay_ms (500);
if (PIND.0==0)
{
PORTA = 0b11111101;
}
if (PIND.1==0)
{
PORTA = 0b11101111;
}

if (PIND.2==0)
{
PORTA = 0b01111111;
}
if(PIND.3==0)
{
PORTA = 0b11111111;
}

PORTD = 0b01111111; //kolom 3--


delay_ms (500) ;
if(PIND.0==0)
{
PORTA = 0b11111011;
}
if (PIND.1==0)
{
PORTA = 0b11011111;
Pada percobaan ini, ketika pada ATMega 8535 ditekan
}
angka 1,2,3 secara bergantian, maka masing masing LED if (PIND.2==0)
nya akan mati dan yang lainnya tetap menyala. Hasil yang {
didapat sesuai dengan program, sehingga percobaan ini PORTA = 0b111111111;
dapat dikatakan berhasil. }
if (PIND.3==0)
{
2. TUGAS 1.C.2 PORTA = 0b11111111;
}
Adapun program yang digunakan pada percobaan ini }
}
adalah sebagai berikut: `

#include<mega8535.h>
#include<delay.h>
void main()
{

DDRA = 0xFF;
DDRD = 0x00;
SFIOR = 0<< PUD;
PORTA = 0xFF;
Flow chart dari program dapat dilihat sebagai berikut

START DDRA= 0xFF DDRD


= 0x00
END

1 i = 0xFF
0b011011
11

0b10111
111
PIND
PIND 0b011111
11

PIND
PIND
PIND

PIND

PIND

PIND

PIND
PIND

Kemudian program diatas dimasukkan kedalam


ATMega8535, dan setelah dihubungkan dengan board
ATMega8535, maka hasil output pada LED adalah sebagai
berikut:

Pada percobaan ini, ketika pada ATMega 8535 ditekan


switch 1,2,3,4,5,6,7,8 secara bergantian, maka masing
masing LED nya akan mati dan yang lainnya tetap
menyala. Hasil yang didapat sesuai dengan program,
sehingga percobaan ini dapat dikatakan berhasil.
IV. SIMPULAN keadaan tri-state, sementara jika DDRxn diset
pada nilai yang sama sementara PORTxn diset
 ATMega 8535 memiliki 4 port (A,B,C,D) yang
pada nilai 1, maka pull-up resistor akan aktif.
memiliki 8 pin tiap portnya. Keempat port pada
ATMega 8535 bisa digunakan sebagai input atau
 Untuk mengeset fuse bit, digunakan perintah:
output.
 AVR GCC memiliki syntax delay untuk avrdude –c ponyser –p atmega8535 –P com1 –U
membantu pemrograman yang membutuhkan hfuse:w:0xD9:m –U lfuse:w:0xEF:m
fungsi waktu
 Untuk membuat port berfungsi sebagai input pada command prompt yang terdapat pada MS
dengan cara mengeset DDRx nya dengan 0x00 Windows. Dapat dilihat, untuk menggunakan
(semua pin jadi pin input). Switch digunakan clock dari sumber eksternal, nilai low-fuse bitnya
sebagai input dari user di Port D. saja yang diganti, yaitu dari yang bernilai 0xE1
 Untuk membuat port berfungsi sebagai output atau 0b11100001 yang berarti masih
dengan cara mengeset DDRx nya dengan 0xFF menggunakan clock internal menjadi 0xEF atau
(semua pin jadi pin output). LED digunakan 0x11101111 yang berarti sudah menggunakan
sebagai output di Port A. clock eksternal (kristal, 8 MHz).
 Pengesetan fuse dilakukan dengan AVRdude
dengan mengeset frekuensi clock sesuai dengan
clock eksternal Untuk mengetahui apa saja yang
terdapat dan disediakan oleh ATMega 8535,
digunakan datasheet dari ATMega 8535, termasuk REFERENSI
di dalamnya tentang PORT, PIN, clock, dan
register.
Output pada ATMega 8535 dapat diset dengan  Hutabarat, Mervin T., Waskita Adijarto, dan
cara mengeset nilai register yang berkaitan Harry Septanto, Praktikum Sistem
dengan output tersebut dengan nilai hex 0xFF. Mikroprosesor, Sekolah Teknik Elektro dan
Contohnya adalah ketika PORTA ingin diset
Informatika Institut Teknologi Bandung,
sebagai output, maka pada program berbahasa C
yang ditulis, dalam body program ditulis DDRA = Bandung, 2013
0xFF. Setelah PORTA diset sebagai output,  ATMega 8535 Datasheet from
dengan mengeset nilai PORTAn dengan 1, maka www.atmel.com
didapat nilai PORTA pada bit ke-n bernilai high,
begitupun sebaliknya, jika PORTAn diset dengan  www.duniaelektronika.net
nilai 0, maka PORTA pada bit ke-n (PORTA ke-n
bernilai low). Untuk mengeset PORTx sebagai
 Waskita Adijarto dkk. , Petujuk Praktikum
input, maka nilai DDRx harus diset dengan 0, Sistem Mikroprosessor, ITB, Bandung, 2016
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
Lampiran

Tugas 1.A.1 TUGAS 1.B.3

#include <mega8535.h> #include<mega8535.h>


#define F_CPU 8000000UL
void main() #include <delay.h>
{ void main()
DDRA = 0xFF ; {
PORTA = 0b10101010; unsigned char i = 0xFE;
} DDRA = 0xFF;
PORTA = i;
while(1)
Tugas 1.A.2 {
PORTA = i;
delay_ms(120);
#include <mega8535.h> i = (i<<1)| (i>>7);
}
void main()
}
{
DDRA = 0xFF ;
PORTA = 0b00001011;
} TUGAS 1.B.4

#include<mega8535.h>
#define F_CPU 8000000UL
TUGAS 1.B.1 #include <delay.h>
void main()
#include<mega8535.h> {
#define F_CPU 1000000UL unsigned char i = 0xFE;
#include <delay.h> DDRA = 0xFF;
void main() PORTA = i;
{ while (1)
DDRA = 0xFF; {
PORTA = 0xFF; while(i != 0b01111111)
while (1) {
{ PORTA = i;
PORTA = 0b00110011; delay_ms(120);
delay_ms(500); i = (i<<1)| (i>>7);
PORTA = 0b11001100; }
delay_ms (500); while (i != 0b11111110)
} {
} PORTA = i;
delay_ms(120);
i = (i>>1)| (i<<7);
TUGAS 1.B.2 }
}
}
#include<mega8535.h>
#define F_CPU 1000000UL
#include <delay.h>
void main()
{
DDRA = 0xFF;
PORTA = 0xFF;
while (1)
{
PORTA = 0b00011011;
delay_ms(500);
PORTA = 0b00011100;
delay_ms (500);
}
}
TUGAS 1.C.1 }

#include<mega8535.h> PORTD = 0b10111111; //kolom 2---


#include<delay.h> delay_ms (500);
void main() if (PIND.0==0)
{ {
PORTA = 0b11111101;
DDRA = 0xFF; }
DDRD = 0x00; if (PIND.1==0)
SFIOR = 0<< PUD; {
PORTA = 0xFF; PORTA = 0b11101111;
while (1) }
{ if (PIND.2==0)
PORTD = 0b01101111; //kolom 1--- {
delay_us(10); PORTA = 0b01111111;
if(PIND.0==0) }
{ if(PIND.3==0)
PORTA = 0b11111110; {
} PORTA = 0b11111111;
}
PORTD = 0b10111111; //kolom 2---
delay_us (10); PORTD = 0b01111111; //kolom 3--
if (PIND.0==0) delay_ms (500) ;
{ if(PIND.0==0)
PORTA = 0b11111101; {
} PORTA = 0b11111011;
}
if (PIND.1==0)
PORTD = 0b01111111; //kolom 3-- {
delay_us (10) PORTA = 0b11011111;
if(PIND.0==0) }
{ if (PIND.2==0)
PORTA = 0b11111011; {
} PORTA = 0b111111111;
} }
} if (PIND.3==0)
{
PORTA = 0b11111111;
}
}
TUGAS 1.C.2 }

#include<mega8535.h>
#include<delay.h>
void main()
{

DDRA = 0xFF;
DDRD = 0x00;
SFIOR = 0<< PUD;
PORTA = 0xFF;
while (1)
{
PORTD = 0b1101111; //kolom 1---
delay_ms(500);
if(PIND.0==0)
{
PORTA = 0b11111110;
}
if(PIND.1==0)
{
PORTA = 0b11110111;
}
if(PIND.2==0)
{
PORTA = 0b10111111;
}
if(PIND.3==0)
{
PORTA = 0b11111111;

Anda mungkin juga menyukai