Anda di halaman 1dari 6

Mata Kuliah Sistem Mikroprosesor

Dosen: Heri Andrianto, ST., MT. (Teknik Elektro, UK.Maranatha)

BAB II Pemrograman Mikrokontroler AVR ATmega 16


Pengembangan sebuah system menggunakan mikrokontroler AVR buatan ATMEL menggunakan
software AVR STUDIO dan CodeVisionAVR. AVRSTUDIO merupakan software khusus untuk
bahasa assembly yang mempunyai fungsi sangat lengkap, yaitu digunakan untuk menulis program,
kompilasi, simulasi dan download program ke IC mikrokontroler AVR. Sedangkan CodeVision AVR
merupakan software C-cross compiler, dimana program dapat ditulis dalam bahasa C, Codevision
memiliki IDE (Integrated Development Environment) yang lengkap, dimana penulisan program,
compile, pembuatan kode mesin(assembler) dan download program ke chip AVR dapat dilakukan
pada codevision, selain itu ada fasilitas teminal, yaitu untuk melakukan komunikasi serial dengan
mikrokontroler yang sudah diprogram. Proses download program ke IC mikrokontroler AVR dapat
menggunakan system download secara ISP (In-System Programming). In-System Programmable
Flash on-chip mengijinkan memori program untuk diprogram ulang dalam system menggunakan
hubungan serial SPI.

2.1 Bahasa Assembly


Bahasa Assembly AVR
Berikut adalah contoh sebuah program aplikasi untuk mikrokontroler AVR yang dibuat pada AVR
STUDIO :

Penulisan Program dalam bahasa assembly

.include"C:\Appnotes\m16def.inc"
.org 0x0000
rjmp main

main:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16 Inisialisasi

ldi r16,0xff

out ddrc,r16
out PORTC,r16

out ddrd,r16
out PORTD,r16

cbi PORTD,5
cbi PORTC,0
cbi PORTC,1
Program Utama
henti:
nop
rjmp henti

Setiap program terdiri dari inisialisasi program dan program utama. Inisialisasi program berisi
definisi chip yang digunakan, mendefinisikan nama variabel, konstanta, alamat awal program, stack
pointer.
Mata Kuliah Sistem Mikroprosesor
Dosen: Heri Andrianto, ST., MT. (Teknik Elektro, UK.Maranatha)

2.2 Bahasa C
Berikut ini penjelasan bahasa C dan aturan penulisan program yang digunakan pada Bahasa C,
khususnya bahasa C pada CodeVisionAVR. Untuk seterusnya, pada buku ini akan dibahas
pemrograman mikrokontroler AVR menggunakan bahasa C saja. Berikut ini penjelasan tentang
bahasa C.

Penulisan Program dalam Bahasa C

#include <mega16.h> Preprocessor (#) : Digunakan untuk


#include <delay.h>
memasukan (include) text dari file lain dan
#define IRsensor PINA.0
#define pompa PORTB.0
mendefinisikan macro

