Contoh Dasar Program c Untuk Mikrokontroler At89x51 Menggunakan Compiler Sdcc
-
Upload
arch-naisenodni -
Category
Documents
-
view
18 -
download
1
description
Transcript of 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 :
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}
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;
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
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>
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;} }
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;
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;
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 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
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)