Konsep dan Struktur Bahasa Assembly Pada MCS51

x
x
Sarana yang ada dalam program assembly sangat minim, tidak seperti dalam bahasa pemrograman tingkat atas (high level language programming) semuanya sudah siap pakai. Penulis program assembly harus menentukan segalanya, menentukan letak program yang ditulisnya dalam memori-program, membuat data konstan dan tablel konstan dalam memori-program, membuat variabel yang dipakai kerja dalam memori-data dan lain sebagainya.


Program sumber assembly

Program-sumber assembly (assembly source program) merupakan kumpulan dari baris-baris perintah yang ditulis dengan program penyunting-teks (text editor) sederhana, misalnya program EDIT.COM dalam DOS, atau program NOTEPAD dalam Windows. Kumpulan baris-printah tersebut biasanya disimpan ke dalam file dengan nama ekstensi *.ASM atau nama lain misalnya *.A51 dan lain sebagainya, tergantung pada program Assembler yang akan dipakai untuk mengolah program-sumber assembly tersebut.

Setiap baris-perintah merupakan sebuah perintah yang utuh, artinya sebuah perintah tidak mungkin dipecah menjadi lebih dari satu baris. Satu baris perintah bisa terdiri atas 4 bagian, bagian pertama dikenali sebagai label atau sering juga disebut sebagai symbol, bagian kedua dikenali sebagai kode operasi, bagian ketiga adalah operand dan bagian terakhir adalah komentar.




Antara bagian-bagian tersebut dipisahkan dengan sebuah spasi atau tabulator.




    1. Bagian label

Label dipakai untuk memberi nama pada sebuah baris-perintah, agar bisa mudah menyebitnya dalam penulisan program. Label bisa ditulis apa saja asalkan diawali dengan huruf, biasa panjangnya tidak lebih dari 16 huruf. Huruf-huruf berikutnya boleh merupakan angka atau tanda titik dan tanda garis bawah. Kalau sebuah baris-perintah tidak memiliki bagian label, maka bagian ini boleh tidak ditulis namun spasi atau tabulator sebagai pemisah antara label dan bagian berikutnya mutlak tetap harus ditulis.


Dalam sebuah program sumber bisa terdapat banyak sekali label, tapi tidak boleh ada label yang kembar.




Sering  sebuah baris-perintah hanya terdiri dari bagian label saja, baris demikian itu memang tidak bisa dikatakan sebagai baris-perintah yang sesungguhnya, tapi hanya sekedar memberi nama pada baris bersangkutan.


Bagian label sering disebut juga sebagai bagian symbol, hal ini terjadi kalau label tersebut tidak dipakai untuk menandai bagian program, melainkan dipakai untuk menandai bagian data. 
Bagian kode operasi

Kode operasi (operation code atau sering disingkat sebagai OpCode) merupakan bagian perintah yang harus dikerjakan. Dalam hal ini dikenal dua macam kode operasi, yang pertama adalah kode-operasi untuk mengatur kerja mikroprosesor / mikrokontroler. Jenis kedua dipakai untuk mengatur kerja program assembler, sering dinamakan sebagai assembler directive.

Kode-operasi ditulis dalam bentuk mnemonic, yakni bentuk singkatan-singkatan yang relatip mudah diingat, misalnya adalah MOV, ACALL, RET dan lain sebagainya. Kode-operasi ini ditentukan oleh pabrik pembuat mikroprosesor/mikrokontroler, dengan demikian setiap prosesor mempunyai kode-operasi yang berlainan.

Kode-operasi berbentuk mnemonic tidak dikenal mikroprosesor/mikrokontroler, agar program yang ditulis dengan kode mnemonic bisa dipakai untuk mengendalikan prosesor, program semacam itu diterjemahkan menjadi program yang dibentuk dari kode-operasi  kode-biner, yang dikenali oleh mikroprosesor/mikrokontroler.

Tugas penerjemahan tersebut dilakukan oleh program yang dinamakan sebagai Program Assembler. 

Di luar kode-operasi yang ditentukan pabrik pembuat mikroprosesor/mikrokontroler, ada pula kode-operasi untuk mengatur kerja dari program assembler, misalnya dipakai untuk menentukan letak program dalam memori (ORG), dipakai untuk membentuk variabel (DS), membentuk tabel dan data konstan (DB, DW) dan lain sebagainya.

