SlideShare a Scribd company logo
Modul Dasar Mikrokontroler | Beny Abdurrahman    | 45 
 
BAB V
I/O ATMega16
ATMega16 dikemas dengan beberapa tipe, namun yang banyak digunakan dan mudah
ditemui adalah tipe PDIP. Kemasan PDIP (Dual Inline Package) ini memiliki 40 kaki.
Dimana terdiri dari 32 pin untuk input/output. Gambar susunan kaki ATMega16 bisa
dilihat berikut :
Port untuk Input dan Output dibagi menjadi 4 bagian yaitu PORT A, PORT B, PORT C
dan PORT D. Keempat port tersebut merupakan jalur bi-directional yang dapat di
program sebagai input maupun output melalui register. Berikut adalah register yang
terkait dengan operasi I/O :
• DDRx – Data Direction Register
• PORTx – Pin Output Register
• PINx – Pin Input Register
dimana x = nama port (A, B, C atau D)
REGISTER
Sebelum membahas lebih jauh, kita perlu mengenal apa yang disebut dengan register.
Register adalah suatu memori di dalam CPU yang bisa diakses secara sering dan cepat.
Register berkaitan dengan berbagai operasi dalam mikrokontroler. Sebuah register
berukuran 1 byte dimana sama dengan 8 bit data.
Bit No. 7 6 5 4 3 2 1 0
Modul Dasar Mikrokontroler | Beny Abdurrahman    | 46 
 
upper nibble lower nibble 
Register DDRx
Seperti yang telah dijelaskan sebelumnya, port dalam mikrokontroler adalah bidirectional
dimana bisa diatur baik sebagai input maupun output. Untuk mengaturnya kita
menggunakan bantuan register DDRx (Data Direction Register).
Register DDRx 
Bit No.  7  6  5  4  3  2  1  0 
Nama  DDRx7  DDRx6  DDRx5  DDRx4  DDRx3  DDRx2  DDRx1  DDRx0 
Nilai  0  0  0  0  0  0  0  0 
‘x’ pada tabel diatas bisa diganti dengan nama port (A, B , C atau D).
Sebagai contoh :
DDRC = (1<<DDC0)|(1<<DDC4)|(1<<DDC5)|(1<<DDC7);
Penulisan di atas sama saja dengan
DDRC = 0b10110001;
atau
DDRC = 0xB1;
atau juga
DDRC = (1<<0)|(1<<4)|(1<<5)|(1<<7);
Bagaimana jika ingin mengakses port B? Ganti x dengan B :
DDRB = (1<<DDB0)|(1<<DDB4)|(1<<DDB5)|(1<<DDB7);
atau dengan: DDRB = 0xB1; atau DDRB = 0b10110001;
Sekarang coba kita lihat di port mikrokontrolernya, nilai 1
menjadikan port sebagai output dan 0 sebagai input.
Pada gambar di samping, berarti pin PC7, PC5, PC4 dan
PC0 telah diset sebagai Output. Sedangkan pin PC6, PC3,
PC2 dan PC1 sebagai input.
Pin input nantinya akan dapat membaca masukan logika
baik itu high (1) atau low (0). Begitu juga untuk pin output
akan dapat mengeluarkan logika 1 (tegangan = VCC/5v)
dan 0 (tegangan = 0/Gnd).
Modul Dasar Mikrokontroler | Beny Abdurrahman    | 47 
 
PORTx Register
PORTx berfungsi untuk memberikan nilai keluaran pin Output, apakah berlogika 1 atau 0.
Setelah pin di set menjadi output, kita bisa memberikan nilai logika baik 1 atau 0. Ilutrasi
register PORTx :
Bit No.  7  6  5  4  3  2  1  0 
Nama  PORTx7  PORTx6  PORTx5  PORTx4  PORTx3  PORTx2  PORTx1  PORTx0 
Nilai  0  0  0  0  0  0  0  0 
Register ini sama dengan register DDRx, yang membedakan hanya namanya yaitu PORTx.
Untuk penulisannya pun juga sama, mari kita lihat contoh di bawah ini :
PORTD = (1 << PD0)|(1 << PD3)|(1 << PD6);
PORTD = (1 << 0)|(1 << 3)|(1 << 6);
PORTD = 0b01001001;
PORTD = 0x49;
Kita lihat contoh program :
DDRC = 0b10110001;
PORTC = 0b10010001;
OUTPUT = 0b10010001;
Port C diinisialisasi menggunakan DDRx register. Bit yang berwarna oranye menandakan
sebagai pin output. Sekarang, mari berkonsentrasi pada bit berwarna oranye saja. Karena
mereka adalah pin output, ketika diberi nilai '1' di PORT, pin akan berlogika HIGH (1), dan
akan memberikan tegangan output VCC di pin itu.
Sekarang lihat contoh lain :
DDRC = 0b10110001;
PORTC = 0b10010101;
OUTPUT = 0b10010001;
Sekali lagi, bit berwarna oranye berarti adalah pin output. Jadi, apapun nilai (0 atau 1) yang
diberikan pada bit oranye tersebut, hasilnya akan sama pada output. Sekarang, lihat bit
berwarna merah. Meskipun kita memberi logika HIGH (1) di register PORTx, output yang
keluar tetap bernilai LOW (0). Hal ini karena pin diinisialisasi sebagai pin input oleh
DDRx. Oleh karena itu, PORTx tidak dapat mengubah nilai dari pin itu. Oleh karena itu,
secara umum, PORTx tidak dapat memodifikasi properti dari pin yang diinisialisasi
sebagai input oleh DDRx.
Modul Dasar Mikrokontroler | Beny Abdurrahman    | 48 
 
