Pada postingan kali ini saya akan membahas mengenai instruksi yang
umum digunakan pada program-program mikrokontroler sederhana. Untuk
lebih jelasnya mari kita pelajari bahasan dibawah ini.
Pengembangan sebuah system menggunakan mikrokontroler AVR buatan ATMEL menggunakan software AVR STUDIO dan Codevision AVR. 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, di mana penulisan program, compile, link, pembuatan kode mesin (assembler) dan download program ke chip AVR dapat dilakukan pada codevision, selain itu ada fasilitas terminal, yaitu untuk melakukan komunikasi serial dengan mikrokontroler yang sudah deprogram. Proses download program ke IC mikrokontroler AVR dapat menggunakan system download secara ISP (In-System Programming). In-System programmable Flash on-chip mengizinkan memori program untuk diprogram ulang dalam system menggunakan hubungan serial SPI (Andrianto, 2008: 17).
Berikut ini penjelasan penggunaan program dalam bahasa C di software Codevision AVR.
Preprocessor (#): Digunakan untuk memasukkan (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 oxff
#define SUM(a,b) a+b
#define sensor PIN.2
#define pompa PORTB.o
Komentar
Penulisan komentar untuk beberapa baris komentar sekaligus
/*
…komentar
..*/
Penulisan komentar untuk satu baris saja
//…komentar…
1. Program Kontrol
a. Percabangan
Perintah if dan if…else…
Perintah if dan if…else.. digunakan untuk melakukan operasi percabangan bersyarat. Sintaks penulisan if dapat ditulis sebagai berikut :
if(<expression>)<statement>;
Sintaks perintah if …else …dapat dituliskan sebagai berikut:
if(<expression>)<statement1>;
else <statement2>;
b. Looping (pengulangan)
Looping adalah pengulangan satu atau beberapa perintah sampai mencapai keadaan tertentu. Ada tiga perintah looping, yaitu: for …,while …, dan do…while…. Sintaks loop for dapat dituliskan sebagai berikut :
for
Untuk pengulangan yang melakukan proses increment
for(nama_variable = nilai_awal;syarat_loop;nama_variable ++)
{
statement_yang_diulang;
}
//untuk pengulangan yang melakukan proses decrement
For(nama_varible=nilai_awal;syarat_loop;nama_variable –)
{
Statement_yang_diulang;
}
Syarat_loop adalah pernyataan relasional yang menyatakan syarat berhentinya pengulangan, biasanya barkaitan dengan variable kontrol, nama_variable++ dan nama_variable–, menyatakan proses increment dan proses decrement pada variable kontrol.
while
Perintah while dapat melakukan looping apabila persyaratannya benar. Sintaks perintah while dapat dituliskan sebagai berikut :
nama_varible = nilai_awal;
while (syarat_loop)
{
Statement_yang_akan_diulang;
Nama_variable++;
}
2. Library Function pada CodeVisionAVR
a. Fungsi Input/Output
Fungsi-fungsi input/Output berada didalam file stdio.h, pada subdirektori …\INC. berikut ini beberapa fungsi I/O dasar yang disediakan pada CodeVision.
1) Inisialisasi baudrate UART
2) Mengaktifkan transmitter UART
3) Mengaktifkan receiver UART
Fungsi I/O yang lebih tinggi lainnya menggunakan fungsi getchar dan putchar, seperti:
b. 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.
c. Fungsi LCD
Fungsi LCD ditunjukkan 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: 1×8, 2×12, 3×12, 1×16, 2×16, 2×20, 4×20, 2×24, dan 2×40 karakter. Fungsi-fungsi untuk mengakses LCD diantaranya adalah:
d. Fungsi Delay
Menghasilkan delay dalam program-C. Berada pada header delay.h yang harus dimasukkan (include) sebelum digunakan. Sebelum memanggil fungsi, interupsi 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 – Configur – C Compiler – Code Generation.
Fungsi delay yang dihasilkan adalah:
Kedua fungsi tersebut secara otomatis akan me-reset watchdog-timer setiap 1 mili-detik dengan mengaktifkan instruksi wdr.
Fungsi – fungsi lain seperti fungsi akses memori, I2C, maxim/dallas semiconductor DS1302 Real Time Clock, 1 Wire Protocol, SPI, Power Management dapat dilihat pada manual CodeVisionAVR, CodeVisionAVR user manual.
Pengembangan sebuah system menggunakan mikrokontroler AVR buatan ATMEL menggunakan software AVR STUDIO dan Codevision AVR. 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, di mana penulisan program, compile, link, pembuatan kode mesin (assembler) dan download program ke chip AVR dapat dilakukan pada codevision, selain itu ada fasilitas terminal, yaitu untuk melakukan komunikasi serial dengan mikrokontroler yang sudah deprogram. Proses download program ke IC mikrokontroler AVR dapat menggunakan system download secara ISP (In-System Programming). In-System programmable Flash on-chip mengizinkan memori program untuk diprogram ulang dalam system menggunakan hubungan serial SPI (Andrianto, 2008: 17).
Berikut ini penjelasan penggunaan program dalam bahasa C di software Codevision AVR.
Preprocessor (#): Digunakan untuk memasukkan (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 oxff
#define SUM(a,b) a+b
#define sensor PIN.2
#define pompa PORTB.o
Komentar
Penulisan komentar untuk beberapa baris komentar sekaligus
/*
…komentar
..*/
Penulisan komentar untuk satu baris saja
//…komentar…
1. Program Kontrol
a. Percabangan
Perintah if dan if…else…
Perintah if dan if…else.. digunakan untuk melakukan operasi percabangan bersyarat. Sintaks penulisan if dapat ditulis sebagai berikut :
if(<expression>)<statement>;
Sintaks perintah if …else …dapat dituliskan sebagai berikut:
if(<expression>)<statement1>;
else <statement2>;
b. Looping (pengulangan)
Looping adalah pengulangan satu atau beberapa perintah sampai mencapai keadaan tertentu. Ada tiga perintah looping, yaitu: for …,while …, dan do…while…. Sintaks loop for dapat dituliskan sebagai berikut :
for
Untuk pengulangan yang melakukan proses increment
for(nama_variable = nilai_awal;syarat_loop;nama_variable ++)
{
statement_yang_diulang;
}
//untuk pengulangan yang melakukan proses decrement
For(nama_varible=nilai_awal;syarat_loop;nama_variable –)
{
Statement_yang_diulang;
}
Syarat_loop adalah pernyataan relasional yang menyatakan syarat berhentinya pengulangan, biasanya barkaitan dengan variable kontrol, nama_variable++ dan nama_variable–, menyatakan proses increment dan proses decrement pada variable kontrol.
while
Perintah while dapat melakukan looping apabila persyaratannya benar. Sintaks perintah while dapat dituliskan sebagai berikut :
nama_varible = nilai_awal;
while (syarat_loop)
{
Statement_yang_akan_diulang;
Nama_variable++;
}
2. Library Function pada CodeVisionAVR
a. Fungsi Input/Output
Fungsi-fungsi input/Output berada didalam 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)
1) Inisialisasi baudrate UART
2) Mengaktifkan transmitter UART
3) 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.
b. 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 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.
c. Fungsi LCD
Fungsi LCD ditunjukkan 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: 1×8, 2×12, 3×12, 1×16, 2×16, 2×20, 4×20, 2×24, dan 2×40 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. jumlah kolom pada LCD harus disebutkan (misal, 16). Kursor tidak di tampakkan. 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): menampilkan string yang disimpan pada SRAM pada LCD.
- void lcd_putsf(char flash *str): menampilkan string yang disimpan pada flash pada LCD.
d. Fungsi Delay
Menghasilkan delay dalam program-C. Berada pada header delay.h yang harus dimasukkan (include) sebelum digunakan. Sebelum memanggil fungsi, interupsi 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 – Configur – C Compiler – Code Generation.
Fungsi delay yang dihasilkan 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 mili-detik dengan mengaktifkan instruksi wdr.
Fungsi – fungsi lain seperti fungsi akses memori, I2C, maxim/dallas semiconductor DS1302 Real Time Clock, 1 Wire Protocol, SPI, Power Management dapat dilihat pada manual CodeVisionAVR, CodeVisionAVR user manual.