2. Bagian operand
Operand merupakan pelengkap bagian kode operasi, namun tidak semua kode operasi memerlukan operand, dengan demikian bisa terjadi sebuah baris perintah hanya terdiri dari kode operasi tanpa operand. Sebaliknya ada pula kode operasi yang perlu lebih dari satu operand, dalam hal ini antara operand satu dengan yang lain dipisahkan dengan tanda koma.


Bentuk operand sangat bervariasi, bisa berupa kode-kode yang dipakai untuk menyatakan Register dalam prosesor, bisa berupa nomor-memori (alamat memori) yang dinyatakan dengan bilangan atau pun nama label, bisa berupa data yang siap di-operasi-kan. Semuanya disesuaikan dengan keperluan dari kode-operasi.


Untuk membedakan operand yang berupa nomor-memori atau operand  yang berupa data yang siap di-operasi-kan, dipakai tanda-tanda khusus atau cara penulisan yang berlainan.

Di samping itu operand bisa berupa persamaan matematis sederhana atau persamaan Boolean, dalam hal semacam ini program Assembler akan menghitung nilai dari persamaan-persamaan dalam operand, selanjutnya merubah hasil perhitungan tersebut ke kode biner yang dimengerti oleh prosesor. Jadi perhitungan di dalam operand dilakukan oleh program assembler bukan oleh prosesor!

3. Bagian komentar
Bagian komentar merupakan catatan-catatan penulis program, bagian ini meskipun tidak mutlak diperlukan tapi sangat membantu masalah dokumentasi. Membaca komentar-komentar pada setiap baris-perintah, dengan mudah bisa dimengerti maksud tujuan baris bersangkutan, hal ini sangat membantu orang lain yang membaca program.

Pemisah bagian komentar dengan bagian sebelumnya adalah tanda spasi atau tabulator, meskipun demikian huruf pertama dari komentar sering-sering berupa tanda titik-koma, merupakan tanda pemisah khusus untuk komentar.

Untuk keperluan dokumentasi yang intensip, sering-sering sebuah baris yang merupakan komentar saja, dalam hal ini huruf pertama dari baris bersangkutan adalah tanda titik-koma.

Pembahasan di atas diringkas dalam Gambar 1.




Gambar 1
Program-sumber assembly




Assembly Listing

Program-sumber assembly di atas, setelah selesai ditulis diserahkan ke program Assembler untuk diterjemahkan. Setiap prosesor mempunyai program assembler tersendiri, bahkan satu macam prosesor bisa memiliki beberapa macam program Assembler buatan pabrik perangkat lunak yang berlainan.

Hasil utama pengolahan program Assembler adalah program-obyek. Program-obyek ini bisa berupa sebuah file tersendiri, berisikan kode-kode yang siap dikirimkan ke memori-program mikroprosesor/mikrokontroler, tapi ada juga  program-obyek yang disisipkan pada program-sumber assembly seperti terlihat dalam Assembly Listing di Gambar 2.

Bagian kanan Gambar 2 merupakan program-sumber Assembly karya asli penulis program, setelah diterjemahkan oleh program Assembler kode-kode yang dihasilkan berikut dengan nomor-nomor memori tempat penyimpanan kode-kode tadi, disisipkan pada bagian kiri setiap baris perintah, sehingga bentuk program ini tidak lagi dikatakan sebagai program-sumber assembly tapi dikatakan sebagai Assembly Listing.

Membaca Assembly Listing bisa memberikan gambaran yang lebih jelas bagi program yang ditulis, bagi pemula Assembly Listing memberi pengertian yang lebih mendalam tentang isi memori-program, sehingga bisa lebih dibayangkan bagaimana kerja dari sebuah program.



Gambar 2
Assembly Listing







Program Obyek format HEX

Selain Assembly Listing, hasil kerja program Asembler lainnya adalah program obyek yang dipakai untuk mengendalikan sebuah mikroprosesor/mikrokontroler, program obyek disimpan dalam file. Terdapat dua macam bentuk file penyimpan program obyek, yang pertama adalah file yang berisikan kode biner murni,  dan yang satu lagi adalah file biner yang sudah diolah menjadi file teks.