PINx Register
Register PINx memperoleh nilai dari membaca masukan/inputan pin mikrokontroler.
Registernya adalah berikut :
Bit No.  7  6  5  4  3  2  1  0 
Nama  PINx7  PINx6  PINx5  PINx4  PINx3  PINx2  PINx1  PINx0 
Nilai  0  0  0  0  0  0  0  0 
Prosedur penulisan register PINx masih sama.
DDRC = 0b10110001;
PINC = 0b01001011;
INPUT = 0b01001011;
Di sini, bit berwarna sesuai dengan pin yang diinisialisasi sebagai input oleh DDRx. Pada
baris kedua, PINx register didefinisikan. Nah, contoh ini hanya untuk menjelaskan konsep,
dalam praktiknya kita selalu menggunakan PINx sebagai kondisi (seperti di IF atau
WHILE loop). Sesuai pernyataan kedua, perintah PINx membaca nilai hanya pada pin
input.
DDRC = 0b10110001;
PINC = 0b01011010;
INPUT = 0b01001010;
Di sini, Anda dapat membandingkannya dengan contoh yang saya miliki untuk PORTx.
Karena bit berwarna merah adalah pin output, PINx tidak bisa mengubah nilainya. Oleh
karena itu, secara umum, PINx tidak dapat memodifikasi properti dari pin yang
diinisialisasi sebagai output oleh DDRx dan sebaliknya.
Contoh Program
DDRC = 0x0F;
PORTC = 0x0C;
// asumsi tegangan 4v dialirkan ke PORTC.6 dan Vcc = 5V
if (PINC == 0b01000000)
PORTC = 0x0B;
else
PORTC = 0x00;
Penjelasan :
o DDRC = 0x0f; setara dengan DDRC = 0b00001111; Ini berarti bahwa pin
PC0 - PC3 adalah pin output (dapat dimanipulasi menggunakan PORTC)
dan pin PC4 ... PC7 yang pin input (yang kadarnya menentukan nilai pinc).
Modul Dasar Mikrokontroler | Beny Abdurrahman    | 49 
 
o PORTC = 0x0C; setara dengan PORTC = 0b00001100; Ini berarti bahwa pin PC2
dan PC3 memiliki tegangan HIGH (Vcc = 5V) dan pin PC0 dan PC1 memiliki
tegangan LOW (0V). Pin lainnya memiliki tegangan rendah secara default.
o if (pinc = 0b01000000) memeriksa tegangan input pada pin PC6. Karena itu
disebutkan dalam komentar yang 4V sebuah dipasok ke PORTC.6 (sama seperti
pin PC6), kondisi ini benar (seperti 4> 2,5, di mana 2.5V adalah ambang batas, 5/2
= 2,5).
o Karena kondisi if : benar, PORTC = 0x0B; dijalankan.
o Jika kondisi if tidak terpenuhi, PORTC = 0x00; akan dieksekusi.
Modul Dasar Mikrokontroler | Beny Abdurrahman    | 50 
 
Program menyalakan led
Sebelum memrogram led, kita harus melihat skematik rangkaian untuk bisa menentukan apakah
led akan menyala atau mati ketika diberikan logika 1/0. Ada beberapa tipe kerja rangkaian untuk
mengaksesnya, yaitu Aktif LOW dan Aktif High. Aktif LOW merupakan kerja rangkaian yang
dapat dioperasikan/di –ON –kan dengan diberi logika rendah (“0”/0). Sedangkan Aktif HIGH
merupakan kerja rangkaian yang dapat dioperasikan/di-ON-kan dengan diberi logika tinggi
(“1”/+5V). Berdasarkan skematik dari kerja rangkaian diatas dapat digambarkan sebagai berikut:
Penulisan skrip bisa dilakukan secara hexa maupun biner, dengan keterangan penjelasan bisa dilihat di
tabel :
Contoh penulisan skrip di atas, untuk hexa 0x0F sama saja penulisannya dengan biner 0b00001111,
yang berarti bahwa bit0 – bit3 mendapatkan logika high (tegangan vcc / 5 volt) dan bit4 – bit7
mendapat logika low, yaitu tegagan 0 volt / ground.
Gambar rangkaian untuk praktikum di bawah :
Modul Dasar Mikrokontroler | Beny Abdurrahman    | 51 
 
1. Menyalakan semua led bersama
#include <avr/io.h>
int main(void){
DDRA=0xFF; //Port A0-7 sebagai output, penulisanya sama saja dengan : 0b11111111
while(1){
PORTA=0b00000000; //bisa ditulis 0x0F
//berarti port A mengeluarkan tegangan 0 / GND
//sehingga led akan menyala
}
}
2. Led 1 On, Led 2 Off, Led 3 On, Led 4 Off, Led 5 On, Led 6 Off, Led 7 On, Led 8 Off
#include <avr/io.h>
int main(void){
DDRA=0xFF; //Port A0-7 sebagai output, penulisanya sama saja dengan : 0b11111111
while(1){
PORTA=0b01010101;
}
}
3. Program Led Kedip
#include <avr/io.h>
#include <util/delay.h> //memasukan library delay
int main(void){
DDRA=0xFF; //Port A jadi Output, bisa ditulis -> 0b11111111
while(1){
PORTA=0b11111111; // LED MATI
_delay_ms(120); // jeda 0.12 detik
PORTA=0b00000000; // led HIDUP
_delay_ms(150); // jeda 0.15 detik dan akan balik ke atas
}
}
Modul Dasar Mikrokontroler | Beny Abdurrahman    | 52 
 
4. Program Menyalakan Geser Kanan
#include <avr/io.h>
#include <util/delay.h> //memasukan library delay
int main(void){
DDRA=0xFF; //Port A jadi Output, bisa ditulis -> 0b11111111
while(1){
PORTA=0b11111110;
_delay_ms(120);
PORTA=0b11111101;
_delay_ms(150);
PORTA=0b11111011;
_delay_ms(120);
PORTA=0b11110111;
_delay_ms(150);
PORTA=0b11101111;
_delay_ms(120);
PORTA=0b11011111;
_delay_ms(150);
PORTA=0b10111111;
_delay_ms(120);
PORTA=0b01111111;
_delay_ms(150);
}
}
5. Latihan
1. Buatlah program untuk menyalakan LED geser bergantian kekiri!
2. Buatlah program untuk menyalakan LED geser bergantian kekanan -kekiri!
Modul Dasar Mikrokontroler | Beny Abdurrahman    | 53 
 
