Lab Laros elector 25 07 2007 Ibnu Budi R

MODUL PEMBELAJARAN BAHASA C UNTUK MCS 51
MENGGUNAKAN SDCC ( SMALL DEVI CE C COMPI LER )

Tujuan Praktikum :
(isi sendiri)
Perlengkapan praktikum :
1. Seperangkat komputer
2. Modul mikrokontroler Laros v2.1 atau yang terbaru
3. Power supply 5 volt
4. Program compiler : SDCC, Read51, atau Raisonance

yang sudah

terinstal dalam komputer

Bila menggunakan SDCC :
Header filenya  # include< at89x51.h>

Bila menggunakan Read51 :
Header filenya  # include< sfr51.h>


Petunjuk menggunakan SDCC ( OS Windows ) :
1. Buka Command prompt ( DOS) dengan cara tekan tombol Windows + R
pada keyboard dan ketik : cmd klik OK

2. Arahkan / pindah direktori pada file C yang telah disimpan

missal

direktori H :

Lab Laros-elector© # 25/ 07/ 2007 I bnu Budi R

1

3. Untuk mengkompil file C ( missal nama filenya contoh1.c )
Ketik : SDCC < spasi > - C < spasi > < namafile.C> < enter>

4. Untuk mengubah ke dalam bentuk file intel Hexa maka ketikkan :

SDCC < spasi> < namafile.C> < enter>

Bila tidak ada error saat Compilling, maka dalam direktori akan ada
tambahan beberapa file antara lain ber -ekstensi : * .ihx, * .map, * .mem, * . rel,
* .rst. gunakan file ber -ekstensi * .ihx untuk dituliskan kedalam Chip I C
mikrokontroler.
Contoh-contoh program C untuk mikrokontroler

AT89X51 menggunakan

compiler SDCC

Praktikum 1 : Menyalakan led pada port 1
Contoh 1:
# include < at89x51.h >
void main(void)
{
P1= 0;
}

/ / header untuk mikrokontroler at89S51


/ / port 1 diberi nilai 0

Contoh 2 :
# include < at89x51.h>
# include < stdio.h> / / prototip fungsi putchar
void putchar(char c) / / definisi fungsi putchar
{
/ / diarahk an ke Port 1 (P1)
P1= c;
}
void main()
{
char a;
a= 0x30;
printf("% x",a); / / fungsi printf diarahkan ke port 1
}

Lab Laros-elector© # 25/ 07/ 2007 I bnu Budi R

2


Praktikum 2: Aritmatika
Contoh penjumlahan
/ / penjumlahan
# include < at89x51.h>

/ / deklarasi register at89S51

void main()
{
char bil1,bil2; / / deklarasi variabel bil1 dan bil2
bil1= 0x30;
/ / bil1= 0x30 dan bil2= 0x20 (bentuk heksadesimal)
bil2= 0x20;
P1= bil1+ bil2; / / hasil penjumlahan dikeluarkan ke Port1
}

Contoh pengurangan
/ / pengurangan
# include < at89x51.h>

void main()
{
int bil1,bil2;
bil1= 0x30;
bil2= 0x20;
P1= bil1-bil2;
}

/ / bil1 dikurangi bil2 hasilnya dikeluarkan ke P1.

Contoh perkalian
/ / perkalian
# include < at89x51.h>
void main()
{
int bil1,bil2;
bil1= 4;
bil2= 2;
P1= bil1* bil2; / / bil1 dikali bil2 hasilnya dikeluarkan ke P1
}


Contoh pembagian
/ / pembagian
# include < at89x51.h>
void main()
{
int bil1,bil2;
bil1= 10;
bil2= 2;
P1= bil1/ bil2;
}

/ / hasil pembagian dikeluarkan ke P1

Contoh modulus
/ / modulus
# include < at89x51.h>
void main()
{
int bil1,bil2;

bil1= 13;

Lab Laros-elector© # 25/ 07/ 2007 I bnu Budi R

3

bil2= 2;
P1= bil1% bil2; / / hasil modulus dikeluarkan ke P1
}

Contoh Pangkat
/ / pangkat
# include < at89x51.h>
void main(void)
{
char a= 0xaa;
char b= 0x0f;
P1= a ^ b ;
}


