Kali ini saya akan membahas bagaimana cara mengatur bit dari masing - masing register. Kalau hampir disetiap contoh yang saya buat, untuk setiap DDR saya setting sama semua nilainya (output semua atau input semua). Kali ini kita akan bahas untuk mengatur sesuai bit yang diinginkan saja. Jika ada yang belum mengetahuinya sedikit perbedaan mengenai Register DDRx dan PORTx

DDRx = 0 (DDRx Diset menjadi input)
DDRx = 1 (DDRx Diset menjadi output)
PORTx = 1 (PORTx berlogika 1)
PORTx = 0 (PORTx berlogika 0)

Mari langsung saja kita lihat script berikut

/*
 * Penulisan_Pengaturan_IO_Bahasa_C.cpp
 *
 * Created: 11/01/2016 11:58:42
 *  Author: Diaz
 */


#include <avr/io.h>

int main(void)
{
    DDRB=0xff;            // Menjadikan PORTB sebagai output
    DDRC=0xff;            // Menjadikan PORTC sebagai output
    DDRD=0xff;            // Menjadikan PORTD sebagai output
   
    DDRA |= 1<<DDA0;    // Menjadikan DDRA.0 = 1 (output)
    DDRA |= 1<<DDA1;    // Menjadikan DDRA.1 = 1 (output)
    DDRA &= ~(1<<DDA7);    // Menjadikan DDRA.7 = 0 (input)
   
    while(1)
    {
        PORTA &= ~(1<<0);        // Menjadikan PORTA.0 berlogika 0
        PORTA |= 1<<1;            // Menjadikan PORTA.1 berlogika 1
        PORTA |= 1<<7;            // Menjadikan PORTA.7 berlogika 1
       
        if (!(PINA & (1<<7)))    // Jika PINA.7 = 0
        {
            PORTC=0xf0;
        }
       
        if (PINA & (1<<1))        // Jika PINA.1 = 1
        {
            PORTB=0x0f;
        }
       
    }
}

Dari script diatas akan dihasilkan seperti gambar berikut
Pengaturan Input Output Mikrokontroler Bahasa C
Pengaturan Input Output Mikrokontroler Bahasa C

Mari kita bahas mengenai cara kerja script tersebut 
  • DDRB,C, dan D saya sudah atur sebagai output terlebih dahulu untuk mempersingkat penulisan
  • Lalu dibawahnya merupakan teknik penulisan untuk membuat PORTA0 dan 1 agar menjadi output, dan PORTA7 menjadi input
  • PORTA &= ~(1<<0) Menjadikan PORTA.0 berlogika 0 dibuktikan dengan hanya menyalanya LED di PORTA0
  • PORTA |= 1<<7 Menjadikan PORTA.7 berlogika 1, disini dibuat agar input internal pull up aktif
  • Untuk perintah if (!(PINA & (1<<7))) Jika PINA.7 = 0, harus dibuktikan dengan menekan terlebih dahulu tombol yang ada dibawah agar PINA.7 menjadi logika 0. Dan menyalakan 4 led pertama
  • Dan yang terakhir if (PINA & (1<<1)) Jika PINA.1 = 1, dimana sebelumnya PORTA.1 sudah kita atur sebelumnya menjadi logika 1. Namun karna berlogika 1, LED tidak menyala seperti PORTA.0. Namun alasan saya buat perintah tersebut agar kita bisa membuktikan jika PINA.1 berlogika 1, maka PORTB akan bernilai 0x0f dimana 4 LED pertama padam, dan 4 LED berikutnya menyala.

Untuk teknik penulisan sendiri sebetulnya bisa dilakukan dengan beberapa cara, kamu bisa googling untuk menemukannya. Namun disini saya sebutkan 1 saja yang menurut saya cukup simple.

script tersebut saya buat menggunakan Atmel Studio 6 + AVRGCC dan Proteus

Saya sarankan untuk menulis ulang semua script tersebut secara manual, agar kalian lebih cepat menghafal dan memahami script tersebut. Namun jika mendapat kesulitan, saya sediakan file script beserta file proteusnya yang dapat didownload di sini

Sayapun disini masih belajar sehingga belum tentu benar mengenai semua yang  saya jabarkan diatas, jika ada yang merasa janggal atau merasa ada kesalahan dalam penjabaran saya, bisa kita diskusikan dikomentar.

Good Luck!

Related Post :