Progam Input dengan Push Button
Pada topik sebelumnya sudah dikenalkan cara meng-akses port sebagai keluaran, sehingga
selanjutnya pada topik ini akan digabung dengan masukan atau input. Masukan untuk
mikrokontroler bisa dari saklar, sinyal logika, atau rangkaian lain yang memiliki keluaran.
Sebagai dasar mempelajari masukan pada mikrokontroler, pada topik ini akan digunakan
saklar/button sebagai masukannya.
Mendefinisikan Port Sebagai Input
Cara mendefinisikan PORT sebagai inputan digunakan skrip berikut :
DDRB =0b00000000; //Semua 8 bit pada PORTB berfungsi sebagai masukan
//Bisa ditulis --> DDRB =0x00;
Kita juga bisa mengeset beberapa pin saja yang menjadi masukan contoh :
DDRB =0b11110000; //PinB0-3 sebagai masukan, PinB4-7 sebagai keluaran
//Bisa ditulis --> DDRB =0xF0;
Pengambilan Data Input / Masukan
Rangkaian masukan ke mikrokontroler kebanyakan mengambil prinsip falling edge sebagai sinyal
tanda aktif, atau bisa dikatakan memiliki logika aktif jika sinyal masukannya rendah (low).
Apabila terhubung dengan sebuah masukan dari saklar/button, maka saklar saat tertutup
terhubung dengan ground (Gnd). Sebaliknya, apabila saklar dalam kondisi terbuka akan
mempertahankan logika tinggi (high) pada masukan, dikarenakan terdapat resistor pull up yang
menjaga jalur data masukan dalam kondisi tinggi. Walaupun dalam pengaturan kondisi masukan
sudah di pull up, akan tetapi untuk mengamankan kondisi datanya , maka akan dipasang resistor
pull up lagi di luar pada system minimum. Berikut ilustrasi skematiknya;
Modul Dasar Mikrokontroler | Beny Abdurrahman    | 54 
 
Instruksi yang digunakan untuk mengambil data masukan adalah dengan menggunakan register
PINx (seperti telah dijelaskan pada materi sebelumnya), Berikut penjabaran penulisan program
untuk membaca sinyal data dari luar :
PINA == 0b11111101;
Penjelasan :
pada PORTA bit 1 berlogika rendah (terdapat sinyal masukan), bit 0 dan
bit 2-7 berlogika 1 (tidak terdapat sinyal masukan)
Instruksi program masukan PIN biasanya digunakan bersamaan dengan dengan intruksi syarat
pada bahasa C. Salah satunya yaitu penggunaanya bersama instruksi “IF”, berikut contohnya;
if(PINA==0b11111101)
{
…….. (aksi yang dilakukan)
};
Atau pada perulangan “while”;
while(PINA==0b11111101)
{
…….. (aksi yang dilakukan berulang-ulang)
};
Penggunaan symbol “==” (sama dengan dua kali), mempunyai fungsi sebagai pertanyaan kondisi
pada PIN yang dituju. Apakah kondisi PIN masukan dalam kondisi rendah atau pada kondisi
tinggi. Sedangkan untuk mengetahui hasil dari pembacaan masukan program masukan (INPUT)
digabung dengan program keluaran (OUTPUT).
Contoh rangkaian :
Modul Dasar Mikrokontroler | Beny Abdurrahman    | 55 
 
Penjelasan rangkaian : pada rangkaian di atas, tombol berada di PORTB yaitu di PB0-PB3 maka untuk
pendefinisian port B sebagai input adalah :
DDRB=0b11110000; atau DDRB=0xF0;
Kemudian berikan kondisi awal / default port dengan nilai 1 pada PB0-PB3 :
PORTB=0b11111111; atau PORTB=0xFF;
Contoh program :
1. Tombol untuk menyalakan 1 lampu
Skrip berikut ini akan menghasilkan program : Ketika tombol ditekan, lampu C0 akan menyala,
sementara ketika dilepaskan, lampu akan mati.
#include <avr/io.h>
#include <util/delay.h>
int main(void){
DDRB=0xF0; //PORTB0-3 jadi Input, PORTB4-7 jadi output
DDRC=0xFF; //PORTC sebagai Output
PORTB=0xFF; //Tombol default mendapat nilai 1
PORTC=0xFF; //LED Default Mati
while(1){
if(PINB==0b11111110) //Jika SW1 ditekan
{
PORTC=0b11111110; // PORT C0 lampu menyala
}
else //kondisi jika tombol tidak ditekan / dilepas
{
PORTC=0b11111111; //PORT C lampu mati (bisa ditulis 0xFF)
}
}
}
2. Dua Tombol, tombol 1 untuk menghidupkan dan tombol 2 untuk mematikan
Saklar Sw1 untuk menghidupkan LED, Saklar Sw2 untuk mematikan LED
...
...
if(PINB==0b11111110) //Jika SW1 ditekan
{
PORTC=0b11111110; // PORT C0 lampu menyala
}
if(PINB==0b11111101) //Jika SW2 ditekan
{
PORTC=0b11111111; //PORT C lampu mati (bisa ditulis 0xFF)
}
..
Modul Dasar Mikrokontroler | Beny Abdurrahman    | 56 
 
3. Tombol untuk menghidupkan led bergeser
if(PINB==0b11111110) //Jika SW1 ditekan
{
PORTC=0b11111110; // PORT C0 lampu menyala
_delay_ms(500);
PORTC=0b11111101; // PORT C1 lampu menyala
_delay_ms(500);
PORTC=0b11111011; // PORT C2 lampu menyala
_delay_ms(500);
......seterusnya
}
4. Tombol untuk mengakses beberapa port
#include <avr/io.h>
#include <util/delay.h>
int main(void){
DDRA=0xFF; //PORTA sebagai Output
DDRB=0xF0; //PORTB0-3 jadi Input, PORTB4-7 jadi output
DDRC=0xFF; //PORTC sebagai Output
DDRD=0xFF; //PORTD sebagai Output
PORTA=0xFF;
PORTB=0xFF; //Tombol default mendapat nilai 1
PORTC=0xFF; //LED Default Mati
PORTD=0xFF;
while(1){
if(PINB==0b11111110) //Jika SW1 ditekan
{
PORTA=0b11111110; // PORT A0 lampu menyala
}
if(PINB==0b11111101) //Jika SW2 ditekan
{
PORTC=0b11111110; // PORT C0 lampu menyala
}
if(PINB==0b11111011) //Jika SW3 ditekan
{
PORTD=0b11111110; // PORT D0 lampu menyala
}
if(PINB==0b11110111) //Jika SW4 ditekan (Led A dan C geser)
{
PORTA=0b11111110; // PORT A0 lampu menyala
PORTC=0b11111110; // PORT C0 lampu menyala
_delay_ms(500);
PORTA=0b11111100; // PORT A0,A1 lampu menyala
PORTC=0b11111100; // PORT C0,C1 lampu menyala
_delay_ms(500);
.....seterusnya
}
}
}

More Related Content

PDF
Praktikum 4 decorder
PDF
1 konsep sinyal
PPTX
LAPORAN PRAKTIKUM "RANGKAIAN RL dan RC"
PPTX
Rangkaian Kapasitor
PPTX
Kelompok 6(aplikasi transistor)
DOCX
Dioda
DOCX
Pengertian sinyal
PDF
Bab 5 counter
Praktikum 4 decorder
1 konsep sinyal
LAPORAN PRAKTIKUM "RANGKAIAN RL dan RC"
Rangkaian Kapasitor
Kelompok 6(aplikasi transistor)
Dioda
Pengertian sinyal
Bab 5 counter

What's hot (20)

DOCX
Jelaskan dan gambarkan karakteristik dioda
PDF
Laporan Praktikum Mikrokontroler
PPTX
Jenis - Jenis Gangguan dalam Sistem Transmisi
PDF
Laporan praktikum mikrokontroler dengan led
DOCX
Bab 2 Laporan Pembangkitan Sinyal Kontinyu
PDF
Graph-Struktur Data.pdf
PDF
sharing belajar OP Am elektronika dasar
PPTX
13 jembatan arus bolak – balik
PDF
11 iluminasi
DOCX
Transistor sebagai saklar a’lim abror c2
PDF
Laporan Laboratorium Dasar Pemrograman dengan Bahasa C by Muhammad Kennedy Gi...
PDF
Dasar sistem kontrol
PDF
Laporan power supply
PDF
Buck Boost Converter
DOCX
Laporan modul 7 (rangkaian seri rlc)
PPT
PDF
Bank Soal Materi Pelajaran Dioda
PPT
Transistor
DOCX
Simbol Komponen Elektronika
PPTX
Mengenal komponen elektronika
Jelaskan dan gambarkan karakteristik dioda
Laporan Praktikum Mikrokontroler
Jenis - Jenis Gangguan dalam Sistem Transmisi
Laporan praktikum mikrokontroler dengan led
Bab 2 Laporan Pembangkitan Sinyal Kontinyu
Graph-Struktur Data.pdf
sharing belajar OP Am elektronika dasar
13 jembatan arus bolak – balik
11 iluminasi
Transistor sebagai saklar a’lim abror c2
Laporan Laboratorium Dasar Pemrograman dengan Bahasa C by Muhammad Kennedy Gi...
Dasar sistem kontrol
Laporan power supply
Buck Boost Converter
Laporan modul 7 (rangkaian seri rlc)
Bank Soal Materi Pelajaran Dioda
Transistor
Simbol Komponen Elektronika
Mengenal komponen elektronika
Ad

Viewers also liked (20)

PDF
Bab 4. Penggunaan Software AVR Studio 4, Simulasi dan Downloader
PDF
Modul Gambar Teknik : KB2. Simbol Elektronika
PDF
Dioda
PDF
Induktor dan transformator
PDF
Modul Mikrokontroler - Bab 3. Pemrograman Mikrokontroler
PPTX
Kerja Praktek
PPTX
Bjt
PPTX
Aplikasi dioda
PDF
243176098 3-superelevasi
PPTX
07.pelatihan pengawas lapangan instalasi lift & eskalator
PPTX
Evakuasi korban terjebak lift
PPT
Lift by martin muljana
PPTX
04.pengantar eskalator
PDF
Aplikasi motor listrik pada elevator
PPTX
06.teknik perawatan sarana transportasi vertikal dalam bangunan gedung
PPTX
01.perancangan sistem transportasi vertikal dalam gedung
PDF
Materi deputi ips_bsn_erniningsih_peran_standardisasi_dan_penilaian_kesesuaia...
PDF
Direktori SNI Wajib 2015
PPTX
Dasar semikonduktor
PPTX
Struktur Kurikulum SMK edisi 2016
Bab 4. Penggunaan Software AVR Studio 4, Simulasi dan Downloader
Modul Gambar Teknik : KB2. Simbol Elektronika
Dioda
Induktor dan transformator
Modul Mikrokontroler - Bab 3. Pemrograman Mikrokontroler
Kerja Praktek
Bjt
Aplikasi dioda
243176098 3-superelevasi
07.pelatihan pengawas lapangan instalasi lift & eskalator
Evakuasi korban terjebak lift
Lift by martin muljana
04.pengantar eskalator
Aplikasi motor listrik pada elevator
06.teknik perawatan sarana transportasi vertikal dalam bangunan gedung
01.perancangan sistem transportasi vertikal dalam gedung
Materi deputi ips_bsn_erniningsih_peran_standardisasi_dan_penilaian_kesesuaia...
Direktori SNI Wajib 2015
Dasar semikonduktor
Struktur Kurikulum SMK edisi 2016
Ad

Similar to Bab 5 Pengolahan Input Output (20)

