Mengenal bahasa BASIC pada BASCOM AVR


Bahasa pemprograman BASIC dikenal di seluruh dunia sebagai bahasa pemrograman handal, cepat, mudah dan tergolong kedalam bahasa pemprograman tingkat tinggi. Bahasa BASIC adalah salah satu bahasa pemprograman yang banyak digunakan untuk aplikasi mikrokontroler karena kemudahan dan  kompatibel terhadap mikrokontroler jenis AVR dan didikung oleh compiler software berupa BASCOM-AVR.

Kontruksi bahasa BASIC pada BASCOM-AVR

Setiap bahasa pemprograman mempunyai standar penulisan program. Konstruksi dari  program bahasa BASIC harus mengikuti aturan sebagai berikut:

$regfile = “header”

’inisialisasi

’deklarasi variabel

’deklarasi konstanta

Do

’pernyataan-pernyataan

Loop

end

Pengarah preprosesor

$regfile = “m16def.dat” merupakan pengarah pengarah preprosesor bahasa BASIC yang memerintahkan untuk meyisipkan file lain, dalam hal ini adalah file m16def.dat yang berisi deklarasi register dari mikrokonroller ATmega 16, pengarah preprosesor lainnya yang sering digunakan ialah sebagai berikut:

$crystal = 12000000  ‘menggunakan crystal clock 12 MHz

$baud = 9600             ‘komunikasi serial dengan baudrate 9600

$eeprom                     ‘menggunakan fasilitas eeprom

Tipe Data

Tipe data merupakan bagian program yang paling penting karena sangat berpengaruh pada program. Pemilihan tipe data yang tepat maka operasi data menjadi lebih efisien dan efektif.

Tabel 1 Tipe Data pada BASCOM AVR

No Tipe Jangkauan
12345

6

7

8

BitByteIntegerWordLong

Single

Double

String

0 atau 10 – 255-32,768 – 32,7670 – 65535-2147483648 – 2147483647

1.5 x 10^–45 – 3.4 x 10^38

5.0 x 10^–324 to 1.7 x 10^308

>254 by

Konstanta

Konstanta merupakan suatu nilai dengan tipe data tertentu yang tidak dapat diubah-ubah selama proses program berlangsung. Konstanta harus didefinisikan terlebih dahulu diawal program.

Contoh :            Kp = 35, Ki=15, Kd=40

Variabel

Variabel adalah suatu pengenal (identifier) yang digunakan untuk mewakili suatu nilai tertentu di dalam proses program yang dapat diubah-ubah sesuai dengan kebutuhan. Nama dari variable terserah sesuai dengan yang diinginkan namun hal yang terpenting adalah setiap variabel diharuskan :

  1. Terdiri dari gabungan huruf dan angka dengan karakter pertama harus berupa huruf, max 32 karakter.
  2. Tidak boleh mengandung spasi atau symbol-simbol khusus seperti : $, ?, %, #, !, &, *, (, ), -, +, = dan lain sebagainya kecuali underscore.
  3. Deklarasi

Deklarasi sangat diperlukan bila akan menggunakan pengenal (identifier) dalam suatu program.

Deklarasi Variabel

Bentuk umum pendeklarasian suatu variable adalah Dim nama_variabel AS tipe_data

Contoh : Dim x As Integerdeklarasi x bertipe integer

Deklarasi Konstanta

Dalam Bahasa Basic konstanta di deklarasikan langsung.

Contohnya : S = “Hello world”Assign string

Deklarasi Fungsi

Fungsi merupakan bagian yang terpisah dari program dan dapat dipanggil di manapun di dalam program. Fungsi dalam Bahasa Basic ada yang sudah disediakan sebagai fungsi pustaka seperti print, input data dan untuk menggunakannya tidak perlu dideklarasikan.

Deklarasi buatan

Fungsi yang perlu dideklarasikan terlebih dahulu adalah fungsi yang dibuat oleh programmer. Bentuk umum deklarasi sebuah fungsi adalah :

Sub Test ( byval variabel As type)

Contohnya : Sub Pwm(byval Kiri As Integer , Byval Kanan As Integer)

Operator

Operator Penugasan

Operator Penugasan (Assignment operator) dalam Bahasa Basic berupa “=”.

Operator Aritmatika

*    : untuk perkalian

/     : untuk pembagian

+    : untuk pertambahan

–     : untuk pengurangan

%   : untuk sisa pembagian (modulus)

Operator Hubungan (Perbandingan)

Operator hubungan digunakan untuk membandingkan hubungan dua buah operand atau sebuah nilai / variable, misalnya :

=          ’Equality X = Y

<          ’Less than X < Y

>          ’Greater than X > Y

<=        ’Less than or equal to  X <= Y

>=        ’Greater than or equal to X >= Y

Operator Logika

Operator logika digunakan untuk membandingkan logika hasil dari operator-operator hubungan. Operator logika ada empat macam, yaitu :

NOT    ‘Logical complement

AND   ‘Conjunction

OR      ‘Disjunction

XOR   ‘Exclusive or

Operator Bitwise

Operator bitwise digunakan untuk memanipulasi bit dari data yang ada di memori. Operator bitwise dalam Bahasa Basic :

Shift A, Left, 2    : Pergeseran bit ke kiri

Shift A, Right, 2   : Pergeseran bit ke kanan

Rotate A, Left, 2 : Putar bit ke kiri

Rotate A, right, 2 : Putar bit ke kanan

Pernyataan Kondisional (IF-THEN – END IF)

Pernyataan ini digunakan untuk melakukan pengambilan keputusan terhadap dua buah bahkan lebih kemungkinan untuk melakukan suatu blok pernyataan atau tidak. Konstruksi penulisan pernyatan IF-THEN-ELSE-END IF pada bahasa BASIC ialah sebagai berikut:

