Anda di halaman 1dari 30

Kuliah Instrumentasi Kelautan

Pemrograman Microcontroller
Muhammad Iqbal
barcode_bima@yahoo.co.id

Laboratorium Instrumentasi dan Telemetri Kelautan


Departemen Ilmu dan Teknologi Kelautan
Institut Pertanian Bogor @2009
Apa yang dibutuhkan?

• Board Microcontroller
• Program Penulis => notepad, AVR Studio,
BASCOM AVR, CodeVision AVR dll
• Compiler: sangat bergantung bahasa yang
digunakan : Assembly, C, BASIC, PASCAL dll
• Downloader dan programnya: alat dan
program yang digunakan untuk mendownload
program dari komputer ke microcontroller
Diagram Proses Pemrograman Microcontroller
Introduction to C Language
• Comments => menggunakan tanda “//” atau
/* ini komentar tidak di eksekusi oleh
compiler, tanda ini bisa 1 atau lebih baris */
• Include files
ex. #include <avr/io.h>
#include <avr/delay.h>
#include adalah preprocessor directive
(pengarah) yang menginstruksikan compiler
mencari file didalam tanda <>
• Expression, Statements dan Blocks
Expression: kombinasi dari variable, operators
dan function sehingga menghasilkan satu hasil
(value)
PORTD=0xFF-counter++
Statements: kontrol aliran program
berdasarkan keywords, expressions dan atau
statement lain.
TempInCelcius=5*(TempInFahrenheit-32)/9;
• Operators
simbol yang memerintahkan compiler untuk
melakukan sesuatu misalnya “=“ menyatakan
sama dengan sehingga misal DDRB=0xFF
memerintahkan compiler untuk membuat
nilai DDRB menjadi 0xFF atau “++” pada
counter++ memerintahkan compiler
menambahkan 1 nilai pada variable counter
Flow Control
• If-Else dan Else-If
if (expression)
statemen1
else
statemen2
Atau
if (expression)
statemen1
else if (expression2)
statemen2
else if (expression3)
statemen3
else
statemen4
• Switch
switch(expression)
case constant expression1: statements
case constant expression2: statements
case constant expression3: statements
default: statements
• Loops-While, For dan Do-While
while (expression)
{
statements or do stuff
}
for (expression1;expression2;expression3)
{
statements or do stuff
}
do
{
statements or do stuff
} while (expression)
Function
• Is encapsulates a computation
• Ok learn by sample 
• int dosomething (int x, int y, int z)
{
int a=0;
int b=x+y+z-12;
//do stuff
}
Selanjutnya.. Di main () program
…..
int main() {
int a;
….
a=dosomething(c,d,e);

}
Now Implement to Microcontroller
sekedar intro 
• Input Output (I/O)
int main() {
DDRB=0xff;
PORTB=0xff;
DDRC=0x00;
PORTC=0x00;
#asm (“nop”)
while (1)
{
PORTB.0=PINC.0; /*membaca nilai PINC.0 dan
dan memberikan hasilnya ke PORTB.0 */
};
}
Jokes
Hayuuuk kita sedikit berkhayal 

ingin membuat
pengkontrol ROV yaitu
tombol
maju, mundur, belok kiri,
belok kanan
Bahan yang Tersedia