DOCX
Mikrokontroler io tombol dan led
PPTX
2 mikrokontroler atmega 8535
PDF
1 mikrokontroler-avr1
PDF
Basic avr-microcontroller-tutorial 8535
PDF
Basic avr-microcontroller-tutorial v3
PDF
2 ATMEGA 8535 .pdf
PPT
1. PENDAHULUAN MIKROKONTROLER ATMEGA 8535.ppt
DOCX
Program delphi
PPTX
Materi Proyek Mikrokontroler Jenis PIC16F84
DOC
Mikroprosesor dan mikrokontroler
DOC
Tugas so
DOC
PDF
Laporan praktikum mikrokontroler dengan led
PDF
Modul dasar-mikrokontroler-bab-i-pengantar
PDF
Makalah mikroprosesor jam digital dengan LCD16X2
PDF
Buku Ajar Mikrokontroler dan Interface.pdf
PDF
Pemrograman Mikrokontroller
PPTX
PDF
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16
PDF
Laporan praktikum mikrokontroler
Mikrokontroler io tombol dan led
2 mikrokontroler atmega 8535
1 mikrokontroler-avr1
Basic avr-microcontroller-tutorial 8535
Basic avr-microcontroller-tutorial v3
2 ATMEGA 8535 .pdf
1. PENDAHULUAN MIKROKONTROLER ATMEGA 8535.ppt
Program delphi
Materi Proyek Mikrokontroler Jenis PIC16F84
Mikroprosesor dan mikrokontroler
Tugas so
Laporan praktikum mikrokontroler dengan led
Modul dasar-mikrokontroler-bab-i-pengantar
Makalah mikroprosesor jam digital dengan LCD16X2
Buku Ajar Mikrokontroler dan Interface.pdf
Pemrograman Mikrokontroller
Modul dasar-mikrokontroler-bab-ii-kebutuhan-hardware-at mega16
Laporan praktikum mikrokontroler

More from Beny Abd (13)

PDF
Modul 2 teknik pemrograman mengenal bahasa c dan compiler
PDF
Modul teknik pemrograman mikrokontroler dan mikroprosesor
PDF
Pengenalan alat dan bahan gambar teknik
PDF
Melakukan Troubleshooting Hasil Install Home Theater
PDF
Menempatkan peralatan audio menghasikan suara surround dengan sistem 4.1 dan 6.1
PDF
Menempatkan monitor gambar sesuai dengan jarak tempat duduk
PDF
TV Proyektor dalam Home Theater
PDF
Merawat Home Theater
PDF
Menempatkan peralatan audio menghasikan suara surround dengan sistem 4.1, 5.1...
PDF
Kebutuhan Peralatan Install Home Theater
PPTX
Komponen pasif induktor
PPT
Elektronika Dasar - Kapasitor
PPTX
Elektronika Dasar - Resistor
Modul 2 teknik pemrograman mengenal bahasa c dan compiler
Modul teknik pemrograman mikrokontroler dan mikroprosesor
Pengenalan alat dan bahan gambar teknik
Melakukan Troubleshooting Hasil Install Home Theater
Menempatkan peralatan audio menghasikan suara surround dengan sistem 4.1 dan 6.1
Menempatkan monitor gambar sesuai dengan jarak tempat duduk
TV Proyektor dalam Home Theater
Merawat Home Theater
Menempatkan peralatan audio menghasikan suara surround dengan sistem 4.1, 5.1...
Kebutuhan Peralatan Install Home Theater
Komponen pasif induktor
Elektronika Dasar - Kapasitor
Elektronika Dasar - Resistor

Recently uploaded (20)

DOCX
Modul Ajar Deep Learning PAI & BP Kelas 12 SMA Terbaru 2025
PPTX
PENGIMBASAN PEMBELAJARAN MENDALAM (DEEP LEARNING)
DOCX
Modul Ajar Deep Learning PAI & BP Kelas 10 SMA Terbaru 2025
PPTX
Keterbatasan-Fasilitas-dalam-Mengajar-KKA.pptx
PPSX
Teknik Trading Selang Seling Yang Dapat Digunakan Untuk Trading Manual Maupun...
PDF
Deck Rumah Pendidikan untuk Mendukung Program Prioritas Kemendikdasmen.pdf
DOCX
Lembar Kerja Mahasiswa Information System
PDF
883668952-KP-4-Modul-2-Kerangka-Pembelajaran-Mendalam.pdf
PDF
PPT Resources Seminar AITalks: AI dan Konseling GPT
DOCX
Modul Ajar Deep Learning Bahasa Inggris Lanjutan Kelas 11 SMA Terbaru 2025
PDF
lembar kerja LMS tugas pembelajaran mendalam
DOCX
Modul Ajar Deep Learning PKN Kelas 10 SMA Terbaru 2025
PPTX
PPT MATERI KODING DAN KECERDASAN ARTIFISIAL UNTUK PEMBELAJARAN
PPTX
Pancasila: fondasi peradaban dan kebudayaan berkelanjutan
PDF
KELOMPOK 4 LK Modul 4 KP4 Asesmen PM (3).pdf
DOCX
Modul Ajar Deep Learning Biologi Kelas 10 SMA Terbaru 2025
PDF
Materi Seminar AITalks: AI dan Konseling GPT
PPT
Teknologi-Pangan-Pertemuan-820728132309-.ppt
PPTX
Presentasi_Pembelajaran_Mendalam_Lengkap.pptx
PDF
Materi Seminar AITalks AI dan Suku Digital
Modul Ajar Deep Learning PAI & BP Kelas 12 SMA Terbaru 2025
PENGIMBASAN PEMBELAJARAN MENDALAM (DEEP LEARNING)
Modul Ajar Deep Learning PAI & BP Kelas 10 SMA Terbaru 2025
Keterbatasan-Fasilitas-dalam-Mengajar-KKA.pptx
Teknik Trading Selang Seling Yang Dapat Digunakan Untuk Trading Manual Maupun...
Deck Rumah Pendidikan untuk Mendukung Program Prioritas Kemendikdasmen.pdf
Lembar Kerja Mahasiswa Information System
883668952-KP-4-Modul-2-Kerangka-Pembelajaran-Mendalam.pdf
PPT Resources Seminar AITalks: AI dan Konseling GPT
Modul Ajar Deep Learning Bahasa Inggris Lanjutan Kelas 11 SMA Terbaru 2025
lembar kerja LMS tugas pembelajaran mendalam
Modul Ajar Deep Learning PKN Kelas 10 SMA Terbaru 2025
PPT MATERI KODING DAN KECERDASAN ARTIFISIAL UNTUK PEMBELAJARAN
Pancasila: fondasi peradaban dan kebudayaan berkelanjutan
KELOMPOK 4 LK Modul 4 KP4 Asesmen PM (3).pdf
Modul Ajar Deep Learning Biologi Kelas 10 SMA Terbaru 2025
Materi Seminar AITalks: AI dan Konseling GPT
Teknologi-Pangan-Pertemuan-820728132309-.ppt
Presentasi_Pembelajaran_Mendalam_Lengkap.pptx
Materi Seminar AITalks AI dan Suku Digital

