Kali ini Flowcode AVR kita gunakan untuk mencoba membuat sebuah aplikasi sederhana yang melakukan pembacaan masukan di PORT A kemudian menampilkan hasil pembacaan tersebut, yang sebelumnya melalui suatu variabel DATANYA, ke PORT B. Rancangan Flowcode AVR-nya ditunjukkan pada Gambar 1.
Gambar 1
Kemudian kita kompail dan disimulasikan hasilnya (juga) bisa dilihat pada Gambar 1 tersebut. Perhatikan bahwa tidak semua masukan PORT A kita buat berlogika 1, hanya A7, A5, A3 dan A1. Hasilnya juga tidak semua LED pada PORT B menyala, hanya sesuai dengan PORT A saja, yaitu B7, B5, B3 dan B1. Nah sekarang pertanyaannya:
Bagaimana dengan hasil kompilasi dalam bahasa C-nya (juga dalam bahasa ASM-nya)?
Berikut saya cuplik sebagian hasil kompilasi dalam bahasa C (baris 59-96), cukup yang utama dulu, selebihnya Anda bisa mencermati bahwa di awal program C-nya merupakan inisialisasi variabel, pemetaan mikrokontroler dan lain-lain. Perhatikan Gambar 2.
Gambar 2
Pada cuplikan listing tersebut saya sudah memberikan catatan. Bagaimana dengan Anda? Apa yang dilakukan pada bagian inisialisasi, baris 76 dan 77? Instruksi MCUCSR = 0x00; digunakan untuk mereset (memberikan logika 0) pada semua bit di register MCU Control and Register, perhatikan penjelasan pada gambar MCUCSR. Sedangkan WDTCR = 0x10; digunakan untuk mematikan watchdog, perhatikan penjelasan register WDTCR (Watchdog Control Register). Langkah ini dilakukan oleh Flowcode, menurut saya, untuk keamanan atau play safe saja. Karena kemungkinan kompailer C yang digunakan tidak mematikan watchdog secara otomatis (ada beberapa kompailer yang bisa melakukan-nya secara otomatis selama tidak secara eksplisit dinyatakan penggunaan watchdog).
MCUCSR
WDTCR
Listing program selebihnya adalah sesuai dengan yang diharapkan, baca masukan seperti pada baris 85, namun sebelumnya ada inisialisasi PORT A sebagai masukan, mengapa tidak langsung aja DDRA = 0x00? Kok harus di-AND-kan segala dengan 0, khan hasilnya sama saja logika-0 khan? Aneh? Kemudian dilanjutkan dengan mengirimkan isi variabel dari pembacaan PORT A ke PORTB, lihat baris 91, yang sebelumnya (juga) diawali dengan inisialisasi PORT B sebagai luaran (nah kalo ini caranya langsung).
Jika Anda berikan loop pada program, seperti pada Gambar 3, hasilnya juga sama saja, keunikan juga terjadi lagi seperti saya jelaskan pada artikel sebelumnya.
Gambar 3
Semoga bermanfaat, amin!