Praktikum 3: Logika
Contoh logika DAN
/ / logika AND
# include < at89x51.h>
void main(void)
{
char a= 0xf0;
char b= 0x0f;
P1= a & b ;
}

Contoh logika ATAU
/ / logika OR
# include < at89x51.h>
void main(void)
{
char a= 0xb0;
char b= 0x0a;
P1= a | b ;
}


Contoh Pembalikan
/ / invers
# include < at89x51.h>
void main(void)
{
char a= 0xf0;
P1= ~ a;
}

Contoh Geser 1 bit
/ / geser bit
# include < at89x51.h>
void main(void)
{
char a= 0x0f;
a * = 2;
P1= a;
}


Logika I F
Contoh Logika I F dengan Logika DAN

Lab Laros-elector© # 25/ 07/ 2007 I bnu Budi R

4

# include < at89x51.h>
void main(void)
{
char inp1;
char inp2;
inp1= P2;
inp2= P3;
if((inp1= = 0xf0) && (inp2= = 0x40))
{ P1 = 0x20; }
}

Contoh 2
# include < at89x51.h>

void main(void)
{
char inp1;
inp1= P2;
if(inp1= = 0x40)
{ P1 = 0x20; }
}

Logika FOR
Contoh 1
# include < at89x51.h>
void main(void)
{
int a;
for(a= 0; a< 20; a+ + ) / / se lama a < 20, maka a dinaikkan 1
P1= a;
}
Contoh 2
# include < at89x51.h>
void main(void)
{
char a;
for(a= 10;a> = 0;a --)
P1= a;
}

/ / inisialisasi a= 10, a= 10 > = 0 kondisinya
/ / benar maka pernyataan a -akan dieksekusi

Contoh 3
# include < at89x51.h>
void main()
{
char a, lampu;
lampu= 0x01;
for (a= 0; a< 8; a+ + ) / / melakukan loop sebanyak 8 kali
{
P1= lampu;
/ / variabel lampu dikeluarkan ke P1
lampu= lampu < < 1; / / variabel lampu digeser kiri 1 bit
}
}
Contoh 4
# include < at89x51.h>

Lab Laros-elector© # 25/ 07/ 2007 I bnu Budi R

5

union dat
{
unsigned char a[ 2] ; / / tipe data union
unsigned int b;
};
void main()
{
char i;
union dat s;
s.b= 0x0001;
for(i= 0; i< 10; i+ + )
{
s.b= s.b< < 1 ;
P1= s.a[ 0] ;
P2= s.a[ 1] ; }
}
Contoh 5
# include < at89x51.h>
void main()
{
char a, lampu;
lampu= 0x80;
/ / bit ke-7 berlogika 1
for (a= 0; a< 8; a+ + ) / / diulang sebanyak 8 kali, hasil akhirnya= 0xFF
{
P1= lampu;
lampu= lampu > > 1; / / variabel lampu digeser kanan 1 bit
}
}
Contoh 6
# include < at89x51.h>
void main()
{
char a, lampu;
lampu= 0x80;
/ / bit ke-7 berlogika 1
for (a= 0; a< 8; a+ + ) / / diulang sebanyak 8 kali, hasil akhirnya= 0xFF
{
P1= lampu;
lampu= lampu > > 1; / / variabel lampu digeser kanan 1 bit
}
}
Contoh 7
# include < at89x51.h>
void main()
{
volatile unsigned char i, a= 0x80;
for(i= 0; i< 10; i+ + )
{
a= ((a< < 1) | (a> > 7)); / / putar ke kiri 1 bit, bit ke 7 akan mengisi
P1= a;
/ / bit ke 0 dst
}
}
Contoh 8
# include < at89x51.h>
void main()
{

Lab Laros-elector© # 25/ 07/ 2007 I bnu Budi R

6

volatile unsigned char i, a= 0x01;
for(i= 0; i< 10; i+ + )
{
a= ((a< < 7) | (a> > 1)); / / putar ke kanan 1 bit, bit ke 0 akan
P1= a;
/ / mengisi bit ke 7 dst
}
}
Contoh 9
# include < at89x51.h>
void main()
{
volatile unsigned char gint= 0xaa;
volatile unsigned char hob;
unsigned a;
for(a= 0; a< 8; a+ + )
{
hob= (gint> > 7) &1;
P1= hob;
gint= ((gint< < 1)| (gint> > 7));
}
}