Bab 5 Pengolahan Input Output

  • 1. Modul Dasar Mikrokontroler | Beny Abdurrahman    | 45    BAB V I/O ATMega16 ATMega16 dikemas dengan beberapa tipe, namun yang banyak digunakan dan mudah ditemui adalah tipe PDIP. Kemasan PDIP (Dual Inline Package) ini memiliki 40 kaki. Dimana terdiri dari 32 pin untuk input/output. Gambar susunan kaki ATMega16 bisa dilihat berikut : Port untuk Input dan Output dibagi menjadi 4 bagian yaitu PORT A, PORT B, PORT C dan PORT D. Keempat port tersebut merupakan jalur bi-directional yang dapat di program sebagai input maupun output melalui register. Berikut adalah register yang terkait dengan operasi I/O : • DDRx – Data Direction Register • PORTx – Pin Output Register • PINx – Pin Input Register dimana x = nama port (A, B, C atau D) REGISTER Sebelum membahas lebih jauh, kita perlu mengenal apa yang disebut dengan register. Register adalah suatu memori di dalam CPU yang bisa diakses secara sering dan cepat. Register berkaitan dengan berbagai operasi dalam mikrokontroler. Sebuah register berukuran 1 byte dimana sama dengan 8 bit data. Bit No. 7 6 5 4 3 2 1 0
  • 2. Modul Dasar Mikrokontroler | Beny Abdurrahman    | 46    upper nibble lower nibble  Register DDRx Seperti yang telah dijelaskan sebelumnya, port dalam mikrokontroler adalah bidirectional dimana bisa diatur baik sebagai input maupun output. Untuk mengaturnya kita menggunakan bantuan register DDRx (Data Direction Register). Register DDRx  Bit No.  7  6  5  4  3  2  1  0  Nama  DDRx7  DDRx6  DDRx5  DDRx4  DDRx3  DDRx2  DDRx1  DDRx0  Nilai  0  0  0  0  0  0  0  0  ‘x’ pada tabel diatas bisa diganti dengan nama port (A, B , C atau D). Sebagai contoh : DDRC = (1<<DDC0)|(1<<DDC4)|(1<<DDC5)|(1<<DDC7); Penulisan di atas sama saja dengan DDRC = 0b10110001; atau DDRC = 0xB1; atau juga DDRC = (1<<0)|(1<<4)|(1<<5)|(1<<7); Bagaimana jika ingin mengakses port B? Ganti x dengan B : DDRB = (1<<DDB0)|(1<<DDB4)|(1<<DDB5)|(1<<DDB7); atau dengan: DDRB = 0xB1; atau DDRB = 0b10110001; Sekarang coba kita lihat di port mikrokontrolernya, nilai 1 menjadikan port sebagai output dan 0 sebagai input. Pada gambar di samping, berarti pin PC7, PC5, PC4 dan PC0 telah diset sebagai Output. Sedangkan pin PC6, PC3, PC2 dan PC1 sebagai input. Pin input nantinya akan dapat membaca masukan logika baik itu high (1) atau low (0). Begitu juga untuk pin output akan dapat mengeluarkan logika 1 (tegangan = VCC/5v) dan 0 (tegangan = 0/Gnd).
  • 3. Modul Dasar Mikrokontroler | Beny Abdurrahman    | 47    PORTx Register PORTx berfungsi untuk memberikan nilai keluaran pin Output, apakah berlogika 1 atau 0. Setelah pin di set menjadi output, kita bisa memberikan nilai logika baik 1 atau 0. Ilutrasi register PORTx : Bit No.  7  6  5  4  3  2  1  0  Nama  PORTx7  PORTx6  PORTx5  PORTx4  PORTx3  PORTx2  PORTx1  PORTx0  Nilai  0  0  0  0  0  0  0  0  Register ini sama dengan register DDRx, yang membedakan hanya namanya yaitu PORTx. Untuk penulisannya pun juga sama, mari kita lihat contoh di bawah ini : PORTD = (1 << PD0)|(1 << PD3)|(1 << PD6); PORTD = (1 << 0)|(1 << 3)|(1 << 6); PORTD = 0b01001001; PORTD = 0x49; Kita lihat contoh program : DDRC = 0b10110001; PORTC = 0b10010001; OUTPUT = 0b10010001; Port C diinisialisasi menggunakan DDRx register. Bit yang berwarna oranye menandakan sebagai pin output. Sekarang, mari berkonsentrasi pada bit berwarna oranye saja. Karena mereka adalah pin output, ketika diberi nilai '1' di PORT, pin akan berlogika HIGH (1), dan akan memberikan tegangan output VCC di pin itu. Sekarang lihat contoh lain : DDRC = 0b10110001; PORTC = 0b10010101; OUTPUT = 0b10010001; Sekali lagi, bit berwarna oranye berarti adalah pin output. Jadi, apapun nilai (0 atau 1) yang diberikan pada bit oranye tersebut, hasilnya akan sama pada output. Sekarang, lihat bit berwarna merah. Meskipun kita memberi logika HIGH (1) di register PORTx, output yang keluar tetap bernilai LOW (0). Hal ini karena pin diinisialisasi sebagai pin input oleh DDRx. Oleh karena itu, PORTx tidak dapat mengubah nilai dari pin itu. Oleh karena itu, secara umum, PORTx tidak dapat memodifikasi properti dari pin yang diinisialisasi sebagai input oleh DDRx.
  • 4. Modul Dasar Mikrokontroler | Beny Abdurrahman    | 48    PINx Register Register PINx memperoleh nilai dari membaca masukan/inputan pin mikrokontroler. Registernya adalah berikut : Bit No.  7  6  5  4  3  2  1  0  Nama  PINx7  PINx6  PINx5  PINx4  PINx3  PINx2  PINx1  PINx0  Nilai  0  0  0  0  0  0  0  0  Prosedur penulisan register PINx masih sama. DDRC = 0b10110001; PINC = 0b01001011; INPUT = 0b01001011; Di sini, bit berwarna sesuai dengan pin yang diinisialisasi sebagai input oleh DDRx. Pada baris kedua, PINx register didefinisikan. Nah, contoh ini hanya untuk menjelaskan konsep, dalam praktiknya kita selalu menggunakan PINx sebagai kondisi (seperti di IF atau WHILE loop). Sesuai pernyataan kedua, perintah PINx membaca nilai hanya pada pin input. DDRC = 0b10110001; PINC = 0b01011010; INPUT = 0b01001010; Di sini, Anda dapat membandingkannya dengan contoh yang saya miliki untuk PORTx. Karena bit berwarna merah adalah pin output, PINx tidak bisa mengubah nilainya. Oleh karena itu, secara umum, PINx tidak dapat memodifikasi properti dari pin yang diinisialisasi sebagai output oleh DDRx dan sebaliknya. Contoh Program DDRC = 0x0F; PORTC = 0x0C; // asumsi tegangan 4v dialirkan ke PORTC.6 dan Vcc = 5V if (PINC == 0b01000000) PORTC = 0x0B; else PORTC = 0x00; Penjelasan : o DDRC = 0x0f; setara dengan DDRC = 0b00001111; Ini berarti bahwa pin PC0 - PC3 adalah pin output (dapat dimanipulasi menggunakan PORTC) dan pin PC4 ... PC7 yang pin input (yang kadarnya menentukan nilai pinc).
  • 5. Modul Dasar Mikrokontroler | Beny Abdurrahman    | 49    o PORTC = 0x0C; setara dengan PORTC = 0b00001100; Ini berarti bahwa pin PC2 dan PC3 memiliki tegangan HIGH (Vcc = 5V) dan pin PC0 dan PC1 memiliki tegangan LOW (0V). Pin lainnya memiliki tegangan rendah secara default. o if (pinc = 0b01000000) memeriksa tegangan input pada pin PC6. Karena itu disebutkan dalam komentar yang 4V sebuah dipasok ke PORTC.6 (sama seperti pin PC6), kondisi ini benar (seperti 4> 2,5, di mana 2.5V adalah ambang batas, 5/2 = 2,5). o Karena kondisi if : benar, PORTC = 0x0B; dijalankan. o Jika kondisi if tidak terpenuhi, PORTC = 0x00; akan dieksekusi.
  • 6. Modul Dasar Mikrokontroler | Beny Abdurrahman    | 50    Program menyalakan led Sebelum memrogram led, kita harus melihat skematik rangkaian untuk bisa menentukan apakah led akan menyala atau mati ketika diberikan logika 1/0. Ada beberapa tipe kerja rangkaian untuk mengaksesnya, yaitu Aktif LOW dan Aktif High. Aktif LOW merupakan kerja rangkaian yang dapat dioperasikan/di –ON –kan dengan diberi logika rendah (“0”/0). Sedangkan Aktif HIGH merupakan kerja rangkaian yang dapat dioperasikan/di-ON-kan dengan diberi logika tinggi (“1”/+5V). Berdasarkan skematik dari kerja rangkaian diatas dapat digambarkan sebagai berikut: Penulisan skrip bisa dilakukan secara hexa maupun biner, dengan keterangan penjelasan bisa dilihat di tabel : Contoh penulisan skrip di atas, untuk hexa 0x0F sama saja penulisannya dengan biner 0b00001111, yang berarti bahwa bit0 – bit3 mendapatkan logika high (tegangan vcc / 5 volt) dan bit4 – bit7 mendapat logika low, yaitu tegagan 0 volt / ground. Gambar rangkaian untuk praktikum di bawah :
  • 7. Modul Dasar Mikrokontroler | Beny Abdurrahman    | 51    1. Menyalakan semua led bersama #include <avr/io.h> int main(void){ DDRA=0xFF; //Port A0-7 sebagai output, penulisanya sama saja dengan : 0b11111111 while(1){ PORTA=0b00000000; //bisa ditulis 0x0F //berarti port A mengeluarkan tegangan 0 / GND //sehingga led akan menyala } } 2. Led 1 On, Led 2 Off, Led 3 On, Led 4 Off, Led 5 On, Led 6 Off, Led 7 On, Led 8 Off #include <avr/io.h> int main(void){ DDRA=0xFF; //Port A0-7 sebagai output, penulisanya sama saja dengan : 0b11111111 while(1){ PORTA=0b01010101; } } 3. Program Led Kedip #include <avr/io.h> #include <util/delay.h> //memasukan library delay int main(void){ DDRA=0xFF; //Port A jadi Output, bisa ditulis -> 0b11111111 while(1){ PORTA=0b11111111; // LED MATI _delay_ms(120); // jeda 0.12 detik PORTA=0b00000000; // led HIDUP _delay_ms(150); // jeda 0.15 detik dan akan balik ke atas } }
  • 8. Modul Dasar Mikrokontroler | Beny Abdurrahman    | 52    4. Program Menyalakan Geser Kanan #include <avr/io.h> #include <util/delay.h> //memasukan library delay int main(void){ DDRA=0xFF; //Port A jadi Output, bisa ditulis -> 0b11111111 while(1){ PORTA=0b11111110; _delay_ms(120); PORTA=0b11111101; _delay_ms(150); PORTA=0b11111011; _delay_ms(120); PORTA=0b11110111; _delay_ms(150); PORTA=0b11101111; _delay_ms(120); PORTA=0b11011111; _delay_ms(150); PORTA=0b10111111; _delay_ms(120); PORTA=0b01111111; _delay_ms(150); } } 5. Latihan 1. Buatlah program untuk menyalakan LED geser bergantian kekiri! 2. Buatlah program untuk menyalakan LED geser bergantian kekanan -kekiri!
  • 9. Modul Dasar Mikrokontroler | Beny Abdurrahman    | 53    Progam Input dengan Push Button Pada topik sebelumnya sudah dikenalkan cara meng-akses port sebagai keluaran, sehingga selanjutnya pada topik ini akan digabung dengan masukan atau input. Masukan untuk mikrokontroler bisa dari saklar, sinyal logika, atau rangkaian lain yang memiliki keluaran. Sebagai dasar mempelajari masukan pada mikrokontroler, pada topik ini akan digunakan saklar/button sebagai masukannya. Mendefinisikan Port Sebagai Input Cara mendefinisikan PORT sebagai inputan digunakan skrip berikut : DDRB =0b00000000; //Semua 8 bit pada PORTB berfungsi sebagai masukan //Bisa ditulis --> DDRB =0x00; Kita juga bisa mengeset beberapa pin saja yang menjadi masukan contoh : DDRB =0b11110000; //PinB0-3 sebagai masukan, PinB4-7 sebagai keluaran //Bisa ditulis --> DDRB =0xF0; Pengambilan Data Input / Masukan Rangkaian masukan ke mikrokontroler kebanyakan mengambil prinsip falling edge sebagai sinyal tanda aktif, atau bisa dikatakan memiliki logika aktif jika sinyal masukannya rendah (low). Apabila terhubung dengan sebuah masukan dari saklar/button, maka saklar saat tertutup terhubung dengan ground (Gnd). Sebaliknya, apabila saklar dalam kondisi terbuka akan mempertahankan logika tinggi (high) pada masukan, dikarenakan terdapat resistor pull up yang menjaga jalur data masukan dalam kondisi tinggi. Walaupun dalam pengaturan kondisi masukan sudah di pull up, akan tetapi untuk mengamankan kondisi datanya , maka akan dipasang resistor pull up lagi di luar pada system minimum. Berikut ilustrasi skematiknya;
  • 10. Modul Dasar Mikrokontroler | Beny Abdurrahman    | 54    Instruksi yang digunakan untuk mengambil data masukan adalah dengan menggunakan register PINx (seperti telah dijelaskan pada materi sebelumnya), Berikut penjabaran penulisan program untuk membaca sinyal data dari luar : PINA == 0b11111101; Penjelasan : pada PORTA bit 1 berlogika rendah (terdapat sinyal masukan), bit 0 dan bit 2-7 berlogika 1 (tidak terdapat sinyal masukan) Instruksi program masukan PIN biasanya digunakan bersamaan dengan dengan intruksi syarat pada bahasa C. Salah satunya yaitu penggunaanya bersama instruksi “IF”, berikut contohnya; if(PINA==0b11111101) { …….. (aksi yang dilakukan) }; Atau pada perulangan “while”; while(PINA==0b11111101) { …….. (aksi yang dilakukan berulang-ulang) }; Penggunaan symbol “==” (sama dengan dua kali), mempunyai fungsi sebagai pertanyaan kondisi pada PIN yang dituju. Apakah kondisi PIN masukan dalam kondisi rendah atau pada kondisi tinggi. Sedangkan untuk mengetahui hasil dari pembacaan masukan program masukan (INPUT) digabung dengan program keluaran (OUTPUT). Contoh rangkaian :
  • 11. Modul Dasar Mikrokontroler | Beny Abdurrahman    | 55    Penjelasan rangkaian : pada rangkaian di atas, tombol berada di PORTB yaitu di PB0-PB3 maka untuk pendefinisian port B sebagai input adalah : DDRB=0b11110000; atau DDRB=0xF0; Kemudian berikan kondisi awal / default port dengan nilai 1 pada PB0-PB3 : PORTB=0b11111111; atau PORTB=0xFF; Contoh program : 1. Tombol untuk menyalakan 1 lampu Skrip berikut ini akan menghasilkan program : Ketika tombol ditekan, lampu C0 akan menyala, sementara ketika dilepaskan, lampu akan mati. #include <avr/io.h> #include <util/delay.h> int main(void){ DDRB=0xF0; //PORTB0-3 jadi Input, PORTB4-7 jadi output DDRC=0xFF; //PORTC sebagai Output PORTB=0xFF; //Tombol default mendapat nilai 1 PORTC=0xFF; //LED Default Mati while(1){ if(PINB==0b11111110) //Jika SW1 ditekan { PORTC=0b11111110; // PORT C0 lampu menyala } else //kondisi jika tombol tidak ditekan / dilepas { PORTC=0b11111111; //PORT C lampu mati (bisa ditulis 0xFF) } } } 2. Dua Tombol, tombol 1 untuk menghidupkan dan tombol 2 untuk mematikan Saklar Sw1 untuk menghidupkan LED, Saklar Sw2 untuk mematikan LED ... ... if(PINB==0b11111110) //Jika SW1 ditekan { PORTC=0b11111110; // PORT C0 lampu menyala } if(PINB==0b11111101) //Jika SW2 ditekan { PORTC=0b11111111; //PORT C lampu mati (bisa ditulis 0xFF) } ..
  • 12. Modul Dasar Mikrokontroler | Beny Abdurrahman    | 56    3. Tombol untuk menghidupkan led bergeser if(PINB==0b11111110) //Jika SW1 ditekan { PORTC=0b11111110; // PORT C0 lampu menyala _delay_ms(500); PORTC=0b11111101; // PORT C1 lampu menyala _delay_ms(500); PORTC=0b11111011; // PORT C2 lampu menyala _delay_ms(500); ......seterusnya } 4. Tombol untuk mengakses beberapa port #include <avr/io.h> #include <util/delay.h> int main(void){ DDRA=0xFF; //PORTA sebagai Output DDRB=0xF0; //PORTB0-3 jadi Input, PORTB4-7 jadi output DDRC=0xFF; //PORTC sebagai Output DDRD=0xFF; //PORTD sebagai Output PORTA=0xFF; PORTB=0xFF; //Tombol default mendapat nilai 1 PORTC=0xFF; //LED Default Mati PORTD=0xFF; while(1){ if(PINB==0b11111110) //Jika SW1 ditekan { PORTA=0b11111110; // PORT A0 lampu menyala } if(PINB==0b11111101) //Jika SW2 ditekan { PORTC=0b11111110; // PORT C0 lampu menyala } if(PINB==0b11111011) //Jika SW3 ditekan { PORTD=0b11111110; // PORT D0 lampu menyala } if(PINB==0b11110111) //Jika SW4 ditekan (Led A dan C geser) { PORTA=0b11111110; // PORT A0 lampu menyala PORTC=0b11111110; // PORT C0 lampu menyala _delay_ms(500); PORTA=0b11111100; // PORT A0,A1 lampu menyala PORTC=0b11111100; // PORT C0,C1 lampu menyala _delay_ms(500); .....seterusnya } } }