Kali ini, saya akan bahas dasar bahasa pemrograman C dengan topik pengulangan goto. Pengulangan goto ini berfungsi untuk menjalankan perintah menuju label yang dituju. Label berupa string sebagai alamatnya.

Langsung saja kita lihat contoh scriptnya

/*
 * Goto.cpp
 *
 * Created: 13/01/2016 11:15:20
 *  Author: Diaz
 */

#include <avr/io.h>
#include <util/delay.h>

int main(void)
{
    DDRA=0xff;            // Menjadikan PORTA sebagai output
    PORTA=0b01111111;    // Menjadikan PORTA sebagai output dengan default berlogika 1

    DDRB=0x00;            // Menjadikan PORTB sebagai input
    PORTB=0xff;            // Menjadikan PORTB sebagai input denga internal pull up aktif
  
    unsigned int a;
  
    Awal:                // Label Awal
    Step1:                // Label Step1
    for (a=0; a<1; a++)    // PORTA Geser ke kiri 1x
    {
        PORTA=PORTA<<1;
        _delay_ms(500);
    }
  
    Step2:                // PORTA Geser ke kiri 1x
    for (a=0; a<1; a++)
    {
        PORTA=PORTA<<1;
        _delay_ms(500);
    }
  
    while(1)
    {
        if (!(PINB & (1<<0)))    // Menuju Label Awal
        {
            goto Awal;
        }
       
        if (!(PINB & (1<<1)))    // Menuju Label Step1
        {
            goto Step1;
        }
       
        if (!(PINB & (1<<2)))    // Menuju Label Step2
        {
            goto Step2;
        }
       
        if (!(PINB & (1<<3)))    //    PORTA=0xff
        {
            PORTA=0xff;
        }
    }
}

Pada artikel kali ini tidak saya sertakan gambar, silahkan running secara langsung melalui proteus untuk lebih memahaminya.

Disini saya buat 3 buah label yaitu Awal, Step1, dan Step2. Untuk label Awal dan Step1 sesungguhnya sama saja, karna diantara label Awal dan Step1 tidak ada isi perintah. Isi dari setiap bagian diatas adalah
  • Awal : masuk ke step1, geser PORTA 1x, masuk ke step2, geser PORTA1x
  • step1 : geser PORTA1x
  • step2 : geser PORTA 1x
  • Jika PINB0=0 masuk ke Awal
  • Jika PINB1=0 masuk ke Step1
  • Jika PINB2=0 masuk ke Step2
  • Jika PINB3=0 Led Mati semua
Pada awal program dijalankan, secara otomatis 2 Led akan menyala karna mengeksekusi label step1 dan 2. Jika kita tekan PINB0 atau 1, maka hal tersebut akan terulang. Namun jika kita tekan PINB2, maka led akan bergeser 1x saja, karna pengulangan dimulai dari step2 dimana hanya ada pergeseran bit 1x.

Sama seperti contoh sebelumnya, setiap pembuktian perintah menggunakan 1 PORT (8bit) sebagai pembuktiannya, dan 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 :