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
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