PENDAHULUAN
TUJUAN
1. Praktikan mampu memahami Input output mikrokontroler AVR AT Mega
2. Praktikan mampu memahami Input output AVR AT Mega
3. Praktikan mampu membuata program dalam bahasa C untuk input output Port
mikrokontroler dan penerapannya.
DASAR TEORI
Atmel AT Mega8535/16/32 dilengkapi dengan empat buah 8-bit input output (I/O) digital
multiguna yaitu PORTA, PORTB, PORTC, dan PORTD. Semua port ini juga memiliki
fungsi alternatif yang akan dijelaskan kemudian. Pada bab ini akan dibahas mengenai
fungsi dasar port I/O digital. Selanjutnya pada subbab berikut akan dibahas mengenai
penggunaan port I/O dalam aplikasi led, seven segmen, keypad, dan LCD.
Register Port
Setiap port dalam AT Mega8535 memiliki tiga buah register yang berkaitan yaitu
1. Data Register (PORTx), digunakan untuk menulis data keluaran port.
2. Data Direction Register (DDRx), digunakan untuk menentukan pin port spesifik
sebagai output (bernilai 1) atau sebagai input (bernilai 0).
3. Input Pin Address (PINx) digunakan untuk membaca data input dari port.
Gambar 5.1 merupakan gambaran register-register yang dimiliki setiap port.
Port mikrokontroler AVR dapat dikonfigurasi sebagai input atau output, dengan cara
mengubah isi I/O register DDRx. Bit-bit pada DDRx menentukan arah pin. Setiap pin pada
AVR juga memiliki internal pull-up, untuk mengaktifkannya dilakukan dengan
memberikan nilai 0xFF pada register PORTx.
Untuk membaca data pada salah satu port, dapat digunakan fungsi PINx, sedangkan
membaca data per pin pada suatu port maka ditentukan bit pin-nya yaitu PINx.bit.
LANGKAH PERCOBAAN
1. Hubungkan port PIO pada AVR ATMega dengan modul penampil led.
Program 1:
#include <mega8535.h>
void main(void)
{
DDRD=0xFF; //PortD sebagai output
PORTD=0xFF; //PortD bernilai low
while(1)
{
PORTD.0=0; //PortD pin 0 diberi nilai 0
PORTD.1=1; //PortD pin 1 diberi nilai 1
PORTD.2=1;
PORTD.3=1;
PORTD.4=0;
PORTD.5=1;
PORTD.6=1;
PORTD.7=1;
};
}
Program 2:
/* Program portA input,dan port D output
*/
#include <mega8535.h>
void main(void)
{
//Deklarasi variabel lokal
unsigned char A; //variabel A bertipe uchar 0-255
DDRA=0X00; //PortA sebagai input
PORTA=0XFF; //PortA menggunakan pullup
DDRD=0XFF; //PortD sebagai output
PORTD=0XFF; //PortD bernilai awal high
while(1)
{
A=PINA;
PORTD=A;
};
}
Program 4.
/*Program geser bit variasikan nilai n, rubah
pergeseran kanan/kiri >>/<<
*/
#include <mega8535.h>
#include <delay.h>
unsigned char val,n; //variabel
global
void
main(void)
{
n=2;
DDRD=0XFF; //portD sebagai output
val=1<<7; //bit 7 diset 1, dan disimpan dalam val
PORTD=~val; //PortD invers val delay_ms(200);
while(1) { delay_ms(200);
val>>=n; //geser nilai val sebanyak n
kekanan PORTD=~val; if(val==0)
{
val=1<<7;
}
};
}
Program 5.
/*Program untuk membaca input port dan
dikeluarkan pada port yang lain
variasikan port masukan dan port
keluaran sesuai modul simulasi yg
digunakan
void main(void)
{
unsigned char n,a;
DDRD=0XFF;
PORTD=0XFF;
DDRB=0X00;
PORTB=0XFF;
#asm ("nop")
while(1) {
if(PINB.0==0)
{ for
(a=0;a<3;a++)
{ for
(n=0;n<6;n++)
{
PORTD=~D1[n];
delay_ms(500);
};
};
}
if(PINB.1==0)
{
PORTD=0;
delay_ms(500);
PORTD=255;
delay_ms(500);
PORTD=0;
delay_ms(500);
}
PORTD=255;
};
}