10/23/2013

Mikrokontroller - Call Delay

pertanyaan yang bikin penasaran..oke kali ini saya akan mencoba menyimpulkan sedikit tentang "CALL DELAY" pada bahasa pemograman tingkat rendah/assembly yang berkaitan dengan mikrokontroller.
apa itu call delay dan mengapa call delay ini dibutuhkan pada code assembly.

Instruksi mesin dinyatakan dengan pola 0 dan l. Pola semacam itu sangat sulit untuk dijelaskan pada saat membahas atau menyiapkan program. Oleh karena itu, kita menggunakan nama simbolik untuk menyatakan pola tersebut. Sejauh ini kita telah menggunakan kata-kata biasa seperti Move, Add, Increment, dan Branch, untuk instruksi operasi yang menyatakan pola kode biner yang sesuai. Pada saat menulis program untuk komputer tertentu, katakata tersebut biasanya diganti dengan akronim yang disebut mnemonic, seperti MOV, ADD, INC, dan BR Serupa dengan kita menggunakan notasi R3 untuk mengacu pada register 3, dan LOC untuk mengacu pada lokasi memori. Set lengkap nama simbolik semacam dan aturan penggunaannya membentuk bahasa pemrograman, yang biasanya disebut sebagai bahasa assembly. Set aturan untuk menggunakan mnemonic dalam spesifikasi instruksi dan program lengkap disebut syntax bahasa.

Program yang ditulis dalam bahasa assembly dapat secara otomatis ditranslasikan ke rangkaian instruksi mesin oleh suatu program yang disebut assembler. Program assembler adalah salah satu kumpulan program yang merupakan bagian dari software sistem. Assembler, seperti halnya program yang lain, disimpan sebagai rangkaian instruksi mesin dalam memori komputer. Program user biasanya dimasukkan ke dalam komputer melalui keyboard dan disimpan dalam memori atau disk magnetik. Pada titik ini, program user hanyalah kumpulan baris karakter alfanumerik. Pada saat program assembler dieksekusi, program tersebut membaca program user, menganalisanya, dan kemudian menghasilkan program bahasa mesin yang diinginkan. Bahasa mesin tersebut berisi pola 0 dan 1 yang menetapkan instruksi yang akan dieksekusi oleh komputer tersebut. Program user dalam format teks alfanumerik aslinya disebut source program, dan program bahasa mesin yang diassemble disebut object program.
Bahasa assembly untuk suatu komputer mungkin case sensitive atau mungkin tidak, sehingga, komputer tersebut bisa membedakan antara huruf kapital dan huruf kecil atau tidak dapat

 Kita akan menggunakan huruf kapital mark menunjukkan semua nama dan label dalam contoh kita untuk dapat meningkatkan kemudahan pembacaan teks. Misalnya, kita akan menuliskan instruksi Move sebagai berikut MOVE R0, SUM MOVE mnemonic menyatakan pola biner, atau OP code, untuk operasi yang dilakukan oleh instruksi tersebut. Assembler mentranslasi rnnemonic ini menjadi OP code biner yang dipahatni komputer. Mnemonic OP code diikuti oleh setidaknya satu karakter spasi kosong. Kemudian informasi yang menyatakan operand ditetapkan. Dalam contoh kita, source operand berada dalam register R0. Informasi ini diikuti oleh spesifikasi destination operand, dipisah dari source operand dengan koma, tanpa jeda kosong.

langsung saja ke masalah CALL DELAY>>


Secara harfiah dari gambar diatas kita dapat mengartikan call delay sebagai panggilan tunda.kenapa panggilan tunda ini dibutuhkan pada contoh program ini ? karena menurut saya program membutuhkan rentang waktu untuk memanggil kembali program yang akan dijalan kan setelahnya.
Setelah menjalankan program pertama,dengan mencari informasi kembali ke processor dan membongkar isi memory,prosessor membutuhkan rentang waktu untuk mengolah perintah kedua dan kembali melakukan perintah kembali ke memori maka dariitu dibutuhkan syntak fungsi callmemanggil fungdi delay/penundaan yang terkait dengan fungsi timer.


Dari gambar kedua,kita kembali mendapat penjelasan tentang fungsi waktu tunda,dari sumber e-book yang saya dapat secara jelas dituliskan bahwa fungsi ini disediakan untuk menangani berbagai hal dengan cara pemanggilan fungsi-fungsi yang telah dideklarasikan didalam file tersebut.
Jadi secara tidak langsung syntak ini memang sudah dipersiapkan untuk nantinya membantu jika dalam pembuatan program terdapat kendala-kendala seperti pemanggilan ulang program atau pengoperasian 2 program berurut secara langsung dan memberikan rentang waktu bagi prosesor untuk mengolah program tersebut.
Dan dari sumber yang ketiga ini lebih memperjelas lagi tentang kegunaan dari CALL DELAY. Dibicarakan pada  pembahasan tentang LCALL atau long call.
“Ini adalah instruksi 3-byte. Byte pertama adalah opcode, sedang 2-byte lainnya adalah alamat 16-bit yang dituju. Saat instruksi LCALL ini dijalankan, CPU tidak lagi mengeksekusi instruksi-instruksi di bawah LCALL, namun segera melompat pada alamat yang dituju. Namun berbeda dengan LJMP yang hanya melompat begitu saja. Sementara itu LCALL digunakan untuk menjalankan blok rutin di tempat lain sampai selasai, dan kemudian kembali menjalankan instruksi-instruksi dibawah instruksi LCALL tadi, yang sempat ditinggalkannya.
Setelah LCALL dieksekusi, dan CPU hendak melompat ke alamat yang dituju, sebelumnya CPU akan menyimpan alamat kode dari instruksi yang letaknnya persis di bawah LCALL tersebut, ke dalam stack memory. Dan kemudian CPU akan mengeksekusi blok rutin yang dipangggil sampai selesai, yakni dijalankannya instruksi RET (return) yang menandakan akhir dari subrutin. Ingat setiap subrutin selalu diakhiri oleh instruksi RET. Kemudian CPU akan mengambil alamat kode program yang tadi disimpan dalam stack memory, diletakkan pada PC, dan kembali menjalankan kode mulai dari alamat PC yang baru, yakni alamat kode instruksi persis di bawah LCALL tadi.
Saya jelaskan sekali lagi. Saat subrutin hendak dijalankan, CPU akan menyimpan PC (Progam Counter) ke dalam stack, kontrol program akan berpindah ke alamat subrutin yang dituju, dan kemudian subrutin yang letakknya ditempat yang jauh itu segera dijalankan. Sampai kemudian CPU menemukan instruksi RET, yang berarti akhir dari subrutin, maka CPU mengembalikan kontrol program yang tadi ditinggalkannya.
>>contoh dari kasus yang menggunakan CALL DELAY
Tulis program yang men-toggle (bolak-balik) setiap bit pada port 1 dengan menuliskan 55h dan Aah secara terus menerus. Gunakan tundaan waktu setiap setelah menulis port. Program ini dugunakan untuk menguji port pada 8051 yang akan dibahas pada bab selanjutnya.

Jawaban:

          ORG   0
LAGI:     MOV   A,#55h          ;Isi A dengan 55h
          MOV   P1,A            ;salin A pada P1
          ACALL DELAY           ;Tunda
          MOV   A,#0AAh         ;Isi A dengan AAh
          MOV   P1,A            ;salin A pada P1
          ACALL DELAY           ;Tunda
          SJMP  LAGI            ;Ulang

;——Tundaan Waktu
          ORG   300h
DELAY:   
          MOV  R5,#0FFh         ;R5 = FFh sebagai pencacah counter
ULANG:    DJNZ R5,ULANG         ;Tunggu sampai R5 = 0
          RET
          END
Beberapa hal yang harus kita perhatikan untuk program pada contoh 3-8.
1.    perhatikan subrutin DELAY. Setelah instruksi “LCALL DELAY” dibaca dan hendak dijalankan, alamat pada instruksi tepat di bawahnya, yakni “MOV A,#044h“, di simpan (push) ke dalam stack. Kemudian CPU mulai menjalankan instruksi mulai dari alamat 300h.
2.    Pada subrutin DELAY, pertama counter R5 di-set menjadi 255 (R5=FFh); sehingga, loop akan diulang 256 kali. Saat R5 menjadi 0, kontrol menuju instruksi RET, di mana dengan mengeksekusi RET ini alamat yang tadi disimpan pada stack, dikeluarkan lagi (pop) dan diletakkan kembali pada PC (program Counter). PC kemudian menunjukan alamat instruksi tepat di bawah CALL. Dan program dilanjutkan kembali.
Berapa waktu tundaan yang bisa kita dapatkan tergantung dari frekuensi osilator kristal pada system 8051. Untuk menghitung waktu yang benar akan kita bahas lebihjelas pada BAB 4. Namun bagaimanapun juga, kita dapat menambah waktu tundaan dengan menggunakan nested loop seperti yang ditunjukkan  di bawah ini.

TUNDAAN:                      ;pangkal(nested) dari subruitn
MOV  R4,#255      ;R4 = 255 (FFh)
LANJUT:     MOV  R5,#255      ;R5 = 255 (FFh)
ULANG:      DJNZ R5,ULANG     ;tetap di sini smp R4=0
            DJNZ R4,ULANG     ;decrement R4
                              ;isi terus R5 smp R4=0
            RET               ;kembali ke pemanggil


0 komentar:

Post a Comment