/ / diulang 8 kali
//

Logika I F Else ( if bersarang )
Contoh 1
# include < at89x51.h>
void main()
{
if(P1< 10)
P2= P1* 2;
else
P2= P1/ 2;
}
Contoh 2
/ / membaca penekanan tombol pada port2
# include < at89x51.h>
void main(void)
{
char inp1;
inp1= P2;
if(inp1= = 0x01)
/ / jika P2 = 0x01 P1= 0x20, selain itu P2= 0x80;
{ P1 = 0x20; }
else
{ P1= 0x80; }
}
Contoh 3
# include < at89x51.h>
void main(void)
{
char inp;
inp= P2;
if(inp= = 0x01)

/ / jika inp= 0x01 maka P1= 0x10, jika tidak maka

Lab Laros-elector© # 25/ 07/ 2007 I bnu Budi R

7

{ P1 = 0x10; }
else if (inp= = 0x02)
{ P1= 0x20; }
else if (inp= = 0x04)
{ P1= 0x40; }
else if (inp= = 0x08)
{ P1= 0x80; }
else
{ P1= 0x00; }
}

/ / akan diuji selanjutnya.

While
Contoh1
# include < at89x51.h>
void main()
{
while(1)
{
P3= P1;
}
}
Contoh 2
# include < at89x51.h>
void main(void)
{
char a= 10;
while(a> = 0) / / jika a> = 0 bernilai benar maka pernyataan dalam
{
/ / dalam blok di bawa hnya dieksekusi
P1= a;
a--;
}
Contoh 3
# include < at89x51.h>
void main(void)
{
char a= 10;
do
/ / peryataan dalam blok di bawahnya dieksekusi
{
/ / selama while bernilai benar
P1= a;
a--;
} while(a> = 0);
}

Sw itch Case
Contoh 1
# include < at89x51.h>
void main(void)
{
char a;
a= P2;
switch(a)
{
case 0: P1= 5; break;
case 1: P1= 10; break;
case 2: P1= 15; break;

/ / jika a= 0 P1= 5
/ / jika a= 1 P1= 10 dst

Lab Laros-elector© # 25/ 07/ 2007 I bnu Budi R

8

case 3: P1= 20; break;
case 4: P1= 40; break;
case 5: P1= 60; break;
default: P1= 0; break;

/ / jika a bukan 0,1,2,3,4,5, maka P1= 0.

}
}

Fungsi
Contoh 1
# include < at89x51.h>
int jumlah(int bil1,int bil2) / / definisi fungsi jumlah
{
return(bil1+ bil2) ;
}
void main()
{
P1= jumlah(20,50);
/ / pemanggilan fungsi jumlah
}
Contoh 2
# include < at89x51.h>
int jumlah(int bil1,int bil2);
void main()
{
P1= jumlah(20,50);
}
int jumlah(int bil1,int bil2)
{
return(bil1+ bil2);
}

/ / prototype fungsi jumlah

/ / pemanggilan fungsi jumlah
/ / definisi fungsi jumlah

Contoh 3
# include < at89x51.h>
void Tambahv(int A)
{
A= A+ 1;
}
void main()
{
int B;
B= 4;
Tambahv(B);
P1= B;
}
Contoh 4
# include < at89x51.h>
void Tambahp(int * A)
{
* A= * A+ 1;
}
void main( )
{
int B;
B= 4;

Lab Laros-elector© # 25/ 07/ 2007 I bnu Budi R

9

Tambahp(&B);
P1= B;
}
Contoh 5
# include < at89x51.h>
struct kar_sensor
/ / deklarasi struktur
{
unsigned char impedan;
unsigned char koefi_suhu;
unsigned char gain;
};
void main()
{
struct kar_sensor sen_suhu;

/ / definisi struktur

sen_suhu.impedan= 0x5;
sen_suhu.koefi_suhu= 0x01;
sen_suhu.gain= 0x04;

/ / penulisan anggota struktur

P1= sen_suhu.impedan;
P2= sen_suhu.koefi_suhu;
P3= sen_suhu.gain;
}
Contoh 6
# include < at89x51.h>

/ / pembacaan anggota struktur

struct kar_sensor
/ / deklarasi struktur
{
unsigned char impedan;
unsigned char koefi_suhu;
unsigned char gain;
};
void main()
{
struct kar_sensor sen_suhu[ 2] ;
sen_suhu[ 0] .impedan= 0x5;
sen_suhu[ 0] .koefi_suhu= 0x01;
sen_suhu[ 0] .gain= 0x4;
P1= sen_suhu[ 0] .impedan;
P2= sen_suhu[ 0] .koefi_suhu;
P3= sen_suhu[ 0] .gain;
}

/ / definisi struktur
/ / penul isan data anggota struktur

/ / pembacaan data anggota struktur

Contoh 7
# include < at89x51.h>
struct kar_sensor
/ / deklarasi struktur
{
unsigned char impedan;
unsigned char koefi_suhu;
unsigned char gain;

Lab Laros-elector© # 25/ 07/ 2007 I bnu Budi R

10

};
void main()
{
struct kar_sensor sen_suhu[ 2] = { { 0x05,0x01,0x04} ,{ 0x7,0x02,0x01} } ;
P1= sen_suhu[ 0] .impedan;
/ / pembacaan anggota strukt ur
P2= sen_suhu[ 0] .koefi_suhu;
P3= sen_suhu[ 0] .gain;
}
Contoh 8 Program gabungan Fungsi,While,For
# include < at89x51.h>
/ * ------------------------------------------ * /
/ * fungsi tunda 1 milidetik (kira -kira) * /
/ * ------------------------------------ ------* /
void tunda1ms()
{
int i;
for(i= 0; i< 150; i+ + );
}
/ * -------------------------------------------- * /
/*
fungsi tunda n milidetik
*/
/ * -------------------------------------------- * /
void tunda(int n)
{
int i;
for (i= 0; i< n; i+ + )
tunda1ms();
}
/ * ---------------------------------------------- * /
/*
Program utama
*/
/ * ---------------------------------------------- * /
void main()
{
volatile unsigned char dLED= 0x01;
while(1)
{
dLED= ((dLED< < 7 ) | (dLED> > 1));
P1= dLED; / / mengeluarkan dataLED satu persatu
tunda(100); / / sehingga efeknya seperti LED berjalan
}
}

Komunikasi Serial menggunakan Hyper Terminal
Contoh 1
# include < at89x51.h>
# include < stdio.h> / / prototip fungsi putch ar
void putchar(char c) / / definisi fungsi putchar
{
/ / diarahkan ke keluaran masukan/ keluaran serial
while(!TI );
TI = 0;
SBUF= c;
}
void initserial() / / fungsi inisialisasi masukan/ keluaran serial

Lab Laros-elector© # 25/ 07/ 2007 I bnu Budi R

11

{
SCON= 0x52;
TMOD= 0x20;
TH1= 0xfd;
TR1= 1;
}
void main()
{
char a;
initserial();
/ / inisialisasi masukan/ keluaran serial
a= 30;
printf("Nilai variabel a = % d \ n",a); / / fungsi printf ke
}
Contoh 2
# include < at89x51.h> / / deklarasi register at89c51
# include < stdio.h>
/ / pr ototip fungsi standard i/ o
void putchar(char c) / / fungsi standard i/ o diarahkan
{
/ / ke input/ output serial.
while(!TI );
/ / fungsi putchar untuk mengeluarkan data
TI = 0;
/ / dan fungsi getchar untuk memas ukkan data.
SBUF= c;
/ / fungsi putchar digunakan oleh fungsiprintf
}
char getchar(void)
{
while(!RI );
RI = 0;
return SBUF;
}
void initserial(void) / / fungsi inisialisasi port serial
{
SCON= 0x52;
TMOD= 0x20;
TH1= 0xfd;
TR1= 1;
}
void main(void)
/ / fungsi main
{
char masukan;
initserial();
while(1)
{
printf("Tekan sembarang tombol \ n");
masukan= getchar();
printf("Yang anda tekan adalah: % c \ n",masukan);
}
}

(Ma’af .!! karena mata sudah ngantuk penulisan modul hanya sampai disini, bila
ingin memperoleh materi yang lainnya hubungi : 081 2525 2497 – I bnu Budi R)

Lab Laros-elector© # 25/ 07/ 2007 I bnu Budi R

12