File jenis pertama biasanya dinamakan sebagai binary object file, biasanya memakai ekstensi *.BIN. File semacam ini hanya berisikan angka-angka biner yang akan diisikan ke dalam memori tanpa informasi lain, sehingga selalu dianggap bahwa bahwa file tersebut berisikan kode-kode biner yang nantinya ditempatkan mulai dari memori nomor 0. Kalau ternyata kode-kode biner diisikan mulai dari memori nomor 8000h, maka mulai posisi 0 sampai 7FFFh akan diisi dengan bilangan biner 00h, baru setelah itu menyusul kode biner yang sesungguhnya. File semacam ini banyak dipakai untuk EPROM Programmer model lama.

File jenis kedua dinamakan Hexadecimal format object file, biasanya memakai ekstensi *.BIN . Data biner dirubah ke dalam bentuk heksadesimal dan yang disimpan ke dalam file adalah kode ASCII dari bilangan heksadesimal tersebut. Misalnya data biner 00111010, atau heksadesimal 3Ah, dituliskan ke dalam file menjai 33h (kode ASCIInya angka 3) dan 41h (kode ASCIInya huruf A). Dengan cara ini isi dari file tersebut bisa dengan mudah dibaca dengan program penyunting teks (text editor) biasa, bahkan bisa di-cetak di atas kertas seperti terlihat dalam Gambar 3, file semacam itu bisa dibaca dengan text editor biasa, misalnya EDIT.COM dalam DOS, atau NOTEPAD dalam Windows.

Dalam file format HEX semacam ini, selain disimpan data biner yang akan diisikan ke ROM, berisikan pula nomor-nomor memori tempat penyimpanan data biner tersebut. EPROM programer baru umumnya memakai format file obyek semacam ini.

Gambar 3
Program obyek format HEX




Format HEX dari Intel
Ada beberapa macam format untuk membentuk file program obyek dengan format HEX (Hexadecimal format object file), meskipun demikian hanya 2 yang banyak dipakai, yakni format buatan Motorola yang dinamakan sebagai format S19 dan format buatan Intel yang biasa disebut sebagai format HEX dari Intel.

