Untuk memberikan penjelasan mengenai struktur dasar program BASIC, berikut ini contoh program bahasa BASIC dalam platform BASCOM-AVR yang dijelaskan untuk stiap bagian-bagiannya.
$regfile = "m8535def.dat" ' use MCU ATmega8535
$crystal = 8000000 ' 8 MHz crystal
$baud = 19200 ' use baud rate
$hwstack = 32 ' default use 32 for the hardware stack
$swstack = 10 ' default use 10 for the SW stack
$framesize = 40
Config Scl = Portb.4
Config Sda = Portb.5
Declare Sub Write_eeprom(byval Adres As Byte, Byval Value As Byte)
Declare Sub Read_eeprom(byval Adres As Byte , Value As Byte)
Const Addressw = 174
Const Addressr = 175
Dim B1 As Byte , Adres As Byte , Value As Byte
‘---------------------- program utama---------------------------
Call Write_eeprom(1 , 3)
Call Read_eeprom(1 , Value) : Print Value 'read it back
Call Read_eeprom(5 , Value) : Print Value 'again for address 5
I2csend &H40 , 255 'all outputs high
I2creceive &H40 , B1 'retrieve input
Print "Received data " ; B1 'print it
End
‘------------------------akhir program utama -------------------
Sub Write_eeprom(byval Adres As Byte , Byval Value As Byte)
I2cstart 'start condition
I2cwbyte Addressw 'slave address
I2cwbyte Adre 'asdress of EEPROM
I2cwbyte Value 'value to write
I2cstop 'stop condition
Waitms 10
End Sub
Sub Read_eeprom(byval Adres As Byte , Value As Byte)
I2cstart 'generate start
I2cwbyte Addressw 'slave adsress
I2cwbyte Adres 'address of EEPROM
I2cstart 'repeated start
I2cwbyte Addressr 'slave address (read)
I2crbyte Value , Nack 'read byte
I2cstop 'generate stop
End Sub
Berikut ini adalah penjelasan mengenai kedudukan/fungsi setiap syntax program pada contoh program di atas.
A. Pernyataan Induk
Pernyataan induk (metastatment), merupakan pernyataan yang bekerja pada tingkat yang lebih tinggi dari pernyataan biasa.
Pernyataan induk lebih banyak digunakan untuk mengatur sistem dari BASIC. Penulisan penyataan induk diawali dengan tanda dollar ($) pada bagian depannya. Bila pernyataan biasa mengontrol program pada saat run-time, maka pernyataan induk mengontrol program pada saat compile-time.
$regfile = "m8535def.dat" ' MCU yang digunakan ATmega8535
$crystal = 8000000 ' 8 MHz crystal
$baud = 19200 ' Nilai baud rate
$hwstack = 32 ' nilai hardware stack (=32, default)
$swstack = 10 ' nilai SW stack (=10, default)
$framesize = 40 ' nilai framesize (=40, default)
Pada contoh, artinya bahwa program digunakan untuk memprogram IC mikrokontroler ATmega8535 (pre-processor “m8535.dat”) dengan Kristal 8 MHz. Kemudian program mengatur penggunaan baud = 19200, hardware stack = 32,SW stack = 10, dan framesize = 40.
-------ooo000ooo-------
Memasukkan file program buatan
Bahasa BASIC mengizinkan kita memasukkan file program lain (diluar program yang sedang dibuat) kedalam program yang sedang dibuat karena keperluan tertentu. Misalnya, karena file program yang akan digabungkan tersebut sering sekali digunakan secara berulang-ulang. Sehingga dengan begitu akan meringkas penulisan program-program yang akan dibuat selanjutnya. Cara memasukkan suatu file tersebut adalah dengan pengarah (directive) $INCLUDE. Pernyataan induk dengan pengarah $INCLUDE akan memberitahu compiler pada saat proses kompilasi tentang adanya program lain yang berhubungan dengan program tersebut dan harus dirangkai (include) dalam program.
Contoh:
$include "driver.bas"
Artinya: Program yang sedang dibuat mengikutkan/merangkaian file dengan nama driver.bas dalam proses kompilasi (compile) program tersebut.
B. Konfigurasi Fitur
Config Scl = Portb.4
Config Sda = Portb.5
Bagian ini digunakan untuk mengkonfigurasikan kanal/jalur serial data (SDA) dan serial clock (SCL) pada penggunaan fitur I2C. Dari konfigurasi tersebut, terlihat bahwa program mengarahkan PORTB.4 sebagai kanal SCL dan PORTB.5 sebagai kanal SDA. Dengan menggunakan software BSCOM-AVR, apabila kita akan menggunakan suatu fitur dari mikrokontroler AVR (timer, port I/O, SPI, ADC, TWI, dll) maka kita harus melakukan konfigurasi fitur tersebut terlebih dahulu.
C. Deklarasi Awal Sub-Program/fungsi
Declare Sub Write_eeprom(byval Adres As Byte, Byval Value AsByte)
Declare Sub Read_eeprom(byval Adres As Byte , Value As Byte)
Kode ini digunakan untuk men-deklarasi-kan suatu sub-program. Deklarasi sub-program ini dalam bahasa C sering disebut dengan deklarasi prototype fungsi. Deklarasi sub-program ini bertujuan memberitahukan compiler bahwa dalam program terdapat sub-program yang dapat direfrensi atau diakses oleh program utama. Dalam contoh, nama sub-program yang dapat diakses adalah ‘Write_eeprom’ dan ‘Read_eeprom’.
D. Deklarasi konstanta
Const Addressw = 174
Const Addressr = 175
E. Deklarasi Variabel
Dim B1 As Byte , Adres As Byte , Value As Byte
Kode ini menunjukkan bahwa dalam program terdapat beberapa penentuan variabel, yaitu variabel ‘B1’ bertipe-databyte, variabel ‘Adres’ bertipe byte, dan variabel ‘Value’ bertipe-data byte
F. Program Utama (main program)
Call Write_eeprom(1 , 3)
Call Read_eeprom(1 , Value)
Print Value 'read it back
Call Read_eeprom(5 , Value)
Print Value 'again for address 5
I2csend &H40 , 255 'all outputs high
I2creceive &H40 , B1 'retrieve input
Print "Received data " ; B1 'print it
End
Bagian kode ini adalah merupakan program utama.
G. Blok Sub-Program
Kode sub-program dibawah ini adalah bagian lengkap dari sub-program bernama ‘Write_eeprom’ dan ‘Read_eeprom’ yang mana kedua sub-program tersebut telah dideklarasikan sebelumnya pada awal program.
Blok sub program ‘Write_eeprom’
Sub Write_eeprom(byval Adres As Byte , Byval Value AsByte)
I2cstart 'start condition
I2cwbyte Addressw 'slave address
I2cwbyte Adres 'asdress of EEPROM
I2cwbyte Value 'value to write
I2cstop 'stop condition
Waitms 10
End Sub
Blok sub program ‘Read_eeprom’
Sub Read_eeprom(byval Adres As Byte , Value As Byte)
I2cstart 'generate start
I2cwbyte Addressw 'slave adsress
I2cwbyte Adres 'address of EEPROM
I2cstart 'repeated start
I2cwbyte Addressr 'slave address (read)
I2crbyte Value , Nack 'read byte
I2cstop 'generate stop
End Sub
-------ooo000ooo-------
Pada bahasa BASIC, dalam membuat blok program yang penggunaannya sering dilakukan pemanggilan berulang-ulang selain menggunakan pernyataan ‘sub-program’ kita juga dapat menuliskannya dengan cukup pemberian “label” pada suatu blok sub-program. Label, berfungsi sebagai judul dari suatu sub-program. Label harus berdiri sendiri. Artinya dalam satu baris hanya boleh mengandung satu buah label dan tidak boleh mengandung bentuk instruksi lainnya. Sebuah label harus diikuti oleh tanda titik dua ( : ) dan diakhiri dengan kata kunci ‘return’ apabila suatu ‘label’ tersebut berstatus sebagai program lompatan dengan perintah “GoSub”. Sedangkan apabila suatu ‘label’ berstatus sebagai program lompatan dengan perintah “GoTo”, maka pada akhir ‘label’ tidak perlu diakhiri dengan kata kunci ‘return’.
Contoh:
Nama_label:
Pada bahasa BASIC, dalam membuat blok program yang penggunaannya sering dilakukan pemanggilan berulang-ulang selain menggunakan pernyataan ‘sub-program’ kita juga dapat menuliskannya dengan cukup pemberian “label” pada suatu blok sub-program. Label, berfungsi sebagai judul dari suatu sub-program. Label harus berdiri sendiri. Artinya dalam satu baris hanya boleh mengandung satu buah label dan tidak boleh mengandung bentuk instruksi lainnya. Sebuah label harus diikuti oleh tanda titik dua ( : ) dan diakhiri dengan kata kunci ‘return’ apabila suatu ‘label’ tersebut berstatus sebagai program lompatan dengan perintah “GoSub”. Sedangkan apabila suatu ‘label’ berstatus sebagai program lompatan dengan perintah “GoTo”, maka pada akhir ‘label’ tidak perlu diakhiri dengan kata kunci ‘return’.
Contoh:
Nama_label:
Dim I As Byte
PORTB = 1
For I = 1 To 8
Rotate PORTB, Left
Waitms 100
Next I
Return
H. Komentar Program
Semua pernyataan yang ditulis dibelakang tanda petik tunggal (‘) merupakan komentar program. Komentar program sebenarnya bukanlah bagian program. Komentar program merupakan keterangan tambahan pada suatu program. Keterangan ini bersifat tambahan dan tidak ikut dalam proses kompilasi program oleh compiler serta tidak mempengaruhi suatu program.
Pernyataan-1 ‘ komentar 1
Pernyataan-2 ‘ komentar 2
Pernyataan-3 ‘ komentar 3
Pernyataan-n ‘ komentar n
0 comments:
Post a Comment