Perancangan Program Perancangan Robot Line Follower Berbasis Mikrokontroler AT89S51

3.6 Perancangan Program

Robot ini dirancang untuk mendeteksi garis yang menjadi lintasannya. Diagram alir dari program yang akan dibuat adalah: Belok Kanan Cek Sensor kanan start Maju Cek Sensor kiri Belok Kiri 1 1 1 1 Gambar 3.6 Diagram Alir dari Program Program diawali dengan pengecekan logika pada sensor garis yang ada pada sebelah kanan robot. Jika sensor ini menerima logika 0 yang berarti sensor berada di atas garis putih, maka mikrokontroler segera memengirimkan logika agar jembatan H membelokkan robot ke kanan sehingga garis dapat dihindari. Universitas Sumatera Utara Namun ketika sensor kanan tersebut menerima logika 1 yang berarti sensor berada di atas lantai, maka mikrokontroler melanjutkan program untuk memeriksa logika yang ada pada sensor kiri robot. Ketika logika yang dihasilkan oleh sensor ini adalah 0, yang berarti sensor sedang berada di atas garis putih, maka mikrokontroler segera mengirimkan logika pada jembatan H agar segera membelokkan robot ke kiri. Ketika sensor kiri bernilai berlogika 1, maka robot akan tetap berjalan maju. Program robot pengikut garis: motor_kanan1 bit p0.5 ; motor kanan1 pada alamat bit p0.5 motor_kanan2 bit p0.4 ; motor kanan2 pada alamat bit p0.4 motor_kiri1 bit p0.6 ; motor kiri1 pada alamat bit p0.6 motor_kiri2 bit p0.7 ; motor kiri2 pada alamat bit p0.7 sensor_kanan bit p2.0 ; sensor kanan pada alamat bit p2.0 sensor_kiri bit p2.1 ; sensor kiri pada alamat bit p2.1 org 0h ;program dimulai dari 0000h cek_kanan: ;program utama acall maju ;memanggil rutin maju jb sensor_kanan,cek_kiri ;melompat ke bit p2.0 pada logika high 1 acall kanan ;memanggil rutin kanan sjmp cek_kanan ;melompat ke baris perintah label cek kanan cek_kiri: ; program utama jb sensor_kiri,cek_kanan ; melompat ke bit p2.1 pada logika high 1 acall kiri ; memanggil rutin kiri sjmp cek_kiri ;melompat ke baris perintah label cek kiri maju: ; perintah maju setb motor_kanan1 ; aktifkan logika high 1 pada it p0.5 clr motor_kanan2 ; aktifkan logika low pada bit p0.4 Universitas Sumatera Utara setb motor_kiri1 ; aktifkan logika high 1 pada bit p0.6 clr motor_kiri2 ; aktifkan logika low 0 pada bit p0.7 mov r7,65 ; isikan 65 pada register 7 R7 djnz r7, ; instruksi yang akan mengurangi 1 nilai register 7 dan akan melompat ke memori program maju jika setelah pengurangan belum dihasilkan 0 call mati ;memanggil rutin mati ret ;program berhenti untuk program maju mati: ;perintah untuk motor mati clr motor_kanan1 ;aktifkan logika low 0 pada bit p0.5 clr motor_kanan2 ; aktifkan logika low 0 pada bit p0.4 clr motor_kiri1 ; aktifkan logika low 0 pada bit p0.6 clr motor_kiri2 ; aktifkan logika low 0 pada bit p0.7 mov r7,80 ;isikan 80 pada register 7 R7 djnz r7, ; instruksi yang akan mengurangi 1 nilai register 7 dan akan melompat ke memori program maju jika setelah pengurangan belum dihasilkan 0 ret ; program berhenti untuk program mati kanan: ; perintah untuk kanan mov r6,5 ; isikan 5 pada register 6 R6 kanan1: ; perintah untuk kanan1 mov r5,1 ; isikan 1 pada register 5 R5 belok_kanan: ; perintah untuk belok kanan setb motor_kanan ; aktifkan logika high1 pada bit p0.5 Universitas Sumatera Utara clr motor_kanan2 ; aktifkan logika low 0 pada bit p0.4 clr motor_kiri1 ; aktifkan logika low 0 pada bit p0.6 setb motor_kiri2 ; aktifkan logika high1 pada bit p0.7 mov r7,220 ;isikan 220 pada register 7 R7 djnz r7, ; instruksi yang akan mengurangi 1 nilai register 7 dan akan melompat ke memori program maju jika setelah pengurangan belum dihasilkan 0 acall mati_untuk_belok ; memanggil rutin mati untuk belok djnz r5,belok_kanan ; instruksi yang akan mengurangi 1 nilai register 7 dan akan melompat ke memori program belok kanan jika setelah pengurangan belum dihasilkan 0 djnz r6,kanan1 ; instruksi yang akan mengurangi 1 nilai register 6 dan akan melompat ke memori program kanan jika setelah pengurangan belum dihasilkan 0 ret ; program berhenti untuk program belok kanan kiri: ; perintah untuk kiri mov r6,5 ; isikan 5 pada register 6 R6 kiri1: ; perintah untuk kiri mov r5,1 ;isikan 1 pada register 5 R5 belok_kiri: ; perintah untuk belok kiri clr motor_kanan1 ; aktifkan logika low 0 pada bit p0.5 setb motor_kanan2 ; aktifkan logika high 1 pada bit p0.4 setb motor_kiri1 ; aktifkan logika high 1 pada bit p0.6 Universitas Sumatera Utara clr motor_kiri2 ; aktifkan logika low 0 pada bit p0.7 mov r7,220 ;isikan 220 pada register 7 R7 djnz r7, ; instruksi yang akan mengurangi 1 nilai register 7 dan akan melompat ke memori program belok kiri jika setelah pengurangan belum dihasilkan 0 acall mati_untuk_belok ; memanggil rutin mati untuk belok djnz r5,belok_kiri ; instruksi yang akan mengurangi 1 nilai register 5 dan akan melompat ke memori program belok kiri jika setelah pengurangan belum dihasilkan 0 djnz r6,kiri ; instruksi yang akan mengurangi 1 nilai register 6 dan akan melompat ke memori program kiri jika setelah pengurangan belum dihasilkan 0 ret ; program berhenti untuk program belok kiri mati_untuk_belok: clr motor_kanan1 ; aktifkan logika low 0 pada bit p0.5 clr motor_kanan2 ; aktifkan logika low 0 pada bit p0.4 clr motor_kiri1 ; aktifkan logika low 0 pada bit p0.6 clr motor_kiri2 ; aktifkan logika low 0 pada bit p0.7 mov r7,1 ;isikan 1 pada register 7 R7 djnz r7, ; instruksi yang akan mengurangi 1 nilai register 7 dan akan melompat ke memori program untuk belok jika setelah pengurangan belum dihasilkan 0 ret ; program berhenti untuk belok Universitas Sumatera Utara 2200uF 5 Volt DC