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

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
      };
}

       Sekian sekilas tentang Pemrograman I/O pada mikrokontroler yang bias penulis bagikan. Semoga bermanfaat. Terimakasih

Berlangganan update artikel terbaru via email:

1 Response to "PEMROGRAMAN I/O PADA MIKROKONTROLER"

  1. Kalau port I/O mikrokontroller diprogram sebagai output,maka sifat port tersebut sebagai

    ReplyDelete

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel