Halaman

Kamis, 06 Desember 2012


mikrokontroller

PEMROGRAMAN BAHASA C UNTUK AVR

Bahasa C luas digunakan untuk pemrograman berbagai jenis perangkat, termasuk mikrokontroler. Bahasa ini sudah merupakan high level language, dimana memudahkan programmer menuangkan algoritmanya. Untuk mengetahui dasar bahasa C dapat dipelajari sebagai berikut.

3.1 Struktur Penulisan Program
Struktur penulisan bahasa C secara umum terdiri atas empat blok, yaitu header, deklarasi konstanta global dan atau variable, fungsi dan atau prosedur (dapat di bawah program utama), dan program utama.

CONTOH

/* HEADER untuk memanggil library yang akan digunakan */
#include < [library1.h] > // Opsional
#include < [library2.h] > // Opsional

#define [nama1] [nilai] ; // Opsional
#define [nama2] [nilai] ; // Opsional

/* Deklarasi konstanta dan atau variabel global */
[global variables] // Opsional

/* Deklarasi fungsi dan atau prosedur */
[functions] // Opsional



/* Program utama */
void main(void)
{
/* Deklarasi konstanta dan atau variabel lokal */
[Deklarasi local variable/constant]
[Isi Program Utama]
}



#include <mega8535.h>
#include <stdio.h>




unsigned char dt, xx;
char buf[33];

unsigned char lampu (unsigned char bitn)
{
PORTA=bitn & 0x3C;
}


void main (void);
{
char data;
PORTA=0x00;
DDRA=0xF0;
While (1)
     {
      …
     };
}

3.2 Tipe Data
Tabel 3.1 memperlihatkan tipe-tipe variable data yang dapat digunakan di compiler Code Vision AVR.
Tabel 3.1 Tipe Data
Tipe
Size (bit)
Range
Bit
1
0,1
Char
8
-128 to 127
unsigned char
8
0 to 255
signed char
8
-128 to 127
Int
16
-32768 to 32767
short int
16
-32768 to 32767
unsigned int
16
0 to 65535
signed int
16
-32768 to 32767
long int
32
-2147483648 to 2147483647
unsigned long int
32
0 to 4294967292
signed long int
32
-2147483648 to 2147483647
Float
32
±1.175e-38 to ±3.402e38
Double
32
±1.175e-38 to ±3.402e38


3.3 Deklarasi Variabel dan K
;onstanta
Variabel adalah memori penyimpanan data yang nilainya dapat diubah-ubah.
Penulisan : [tipe data] [nama] = [nilai] ;
Konstanta adalah memori penyimpanan data yang nilainya tidak dapat diubah.
Penulisan : const [nama] = [nilai] ;
Tambahan:
Global variabel/konstanta yang dapat diakses di seluruh bagian program.
Local variabel/konstanta yang hanya dapat diakses oleh fungsi tempat dideklarasikannya.

Identifikasi label, variable dan fungsi dapat berupa huruf (A…Z, a…z) dan angka (0…9), juga karakter underscore (_).  Meskipun begitu identifikasi hanya bisa dimulai dengan huruf atau karakter underscore. Yang lebih penting lagi, identifikasi ini Case sensitive, yaitu huruf besar dan huruf kecil berbeda. Misalnya, variable1 tidak sama dengan Variable1. Identifikasi bisa memuat sebanyak 32 karakter.


Penulisan konstanta adalah sebagai berikut:
  • Integer atau long integer dapat ditulis dengan format decimal (contoh 1234), biner dengan awalan 0b (contoh 0b101001), heksadesimal dengan awalan 0x (contoh 0xff) atau octal dengan awalan 0 (contoh 0777).
  • Unsigned integer ditulis dengan diakhiri U (contoh 10000U)
  • Long integer ditulis dengan diakhiri L (contoh 99L)
  • Unsigned long integer ditulis dengan diakhiri UL (contoh 99UL)
  • Floating point ditulis dengan diakhiri F (contoh 1.234F)
  • Karakter harus dituliskan dalam tanda kutip (contoh ‘a’)
  • String harus dalam tanda kutip dua (contoh “Saya Belajar C”).

3.4 Komentar
Komentar diawali dengan tanda /* dan diakhiri dengan */
Contoh:
/* Ini komentar */
/* Ini komentar
     Multi baris */
Sedangkan komentar satu baris bisa dengan tanda //
Contoh:
// Ini juga komentar

3.5 Reserved Keywords
Berikut ini adalah daftar kata baku yang tidak bisa dipakai (reserved keywords) untuk label, identifikasi atau variabel.
Break
Flash
Signed
Bit
Float
Sizeof
Case
For
Sfrb
Char
Funcused
Sfrw
Const
Goto
Static
Continue
If
Struct
Default
Inline

Switch
Do
Int
Typedef
Double
Interrupt
Union
Eeprom
Long
Unsigned
Else
Register
Void
Enum
Return
Volatile
Extern
Short
While


3.6 Statement
Statement adalah setiap operasi dalam pemrograman, harus diakhiri dengan [ ; ] atau [ } ]. Statement tidak akan dieksekusi bila diawali dengan tanda [ // ] untuk satu baris. Lebih dari 1 baris gunakan pasangan [ /* ] dan [ */ ]. Statement yang tidak dieksekusi disebut juga comments / komentar.

Contoh: suhu=adc/255*100; //contoh rumus perhitungan suhu

3.7 Function dan Prosedur
Function adalah bagian program yang dapat dipanggil oleh program utama.
Penulisan :
[tipe data hasil] [nama function]([tipe data input 1],[tipe data input 2])
{
[statement] ;
}
Prosedur adalah suatu kumpulan instruksi untuk mengerjakan suatu keperluan tertentu tanpa mengembalikan suatu nilai.
Penulisan:
void [nama prosedur] ([parameter1, parameter2])
{
[statement]
}
3.8 Conditional statement dan looping
3.8.1 if else
If else digunakan untuk penyeleksian kondisi
if ( [persyaratan] ) {
[statement1];
[statement2];
}
else {
[statement3];
[statement4];
}

3.8.2 For
For digunakan untuk looping dengan jumlah yang sudah diketahui
for ( [nilai awal] ; [persyaratan] ; [operasi nilai] ) {b
[statement1];
[statement2];
}

3.8.3 While
While  digunakan untuk looping jika dan selama memenuhi syarat tertentu
while ( [persyaratan] ) {
[statement1];
[statement2];
}

3.8.4 Do while
Do while  digunakan untuk looping jika dan salama memenuhi syarat tertentu, namun min 1 kali
do {
[statement1];
[statement2];
}
while ( [persyaratan] )

3.8.5 Switch case
Switch case  digunakan untuk seleksi dengan banyak kondisi
switch ( [nama variabel] ) {
case [nilai1]: [statement];
break;
case [nilai2]: [statement];
break;
}

3.9 Operasi logika dan biner
3.9.1 Operasi Logika
AND :              &&
NOT :              !
OR :                 ||

3.9.2 Operasi Biner
AND :              &
OR :                 |
XOR :               ^
Shift right:      >>
Shift left :        <<
Komplemen :             ~

3.10 Operasi Relasional (perbandingan)
Sama dengan :                       ==
Tidak sama dengan :                         !=
Lebih besar :                          >
Lebih besar sama dengan : >=
Lebih kecil :                            <
Lebih kecil sama dengan :    <=

3.11 Operasi aritmatika
+ , - , * , / : tambah,kurang,kali,bagi
+= , -= , *= , /= : nilai di sebelah kiri operator di tambah/kurang/kali/bagi dengan nilai di sebelah kanan operator
% : sisa bagi
++ , -- : tambah satu (increment) , kurang satu (decrement)

Contoh :
a = 5 * 6 + 2 / 2 -1 ; maka nilai a adalah 30
a *= 5 ; jika nilai awal a adalah 30, maka nilai a = 30x5 = 150.
a += 3 ; jika nilai awal a adalah 30, maka nilai a = 30+5 = 33.
a++ ; jika nilai awal a adalah 5 maka nilai a = a+1 = 6.
a-- ; jika nilai awal a adalah 5 maka nilai a = a-1 = 4.

3.12 Memasukkan Bahasa Assembly (in line assembly)
Dalam pemrograman dengan bahasa C, bahasa assembly masih dapat dimasukkan ke dalam program C. Struktur penulisannya pun juga mudah, yaitu:
#asm  // dimulai dengan #asm
nop // blok bahasa assembly
nop
#endasm // diakhiri dengan #endasm

Atau jika hanya beberapa instruksi maka bisa dituliskan dengan;
#asm(“nop`nop`nop”)


praktikum 

PERCOBAAN I
PEMROGRAMAN BAHASA C UNTUK MIKROKONTROLER

1         TUJUAN
1.      Mengingat kembali statemen program dalam bahasa C.
2.      Mengelompokkan program berdasarkan bagian-bagian dalam bahasa C. .

2.      DASAR TEORI
Bahasa C luas digunakan untuk pemrograman berbagai jenis perangkat, termasuk mikrokontroler. Bahasa ini sudah merupakan high level language, dimana memudahkan programmer menuangkan algoritmanya. Struktur penulisan bahasa C secara umum terdiri atas empat blok, yaitu header, deklarasi konstanta global dan atau variable, fungsi dan atau prosedur (dapat di bawah program utama), dan program utama.

STRUKTUR PENULISAN
CONTOH

/* HEADER untuk memanggil library yang akan digunakan */
#include < [library1.h] > // Opsional
#include < [library2.h] > // Opsional

#define [nama1] [nilai] ; // Opsional
#define [nama2] [nilai] ; // Opsional

/* Deklarasi konstanta dan atau variabel global */
[global variables] // Opsional

/* Deklarasi fungsi dan atau prosedur */
[functions] // Opsional



/* Program utama */
void main(void)
{
/* Deklarasi konstanta dan atau variabel lokal */
[Isi Program Utama]
}




#include <mega8535.h>
#include <stdio.h>




unsigned char dt, xx;
char buf[33];

unsigned char lampu (unsigned char bitn)
{
PORTA=bitn & 0x3C;
}

void main (void);
{
char data;
PORTA=0x00;
DDRA=0xF0;
While (1)
     {
      …
     };
}
3.      ALAT DAN BAHAN YANG DIGUNAKAN
  1. 1 set Personal Computer/Laptop
  2. Program CodeVision AVR

4.        PROSEDUR
  1. Perhatikan program berikut. Tunjukkan empat blok bagian program tersebut.

Program 1
#include <mega8535.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
PORTA=0x00;
DDRA=0xFF;
while (1)
      {
      // Place your code here
      PORTA=0x0f;
      delay_ms(10000);
      PORTA=0xf0;
      delay_ms(10000);
      }
}

Program 2
#include <mega8535.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
unsigned char datain;
// Input/Output Ports initialization
// Port A initialization
PORTA=0x00;
DDRA=0xFF;
// Port B initialization
PORTB=0xFF;
DDRB=0x00;
while (1)
      {
      // Place your code here
      datain=PINB;
      PORTA=datain;
      }
}



Program 3
#include <mega8535.h>
#include <delay.h>
// Declare your global variables here
unsigned char bil[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void main(void)
{
// Declare your local variables here
int kiri, kanan, i;
// Input/Output Ports initialization
// Port A initialization
PORTA=0x00;
DDRA=0xFF;
// Port B initialization
PORTB=0xF0;
DDRB=0xF0;
while (1)
      {
      // Place your code here
     kiri=0;
     kanan=0;
     for (kiri=0;kiri<10;kiri++)
     {
        for (kanan=0;kanan<10;kanan++)
        {  
           for(i=0;i<100;i++)
           {
                PORTB.7=0;
                PORTB.6=1;  
                PORTA=bil[kiri];
                delay_ms(5);
                PORTB.7=1;
                PORTB.6=0;  
                PORTA=bil[kanan];
                delay_ms(5);
           }
        }
     }
  }
}

  1. Ketiklah program berikut dan betulkan program jika keluar pesan Error. Tuliskan baris program yang salah dan tuliskan kembali baris program yang sudah dibetulkan.

Program 4
#include <mega8535.h>
#include <delay.h>
// Declare your global variables here
void main(void)
{
// Declare your local variables here
// Input/Output Ports initialization
// Port A initialization
PORTA=0x00;
DDRA=0xFF;
while (1)
      {
      // Place your code here
                        PORTA=ob00001111;                 
                        delay_ms(1000);                       
                        PORTA=0b1111000o;               
                        delay_ms(1000);
                  }
            }            

Program 5
#include <mega8535.h>
// Declare your global variables here
void main(void)
{
// Input/Output Ports initialization
// Port A initialization
PORTA=0x00;
DDRA=0xFF;
// Port B initialization
PORTC=0xFF;
DDRC=0x00;
while (1)
      {
      // Place your code here
      datain=PINC;
      PORTA=datain;
      }
}

Program 6
#include <mega8535.h>
// Declare your global variables here
unsigned char bil[10] = {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
void main(void)
{
// Declare your local variables here
int kiri, kanan, i;
// Input/Output Ports initialization
// Port A initialization
PORTA=0x00;
DDRA=0xFF;
// Port B initialization
PORTB=0xF0;
DDRB=0xF0;
while (1)
      {
      // Place your code here
                  PORTB.7=1;
                  PORTB.6=0;            //AKTIFKAN SEVEN SEGMEN KANAN
                  PORTA=0x6d;         // DATA ANGKA 5
                  delay_ms(100);
                  PORTB.7=0;            // AKTIFKAN SEVEN SEGMEN KIRI
                  PORTB.6=1;
                  PORTA=0x5b          // DATA ANGKA 2 
                  delay_ms(100)
        }
}


5. DATA HASIL PERCOBAAN


  1. KESIMPULAN




Tidak ada komentar:

Posting Komentar