IF  pernyataan kondisi 1 THEN

‘blok pernyataan 1 yang dikerjakan bila kondisi 1 terpenuhi

IF pernyataan kondisi 2 THEN

‘blok pernyataan 2 yang dikerjakan bila kondisi 2 terpenuhi

IF pernyataan kondisi 3 THEN

‘blok pernyataan 3 yang dikerjakan bila kondisi 3 terpenuhi

Setiap penggunaan pernyataan IF-THEN harus diakhiri dengan perintah END IF sebagai akhir dari pernyatan kondisional.

Gambar 1 Diagram alir Pernyataan Kondisional (IF-THEN – END IF)

Pernyataan Kondisional (SELECT-CASE-END SELECT)

Pernyataan ini digunakan untuk melakukan pengambilan keputusan terhadap banyak kondisi. Konstruksi penulisan pernyatan SELECT-CASE-END SELECT pada bahasa BASIC ialah sebagai berikut:

SELECT CASE  var

CASE ‘kondisi1 : ‘blok perintah1

CASE ‘kondisi2 : ‘blok perintah2

CASE ‘kondisi3 : ‘blok perintah3

CASE ‘kondisi4 : ‘blok perintah4

CASE ‘kondisi5 : ‘blok perintah5

CASE ‘kondisi’n’ : ‘blok perintah’n’

END SELECT ‘akhir dari pernyatan SELECT CASE

Gambar 2 Diagram alir Pernyataan Kondisional (SELECT-CASE-END SELECT)

