Anda di halaman 1dari 12

Lab Laros-elector#25/07/2007 Ibnu Budi R 1

MODUL PEMBELAJ ARAN 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 Ibnu Budi R 2
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> //header untuk mikrokontroler at89S51
void main(void)
{
P1=0; //port 1 diberi nilai 0
}
Contoh 2 :
#include <at89x51.h>
#include <stdio.h> //prototip fungsi putchar
void putchar(char c) //definisi fungsi putchar
{ //diarahkan 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 Ibnu Budi R 3
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 Ibnu Budi R 4
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 IF
Contoh Logika IF dengan Logika DAN
Lab Laros-elector#25/07/2007 Ibnu Budi R 5
#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++) //selama a < 20, maka a dinaikkan 1
P1=a;
}
Contoh 2
#include <at89x51.h>
void main(void)
{
char a;
for(a=10;a>=0;a--) //inisialisasi a=10, a=10 >=0 kondisinya
P1=a; // 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 Ibnu Budi R 6
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 Ibnu Budi R 7
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++) //diulang 8 kali
{
hob=(gint>>7) &1; //
P1=hob;
gint=((gint<<1)|(gint>>7));
}
}
Logika IF 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 Ibnu Budi R 8
{P1 = 0x10;} //akan diuji selanjutnya.
else if (inp==0x02)
{P1=0x20;}
else if (inp==0x04)
{P1=0x40;}
else if (inp==0x08)
{P1=0x80;}
else
{P1=0x00;}
}
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 bawahnya 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);
}
Switch Case
Contoh 1
#include <at89x51.h>
void main(void)
{
char a;
a=P2;
switch(a)
{
case 0: P1=5;break; //jika a=0 P1=5
case 1: P1=10;break; //jika a=1 P1=10 dst
case 2: P1=15;break;
Lab Laros-elector#25/07/2007 Ibnu Budi R 9
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); //prototype fungsi jumlah
void main()
{
P1=jumlah(20,50); //pemanggilan fungsi jumlah
}
int jumlah(int bil1,int bil2) //definisi fungsi jumlah
{
return(bil1+bil2);
}
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 Ibnu Budi R 10
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; //penulisan anggota struktur
sen_suhu.koefi_suhu=0x01;
sen_suhu.gain=0x04;
P1=sen_suhu.impedan; //pembacaan anggota struktur
P2=sen_suhu.koefi_suhu;
P3=sen_suhu.gain;
}
Contoh 6
#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[2]; //definisi struktur
sen_suhu[0].impedan=0x5; //penul isan data anggota struktur
sen_suhu[0].koefi_suhu=0x01;
sen_suhu[0].gain=0x4;
P1=sen_suhu[0].impedan; //pembacaan data anggota struktur
P2=sen_suhu[0].koefi_suhu;
P3=sen_suhu[0].gain;
}
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 Ibnu Budi R 11
};
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 putchar
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 Ibnu Budi R 12
{
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> //prototip 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);
}
}
(Maaf .!! karena mata sudah ngantuk penulisan modul hanya sampai disini, bila
ingin memperoleh materi yang lainnya hubungi : 081 2525 2497 I bnu Budi R)

Anda mungkin juga menyukai