Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

12
Lab Laros-elector© #25/07/2007 Ibnu Budi R 1 MODUL PEMBELAJARAN BAHASA C UNTUK MCS 51 MENGGUNAKAN SDCC ( SMALL DEVICE C COMPILER ) 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 :

description

Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

Transcript of Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

Page 1: Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

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

MODUL PEMBELAJARAN BAHASA C UNTUK MCS 51

MENGGUNAKAN SDCC ( SMALL DEVICE C COMPILER )

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 :

Page 2: Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

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 IC

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

Page 3: Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

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

Praktikum 2: AritmatikaContoh 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;

Page 4: Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

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: LogikaContoh 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 IFContoh Logika IF dengan Logika DAN

Page 5: Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

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 FORContoh 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--) //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>

Page 6: Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

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(){

Page 7: Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

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

Page 8: Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

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

WhileContoh1

#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 CaseContoh 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;

Page 9: Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

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

FungsiContoh 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 jumlahvoid 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;

Page 10: Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

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;

Page 11: Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

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

Page 12: Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc

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> //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, bilaingin memperoleh materi yang lainnya hubungi : 081 2525 2497 – Ibnu Budi R)