• Microcontroller ATMega8535
• 4 buah tombol switch
• 2 buah motor DC
• IC L293D
Detail of Scenario
• Tombol 1: tombol maju
• Tombol 2: tombol mundur
• Tombol 3: tombol belok kiri
• Tombol 4: tombol belok kanan
• Scenario:
Gerak Motor 1 Motor 2
Maju CW Hidup CW Hidup
Mundur CCW Hidup CCW Hidup
Belok Kiri CW Hidup Mati
Belok Kanan Mati CW Hidup
/* pertama alur kasar program */
#include <avr/mega8535.h>
int void main()
{
DDRB=0x00; // portb sebagai masukan
PORTB=0x00; // switch dtempatkan di PORTB 0,1,2,3
while(1) {
If (PINB==0x01) { //statement maju
} else if (PINB==0x02) { // statement mundur
} else if (PINB==0x04) { // statement belok kiri
} else if (PINB==0x08) { // statement belok kanan
} else { // statement ROV diam
}
}
Konfigurasi motor
• Motor Ada di PORTC
sesuaikan dengan pin IC L293D misal saja:
PORTC 0 dan 1: motor 1 , dan PORTC 2 dan 3 :
motor 2 sehingga setiap gerak di definisikan
menjadi :
Gerak PORC.0 PORTC.1 PORTC.2 PORTC.3
Maju 1 0 1 0
Mundur 0 1 0 1
Belok kiri 1 0 0 0
Belok 0 0 1 0
Kanan
Program tadi menjadi
#include <avr/mega8535.h>
int void main()
{
DDRB=0x00; // portb sebagai masukan
PORTB=0x00; // switch dtempatkan di PORTB 0,1,2,3
DDRC=0xff;
PORTC=0x00;
while(1) {
If (PINB==0x01) { PORTC.0=1; PORC.1=0; PORTC.2=1; PORC.3=0; //maju
} else if (PINB==0x02) {PORTC.0=0 PORC.1=1; PORTC.2=0; PORC.3=1; //mundur
} else if (PINB==0x04) {PORTC.0=1; PORC.1=0; PORTC.2=0; PORC.3=0; //belok kiri
} else if (PINB==0x08) {PORTC.0=0; PORC.1=0; PORTC.2=1; PORC.3=0; //belok
kanan
} else { PORTC=0x00; //ROV diam
}
}
Rasanya Program tadi ko rumit
kelihatanya 
• Bagaimana jika menggunakan “function”
• Beberapa fungsi yang ingin saya buat
– Fungsi maju,
– Fungsi mundur,
– Fungsi belok_kiri,
– Fungsi belok_kanan
Let’s write
Gerak PORC.0 PORTC.1 PORTC.2 PORTC.3
Maju 1 0 1 0
Mundur 0 1 0 1
Belok kiri 1 0 0 0
Belok Kanan 0 0 1 0

• Void maju() {PORTC.0=1; PORC.1=0; PORTC.2=1; PORC.3=0; }


• Void mundur() {PORTC.0=0 PORC.1=1; PORTC.2=0; PORC.3=1; }
• Void belok_kiri() {PORTC.0=1; PORC.1=0; PORTC.2=0; PORC.3=0; }
• Void belok_kanan() {PORTC.0=0; PORC.1=0; PORTC.2=1; PORC.3=0; }
Program menjadi
#include <avr/mega8535.h>
void maju() {PORTC.0=1; PORC.1=0; PORTC.2=1; PORC.3=0; }
void mundur() {PORTC.0=0 PORC.1=1; PORTC.2=0; PORC.3=1; }
void belok_kiri() {PORTC.0=1; PORC.1=0; PORTC.2=0; PORC.3=0; }
void belok_kanan() {PORTC.0=0; PORC.1=0; PORTC.2=1; PORC.3=0; }

int void main()


{
DDRB=0x00; // portb sebagai masukan
PORTB=0x00; // switch dtempatkan di PORTB 0,1,2,3
DDRC=0xff;
PORTC=0x00;
while(1) {
If (PINB==0x01) {
maju(); //statement maju
} else if (PINB==0x02) {
mundur(); // statement mundur
} else if (PINB==0x04) {
belok_kiri() ; // statement belok kiri
} else if (PINB==0x08) {
belok_kanan(); // statement belok kanan
} else { PORTC=0x00; // statement ROV diam
}
}
Bagaimana jika menggunakan switch
#include <avr/mega8535.h>
void maju() {PORTC.0=1; PORC.1=0; PORTC.2=1; PORC.3=0; }
void mundur() {PORTC.0=0 PORC.1=1; PORTC.2=0; PORC.3=1; }
void belok_kiri() {PORTC.0=1; PORC.1=0; PORTC.2=0; PORC.3=0; }
void belok_kanan() {PORTC.0=0; PORC.1=0; PORTC.2=1; PORC.3=0; }
int void main()
{
DDRB=0x00; // portb sebagai masukan
PORTB=0x00; // switch dtempatkan di PORTB 0,1,2,3
DDRC=0xff;
PORTC=0x00;
while(1) {
Switch (PINC)
Case 0x01 : maju();
Case 0x02 : mundur();
Case 0x04: belok_kiri();
Case 0x08: belok_kanan();
Default: PORTC=0x00;
}
find your own style of
programming
Good reference
Penutup
• Explore lagi tentang bahasa C
• Explore lagi tentang Hardware Microcontroller
• Selamat berkreasi lebih 

-Terima Kasih-
Lampiran
• Arithmetic Operators
Operator Nama Contoh Penjelasa
* Multiplication x*y Perkalian x dan y
/ Division x/y Pembagian x dan y
% Modulo x%y Sisa x dibagi y
+ Addition x+y x tambah y
- Substraction x-y x dikurangi y
++ Increment x++ x=x+1
-- Decrement x-- x=x-1
- Negation -x Kali x dengan -1
+ Unary plus +x x adalah positif
• Data Acces and Size Operators
Operator Nama Contoh Penjelasan
[] Elemen array X[6] Elemen ke-7 dari x
. Member selection PORTD.2 Bit 2 dari PORTD
-> Member selection pStruct->x Anggota x dari struktur pStruct
* Indirection *p Lokasi memori dari P
& Address of &x Alamat dari varible x

• Miscellaneous Operators
Operator Nama Contoh Penjelasan
() Function Wait(10) Panggil fungsi wait
(type) Type Cast (double)x Ubah variable x jadi double
?: conditional X?y:z Jika x tidak 0 evaluasi y, sebaliknya
evalusi z
, Seqeuntial X++,y++ Mulanya x ditambah 1, kemudian y
evaluation ditambah 1
Relational and Logical Operators
Operator Nama Contoh Penjelasan
> Lebih besar dari X>y X lebih besar dari y
>= Lebih besar atau sama X>=y X lebih besar sama dengan
dengan y
< Lebih kecil dari X<y X lebih kecil dari y
<= Lebih kecil atau sama dengan X<=y X lebih kecil atau sama
dengan
== Sama dengan (logic) X==y Jika x dan y sama maka
benar (1), jika tidak salah
(0)
!= Tidak sama dengan X!=y Jika x dan y tidak sama
maka benar, jika sama
maka salah
! Logical not !x 1 jika x=0 , otherwise 0
&& Logical AND X&&y X and y
|| Logical OR X||y X OR y
Bitwise Operators
Operator Nama Contoh Penjelasan
~ Bitwise complement NOT ~x ubah bit 1 ke 0 dan bit 0 ke 1
& Bitwise AND X&y Bitwise X and Y
| Bitwise OR X|y Bitwise x OR y
^ Bitwise exclusive OR X^y Bitwise x XOR y
<< Left shift X<<2 Geser ke kiri 2 bit dari x
>> Right shift X>>2 Geser ke kanan 2 bit dari x

Anda mungkin juga menyukai