PEMROGRAMAN I/O PADA MIKROKONTROLER
PEMROGRAMAN
I/O PADA MIKROKONTROLER
Dengan Bahasa Asembler dan
Bahasa C
Port I/O pada mikrokontroler AVR dapat dikonfigurasi
sebagai output atau input. Untuk mengubah konfigurasi port I/O sebagai output atau input dapat dilakukan dengan mengubah nilai I/O port register DDR(Data
Direction Register) yang bersangkutan. Misal port B difungsikan
sebagai input, maka nilai I/O register DDRB = 00h dan sebaliknya apabila difungsikan sebagai output, maka nilai I/O register DDRB = FFH
Setiap port output atau input mikrokontroler AVR telah mempunyai internal
pull-up. Apabila port I/O mikrokontroler AVR difungsikan sebagai
input, maka internal pull-up dapat
diaktifkan atau tidak diaktifkan (menggunakan eksternal
pull-up). Apabila port mikrokontroler AVR difungsikan sebagai output,
maka internal pull-up tidak bisa diaktifkan.
Status Kondisi
|
DDR bit = 1
|
DDR bit = 0
|
Port bit = 1
|
Output high
|
Internal
pull-up
|
Port bit = 0
|
Output low
|
Eksternal pull-up /Input
floating
|
Berikut penjelasan untuk melakukan setting I/O sebagai
berikut.
Input :
DDR bit 0 serta port bit 1
Output
high : DDR bit 1 serta port bit 1
Output
low : DDR bit 1 serta port bit 0
Logika port I/O bisa diubah pada program secara bit
atau byte. Untuk merubah sebuah keluaran bit I/O dapat dilakukan dengan menggunakan
perintah cbi (clear bit I/O) untuk dapat
menghasilkan output low atau perintah sbi (set bit I/O) untuk dapat menghasilkan
output high. Perubahan secara byte dapat dilakukan dengan perintah IN atau OUT
yang menggunakan register bantu.
Port I/O fungsi output hanya mengeluarkan arus sebesar 20mA saja, sehingga
untuk dapat menggerakan perangkat elektronik yang lain perlu diberikan penguat
tambahan dengan menggunakan rangkaian elektronik tambahan. Atau dapat juga dilakukan dengan konfigurasi port sebagai sinking current,
seperti pada port yang digunakan untuk menyalakan komponen LED, yang akan menyala saat
port diberikan logika low (VoL = 0,7 v) dan LED mati saat port logika high
(VoH = 4,2 v).
Instruksi I/O (Bahasa Asembler)
1. ldi (load immediate) ; menuliskan konstanta pada register
sebelum konstanta tersebut dituliskan ke port I/O.
contoh :
ldi r20,0b11110000 ; konstanta dikonfigurasikan dalam
bilangan biner
ldi r20,0xff :
konstanta dikonfigurasikandalam bilangan heksadesimal
ldi r20,23 ; konstanta dikonfigurasikandalam bilangan desimal
ldi r20,23 ; konstanta dikonfigurasikandalam bilangan desimal
2. sbi ;
mebuat logika high, satu bit I/O register.
3. cbi ; mebuat logika low, satu bit I/O register.
4. in ;
membaca data pada port I/O atau internal peripheral
register (timers, UART, dsb) ke dalam
register.
contoh :
in r20,PinB
5. out ; menulis data pada sebuah register ke port I/O
atau
internal peripheral register.
6. sbic ; memeriksa apakah bit I/O register
clear.
Jika jawabannya ya, skip satu perintah dibawahnya.
contoh :
sbic PortB,3 ; meneruskan perintah,
jika bit ke-3 PortB clear.
7. sbis ; memeriksa apakah bit I/O register set.
Jika jawabannya ya, skip satu perintahd di bawahnya.
contoh :
sbis PortB,1 ; meneruskan
perintah, jika bit ke-1 PortB set.
Contoh program :
.include”C:\Program
Files\Atmel\AVR Tools\AvrAssembler\Appnotes\m16def.inc”
.org 0x0000
rjmp main
main:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
ldi r20,0xff ; menambahkan data 0xff ke register r20 (r20=0xff)
out ddra, r20 ; portA difungsikan sebagai output
out PORTA,r20 ; portA mengeluarkan logika high ‘1’
cbi PORTA,7 ; portA
mengeluarkan logika low ‘0’
stop: rjmp
stop
program diatas apabila disimulasikan, maka diketahui
bahwa portA akan berlogika high dan pada bit ke-7 akan low.
Contoh program (Bahasa C pada CVAVR) :
#include <mega16.h>
void main(void)
{
PORTA=0x00; //Status bit pada PORTA adalah 0
DDRA=0x00; //PORTA difungsikan sebagai input
PORTB=0x00; //Status bit pada PORTB adalah 0
DDRB=0xFF; //PORTB difungsikan sebagai output
while (1)
{
// Place your code here
PORTB=0x11; //Status bit pada PORTB adalah 1
PORTB=0x11; //Status bit pada PORTB adalah 1
};
}
Kalau port I/O mikrokontroller diprogram sebagai output,maka sifat port tersebut sebagai
ReplyDelete