//variabel glodal
/*
unsigned int i, j;
…komentar
..*/
void main(void)
{ Atau jika untuk satu baris saja
//variabel lokal // …komentar…
Char data_rx;
DDRA=0x00;
PORTA=0xFF;
DDRB=0xFF; Inisialisasi
PORTB=0x00;
…….
…….

While(1)
{
………
……… Program Utama
……… Program akan berulang terus karena syarat while (1)
}; akan selalu menghasilkan nilai benar (true)

Penjelasan :
Preprocessor (#) : Digunakan untuk memasukan (include) text dari file lain, mendefinisikan macro
yang dapat mengurangi beban kerja pemrograman dan meningkatkan legibility source code (mudah
dibaca).

#define : digunakan untuk mendefinisikan macro


Contoh: #define ALFA 0xff
#define SUM(a,b) a+b
#define sensor PINA.2
#define pompa PORTB.0
Mata Kuliah Sistem Mikroprosesor
Dosen: Heri Andrianto, ST., MT. (Teknik Elektro, UK.Maranatha)
Komentar
Penulisan komentar untuk beberapa baris komentar sekaligus
/*
…komentar
..*/

Penulisan komentar untuk satu baris saja


// …komentar…

Tabel 2. 1 Tipe Data


Tipe Ukuran(Bit) Range
bit 1 0, 1 (Tipe data bit hanya dapat digunakan untuk
variable global.)
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 4294967295
Signed long int 32 -2147483648 to 2147483647
float 32 ±1.175e-38 to ±3.402e38
double 32 ±1.175e-38 to ±3.402e38

Tabel 2. 2 Daftar Operator Kondisi


Operator Kondisi Keterangan
< Lebih kecil
<= Lebih kecil atau sama dengan
> Lebih besar
>= Lebih besar atau sama dengan
== Sama dengan
!= Tidak sama dengan

Tabel 2. 3 Daftar Operator Aritmatika


Operator Aritmatika Keterangan
+ Penjumlahan
- Pengurangan
* Perkalian
/ Pembagian
% Sisa Bagi (modulus)

Tabel 2. 4 Daftar Operator Logika


Operator Logika Keterangan
! Boolean NOT
&& Boolean AND
|| Boolean OR

Tabel 2. 5 Daftar Operator Bitwise


Operator Bitwise Keterangan
~ Komplemen Bitwise
Mata Kuliah Sistem Mikroprosesor
Dosen: Heri Andrianto, ST., MT. (Teknik Elektro, UK.Maranatha)
& Bitwise AND
| Bitwise OR
^ Bitwise Exclusive OR
>> Right Shift
<< Left Shift

Tabel 2. 6 Daftar Operator Assignment


Operator Assignment Keterangan
= Untuk memasukan nilai
+= Untuk menambah nilai dari keadaan semula
-= Untuk mengurangi nilai dari keadaan semula
*= Untuk mengalikan nilai dari keadaan semula
/= Untuk melakukan pembagian terhadap bilangan semula
%= Untuk memasukan nilai sisa bagi dari pembagian bilangan semula
<<= Untuk memasukan shift left
>>= Untuk memasukan shift right
&= Untuk memasukan bitwise AND
^= Untuk memasukan bitwise XOR
\= Untuk memasukan bitwise OR

2.3 Fungsi Standar pada CodeVisionAVR

Fungsi Input/Output
Fungsi- fungsi input/output berada di dalam file stdio.h, pada subdirektori ..\INC. Berikut ini
beberapa fungsi I/O dasar yang disediakan pada CodeVision.

- char getchar(void) : menghasilkan nilai balikan berupa karakter yang diterima dari UART,
menggunakan system polling (menerima data serial).

- void putchar(char c) : mengirim karakter ‘c’ menggunakan UART, menggunakan system


polling (mengirimkan data serial).

Sebelum menggunakan fungsi ini, lakukan terlebih dahulu pengaturan konfigurasi komunikasi serial :
- Inisialisasi baudrate UART
- Mengaktifkan transmitter UART
- Mengaktifkan Receiver UART

Fungsi I/O yang lebih tinggi lainnya menggunakan fungsi getchar dan putchar, seperti :
- void puts(char *str) : output, menggunakan putchar, null mengakhiri karakter string,
berlokasi di SRAM.
- void putsf(char flash *str) : output, menggunakan putchar, null mengakhiri karakter string,
berlokasi di FLASH.
- void printf(char flash *fmtstr[ , arg1, arg2, …]) : output text yang terformat, menggunakan
putchar, sesuai dengan format specifiers dalam fmtstr string.

Fungsi tipe karakter


Fungsi- fungsi ini berada di dalam file ctype.h, pada subdirektori ..\INC.
- char toascii(char c) : konversi char c menjadi tipe ascii
- char toint(char c) : menginterpretasikan karakter c sebagai digit hexadecimal dan
mengkonfersikannya menjadi unsigned char dari 0 hingga 15
- char tolower(char c) : merubah karakter c ke huruf kecil
Mata Kuliah Sistem Mikroprosesor
Dosen: Heri Andrianto, ST., MT. (Teknik Elektro, UK.Maranatha)
- char toupper (char c) : merubah karakter c ke huruf besar

Standard Library Function


Fungsi ini berada di dalam file stdlib.h, pada subdirektori..\INC.
- int atoi(char *str) : mengubah string str menjadi integer
- long int atol(char *str) : mengubah string str menjadi long integer
- void itoa(int n, char *str) : mengubah integer n menjadi karakter pada string str
- void ltoa(long int n, char *str) : mengubah long integer n menjadi karakter dalam string str
- void ftoa(float n, unsigned char decimals, char *str) : mengubah bilangan floating point n
menjadi karakter pada string str.

Fungsi Matematika
Fungsi ini berada di dalam file math.h, pada subdirektori..\INC. Berikut ini sebagian dari beberapa
fungsi-fungsi matematika yang disediakan pada CodeVision.
- Unsigned char cabs(signed char x) : menghasilkan nilai absolute dari byte x.
- Unsigned int abs(int x) : menghasilkan nilai absolute dari bilangan integer x.
- Unsigned long labs(long int x) : menghasilkan nilai absolute dari bilangan long integer x.
- float fabs(float x) : menghasilkan nilai absolute dari bilangan floating point x.
- signed char cmax(signed char a, signed char b) : menghasilkan nilai maksimum dari byte a
dan b.
- int max(int a, int b) : menghasilkan nilai maksimum dari integer a dan b.
- long int lmax(long int a, long int b) : menghasilkan nilai maksimum dari long integer a dan
b.
- signed char csign(signed char x) : menghasilkan -1, 0, 1 jika byte x negative, nol, positif
- unsigned char isqrt(unsigned int x) : menghasikan akar kuadrat dari unsigned integer x.

Fungsi konversi BCD


Prototypes dari fungsi ini berada di dalam file bcd.h, pada subdirektori..\INC.
- Unsigned char bcd2bin(unsigned char n) : mengubah bilangan n dari bcd ke nilai binernya
- Undigned char bin2bcd(unsigned char n) : mengubah bilangan n dari biner ke nilai BCD-
nya, bilangan n harus (0 – 99).

Fungsi LCD
Fungsi LCD ditujukan untuk memudahkan interfacing antara program C dan modul alphanumeric
LCD yang dibuat dengan chip Hitachi HD44780 atau yang serupa chip Hitachi HD44780. Fungsi ini
berada di dalam file lcd.h, pada subdirektori ..\INC . Header ini harus dimasukan (include) jika kita
akan menggunakan fungsi-fungsi LCD. Sebelum menggunakan fungsi ini, terlebih dahulu harus diatur
port mikrokontroler yang digunakan untuk komunikasi dengan modul LCD. Format LCD dalam lcd.h
mendukung : 1x8, 2x12, 3x12, 1x16, 2x16, 2x20, 4x20, 2x24 dan 2x40 karakter. Fungsi-fungsi untuk
mengakses LCD diantaranya adalah :

- unsigned char lcd_init(unsigned char lcd_columns)


Untuk menginisialisasi modul LCD, menghapus layar dan meletakkan posisi karakter pada
baris ke-0 kolom ke-0. Jumlah kolom pada LCD harus disebutkan (misal, 16). Kursor tidak
ditampakkan. Nilai yang dikembalikan adalah 1 bila modul LCD terdeteksi, dan bernilai 0
bila tidak terdapat modul LCD. Fungsi ini harus dipanggil pertama kali sebelum
menggunakan fungsi yang lain.
- void lcd_clear(void)
Menghapus layar LCD dan meletakkan posisi karakter pada baris ke-0 kolom ke-0.
- void lcd_gotoxy(unsigned char x, unsigned char y)
Meletakkan posisi karakter pada kolom ke-x baris ke-y. Nomor baris dan kolom dimulai dari
nol.
- void lcd_putchar(char c)
Menampilkan karakter c pada LCD.
- void lcd_puts(char *str)
Mata Kuliah Sistem Mikroprosesor
Dosen: Heri Andrianto, ST., MT. (Teknik Elektro, UK.Maranatha)
Menampilkan string yang disimpan pada SRAM pada LCD.
- void lcd_putsf(char flash *str)
Menampilkan string yang disimpan pada Flash pada LCD.

Fungsi Delay
Menghasilkan delay dalam program-C. Berada pada header delay.h yang harus dimasukan (include)
sebelum digunakan. Sebelum memanggil fungsi, interrupsi harus dimatikan terlebih dahulu, bila tidak
maka delay akan lebih lama dari yang diharapkan. Juga sangat penting untuk menyebutkan frekuensi
clock chip IC AVR yang digunakan pada menu Project- Configure-C Compiler-Code Generation.
Fungsi delay yang disediakan adalah:
• void delay_us(unsigned int n)
Fungsi ini menghasilkan delay selama n µ-detik, n adalah nilai konstan
• void delay_ms(unsigned int n)
Fungsi ini menghasilkan delay selama n mili-detik, n adalah nilai konstan

Kedua fungsi tersebut secara otomatis akan me-reset watchdog-timer setiap 1 milidetik dengan
mengaktifkan instruksi wdr.

Anda mungkin juga menyukai