87 responses to this post.

  1. Posted by rudi on Oktober 9, 2010 at 7:22 am

    terima kasih banget Mas pencerahannya…
    aku ini orang bodoh yang pengen banget bisa mikro… he.he.he

    Balas

  2. Posted by huda on November 12, 2010 at 5:48 am

    salam knal .aq mau membuat text berjalan tapi masih bingung untuk membuat listing programnya tolong kasih contohnya mas,.

    Balas

    • salam kenal juga mas huda, mau buat text berjalan dimana mas? seven segement, dot matrik ato LCD…
      ini sedikit potongan program bascom AVR text berjalan pada LCD:
      Cls

      Home
      Lcd Chr(127)
      Waitms 100
      Lcd “www.id-evotech.com”
      Lcd Chr(126)
      Waitms 100

      Lowerline
      Lcd “elektro ITS”

      For A = 1 To 25
      Shiftlcd Right
      Waitms 10
      Next

      For A = 1 To 25
      Shiftlcd Left
      Waitms 10
      Next

      Balas

  3. Posted by huda on November 24, 2010 at 9:02 am

    Mas Fahmi .
    di tempatku(Bojonegoro) sulit mencari komponen mikrokontroler .di mana yang paling dekat ?

    Balas

  4. Posted by anwar on Januari 5, 2011 at 12:07 pm

    mas aq mw tx contoh list programnya untuk dot matrik kalau menggunakan bascom avr seperti apa? mohon di bantu mas.. kalau ada sama contoh rangkaiannya. terimakasih. atw kirim ke emailq aan_ahong@yahoo.co.id

    Balas

    • untuk listing program lengkap dengan karakter tulisan dot-matriks pada bascom AVR saya belum punya mas,..pada dasarnya hampir sama dengan mengakses seven-segmet… 🙂 terimakasih atas kunjunggannya mohon maaf belum bisa membantu.

      Balas

  5. Posted by epong on Februari 15, 2011 at 3:07 pm

    mas q ajari bahasa basic dr plg dasar donk mas…
    lom mudeng blas ni….

    Balas

  6. Mantap mas Fahmi. Salam dari penulis buku Bascom AVR. Belajar banyak bascom. kunjungi blog saya. http://blog.umy.ac.id/iswanto/;http://iswanto.staff.umy.ac.id/

    Balas

  7. gan tahu cara masukin ke IC ga dah dari BASCOM??

    ane dah coba tapi susah bner gan… ane dah coba dah ganti IC nya dengan menggunakan ATMEGA8535
    tapi pas mau INPUTkan skrip k IC ga ke baca molo…

    atau ada SOFTware pendukung lain untuk masukin PROGRAM bacom ke IC ???

    Balas

  8. Posted by Kurniawan Nur Widyosusanto on Februari 24, 2011 at 10:40 pm

    Sori ane bukan Bascom mania..!

    Ane mau kasih link aja, buat siapa2 yang mau blajar pake open source pake bahasa C.

    http://koera.wordpress.com/2011/02/24/winavr-avr-studio-4/

    Balas

  9. Posted by mahmud on Februari 27, 2011 at 8:50 am

    mas fahmi,,klo mau nyeting mengirim data secara serial dan menerima data dari serial di bascom avr gmn?

    Balas

  10. Posted by mahmud on Maret 3, 2011 at 6:57 am

    ouwh cman gitu tow ternyata…terima kasih mas fahmizal….

    Balas

  11. Ikutan donk

    Balas

  12. mas,…mass,..
    mintaa tolong dunkk contoh buat ” sub ” mas,..
    q bikin pasti minta dideklarasiin,.. q bgg,.
    hmpp,.. maklumm mas,. msh pemula

    Balas

    • caranya seperti ini:

      pertama tulis inisialisasi deklarasi ” Declare Sub (nama_deklarasi) ”

      terus sub deklarasinya seperti ini:

      Sub (nama_deklarasi)


      End Sub

      Balas

  13. Posted by hendro on Maret 30, 2011 at 12:58 pm

    keren temen konco’ ku saiki….
    trus berjuang!!!!!

    Balas

  14. Posted by bembang on April 29, 2011 at 1:48 am

    maaf mas mau tanya, kalau ingin membuat aritmatika dari adc bagaimana ya.?

    Balas

  15. Posted by nandang on Mei 2, 2011 at 10:34 am

    mas tau bahasa besic tentang merakit robot ga !!!!

    Balas

  16. lam kenal mas bos,
    tanya dikit mas, apabila saya ingin buat pengendali menggunakan at89s51 untuk pemutar otomatis pada mesin penetas telur.
    kalau mau menyetel selang waktu 1jam maka saya nulisnya harus bagaimana ya mas?
    saya coba wait 3600 tapi tidak bisa sampai 1jam.
    tolong kasih tahu.

    Balas

    • qmu bisa menggunakan fasilitas interupt timer ato yg paling sederhana dengan menggunakan fungsi delay…kalo di bascom AVR waitms 1000 itu sama dengan satu detik, kalo wait 60 itu artinya tunda selama 1 menit dan demikian seterusnya 😀

      Balas

  17. Posted by adi on Mei 20, 2011 at 11:52 am

    IKUTAN YA …. mungkin saya listing ini bisa membantu rekan2 yg ingin membuat scrolling text. untuk registernya pakai 74HC595 dan untuk portD nya sebelum ke dotmatrik pasang IC 7404./ (NOT)
    compile dengan BASCOM AVR
    maklum saya juga baru belajar

    ‘ *****************************************************************************
    ‘ *
    ‘ * Title : Dot Matrix Display text.bas
    ‘ * Version : 1.0
    ‘ * Last Updated : 30.11.2008
    ‘ * Target Device : ATMEGA 8 @ 20Mhz
    ‘ * Author : wwww .avrprojects.net
    ‘ * Program code : BASCOM AVR
    ‘ * Hardware req. : scrolling sign board, ATTiny Board
    ‘ * Description : shows characters on the dot matrix display that are placed in the variable Str_text
    ‘ *
    ‘ *
    ‘ *
    ‘ *****************************************************************************

    $regfile = “M8def.dat” ‘
    $hwstack = 32 ‘ default use 32 for the hardware stack

    $swstack = 32 ‘ default use 10 for the SW stack

    $framesize = 40 ‘ default use 40 for the frame space

    Dim Char As Byte , C As Byte , Digit As Byte , L As Byte , I As Byte , Temp(2) As Byte , Temp2 As Byte

    Dim X As Word

    Dim Str_temp As String * 1 , Reeks(250) As Byte , Str_text As String * 50 , Str_len As Byte , Col_len As Byte , R As Byte

    Dim Tempmsb As Byte , Templsb As Byte , Tempstr As String * 2

    Dim Scroll_speed As Byte

    Declare Sub Show_text
    Declare Sub Set_text
    Declare Sub Test_display

    Config Portb = Output
    Config Portd = Output

    ‘$crystal = 20000000

    Goto Main

    ‘****************

    ‘set text
    Sub Set_text
    C = 1
    For Digit = 1 To Str_len
    Str_temp = Mid(str_text , Digit , 1)
    Char = Asc(str_temp)
    X = Char * 5
    For I = 1 To 5
    Reeks(c) = Lookup(x , Text_data)
    X = X + 1
    C = C + 1
    Next I
    Reeks(c) = 0
    C = C + 1
    Next Digit
    End Sub Set_string

    ‘show text
    Sub Show_text
    If Str_len > 4 Then

    ‘For L = 0 To Col_len
    Do
    C = 1
    For R = 1 To Scroll_speed ‘scrolling speed
    Set Portb.0
    Toggle Portb.1
    Toggle Portb.1
    Toggle Portb.2
    Toggle Portb.2
    Char = C + L
    Portd = Reeks(char)
    Waitms 3
    C = C + 1
    Reset Portb.0
    For I = 1 To 19
    Toggle Portb.1
    Toggle Portb.1
    Toggle Portb.2
    Toggle Portb.2
    Char = C + L
    Portd = Reeks(char)
    Waitms 3
    Incr C
    Next I
    C = 1
    Next R
    Incr L
    If L > Col_len Then L = 0
    Loop
    ‘Next L

    Else

    For L = 0 To Col_len
    C = 1
    For R = 1 To Scroll_speed ‘scrolling speed
    Set Portb.0
    Toggle Portb.1
    Toggle Portb.1
    Toggle Portb.2
    Toggle Portb.2
    Portd = Reeks(c)
    Waitms 3
    C = C + 1
    Reset Portb.0
    For X = 1 To 19
    Toggle Portb.1
    Toggle Portb.1
    Toggle Portb.2
    Toggle Portb.2
    Portd = Reeks(c)
    Waitms 3
    C = C + 1
    Next X
    C = 1
    Next R
    Next L

    End If

    End Sub Show_text

    Sub Test_display
    Portd = 255
    For X = 1 To 20
    Set Portb.0
    Toggle Portb.1
    Toggle Portb.1
    Toggle Portb.2
    Toggle Portb.2
    Next X
    End Sub Test_display

    ‘———————

    Main:

    Call Test_display
    Waitms 100
    Str_text = ” tet ”
    ‘Str_text = “test”
    Str_len = Len(str_text)
    Col_len = Str_len * 6
    Scroll_speed = 8 ‘adjust the scroll speed
    Call Set_text
    Do
    Call Show_text
    Loop
    End ‘

    Text_data:
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘
    Data 0 , 0 , 0 , 0 , 0 ‘space
    Data 0 , 0 , 95 , 0 , 0 ‘!
    Data 0 , 7 , 0 , 7 , 0 ”’
    Data 20 , 127 , 20 , 127 , 20 ‘#
    Data 36 , 42 , 127 , 42 , 18 ‘$
    Data 39 , 21 , 107 , 84 , 114 ‘%
    Data 54 , 73 , 86 , 32 , 80 ‘&
    Data 0 , 0 , 11 , 7 , 0 ”
    Data 0 , 28 , 34 , 65 , 0 ‘ (
    Data 0 , 65 , 34 , 28 , 0 ‘)
    Data 42 , 28 , 127 , 28 , 42 ‘*
    Data 8 , 8 , 62 , 8 , 8 ‘+
    Data 0 , 88 , 56 , 0 , 0 ‘,
    Data 8 , 8 , 8 , 8 , 8 ‘-
    Data 0 , 96 , 96 , 0 , 0 ‘.
    Data 32 , 16 , 8 , 4 , 2 ‘/
    Data 62 , 81 , 73 , 69 , 62 ‘0
    Data 0 , 66 , 127 , 64 , 0 ‘1
    Data 114 , 73 , 73 , 73 , 70 ‘2
    Data 34 , 65 , 73 , 73 , 54 ‘3
    Data 24 , 20 , 18 , 127 , 16 ‘4
    Data 39 , 69 , 69 , 69 , 57 ‘5
    Data 60 , 74 , 73 , 73 , 48 ‘6
    Data 1 , 113 , 9 , 5 , 3 ‘7
    Data 54 , 73 , 73 , 73 , 54 ‘8
    Data 6 , 73 , 73 , 41 , 30 ‘9
    Data 0 , 54 , 54 , 0 , 0 ‘:
    Data 0 , 91 , 59 , 0 , 0 ‘;
    Data 8 , 20 , 34 , 65 , 0 ‘
    Data 2 , 1 , 81 , 9 , 6 ‘?
    Data 50 , 73 , 121 , 65 , 62 ‘@
    Data 124 , 18 , 17 , 18 , 124 ‘A
    Data 65 , 127 , 73 , 73 , 62 ‘B
    Data 62 , 65 , 65 , 65 , 34 ‘C
    Data 65 , 127 , 65 , 65 , 62 ‘D
    Data 127 , 73 , 73 , 65 , 65 ‘E
    Data 127 , 9 , 9 , 1 , 1 ‘F
    Data 62 , 65 , 73 , 73 , 58 ‘G
    Data 127 , 8 , 8 , 8 , 127 ‘H
    Data 0 , 65 , 127 , 65 , 0 ‘I
    Data 32 , 64 , 65 , 63 , 1 ‘J
    Data 127 , 8 , 20 , 34 , 65 ‘K
    Data 127 , 64 , 64 , 64 , 64 ‘L
    Data 127 , 2 , 12 , 2 , 127 ‘M
    Data 127 , 2 , 4 , 8 , 127 ‘N
    Data 62 , 65 , 65 , 65 , 62 ‘O
    Data 127 , 9 , 9 , 9 , 6 ‘P
    Data 62 , 65 , 65 , 33 , 94 ‘Q
    Data 127 , 9 , 25 , 41 , 70 ‘R
    Data 38 , 73 , 73 , 73 , 50 ‘S
    Data 1 , 1 , 127 , 1 , 1 ‘T
    Data 63 , 64 , 64 , 64 , 63 ‘U
    Data 7 , 24 , 96 , 24 , 7 ‘V
    Data 127 , 32 , 24 , 32 , 127 ‘W
    Data 99 , 20 , 8 , 20 , 99 ‘X
    Data 3 , 4 , 120 , 4 , 3 ‘Y
    Data 97 , 81 , 73 , 69 , 67 ‘Z
    Data 0 , 127 , 65 , 65 , 0 ‘[
    Data 2 , 4 , 8 , 16 , 32 ‘\
    Data 0 , 65 , 65 , 127 , 0 ‘]
    Data 4 , 2 , 1 , 2 , 4 ‘^
    Data 64 , 64 , 64 , 64 , 64 ‘_
    Data 0 , 0 , 7 , 11 , 0 ”
    Data 32 , 84 , 84 , 84 , 56 ‘a
    Data 127 , 40 , 68 , 68 , 56 ‘b
    Data 0 , 56 , 68 , 68 , 68 ‘c
    Data 56 , 68 , 68 , 40 , 127 ‘d
    Data 56 , 84 , 84 , 84 , 24 ‘e
    Data 8 , 126 , 9 , 9 , 2 ‘f
    Data 8 , 84 , 84 , 84 , 60 ‘g
    Data 127 , 16 , 8 , 8 , 112 ‘h
    Data 0 , 68 , 125 , 0 , 0 ‘i
    Data 32 , 64 , 68 , 61 , 0 ‘j
    Data 0 , 127 , 16 , 40 , 68 ‘k
    Data 0 , 65 , 127 , 64 , 0 ‘l
    Data 124 , 4 , 120 , 4 , 120 ‘m
    Data 124 , 8 , 4 , 4 , 120 ‘n
    Data 56 , 68 , 68 , 68 , 56 ‘o
    Data 124 , 20 , 20 , 20 , 8 ‘p
    Data 8 , 20 , 20 , 20 , 124 ‘q
    Data 124 , 8 , 4 , 4 , 8 ‘r
    Data 72 , 84 , 84 , 84 , 36 ‘s
    Data 0 , 4 , 63 , 68 , 68 ‘t
    Data 60 , 64 , 64 , 32 , 124 ‘u
    Data 28 , 32 , 64 , 32 , 28 ‘v
    Data 60 , 64 , 60 , 64 , 60 ‘w
    Data 68 , 40 , 16 , 40 , 68 ‘x
    Data 12 , 80 , 80 , 80 , 60 ‘y
    Data 68 , 100 , 84 , 76 , 68 ‘z
    Data 0 , 8 , 54 , 65 , 0 ‘{
    Data 0 , 0 , 119 , 0 , 0 ‘|
    Data 0 , 65 , 54 , 8 , 0 ‘}
    Data 2 , 1 , 2 , 4 , 2 ‘~
    Data 42 , 85 , 42 , 85 , 42 ‘

    Balas

  18. Posted by cherlynda on Agustus 5, 2011 at 8:44 am

    mas tolong dong di share contoh program BASCOM tentang penjumlahan…
    misalnya 2+3 = 5
    itu program nya gmn ya??

    Balas

    • pertama qmu buat dahulu deklarasi dimensi variable yang ingin qmu jumlahakan contohnya

      Dim A As Integer
      Dim B As Integer
      Dim C As Integer

      Do

      A=2
      B=3
      C=A+B

      Loop

      End

      ^_^

      Balas

      • Posted by paijo on Desember 21, 2013 at 11:18 am

        kalo penjumlahan menggunakan keypad trus hasilnya tampil di lcd, kayak kalkulator gitu mas, bisa bantu program nggak mas

  19. pak mohon bantuan fungsi compare (membandingkan 2 buah nilai) semisal jika data input ADC channel 1 berbeda dengan data input pada ADC channel 2, maka maka pin A.1 berlogika 1 dalam bahasa basic bagaimana dituliskannya ? mohon bantuan.. terimakasih

    email saya taufiksanjaya@yahoo.com

    Balas

    • portA selain digunakan sebagai I/O portA juga sebagai adc, untuk contoh program dan penjelasannya bisa lihat di postingan ini, untuk penyelesaian comparenya bisa menggunakan perintah If…then mas 😀

      Balas

      • yang saya tanyakan adalah sample comparenya… komunikasi serial dan ADC tidak menjadi masalah, yang menjadi masalahnya adalah cara membandingkan 2 data inputan

  20. Posted by imam on Januari 8, 2012 at 12:58 am

    tolong contoh program interrupt pada bascom mas…
    untuk pintu geser otomatis
    keadaannya jika pintu sedang bergeser menutup dan kemudian terdeteksi ada orang maka pintu langsung terbuka tanpa menunggu tombol limitswitch_tutup tertekan

    Balas

  21. mas salam kenal…langsung to the point aja saya ada masalah pembacaan adc di AVR8535 kenapa hasil bacaanya tidak stabil ya…mohon pencerahan, sama kalau mas berkenan minta tolong contoh program rtc1307 untuk jam digital….suwun terimakasih

    Balas

  22. Posted by hendri on Februari 11, 2012 at 12:39 pm

    mas fahmi g mo nanya
    d bhasa pmrograman
    basic, apakah tipe data
    integer bisa dgabung kan
    dngan tipe data String???
    kalo bsa tlong share cranya
    ya????
    thank’s mas
    msih newbie
    ha ha ha

    Balas

  23. makasih mas atas ilmunya..

    Balas

  24. Ya Allah, ini aku nyari basic, ketemunya,,,Fahmi dte,,hehe,, boleh dong belajar,,:D

    Balas

  25. salam sejahterah selalu mas,
    bisa ada jelaskan listing program saya ini sejenak,,, makasih.. :

    $regfile = “m8def.dat”
    $crystal = 12000000
    $baud = 9600

    Config Timer1 = Timer , Prescale = 64
    On Ovf1 Blinks
    Enable Ovf1

    Declare Sub Clr_msg
    Declare Sub Get_msg
    Declare Sub Receive
    Declare Sub Saldo_check
    Declare Sub Ready
    Declare Sub Success
    Declare Sub Format_sms
    Declare Sub Write_config
    Declare Sub Already_on
    Declare Sub Already_off
    Declare Sub Lp1_on
    Declare Sub Lp2_on
    Declare Sub Lp3_on
    Declare Sub Lp1_off
    Declare Sub Lp2_off
    Declare Sub Lp3_off
    Declare Sub Lp_off
    Declare Sub Lp_on

    Config Portb.1 = Output
    Led Alias Portb.1
    Led = 1

    Config Portc.3 = Output
    Config Portc.4 = Output
    Config Portc.5 = Output
    Lp1 Alias Portc.4
    Lp2 Alias Portc.3
    Lp3 Alias Portc.5
    Lp1 = 0
    Lp2 = 0
    Lp3 = 0

    Dim Char As String * 1 , Buff As String * 160 , Admin_num As String * 16 , Tmp As String * 160 , Note As String * 30
    Dim Msg(8) As String * 16 , Search As Byte , Cntr As Byte , X As Byte , Numlength As Byte , Pos As Byte

    Const Yasser = “+6285277540411”
    Const Andika = “+6285260085833”
    Const Abu = “+6281361476946”
    Const Jurnalis = “+6285220121485”
    Const Riski = “+6285260571448”

    Mulai:
    Led = 0
    Echo Off ‘jangan menapilkan pesan
    Wait 10
    Write_config
    Clr_msg
    Enable Interrupts

    Utama:
    Do
    Receive
    Search = Instr(buff , “+CMTI”) ‘memberitahu komputer / PC yang pesan SMS telah diterima dan lokasi memori di mana disimpan.
    If Search = 1 Then
    Get_msg
    Buff = Lcase(buff)
    If Admin_num = Yasser Or Admin_num = Andika Or Admin_num = Abu Or Admin_num = Jurnalis Or Admin_num = Riski Then
    If Buff = “lampu1_on” Then
    Lp1_on
    Elseif Buff = “lampu1_off” Then
    Lp1_off
    Elseif Buff = “lampu2_on” Then
    Lp2_on
    Elseif Buff = “lampu2_off” Then
    Lp2_off
    Elseif Buff = “lampu3_on” Then
    Lp3_on
    Elseif Buff = “lampu3_off” Then
    Lp3_off
    Elseif Buff = “pulsa” Then
    Saldo_check
    Elseif Buff = “lampu_off_all” Then
    Lp_off
    Elseif Buff = “lampu_on_all” Then
    Lp_on
    Else
    Format_sms
    End If
    End If
    End If
    Clr_msg
    Loop

    Sub Ready
    Waitms 100
    Do
    X = Inkey()
    Loop Until X = 0
    End Sub

    Sub Receive
    Buff = “”
    Do
    Char = Inkey()
    If Char Chr(10) And Char Chr(13) And Char Chr(32) Then Buff = Buff + Char
    If Char = Chr(10) And Buff “” Then Exit Do
    If Char = Chr(32) And Buff = “>” Then Exit Do
    Loop
    End Sub

    Sub Get_msg ‘get number admin & message
    Disable Ovf1
    Led = 0
    Admin_num = “”
    Ready
    Print “AT+CMGR=1”
    Receive
    Cntr = Split(buff , Msg(1) , “,”)
    Numlength = Len(msg(3)) – 2
    Msg(3) = Mid(msg(3) , 2 , Numlength)
    Admin_num = Msg(3)
    Receive
    Waitms 500
    Led = 1
    Enable Ovf1
    End Sub

    Sub Clr_msg ‘erase all message
    Led = 0
    Disable Ovf1
    Ready
    Print “AT+CMGD=1,4” ‘Hapus Pesan) digunakan untuk menghapus pesan SMS (s) dari penyimpanan pesan. Penyimpanan pesan area dari mana pesan SMS akan dihapus ditentukan oleh CPM perintah AT + (nama perintah dalam teks: Penyimpanan Pesan yang dipilih). Rincian tentang CPM perintah AT + dapat ditemukan di bagian sebelumnya “Penyimpanan Pesan Pilihan (AT CPM)” dari tutorial SMS’
    Receive
    Led = 1
    Enable Ovf1
    End Sub

    Sub Lp_on
    Lp1 = 1
    Lp2 = 1
    Lp3 = 1
    Note = “Ketiga Lampu Sudah Dihidupkan”
    Success
    End Sub

    Sub Lp_off
    Lp1 = 0
    Lp2 = 0
    Lp3 = 0
    Note = “Ketiga Lampu Sudah Dimatikan”
    Success
    End Sub

    Sub Lp1_on
    If Lp1 = 1 Then
    Note = “Lampu 1 Kondisi Masih ON”
    Already_on
    Else
    Lp1 = 1
    Note = “Lampu 1 Sudah Dihidupkan”
    Success
    End If
    End Sub

    Sub Lp1_off
    If Lp1 = 0 Then
    Note = “Lampu 1 Kondisi Masih OFF”
    Already_off
    Else
    Lp1 = 0
    Note = “Lampu 1 Sudah Dimatikan”
    Success
    End If
    End Sub

    Sub Lp2_on
    If Lp2 = 1 Then
    Note = “Lampu 2 Kondisi Masih ON”
    Already_on
    Else
    Lp2 = 1
    Note = “Lampu 2 Sudah Dihidupkan”
    Success
    End If
    End Sub

    Sub Lp2_off
    If Lp2 = 0 Then
    Note = “Lampu 2 Kondisi Masih OFF”
    Already_off
    Else
    Lp2 = 0
    Note = “Lampu 2 Sudah Dimatikan”
    Success
    End If
    End Sub

    Sub Lp3_on
    If Lp3 = 1 Then
    Note = “Lampu 3 Kondisi Masih ON”
    Already_on
    Else
    Lp3 = 1
    Note = “Lampu 3 Sudah Dihidupkan”
    Success
    End If
    End Sub

    Sub Lp3_off
    If Lp3 = 0 Then
    Note = “Lampu 3 Kondisi Masih OFF”
    Already_off
    Else
    Lp3 = 0
    Note = “Lampu 3 Sudah Dimatikan”
    Success
    End If
    End Sub

    Sub Already_on
    Led = 0
    Disable Ovf1
    Ready
    Print “AT+CMGS=” ; Admin_num ‘Parameter pertama dari perintah AT + CMGS, alamat, menentukan alamat tujuan untuk mengirim pesan SMS ke. Biasanya itu adalah nomor ponsel diformat menggunakan rencana ISDN / telepon khas penomoran (ITU E.164/E.163). Misalnya, “+85291234567”, “91234567”, dll Catatan bahwa nilai dilewatkan ke parameter alamat harus string, yaitu harus diapit tanda kutip ganda.
    Receive
    Print Note ; Chr(26)
    Receive
    Led = 1
    Enable Ovf1
    End Sub

    Sub Already_off
    Led = 0
    Disable Ovf1
    Ready
    Print “AT+CMGS=” ; Admin_num
    Receive
    Print Note ; Chr(26)
    Receive
    Led = 1
    Enable Ovf1
    End Sub

    Sub Write_config
    Print “ATE0” ‘Hidupkan echo off, lalu lintas kurang pada serial line.
    Receive
    Print “AT+CSMP=17,167,0,0” ‘Set Parameter Text Mode
    Receive
    Print “AT+CNMI=0,1,2,0,0” ‘digunakan untuk menentukan bagaimana yang baru tiba pesan SMS harus ditangani. Anda dapat memberitahu modem GSM / GPRS atau ponsel baik untuk meneruskan baru tiba pesan SMS langsung ke PC, atau menyimpannya dalam penyimpanan pesan dan kemudian memberitahu PC tentang lokasi mereka dalam penyimpanan pesan.
    Receive
    End Sub

    Sub Saldo_check
    Led = 0
    Disable Ovf1
    Ready
    Print “AT+CUSD=1,*111#,15” ‘adalah AT perintah set instruksi lewat perangkat mobile untuk telepon / modem antarmuka untuk query layanan jaringan
    Receive
    Receive
    Receive
    Tmp = Buff
    Ready
    Print “AT+CMGS=” ; Admin_num
    Receive
    Print Tmp ; Chr(26)
    Receive
    Led = 1
    Enable Ovf1
    End Sub

    Sub Success
    Led = 0
    Disable Ovf1
    Ready
    Print “AT+CMGS=” ; Admin_num
    Receive
    Print Note ; Chr(26)
    Receive
    Led = 1
    Enable Ovf1
    End Sub

    Sub Format_sms
    Led = 0
    Disable Ovf1
    Ready
    Print “AT+CMGS=” ; Admin_num
    Receive
    Print “Cek Format SMS…” ; Chr(26)
    Receive
    Led = 1
    Enable Ovf1
    End Sub

    Blinks:
    Toggle Led
    Return

    Balas

  26. Posted by dita on Juni 5, 2012 at 6:23 pm

    mas,,,saya pake sensor koin sbg input di tugas akhir saya..
    keluaran dari snsor koinnya itu berupa pulsa,,misal saya masukin uang 500 rupiah kluar 35 pulsa (settingan dr sana nya)..
    program di basicnya gmn mas?bsa dijelasin ga?

    Balas

  27. Posted by yon on Juni 7, 2012 at 1:20 pm

    Nanya dong, bikin program ganti layar lcd gimana ya? misal gw mw saat tekan tombol1 lcd nampilin huruf A dgn adc0 ketika gw tekan tombol2 nampilin huruf B dengan adc1.

    Balas

  28. salam knl mas.
    dlnjut dengan aplikasi mas..serta contoh nya.

    Balas

  29. Posted by lekgun on Juni 29, 2012 at 8:57 am

    mas tolong dong contoh program untuk speed control motor bldc.dgn atmega8.

    Balas

  30. mz tolong minta coding runing text n gambar wiring proteusnya menggunakan bahasa bascom kirim di email saya al_andra90@yahoo.com..
    terimakasih mz.

    Balas

  31. Posted by ncenk,,,,,,,,,,,,tasikmalaya on November 15, 2012 at 10:22 pm

    slm kenal…
    mantap artikel yh mas,,, mau tx nih..coding buat menampilkan 3-4 digit pada 7segmen dgn BASCOM8051. makasih

    Balas

  32. Posted by ncenk,,,,,,,,,,,,tasikmalaya on November 15, 2012 at 10:33 pm

    SLM KNL…
    MANTAP artikel yh,,,,,,,
    mz tolong dong minta coding untuk menampilkan Display 7 Segment Menggunakan Rangkaian
    Multipleks 3-4 digit dengan bascom8051….makasih.

    Balas

  33. Posted by majil on Desember 1, 2012 at 10:30 am

    bang bsa ngak buati q coding bascom untuk memprogram mikro atmega 32,ni alat untuk menghitung jumlah masuk dan keluar burung walet dri sangkar

    Balas

  34. Mas saya mau tanya programnya menjalankan garis lurus bergeser ke kiri dan kekanan, pada led matriks menggunakan mikro at mega 16 dan shift register 74HC595. Terima kasih..

    Balas

  35. mas permisi pingin nanya,, cara menjalankan perintah lain disaat ada program looping yg sedang bekerja gimana ya mas 🙂 terimakasih

    Balas

  36. Posted by hendra on April 11, 2013 at 10:28 am

    mas saya mau tanya bagaimana cara nginput ke ADC kalau keluaran tegangan kita dari penguat non-inverting kan ada positif dan negatif nya,,,
    positifnya ke port berapa?
    dan negatif nya ke port berapa?

    Balas

  37. Posted by joni on April 30, 2013 at 4:19 pm

    mas pemisi nanya intruksi-intruksi dalam bascom avr itu apa saja
    dan penjelasannya

    Balas

  38. Posted by Ami on Juni 23, 2013 at 4:01 pm

    Mas, mo nanya.. Gimana bahasa bascomnya untuk menampilkan angka berkoma untuk penampil LCD?

    Balas

  39. mas kalo untuk mematikan dan menghidupkan lima lampu sesuai dengan keadaan cahaya dengan menggunakan 1 ldr bagai mana ya mas,

    Balas

  40. Hi my family member! I wish to say that this article is
    awesome, nice written and come with almost all
    vital infos. I’d like to look extra posts like this .

    Balas

  41. Posted by amaz on Agustus 10, 2013 at 1:05 am

    mas fahmi tiap saya buka blognya tingkat tinggi semua tu pelajarannya buat saya
    saya mau yang dasar seperti dua input satu out put ( i1=mematika dan i2=meghidupkan o1=led)

    Balas

  42. Posted by harisaja on November 9, 2013 at 1:50 am

    mas,, sudah pernah pakai mcs bootloader buat download di bascom avr belum??
    ajarin dong kalau memang sudah bisa mas,, 😥
    butuh banget pencerahan..

    Balas

  43. Numpang nanya OM … ada yang pernah buat Running Text input by Sms ..

    Balas

  44. om,gimna cara buat running text dot matrik nama saya ini.mohon penjelasan ny om buat tugas.menggunakan isis dan programer baskom..kalau bisa sertakan gambar isis ny bang dan program baskom ny.

    Balas

  45. […] digunakan diantaranya assembly (angel tenan….) pascal(  rodok angel…) C (rodok gampang…) BASIC (gampang […]

    Balas

  46. […] digunakan diantaranya assembly (angel tenan….) pascal(  rodok angel…) C (rodok gampang…) BASIC(gampang […]

    Balas

  47. […] 1. software  pemrograman bahasanya ada banyak bahasa yang dapat digunakan diantaranya assembly, pascal, C, BASIC. […]

    Balas

  48. Posted by ilham on November 30, 2015 at 8:47 pm

    kalau program
    jika tommbol di tekan dua kali maka led menyala

    Balas

  49. Posted by Bere Leqi on Desember 3, 2015 at 9:54 am

    kalau kita mengukan call untuk memangil variabel apa???

    Balas

  50. Ass….numpang nanyak Om kalau kita buat program menggunakan conter pada software bascom AVR bagaimana y…?

    Balas

  51. Selamat malam mas fahmi.. saya mau tanya program untuk memutar motor power window bolak balik dengan limit waktu 10 menit.. mohon pencerahan nya.. trims,

    Balas

  52. […] digunakan diantaranya assembly (angel tenan….) pascal(  rodok angel…) C (rodok gampang…) BASIC(gampang […]

    Balas

  53. Mas minta bantuannya dong bisa jelaskan script kalkulator di bawah ini gak yang entri, proses, dan scan keypad?

    $regfile = “m8535.dat”
    $crystal = 1000000
    Config Lcdpin = Pin , Rs = Portb.0 , E = Portb.1 , Db4 = Portb.2
    Config Lcdpin = Pin , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5
    Config Lcd = 16 * 2

    Dim Angka As Long , Tombol As Long , Nilai As Long , C As Byte
    Dim Var1 As Long , Var2 As Long , Hasil As Long , U As Byte
    Dim Op As String * 1

    Cursor Off
    Cls

    Upperline
    Lcd “Kalkulator – Ku”

    Ddra = &B00001111
    Porta = &B11111111
    C = 1

    Lowerline
    Do
    Gosub Scan_keypad
    Loop
    End

    ‘———————————————
    Entri:
    Incr U
    If Op = “=” Then
    Lowerline
    Lcd ” “
    Lowerline
    Op = “”
    End If

    Lcd Tombol

    If C = 1 Then
    If U = 1 Then
    Var1 = Tombol
    Elseif U > 1 Then
    Var1 = Var1 * 10
    Var1 = Var1 + Tombol
    End If
    Else
    If U = 1 Then
    Var2 = Tombol
    Elseif U > 1 Then
    Var2 = Var2 * 10
    Var2 = Var2 + Tombol
    End If
    End If
    Incr U
    Waitms 250
    Return

    ‘——————————————

    Proses:
    Select Case Op
    Case “+” : Hasil = Var1 + Var2
    Case “-” : Hasil = Var1 – Var2
    Case “x” : Hasil = Var1 * Var2
    Case “/” : Hasil = Var1 / Var2
    End Select

    Return
    ‘——————————————
    Scan_keypad:
    Do
    Porta = &B11111110
    If Pina.4 = 0 Then
    Tombol = 7
    Gosub Entri
    Elseif Pina.5 = 0 Then
    Tombol = 8
    Gosub Entri
    Elseif Pina.6 = 0 Then
    Tombol = 9
    Gosub Entri
    Elseif Pina.7 = 0 Then
    Lcd “/”
    Op = “/”
    C = 2
    U = 0
    Waitms 250
    End If

    Porta = &B11111101
    If Pina.4 = 0 Then
    Tombol = 4
    Gosub Entri
    Elseif Pina.5 = 0 Then
    Tombol = 5
    Gosub Entri
    Elseif Pina.6 = 0 Then
    Tombol = 6
    Gosub Entri
    Elseif Pina.7 = 0 Then
    Lcd “x”
    Op = “x”
    C = 2
    U = 0
    Waitms 200
    End If

    Porta = &B11111011
    If Pina.4 = 0 Then
    Tombol = 1
    Gosub Entri
    Elseif Pina.5 = 0 Then
    Tombol = 2
    Gosub Entri
    Elseif Pina.6 = 0 Then
    Tombol = 3
    Gosub Entri
    Elseif Pina.7 = 0 Then
    Lcd “-“
    Op = “-“
    C = 2
    U = 0
    Waitms 250
    End If

    Porta = &B11110111
    If Pina.4 = 0 Then
    Lowerline
    Lcd ” “
    Lowerline
    Var1 = 0
    Var2 = 0
    C = 1
    U = 0
    Waitms 250
    Elseif Pina.5 = 0 Then
    Tombol = 0
    Gosub Entri
    Waitms 250
    Elseif Pina.6 = 0 Then
    Lcd “= “
    Gosub Proses
    Lcd Hasil
    Var1 = 0
    Var2 = 0
    C = 1
    U = 0
    Op = “=”
    Waitms 250
    Elseif Pina.7 = 0 Then
    Lcd “+”
    Op = “+”
    C = 2
    U = 0
    Waitms 250
    End If
    Loop
    End

    Balas

  54. Posted by Pikacu on Desember 8, 2018 at 9:27 pm

    Assalamualaikum, om mau nanya dong. Saya sudah coba bikin coding diatas, tp eror terus di bagian 13nya.
    Error:17 line 13 9parameters expected.

    Mohon bantuannya om, saya baru mau belajar 😁🙏

    Kirim ke email saya saja jwabnnya levifp96@gmail.com trimksih om

    Balas

  55. […] digunakan diantaranya assembly (angel tenan….) pascal(  rodok angel…) C (rodok gampang…) BASIC(gampang […]

    Balas

Tinggalkan komentar