Berikut ini adalah pembahasan file program obyek dengan format HEX dari Intel yang dipakai MCS51, format ini didefinisikan dalam artikel dari Intel dengan judul Hexadecimal Object File Format Specification (http://alds.stts.edu/appnote/#MCS51).


Gambar 4
Anatomi baris-baris dalam file format HEX



File program obyek dengan format HEX dari Intel berisikan baris-baris tulisan seperti terlihat dalam Gambar4.

Setiap baris mengandung informasi tentang berapa banyak data dalam baris tersebut, alamat awal tempat penyimpanan data dalam baris tersebut, jenis baris dan sarana untuk memastikan kebenaran data yang dinamakan sebagai check sum. Dalam baris tersebut, setiap huruf (kecuali huruf pertama) mewakili satu bilangan heksa-desimal, dengan demikian setiap 2 huruf membentuk data satu byte yang terdiri dari 2 bilangan heksadesimal.

Rincian dari format tersebut sebagai berikut :

1. Huruf pertama dalam baris, selalu berisi tanda “:”, merupakan kode identitas yang menyatakan baris tersebut berisikan kode-kode biner yang disimpan dalam format HEX dari Intel.

2. Huruf ke-2 dan ke-3 dipakai untuk menyatakan banyaknya data dalam baris yang dinyatakan dengan 2 angka heksa-desimal, sehingga banyaknya data dalam 1 baris maksimal adalah 255 (atau heksa-demimal FF).

3. Huruf ke 4 sampai 7, merupakan 4 angka heksa-desimal yang dipakai untuk menyatakan alamat awal tempat penyimpanan kode-kode dalam baris teks bersangkutan.

4. Huruf 8 dan 9 dipakai untuk menyatakan jenis teks data. Nilai 00 dipakai untuk menyatakan baris tersebut berisikan data biasa, 01 menyatakan baris tersebut merupakan baris terakhir. 

5. Huruf ke 10 dan seterusnya adalah data. Setiap 2 huruf mewakili data 1 byte, sehingga jumlah huruf pada bagian ini adalah dua kali banyaknya data yang disebut pada butir 2 di atas.

6. 2 huruf terakhir dalam baris merupakan check sum. Byte-byte yang disebut dalam butir 2 sampai 5 di atas dijumlahkan, hasil penjumlahan di-balik (inverted) sebagai bilangan check sum. (Hasil penjumlahan bisa menghasilkan nilai yang lebih besar dari 2 bilangan heksadesimal, namun hanya 2 bilangan heksa-desimal yang bobotnya terkecil yang dipakai).

Kontrol Traffic Light Menggunakan 8051/AT89C2051

Mikrokontroler memiliki fungsi yang sangat luas sekali, kali ini saya akan menggunakan mikrokontroler sebagai pengontrol dari lampu lalu lintas atau traffic light,

Dengan memanfaatkan 2 port dari AT89C2051 kita sudah bisa mengontrol traffic light dengan 4 simpangan/perempatan.

Dibawah ini adalah skema dari rangkaian tersebut:
Untuk melihat ukurannya silahkan klik pada gambar

Rangkaian membutuhkan tegangan 5V yang telah diregulasi, pada proyek ini lampu yang digunakan adalah lampu led. jika anda ingin menggunakan lampu 220V atau yang lebih tinggi tegangannya anda memerlukan Relay Board sebagai penghubung mikrokontroler dengan lampu.
 Untuk Relay Board saya akan terbitkan di lain posting.

Source Kode Rangkaian :

NR    EQU    P3.5
NY    EQU    P3.4
NG    EQU    P3.3

SR    EQU    P1.2
SY    EQU    P1.3
SG    EQU    P1.4

ER    EQU    P1.5
EY    EQU    P1.6
EG    EQU    P1.7

WR    EQU    P3.7
WY    EQU    P1.0
WG    EQU    P1.1

CSEG     AT      0        ; RESET VECTOR
;---------==========----------==========---------=========---------
;              PROCESSOR INTERRUPT AND RESET VECTORS
;---------==========----------==========---------=========---------

        ORG     00H            ; Reset
        JMP     MAIN
;---------==========----------==========---------=========---------
MAIN:
       MOV SP,#40H
       MOV P1,#0FFH
       MOV P3,#0FFH
      
TOP:     CLR NR
       CLR SR
       CLR ER
       CLR WY
       SETB WG
       CALL Y_DELAY
       SETB NR
       CLR NY
       CLR WR
       SETB WY
       CALL Y_DELAY
       SETB NY
       CLR NG
       CALL DELAY
      
       CLR NY
       SETB NG
       CALL Y_DELAY
       CLR NR
       SETB NY
       SETB SR
       CLR SY
       CALL Y_DELAY
       SETB SY
       CLR SG
       CALL DELAY
      
       CLR SY
       SETB SG
       CALL Y_DELAY
       CLR SR
       SETB SY
       SETB ER
       CLR EY
       CALL Y_DELAY
       SETB EY
       CLR EG
       CALL DELAY
      
       CLR EY
       SETB EG
       CALL Y_DELAY
       CLR ER
       SETB EY
       SETB WR
       CLR WY
       CALL Y_DELAY
       SETB WY
       CLR WG
       CALL DELAY
       AJMP TOP
      
      
      
;**********************************************************
DELAY:
            MOV R3,#3FH
REPA3:    MOV R1,#0FFH
REPA2:    MOV R2,#0FFH
REPA1:    NOP
            DJNZ R2,REPA1
            DJNZ R1,REPA2
            DJNZ R3,REPA3
            RET
;  ---------==========----------==========---------=========---------
Y_DELAY:
            MOV R3,#1AH
RQPA3:    MOV R1,#0FFH
RQPA2:    MOV R2,#0FFH
RQPA1:    NOP
            DJNZ R2,RQPA1
            DJNZ R1,RQPA2
            DJNZ R3,RQPA3
            RET
;**********************************************************
     END




Kode Lengkap Rangkaian beserta Skema rangkaian dapat anda download disini

Tutorial Top View Simulator

  • Judul : Tutorial Mikrokontroler menggunakan Top View Simulator
  • Bahasa : Indonesia
  • Jenis File : PDF (Adobe reader)
  • Jumlah Halaman : 33
  • Lain-lain :
  • Isi :
  1. Dasar Penggunaan
  2. Pembuatan program dan simulasi led
  3. Pembuatan program dan simulasi Switch
  4. Pembuatan program dan simulasi 7segment
  5. Pembuatan program dan simulasi LCD
Anda bisa mendownloadnya disini

Software PLC Simulator (Omron,Mitsubishi)

Software Simulasi PLC
Software PLC Simulator untuk segala jenis PLC ini untuk mensimulasikan ladder diagram dan perangkat Input Output PLC pada komputer kita.

Screenshotnya




PLC simulator LogixPro Prosim II ini dapat anda download disini

Link telah diperbaiki 22 April 2012

Sensor Suara (Voice level detector)

Mungkin suara yang merdu tidak menjadi masalah bagi kita.  Kita cenderung untuk mendengarkan bahkan mungkin mencari suara yang merdu tersebut.  Tetapi jika suara yang terdengar tidak merdu bahkan menjadi sesuatu yang mengganggu maka bukannya tidakmungkin kita akan memaki-maki yang menghasilkan suara tersebut. 
Selanjutnya, suara yang tidak enak didengar ini kita katakan sebagai kondisi bising.  Kebisingan suara mempunyai satuan yaitu dB (desibel).  Taraf kekuatan suara diatas 60dB sudah dikatakan bising, kondisi ini biasanya terjadi pada saat truk atau kendaraan besar lewat. Kekuatan suara yang diukur pada tempat yang berbeda akan berbeda pula hasil pengukurannya.  Semakin jauh alat pengukur kebisangan diletakkan dari sumber suara maka nilai kebisingan yang ditunjukkan akan semakin kecil.

Rangkaian ini dapat diaplikasikan untuk detektor suara yang cukup peka dan dapat diaplikaiskan untuk sistem keamanan baik untuk rumah maupun pergudangan.  Dengan catatan pengaturan taraf intensitas suara yang diinginkan untuk mentrigger buzzer harus ditentukan terlebih dahulu karena disetiap tempat intensitas dari suatu sumber suara tidak sama.

  Detektor Taraf Kebisngan Suara


Pada kesempatan kali ini akan dibahas mengenai alat pengukur kebisingan suara sederhana dengan menggunakan chip LM3915.  Chip ini diproduksi oleh National Semiconductor, mampu mengukur intensitas suara dalam range 30dB.  LM3915 mempunyai 10 pin output yan aktif low sehingga tiap step adalah 3 dB.  Chip ini tidak menutup kemungkinan untuk di kaskade untuk mendapatkan range pengukuran yang lebih besar.



Gambar 1
Blok Diagram Rangkaian


 

LM3915 Dot/Bar Display Driver

Inti dari rangkaian ini adalah chip dari National Semiconductor, LM3915.  LM3915 mempunyai beberapa variasi yaitu LM3914 dan LM3916.  Varian-varian tersebut mempunyai persamaan yang mendasar namun digunakan pada aplikasi yang berbeda.

Output LM3915 selain menggerakkan tampilan LED, dapat juga menggerakkan transistor PNP.  Basis transistor ini dihubungkan dengan output tertentu agar ketika output yang dimaksud aktif (low) maka transistor PNP ini akan aktif juga dan menyalakan buzzer.

Hubungan antara output LM3915 dengan basis transistor PNP dapat dipilih sesuai dengan intensitas suara yang diinginkan agar aktif.  Dengan konfigurasi seperti ini makan pada saat intensitas suara sudah mencapai output tertentu maka indikator buzzer berbunyi.  Dipilih transistor PNP karena output LM3915 aktif jika outputnya low. Sehingga ketika basis transistor PNP tegangannya lebih rendah dari pada emitternya maka transistor PNP ini aktif.

Selain itu LM3915 mempunyai pin mode untuk mengatur mode tampilan LEDnya.  Mode yang dimiliki oleh LM3915 adalah mode dot dan mode bar.  Mode dot akan menyalakan 1 buah led pada suatu kondisi tertentu sedankan mode bar akan  menyalakan semua led dibawah led yang aktif.  Pada mode bar akan nampak tinggi dari level intensitas suara sedangkan pada mode dot hanya nampak sebuah led yang menunjukkan level dari intensitas suara tersebut.

Rangkaian Input Microphone

Pada blok ini, output dari mic yang level tegangannya masih kecil diperkuat sedemikian hingga cukup untuk menggerakkan input SIG IN LM 3915.  JFET dengan tipe BF245 berfungsi untuk menaikan tegangan referensi pada RLO kira-kira pada setengah VCC.  Dengan kondisi seperti ini maka sinyal dari mic level tegangannya akan naik sebesar VCC/2 volt.

Mic yang digunakan adalah mic kondenser karena itu mic ini harus dibias dengan tegangan tertentu melalui R2 dan R3.

 
 Gambar 2
Rangkaian Input Microphone

 
Potensiometer R9 digunakan untuk menentukan besarnya level input dari mic yang akan disearahkan /dikuatkan pada opamp TLC271 pada blok berikutnya.  Kapasitor C3 mutlak diperlukan untuk menahan arus DC agar tidak sampai ke input + dari TLC271, karena yang dikutakan hanya sinyal dari mic bukan tegangan DC dari supply.  Besarnya kapasitor C3 juga ikut mempengaruhi besarnya level sinyal yang mauk ke input + opamp sehingga pemilihan nilai kapasitor ini jangan terlalu kecil dan juga jangan terlalu besar.

Rangkaian Penyearah dan Penguat

Sinyal yang dihasilkan dari mic ternyata masih terlalu kecil untuk langsung bisa mengerakkan input LM3915.  Selain itu input SIG IN LM3915 membutuhkan level sinyal AC dengan frekuensi rendah  karena jika mendapatkan sinyal AC dengan frekuensi tinggi maka tampilan LED tidak akan nampak karena terlau cepat perubahannya.

Pada dasarnya opamp TLC271 dikonfigurasikan sebagai penyearah setengah gelombang dengan penguatan 10x..  Dengan level penguatan sebesar itu sudah cukup untuk dapat menggerakkan input SIG IN pada LM3915.  Tetapi jika dirasa masih terlalu kecil maka R5 dapat diganti potensiometer 500K.
 
 
 Gambar 4
Penentuan Tegangan Referensi LM3916


 
 Klik Pada Gambar Untuk Ukuran Sebenarnya
 Gambar 5
Skematik Rangkaian Detektor Taraf Kebisingan Suara

 
Pada gambar 5 nampak bahwa pin REF ADJ dan pin REF LO di sambung bersama dan dihubungkan dengan output dari Q1, BF245.  Konfigurasi ini diharapkan agar level tegangan referensi yang digunakan adalah referensi semu yang dibentuk dari BF245.

Rangkaian tegangan referensi pada gambar 4 diperbolehkan jika rangkaian tidak menggunakan gsistem round semu.  Pada rangkaian pada gambar 5 nampak bahwa sistem didisain dengan ground semu sehingga terdapat kesulitan untuk mendapatkan tegangan referensinya.  Solusinya yaitu dengan menghubungkan pin REF LO dan pin REF ADJ ke ground semu yang dibentuk dari JFET BF245.

 

Pengembangan Rangkaian

Rangkaian ini dengan sedikit modifikasi pada bagian input sinyalnya maka dapat dijadi VU meter untuk tape atau radio sehingga tape atau radio akan tampil lebih attraktif.  Selain itu rangkaian ini jika digunakan untuk sensor suara untuk sistem keamanan dapat menjadi suatu sensor yang teliti sekali dan tingakat kebisingan yang diperbolehkan dapat dipilih sesuai dengan kondisi lingkungan tempat alat ini diletakkan.

Selain itu rangkaian ini juga dapat digunakan sebagai alat ukur intensitas cahaya dengan mengganti rangkaian input  dengan rangkaian input yang menggunakan LDR atau fototransistor.  Teganang yang dihasilkan tidak perlu diserahkan lagi tetapi cukup diperkuat sampai level yang diinginkan.

Walaupun alat ini tidak terlalu presisi dalam menentukan intensitas kebisingan tetapi rangkaian ini cukup sederhana untuk direalisasikan oleh penggemar elektronika dan mampu bekerja cukup baik asalkan tidak digunakan untuk alat ukur yang diharuskan memiliki ketelitian yang tinggi.