Unit Minimum System MCS-51

on Tuesday, April 7, 2009

Posting ini saya buat untuk temen-temen yang tertarik di dunia robotika yang masih tahap pemula. Salah satu hardware yang paling inti dari robot adalah unit minimum system. Pada posting ini type IC yang akan dibahas adalah unit minimum system keluarga MCS-51, pada lain waktu akan saya posting unit minimum system untuk keluarga AVR.




Dengan unit minimum system ini, kita akan dengan mudah mensimulasikan program yang telah dibuat. Contohnya membuat led berjalan, maksudnya adalah led akan menyala secara bergantian. Untuk tutorial bahasa pemprograman nanti juga akan saya posting, he.. he.. dari tadi kok janji akan posting terus, maklumlah waktu tuk online sangat pendek.




Daftar komponen Unit Minimum System MCS-51 :



  1. IC AT89S52 + soket IC 40pin = 1 buah

  2. Crystal 12MHz = 1 buah

  3. Cap 33pF = 2 buah

  4. Elco 10uF/16V = 1 buah

  5. Resistor 1/4W 10K = 1 buah

  6. Resistor 1/4W 330ohm = 8 buah

  7. Respack 10K = 1 buah


  8. Led 3mm = 8 buah

  9. Push reset 2pin = 1 buah

  10. Push On = 8 buah

  11. Header 6pin = 1 buah







Kenapa dalam unit minimum system ini menggunakan IC AT89S52? karena selain murah dan mudah didapat serta ada fasilitas ISP downloadernya, dengan adanya tambahan fitur/fasilitas ISP kita dapat dengan mudah membuat downloader/programingnya tanpa mengeluarkan biaya yang banyak.

RAM dan Register dalam AT89Cx051

Bagi mereka yang sudah terbiasa memakai komputer, kapasitas Random Access Memory (RAM) yang dimiliki AT89Cx051 'mengerikan' karena sangat sedikit, hanya 256 byte! Itupun tidak semuanya bisa dipakai sebagai memori penyimpan biasa, lebih dari setengahnya merupakan memori dengan keperluan khusus yang biasa dikenal sebagai register. Meskipun demikian bagi mikrokontroler kapasitas itu sudah mencukupi.


Dalam pengertian MCS51, Random Access Memory dalam chip AT89Cx051 adalah memori-data, yaitu memori yang dipakai untuk menyimpan data, sedangkan Flash PEROM merupakan memori penampung program pengendali AT89Cx051, dikenal sebagai memori-program.


Karena kedua memori itu memang dibedakan dengan tegas, maka kedua memori itu mempunyai penomoran yang terpisah. Memori-program dinomori sendiri, pada AT89C2051 mulai dari nomor $0000 sampai $07FF. Sedangkan memori-data yang hanya 256 byte dinomori dari nomor $00sampai $FF.





Gambar 3


Denah Memori-data


Seperti terlihat dalam denah memori-data Gambar 3, memori-data dibagi menjadi dua bagian, memori nomor $00 sampai $7F merupakan memori seperti RAM selayaknya meskipun beberapa bagian mempunyai kegunaan khusus, sedangkan memori nomor $80 sampai $FF dipakai sangat khusus yang dinamakan sebagai Special Function Register (akan dibahas tersendiri dibagian lain).


Memori-data nomor $00 sampai $7F bisa dipakai sebagai memori penyimpan data biasa, dibagi menjadi 3 bagian:


<!--[if !supportLists]--> <!--[endif]-->· Memori nomor $00 sampai $18 selain sebagai memori-data biasa, bisa pula dipakai sebagai Register Serba Guna (General Purpose Register).


<!--[if !supportLists]--> <!--[endif]-->· Memori nomor $20 sampai $2F selain sebagai memori-data biasa, bisa dipakai untuk menyimpan informasi dalam level bit.


<!--[if !supportLists]--> <!--[endif]-->· Memori nomor $30 sampai $7F (sebanyak 80 byte) merupakan memori-data biasa, bisa dipakai untuk menyimpan data maupun dipakai sebagai Stack.


<!--[if !supportLists]--> <!--[endif]--> Register Serba Guna


Register Serba Guna (General Purpose Register) menempati memori-data nomor $00 sampai $18, memori sebanyak 32 byte ini dikelompokkan menjadi 4 KelompokRegister (RegisterBank), 8 byte memori dari masing-masing Kelompok itu dikenali sebagai Register 0, Register1 .. Register7 (R0, R1, R2, R3, R4, R5, R6 dan R7).


Dalam penulisan program memori-memori ini bisa langsung disebut sebagai R0, R1, R2, R3, R4, R5, R6 dan R7, tidak lagi dengan nomor memori. Dengan cara ini instruksi yang terbentuk bisa lebih sederhana dan bekerja lebih cepat. Pengertian ini bisa diperjelas dengan contoh 2 instruksi berikut :


MOV A,$04


MOV A,R4


Instruksi pertama mempunyai makna isi memori-data nomor 4 di-copy-kan ke Akumulator A, sedangkan instruksi kedua artinya isi R4 di-copy-kan ke Akumulator A. Karena R4 menempati memori-data nomor 4, jadi kedua instruksi itu berakibat sama bagi Akumulator A.


Tapi saat diterjemahkan ke kode mesin, intruksi pertama dirubah menjadi E504 (heksadesimal) dan instruksi kedua menjadi E6 (heksadesimal), jadi instruksi kedua lebih sederhana dari instruksi pertama.


Selain itu, khusus untuk Register 0 dan Register 1 (R0 dan R1) masih punya mempunyai kemampuan lain, kedua register ini bisa dipakai sebagai register penampung alamat yang dipakai dalam penyebutan memori secara tidak langsung (indirect memori addressing), hal ini akan dibicarakan lebih lanjut di belakang.


Empat kelompok Register Serba Guna itu tidak bisa dipakai secara bersamaan, saat setelah reset yang aktip dipakai adalah Kelompok Register 0 (Register Bank 0).


Kalau yang diaktipkan adalah Kelompok Register 1, maka yang dianggap sebagai R0 bukan lagi memori-data nomor 0 melainkan memori-data nomor 8, demikian pula kalau yang diaktipkan Kelompok Register 3 maka memori-data nomor 18h yang menjadi R0.


Kelompok Register yang aktip dipilih dengan cara mengatur bit RS0 dan RS1 yang ada di dalam Register PSW (Program Status Word), hal ini akan dibicarakan lebih lanjut di bagian lain.


Memori level Bit


Memori-data nomor $20 sampai $2F bisa dipakai menampung informasi dalam level bit. Setiap byte memori di daerah ini bisa dipakai menampung 8 bit informasi yang masing-masing dinomori tersendiri, dengan demikian dari 16 byte memori yang ada bisa dipakai untuk menyimpan 128 bit (16 x 8 bit) yang dinomori dengan bit nomor $00 sampai $7F.


Informasi dalam level bit tersebut masing-masing bisa di-'1'-kan, di - '0'-kan dengan instruksi.


Pengertian di atas bisa dipikirkan seolah-olah MCS51 mempunyai jenis memori yang lain, tapi sesungguhnya kedua jenis memori itu tetap sama, hanya saja cara penyebutannya saja yang berlainan.


Instruksi SETB $00 mengakibatkan memori-bit nomor 0 menjadi '1', atau sama dengan membuat bit nomor 0 dari memori-data nomor $20 menjadi '1', sedangkan bit-bit lainnya dalam memori nomor $20 tidak berubah nilai.


Sedangkan instruksi CLR $7F mengakibatkan memori-bit nomor $7F menjadi '0', satau sama dengan membuat bit nomor 7 dari memori-data nomor $2F menjadi '0', sedangkan bit-bit lainnya dalam memori nomor $2F tidak berubah nilai.


Pengertian ini dipertegas dengn intsruksi-instruksi berikut:


MOV $21,#$0F


Sama dengan hasil kerja instruksi-instruksi berikut :


SETB $08


SETB $09


SETB $0A


SETB $0B


CLR $0C


CLR $0D


CLR $0E


CLR $0F


Instruksi MOV $21,#$0F mempunyai makna mengisi memori-data nomor $21 dengan nilai $0F (atau bilangan biner 00001111), berarti mengisi memori-bit nomor $0F sampai $08 dengan bilangan biner 00001111 yang bisa dinyatakan dengan 8 baris instruksi berikutnya.


Special Function Register (SFR)


Register Khusus (SFR - Special Function Register) adalah satu daerah RAM dalam IC keluarga MCS51 yang dipakai untuk mengatur perilaku MCS51 dalam hal-hal khusus, misalnya tempat untuk berhubungan dengan port paralel P1 atau P3, dan sarana input/output lainnya, tapi tidak umum dipakai untuk menyimpan data seperti layaknya memori-data.


Meskipun demikian, dalam hal penulisan program SFR diperlakukan persis sama dengan memori-data. Untuk mengisi memori-data nomor $60 dengan bilangan $0F, instruksi yang dipergunakan adalah :


MOV $60,#$0F


Sedangkan untuk memenyimpan $0F ke Port 1 yang di SFR menempati memori-data nomor $90, instruksi yang dipergunakan adalah :


MOV $90,#$0F


Membandingkan kedua instruksi di atas bisa dimengerti dalam segi penulisan program SFR diperlakukan persis sama dengan memori-data.


Meskipun demikian, dalam menyebut memori-data bisa dipakai dua cara, yakni penyebutan nomor memori secara langsung (direct memory addressing) dan penyebutan nomor memorisecara tidak langsung (indirect memory addressing) lewat bantuan R0 dan R1. Tapi untuk SFR hanya bisa dipakai penyebutan nomor memorisecara langsung (direct memory addressing) saja. Hal ini akan dibahas lebih lanjut di bagian lain.


Register Dasar MCS51


Untuk keperluan penulisan program, setiap mikroprosesor/mikrokontroler selalu dilengkapi dengan Register Dasar. Ada beberapa macam register merupakan register baku yang bisa dijumpai disemua jenis mikroprosesor/ mikrokontroler, ada register yang spesifik pada masing-masing prosesor.


Yang termasuk Register Baku antara lain Program Counter, Akumulator, Stack Pointer Register, Program Status Register. MCS51 mempunyai semua register baku ini.


Sebagai register yang khas MCS51, antara lain adalah Register B, Data Pointer High Byte dan Data Pointer Low Byte. Semua ini digambarkan dalam Gambar 4.


Di samping itu MCS51 masih mempunyai Register Serba Guna R0..R7 yang sudah disebut dibagian atas.


Dalam mikroprosesor/mikrokontroler yang lain, register-register dasar biasanya ditempatkan ditempat ter­sendiri dalam inti prosesor, tapi dalam MCS51 register-register itu ditempatkan secara terpisah.


<!--[if !supportLists]--> <!--[endif]-->· Program Counter ditempatkan ditempat tersendiri di dalam inti prosesor


<!--[if !supportLists]--> <!--[endif]-->· Register Serba Guna R0..R7 ditempatkan di salah satu bagian dari memori-data


<!--[if !supportLists]--> <!--[endif]-->· Register lainnya ditempatkan dalam Special Function Register (SFR).








Gambar 4


Susunan Register Dasar MCS51


Kegunaan dan pemakaian register-register dasar tersebut antara lain sebagai berikut:


Program Counter


Program Counter (PC) dalam AT89C2051 merupakan register dengan kapasitas 11 bit (dalam AT89C51 atau keluarga MCS51 lainnya kapasitas PC adalah 16 bit). Di dalam PC dicatat nomor memori-program yang menyimpan instruksi berikutnya yang akan diambil (fetch) sebagai instruksi untuk dikerjakan (execute).


Saat setelah reset PC bernilai 0000h, berarti MCS51 akan segera mengambil isi memori-program nomor 0 sebagai instruksi. Nilai PC otomatis bertambah 1 setelah prosesor mengambil instruksi 1 byte. Ada instruksi yang hanya 1 byte, ada instruksi yang sampai 4 byte, dengan demikian pertambahan nilai PC setelah menjalankan instruksi, tergantung pada jumlah byte instruksi bersangkutan.


Akumulator


Sesuai dengan namanya, Akumulator adalah sebuah register yang berfungsi untuk menampung (accumulate) hasil hasil pengolahan data dari banyak instruksi MCS51. Akumulator bisa menampung data 8 bit (1 byte) dan merupakan register yang paling banyak kegunaannya, lebih dari setengah instruksi-instruksi MCS51 melibatkan Akumulator.


Instruksi-instruksi berikut memperjelas pengertian di atas :


MOV A,#$20


ADD A,#$30


Instruksi pertama menyimpan nilai $20 ke Akumulator, instruksi kedua menambahkan bilangan $30 ke Akumulator, hasil penjumlahan sebesar $50 ditampung di Akumulator.


Stack Pointer Register


Salah satu bagian dari memori-data dipakai sebagai Stack, yaitu tempat yang dipakai untuk menyimpan sementara nilai PC sebelum prosesor menjalankan sub-rutin, nilai tersebut akan diambil kembali dari Stack dan dikembalikan ke PC saat prosesor selesai menjalankan sub-rutin.


Stack Pointer Register adalah register yang berfungsi untuk mengatur kerja stack, dalam Stack Pointer Register disimpan nomor memori-data yang dipakai untuk operasi Stack berikutnya.


Program Status Word


Program Status Word (PSW) berfungsi mencatat kondisi prosesor setelah melaksanakan instruksi. Pembahasan tentang PSW secara rinci akan dilakukan dibagian lain.


Register B


Merupakan register dengan kapasitas 8 bit, merupakan register pembantu Akumulator saat menjalankan instruk perkalian dan pembagian.


DPH dan DPL


Data Pointer High Byte (DPH) dan Data Pointer Low Byte (DPL) masing-masing merupakan register dengan kapasitas 8 bit, tapi dalam pemakaiannya kedua register ini digabungkan menjadi satu register 16 bit yang dinamakan sebagai Data Pointer Register (DPTR).


Sesuai dengan namanya, Register ini dipakai untuk mengalamati data dalam jangkauan yang luas.

struktur Program assembly

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.



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.



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!



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 Gambar 4.


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 :


<!--[if !supportLists]-->1. <!--[endif]-->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.


<!--[if !supportLists]-->2. <!--[endif]-->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).


<!--[if !supportLists]-->3. <!--[endif]-->Huruf ke 4 sampai 7, merupakan 4 angka heksa-desimal yang dipakai untuk menyatakan alamat awal tempat penyimpanan kode-kode dalam baris teks bersangkutan.


<!--[if !supportLists]-->4. <!--[endif]-->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.


<!--[if !supportLists]-->5. <!--[endif]-->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.


<!--[if !supportLists]-->6. <!--[endif]-->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).




Dasar Program Assembly


Bahasa Assembly adalah bahasa komputer yang kedudukannya di antara bahasa mesin dan bahasa level tinggi misalnya bahasa C atau Pascal. Bahasa C atau Pascal dikatakan sebagai bahasa level tinggi karena memakai kata-kata dan pernyataan yang mudah dimengerti manusia, meskipun masih jauh berbeda dengan bahasa manusia sesungguhnya. Bahasa mesin adalah kumpulan kode biner yang merupakan instruksi yang bisa dijalankan oleh komputer. Sedangkan bahasa Assembly memakai kode Mnemonic untuk menggantikan kode biner, agar lebih mudah diingat sehingga lebih memudahkan penulisan program.


Program yang ditulis dengan bahasa Assembly terdiri dari label; kode mnemonic dan lain sebagainya, pada umumnya dinamakan sebagai program sumber (Source Code) yang belum bisa diterima oleh prosesor untuk dijalankan sebagai program, tapi harus diterjemahkan dulu menjadi bahasa mesin dalam bentuk kode biner.


Program sumber dibuat dengan program editor biasa, misalnya Notepad pada Windows atau SideKick pada DOS, selanjutnya program sumber diterjemahkan ke bahasa mesin dengan menggunakan program Assembler. Hasil kerja program Assembler adalah "program objek" dan juga "assembly listing".


Program Objek berisikan kode kode bahasa mesin, kode-kode bahasa mesin inilah yang diumpankan ke memori-program prosesor. Dalam dunia mikrokontroler biasanya program objek ini diisikan ke UV EPROM, dan khusus untuk mikrokontroler buatan Atmel, program ini diisikan ke dalam Flash PEROM yang ada di dalam chip AT89C51 atau AT89C2051.


Assembly Listing merupakan naskah yang berasal dari program sumber, dalam naskah tersebut pada bagian sebelah setiap baris dari program sumber diberi tambahan hasil terjemahan program Assembler. Tambahan tersebut berupa nomor memori-program berikut dengan kode yang akan diisikan pada memori-program bersangkutan. Naskah ini sangat berguna untuk dokumentasi dan sarana untuk menelusuri program yang ditulis.


Yang perlu diperhatikan adalah setiap prosesor mempunyai konstruksi yang berlainan, instruksi untuk mengendalikan masing-masing prosesor juga berlainan, dengan demikian bahasa Assembly untuk masing-masing prosesor juga berlainan, yang sama hanyalah pola dasar cara penulisan program Assembly saja.







Gambar 7


Proses Assembly


Konstruksi Program Assembly


Program sumber dalam bahasa Assembly menganut prinsip 1 baris untuk satu perintah, setiap baris perintah tersebut bisa terdiri atas beberapa bagian (field), yakni bagian Label, bagian mnemonic, bagian operand yang bisa lebih dari satu dan terakhir bagian komentar. Untuk membedakan masing-masing bagian tersebut dibuat ketentuan sebagian berikut:



o Masing-masing bagian dipisahkan dengan spasi atau TAB, khusus untuk operand yang lebih dari satu masing-masing operand dipisahkan dengan koma.


o Bagian-bagian tersebut tidak harus semuanya ada dalam sebuah baris, jika ada satu bagian yang tidak ada maka spasi atau TAB sebagai pemisah bagian tetap harus ditulis.


<!--[if !supportLists]-->· <!--[endif]-->Bagian Label ditulis mulai huruf pertama dari baris, jika baris bersangkutan tidak mengandung Label maka label tersebut digantikan dengan spasi atau TAB, yakni sebagai tanda pemisah antara bagian Label dan bagian mnemonic.



Label mewakili nomor memori-program dari instruksi pada baris bersangkutan, pada saat menulis instruksi JUMP, Label ini ditulis dalam bagian operand untuk menyatakan nomor memori-program yang dituju. Dengan demikian Label selalu mewakili nomor memori-program dan harus ditulis dibagian awal baris instruksi.


DisampingLabel dikenal pula Symbol, yakni satu nama untuk mewakili satu nilai tertentu dan nilai yang diwakili bisa apa saja tidak harus nomor memori-program. Cara penulisan Symbol sama dengan cara penulisan Label, harus dimulai di huruf pertama dari baris instruksi.


Mnemonic (arttinya sesuatu yang memudahkan diingat) merupakan singkatan perintah, dikenal dua macam mnemonic, yakni manemonic yang dipakai sebagai instruksi mengendalikan prosesor, misalnya ADD, MOV, DJNZ dan lain sebagainya. Ada pula mnemonic yang dipakai untuk mengatur kerja dari program Assembler misalnya ORG, EQU atau DB, mnemonis untuk mengatur kerja dari program Assembler ini dinamakan sebagai 'Assembler Directive'.


Operand adalah bagian yang letaknya di belakang bagian mnemonic, merupakan pelangkap bagi mnemonic. Kalau sebuah instrksi di-ibaratkan sebagai kalimat perintah, maka mnemonic merupakan subjek (kata kerja) dan operand merupakan objek (kata benda) dari kalimat perintah tersebut.


Tergantung pada jenis instruksinya, operand bisa berupa berbagai macam hal. Pada instruksi JUMP operand berupa Label yang mewakili nomor memori-program yang dituju misalnya LJMP Start, pada instruksi untuk pemindahan/pengolahan data, operand bisa berupa Symbol yang mewakili data tersebut, misalnya ADD A,#Offset. Banyak instruksi yang operandnya adalah register dari prosesor, misalnya MOV A,R1. Bahkan ada pula instruksi yang tidak mempunyai operand, misalnya RET.


Komentar merupakan bagian yang sekedar sebagai catatan, tidak berpengaruh pada prosesor juga tidak berpengaruh pada kerja program Assembler, tapi bagian ini sangat penting untuk keperluan dokumentasi.


Assembler Directive


Seperti sudah dibahas di atas, bagian Mnemonic dari sebuah baris perintah bisa merupakan instruksi untuk prosesor, maupun berupa Assembler Directive untuk mengatur kerja dari program Assembler. Mnemonic untuk instruksi prosesor, sangat tergantung pada prosesor yang dipakai, sedangkan mnemonic untuk Assembler Directive tergantung pada program Assembler yang dipakai. Meskipun demikian, terdapat beberapa Assembler Directive yang umum, yang sama untuk banyak macam program Assembler.


Assembler Directive yang bersifat umum tersebut, antara lain adalah


o ORG - singkatan dari ORIGIN, untuk menyatakan nomor memori yang dipakai setelah perintah itu, misalnya ORG $1000 maka memori berikutnya yang dipakai Assembler adalah $1000. ORG berlaku untuk memori program maupun memori-data. Dalam hal penomoran memori, dikenal tanda $ sebagai awalan untuk menyatakan nomor memori dari baris bersangkutan. Misalnya :



ORG 1000


LJMP $+1000



Operand $+$500 mempunyai arti nomor memori-program bersangkutan ditambah dengan $500, karena instruksi LJMP ini terletak persis di bawah ORG $1000 maka nomor memori-program baris ini adalah $1000, sehingga operand $+$500 bernilai $1500 dan instruksi ini indentik dengan LJMP $1500


o EQU - singkatan dari EQUATE, dipakai untuk menentukan nilai sebuah Symbol.


Misalnya Angka88 EQU 88 memberi nilai 88 pada Symbol Angka88, atau CR EQU $0D mempunyai makna kode ASCII dari CR (Caarriage Return) adalah $08.


o DB - singkatan dari DEFINE BYTE, dipakai untuk memberi nilai tertentu pada memori-program. Nilai tersebut merupakan nilai 1 byte, bisa berupa angka ataupun kode ASCII. DB merupakan Assembler Directive yang dipakai untuk membentuk teks maupun tabel.



ORG $0200


STRING DB 'Atmel AT89C2051'


PANJANG EQU $-STRING



<!--[if !supportLists]-->o <!--[endif]-->ORG $0200 memerintahkan program Assembler agar bekerja mulai dari memori-program nomor $0200, instruksi selanjutnya memerintahkan program Assembler agar mengisi memori-program nomor $0200 dan berikutnya dengan tulisan 'Atmel AT89C2051'' (yang diisikan adalah kode ASCII dari 'A', 't' dan seterusnya), PANJANG dari STRING bisa dihitung dengan cara PANJANG EQU $-STRING, yakni selisih dari nomor memori-program baris bersangkutan dikurangi dengan nomor awal memori-program yang diisi STRING.


<!--[if !supportLists]-->o <!--[endif]-->DW - singkatan dari DEFINE WORD, dipakai untuk memberi nilai 2 byte ke memori-program pada baris bersangkutan. Assembler Directive ini biasa dipakai untuk membentuk suatu tabel yang isinya adalah nomor-nomor memori-program.


<!--[if !supportLists]-->o <!--[endif]-->DS - singkatan dari Define Storage, Assembler Directive ini dipakai untuk membentuk variable. Sebagai variabel tentu saja memori yang dipakai adalah memori-data (RAM) bukan memori-program (ROM). Hal ini harus benar-benar dibedakan dengan Assembler Directive DB dan DW yang membentuk kode di memori-program. Dan karena DS bekerja di RAM, maka DS hanya sekedar menyediakan tempat di memori, tapi tidak mengisi nilai pada memori bersangkutan.

Dasar Pemrograman MCS51

Program pengendali mikrokontroller disusun dari kumpulan instruksi, instruksi tersebut setara dengan kalimat perintah bahasa manusia yang hanya terdiri atas predikat dan objek. Dengan demikian tahap pertama pembuatan program pengendali mikrokontroller dimulai dengan pengenalan dan pemahaman predikat (kata kerja) dan objek apa saja yang dimiliki mikrokontroller.


Objek dalam pemrograman mikrokontroller adalah data yang tersimpan di dalam memori, register dan input/output. Sedangkan 'kata kerja' yang dikenal pun secara umum dikelompokkan menjadi perintah untuk perpindahan data, arithmetik, operasi logika, pengaturan alur program dan beberapa hal khusus. Kombinasi dari 'kata kerja' dan objek itulah yang membentuk perintah pengatur kerja mikrokontroller.


Intruksi MOV A,$7F merupakan contoh sebuah intruksi dasar yang sangat spesifik, MOV merupakan 'kata kerja' yang memerintahkan peng-copy-an data, merupakan predikat dalam kalimat perintah ini. Sedangkan objeknya adalah data yang di-copy-kan, dalam hal ini adalah data yang ada di dalam memori nomor $7F di-copy-kan ke Akumulator A.


Penyebutan data dalam MCS51


Data bisa berada diberbagai tempat yang berlainan, dengan demikian dikenal beberapa cara untuk menyebut data (dalam bahasa Inggris sering disebut sebagai 'Addressing Mode'), antara lain sebagai berikut:


<!--[if !supportLists]--> <!--[endif]-->· Penyebutan data konstan (immediate addressing mode): MOV A,#$20. Data konstan merupakan data yang berada di dalam instruksi. Contoh instruksi ini mempunyai makna data konstan $20 (sebagai data konstan ditandai dengan '#') di-copy-kan ke Akumulator A. Yang perlu benar-benar diperhatikan dalam perintah ini adalah bilangan $20 merupakan bagian dari instruksi.


<!--[if !supportLists]--> <!--[endif]-->· Penyebutan data secara langsung (direct addressing mode), cara ini dipakai untuk menunjuk data yang berada di dalam memori dengan cara menyebut nomor memori tempat data tersebut berada : MOV A,$30. Contoh instruksi ini mempunyai makna data yang berada di dalam memori nomor $30 di-copy-kan ke Akumulator.


<!--[if !supportLists]--> <!--[endif]-->Sekilas intruksi ini sama dengan instruksi data konstan di atas, perbedaannya instruksi di atas memakai tanda '#' yang menandai $20 adalah data konstan, sedangkan dalam instruksi ini karena tidak ada tanda '#' maka $30 adalah nomor dari memori.


<!--[if !supportLists]--> <!--[endif]-->· Penyebutan data secara tidak langsung (indirect addressing mode), cara ini dipakai untuk menunjuk data yang berada di dalam memori, kalau memori penyimpan data ini letaknya berubah-rubah sehingga nomor memori tidak disebut secara langsung tapi di-'titip'-kan ke register lain : MOV A,@R0.


<!--[if !supportLists]--> <!--[endif]-->Dalam instruksi ini register serba guna R0 dipakai untuk mencatat nomor memori, sehingga instruksi ini mempunyai makna memori yang nomornya tercatat dalam R0 isinya di-copy-kan ke Akumulator A.


<!--[if !supportLists]--> <!--[endif]-->Tanda '@' dipakai untuk menandai nomor memori disimpan di dalam R0.


<!--[if !supportLists]--> <!--[endif]-->Bandingkan dengan instruksi penyebutan nomor memori secara langsung di atas, dalam instruksi ini nomor memori terlebih dulu disimpan di R0 dan R0 berperan menunjuk memori mana yang dipakai, sehingga kalau nilai R0 berubah memori yang ditunjuk juga akan berubah pula.


<!--[if !supportLists]--> <!--[endif]-->Dalam instruksi ini register serba guna R0 berfungsi dengan register penampung alamat (indirect address register), selain R0 register serba guna R1 juga bisa dipakai sebagai register penampung alamat.


<!--[if !supportLists]--> <!--[endif]-->· Penyebutan data dalam register (register addressing mode): MOV A,R5. Instruksi ini mempunyai makna data dalam register serba guna R5 di-copy-kan ke Akumulator A. Instruksi ini membuat register serba guna R0 sampai R7 sebagai tempat penyimpan data yang sangat praktis yang kerjanya sangat cepat.


<!--[if !supportLists]--> <!--[endif]-->· Data yang dimaksud dalam bahasan di atas semuanya berada di dalam memori data (termasuk register serba guna letaknya juga di dalam memori data). Dalam penulisan program, sering-sering diperlukan tabel baku yang disimpan bersama dengan program tersebut. Tabel semacam ini sesungguhnya merupakan data yang berada di dalam memori program!


<!--[if !supportLists]--> <!--[endif]-->Untuk keperluan ini, MCS51 mempunyai cara penyebutan data dalam memori program yang dilakukan secara indirect (code indirect addressing mode) : MOVC A,@A+DPTR.


Perhatikan dalam instruksi ini MOV digantikan dengan MOVC, tambahan huruf C tersebut dimaksud untuk membedakan bahwa instruksi ini dipakai di memori program. (MOV tanpa huruf C artinya instruksi dipakai di memori data).


Tanda '@' dipakai untuk menandai A+DPTR dipakai untuk menyatakan nomor memori yang isinya di-copy-kan ke Akumulator A, dalam hal ini nilai yang tersimpan dalam DPTR (Data Pointer Register - 2 byte) ditambah dengan nilai yang tersimpan dalam Akumulator A (1 byte) dipakai untuk menunjuk nomor memori program.


'Kata kerja' dalam AT89Cx051


Secara keseluruhan AT89Cx051 mempunyai sebanyak 255 macam instruksi, yang dibentuk dengan mengkombinasikan 'kata kerja' dan objek. "Kata kerja' tersebut secara kelompok dibahas sebagai berikut :


KELOMPOK PENG-COPY-AN DATA


Kode dasar untuk kelompok ini adalah MOV, singkatan dari MOVE yang artinya memindahkan, meskipun demikian lebih tepat dikatakan perintah ini mempunyai makna peng-copy-an data. Hal ini bisa dijelaskan berikut : setelah instruksi MOV A,R7 dikerjakan, Akumulator A dan register serba guna R7 berisikan data yang sama, yang asalnya tersimpan di dalam R7.


Perintah MOV dibedakan sesuai dengan jenis memori AT89Cx051. Perintah ini pada memori data dituliskan menjadi MOV, misalkan :



MOV A,$20


MOV A,@R1


MOV A,P1


MOV P3,A



Untuk pemakaian pada memori program, perintah ini dituliskan menjadi MOVC, hanya ada 2 jenis instruksi yang memakai MOVC, yakni:



MOVC A,@A+DPTR ; DPTR sebagai register indirect


MOVC A,@A+PC ; PC sebagai register indirect



Selain itu, masih dikenal pula perintah MOVX, yakni perintah yang dipakai untuk memori data eksternal (X singkatakan dari External). Perintah ini hanya dimiliki oleh anggota keluarga MCS51 yang mempunyai memori data eksternal, misalnya AT89C51 dan lain sebagainya, dan jelas tidak dikenal oleh kelompok AT89Cx051 yang tidam punya memori data eksternal. Hanya ada 6 macam instruksi yang memakai MOVX, instruksi-instruksi tersebut adalah:



MOVX A,@DPTR


MOVX A,@R0


MOVX A,@R1


MOVX @DPTR,A


MOVX @R0,A


MOVX @R1,A



KELOMPOK ARIMATIK (ADD, ADDC, SUBB, DA, MUL dan DIV)


Perintah ADD dan ADDC


Isi Akumulator A ditambah dengan bilangan 1 byte, hasil penjumlahan akan ditampung kembali dalam Akumulator. Dalam operasi ini bit Carry (C flag dalam PSW - Program Status Word) berfungsi sebagai penampung limpahan hasil penjumlahan. Jika hasil penjumlahan tersebut melimpah (nilainya lebih besar dari 255) bit Carry akan bernilai '1', kalau tidak bit Carry bernilai '0'. ADDC sama dengan ADD, hanya saja dalam ADDC nilai bit Carry dalam proses sebelumnya ikut dijumlahkan bersama.


Bilangan 1 byte yang ditambahkan ke Akumulator, bisa berasal dari bilangan konstan, dari register serba guna, dari memori data yang nomor memorinya disebut secara langsung maupun tidak langsung, seperti terlihat dalam contoh berikut :



ADD A,R0 ; register serba guna


ADD A,#$23 ; bilangan konstan


ADD A,@R0 ; no memori tak langsung


ADD A,P1 ; no memori langsung (port 1)



Perintah SUBB


Isi Akumulator A dikurangi dengan bilangan 1 byte berikut dengan nilai bit Carry, hasil pengurangan akan ditampung kembali dalam Akumulator. Dalam operasi ini bit Carry juga berfungsi sebagai penampung limpahan hasil pengurangan. Jika hasil pengurangan tersebut melimpah (nilainya kurang dari 0) bit Carry akan bernilai '1', kalau tidak bit Carry bernilai '0'.



SUBB A,R0 ; A = A - R0 - C


SUBB A,#$23 ; A = A - $23


SUBB A,@R1


SUBB A,P0



Perintah DA


Perintah DA (Decimal Adjust) dipakai setelah perintah ADD; ADDC atau SUBB, dipakai untuk merubah nilai biner 8 bit yang tersimpan dalam Akumulator menjadi 2 buah bilangan desimal yang masing-masing terdiri dari nilai biner 4 bit.



Perintah MUL AB


Bilangan biner 8 bit dalam Akumulator A dikalikan dengan bilangan biner 8 bit dalam register B. Hasil perkalian berupa bilangan biner 16 bit, 8 bit bilangan biner yang bobotnya lebih besar ditampung di register B, sedangkan 8 bit lainnya yang bobotnya lebih kecil ditampung di Akumulator A.


Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai hasil perkalian yang ada dalam register B. Bit OV akan bernilai '0' jika register B bernilai $00, kalau tidak bit OV bernilai '1'.



MOV A,#10


MOV B,#20


MUL AB



Perintah DIV AB


Bilangan biner 8 bit dalam Akumulator A dibagi dengan bilangan biner 8 bit dalam register B. Hasil pembagian berupa bilangan biner 8 bit ditampung di Akumulator, sedangkan sisa pembagian berupa bilangan biner 8 bit ditampung di register B.


Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai sebelum pembagian yang ada dalam register B. Bit OV akan bernilai '1' jika register B asalnya bernilai $00.



KELOMPOK LOGIKA (ANL, ORL dan XRL)


Kelompok perintah ini dipakai untuk melakukan operasi logika mikrokontroller MCS51, operasi logika yang bisa dilakukan adalah operasi AND (kode operasi ANL), operasi OR (kode operasi ORL) dan operasi Exclusive-OR (kode operasi XRL).


Data yang dipakai dalam operasi ini bisa berupa data yang berada dalam Akumulator atau data yang berada dalam memori-data, hal ini sedikit berlainan dengan operasi aritmatik yang harus melihatkan Akumulator secara aktip.


Hasil operasi ditampung di sumber data yang pertama.



· Operasi logika AND banyak dipakai untuk me-'0'-kan beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data konstan yang di-ANL-kan bilangan asal. Bit yang ingin di-'0'-kan diwakili dengan '0' pada data konstan, sedangkan bit lainnya diberi nilai '1', misalnya


Instruksi ANL P1,#%01111110 akan mengakibatkan bit 0 dan bit 7 dari Port 1 (P1) bernilai '0' sedangkan bit-bit lainnya tetap tidak berubah nilai.


· Operasi logika OR banyak dipakai untuk me-'1'-kan beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data konstan yang di-ORL-kan bilangan asal. Bit yang ingin di-'1'-kan diwakili dengan '1' pada data konstan, sedangkan bit lainnya diberi nilai '0', misalnya


Instruksi ORL A,#%01111110 akan mengakibatkan bit 1 sampai dengan bit 6 dari Akumulator bernilai '1' sedangkan bit-bit lainnya tetap tidak berubah nilai.


· Operasi logika Exclusive-OR banyak dipakai untuk membalik nilai (complement) beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data konstan yang di-XRL-kan bilangan asal. Bit yang ingin dibalik-nilai diwakili dengan '1' pada data konstan, sedangkan bit lainnya diberi nilai '0', misalnya


Instruksi XRL A,#%01111110 akan mengakibatkan bit 1 sampai dengan bit 6 dari Akumulator berbalik nilai, sedangkan bit-bit lainnya tetap tidak berubah nilai.

DIODA ZENER




Simbol Dioda Zener




Dioda zener dibuat sedemikian rupa sehingga daerah deplesinya lebih besar daripada dioda biasa. Akibatnya medan listrik yang dihasilkan juga lebih besar. Dioda zener memiliki sifat yang mirip dengan dioda biasa. Pada kondisi bias maju, karakteristik dioda zener sama dengan dioda biasa. Pada kondisi bias maju, karakteristik dioda zener sama dengan dioda biasa. Jadi jika diberikan tegangan luar yang besarnya melebihi tegangan kontak maka arus akan mengalir.









Gambar a.


Karakteristik Dioda






Pada kondisi bias balik, dioda zener juga memiliki karakteristik yang sama dengan dioda biasa asalkan tegangan yang diberikan tidak terlalu besar. Jika tegangan menjadi terlalu besar dan melebihi tegangan zener, maka arus mengalir pada arah yang berbeda. Karakteristik dioda zener dapat dilihat pada gambar a. Dioda zener tidak dapat mempertahankan keadaan "matinya" jika tegangan terbalik yang diberikan melebihi V zener.







Gambar b. Regulator Tegangan






Hal ini terjadi karena saat tegangan terbalik mencapai V zener, medan listrik pada daerah deplesi menjadi sangat besar sehingga dapat mendorong elektron keluar dari struktur atomnya yang mengakibatkan terbentuknya pasangan elektron-lubang yang banyak. Dengan terbentuknya pasangan elektron-lubang maka mengalirlah arus dalam keadaan yang terbalik. Mekanisme ini disebut dengan zener breakdown. Adapun pada dioda biasa, arus mengalir karena elektron terlepas sebagai akibat ditumbuk oleh elektron bebas lainnya. Mekanisme ini disebut dengan avalanche breakdown.

Tegangan terbalik ini tidak merusakkan dioda zener bila masih berada di bawah nilai yang diizinkan, tegangan ini biasanya tetap meskipun diberi variasi beban sehingga dioda ini sering digunakan sebagai regulator tegangan. Untuk mengatasi perbedaan tegangan antara tegangan sumber dengan beban digunakanlah sebuah tahanan seri (Rs). Sebuah rangkaian regulator tegangan sederhana dapat dilihat pada gambar b.




Maka biasanya dioda zener dijadikan sebagai alternatif pengganti ic regulator tegangan untuk rangkaian sederhana.

Rangkaian Darlington

Gambar Rangkaian Darlington









Transistor Darlington adalah rangkaian elektronika yang terdiri dari sepasang transistor bipolar (dwi kutub) yang tersambung secara tandem (seri). Sambungan seri seperti ini dipakai untuk mendapatkan penguatan (gain) yang tinggi, karena hasil penguatan pada transistor yang pertama akan dikuatkan lebih lanjut oleh transistor kedua. Keuntungan dari rangkaian Darlington adalah penggunaan ruang yang lebih kecil dari pada rangkaian dua buah transistor biasa dengan bentuk konfigurasi yang sama. Penguatan arus listrik atau gain dari rangkaian transistor Darlington ini sering dituliskan dengan notasi β atau hFE.










Dengan konfigurasi darlington maka akan diperoleh hfe sebesar:







Hfe = hfeQ1 * hfeQ2






Perbedaan utama antara Bipolar dan Unipolar adalah:





- Bipolar





θ Arus pada koil dapat berbolak balik untuk mengubah arah putar motor



θ Lilitan motor hanya satu dan dialiri arus dengan arah bolak-balik





- Unipolar





θ Arus mengalir satu arah , dan perubahan arah putar motor tergantung dari lilitan (koil)


yang dialiri arus



θ Lilitan terpisah dalam 2 bagian dan masing-masing bagian hanya dilewati arus dalam satu


arah saja.








Kelemahan jenis Bipolar adalah bahwa rangkaian drivernya lebih kompleks, karena harus dapat mengalirkan arus dalam 2 arah (bolak-balik) lewat koil yang sama.


Inti rangkaian sebenarnya adalah sebuah buffer arus yang berfungsi menguatkan arus-arus logika dan MCU yang menggerakkan motor stepper.


Buffer ini dibentuk dengan menggunakan 2 transistor Bipolar NPN dalam konfigurasi Darlington untuk


menghasilkan penguat arus (hfe) yang tinggi.










Menggunakkan 2 buah rangkaian darlington














Rangkaian Darlington untuk mengatur jumlah arus pada motor stepper




Membangun Knowledge Management di Kantor / IntraNet


Onno W. Purbo



salah satu hal yang paling sukar dalam mengelola operasi sebuah institusi / kantor adalah mengelola pengetahuan yang dibutuhkan dalam menjalankan fungsi kantor tersebut agar tetap kompetitif. Objektif dalam membangun knowledge management (KM) berbeda sama sekali dengan membangun Sistem Informasi Manajemen (SIM).



Sistem Informasi Manajemen (SIM) lebih ditujukan untuk membuat operasi perusahaan menjadi lebih effisien dan transparan termasuk memudahkan proses audit. Software open source yang dapat digunakan untuk SIM jenis ini yang termasuk baik adalah Compiere yang dapat di ambil di www.sourceforge.net secara gratis. Compiere berbasis Java dan beroperasi menggunakan database Oracle. Oracle untuk sekala kecil dapat pula di ambil gratis di situs oracle.com.



Salah seorang ahli Compiere di Indonesia adalah kelompok Java User Group yang di pimpin oleh Frans Thamura yang dapat di monitor diskusinya di jug-indonesia@yahoogroups.com.



Berbeda dengan SIM yang lebih mengarahkan pada effisiensi, pembangunan KM lebih di arahkan agar pengetahuan yang dibutuhkan oleh perusahaan dapat di kelola dengan baik agar personil di perusahaan tetap kompetitif dan dapat mendukung perusahaan tersebut agar tetap dapat berkompetisi dalam melayani pelanggan / customer anda.



Bayangkan sebuah skenario yang sering terjadi, umumnya pengetahuan / keahlian / skill yang dibutuhkan dalam perusahaan berada pada para teknisi atau engineer yang melakukan pekerjaan sehari-hari melayani pelanggannya. Proses update pengetahuan dari teknisi baru sering kali dilakukan melalui berbagai proses training, workshop dll. Yang menjadi masalah, semua pengetahuan dan pengalaman yang ada akhir tetap terpendam bersama si teknisi atau engineer tersebut. Pengetahuan jenis ini adalah pengetahuan jenis tacit knowledge yang ada di dalam otak si teknisi / engineer.



Tentunya akan lebih mudah jika semua pengetahuan yang ada di kepala teknisi / engineer tersebut telah tertulis dalam bentuk manual atau howto. Yang perlu dilakukan adalah menyusun manual atau howto menurut kategori yang dapat kita tentukan. Kategori-kategori tersebut biasanya dapat di ketahui / di pelajari melalui ilmu kepustakaan.



Software yang dapat membantu proses manajemen dokumen yang mengarah kepada knowledge management dapat di ambil dari www.sourceforge.net secara gratis. Beberapa software management dokumen & manajemen pengetahuan tersebut adalah knowledgeTree, Owl dan greenstone. Diantara tiga-nya yang paling kompleks barangkali greenstone yang merupakan software digital library. Sementara yang saya lihat lumayan bagus atau relatif sederhana adalah knowledgeTree.



Software knowledge management ini umumnya dapat di akses menggunakan Web. Sementara KnowledgeTree hanya membutuhkan sebuah Web server biasa yang dilengkapi kemampuan PHP dan database server di belakangnya. Kita biasanya menggunakan database server MySQL. Semua hal tersebut dapat di peroleh juga anda menginstalasi Linux sebagai sistem operasi server anda.



Yang menjadi masalah besar adalah menangkap tacit knowledge yang ada di kepala para teknisi maupun engineer atau para pakar yang bekerja di perusahaan / corporate. Biasanya para teknisi atau engineer tersebut sudah sangat sibuk untuk dapat meluangkan waktunya menulis buku mengenai teknik-teknik yang dia kuasai. Teknik transfer pengetahuan tacit yang paling sederhana adalah menggunakan cara "ngobrol" atau diskusi. Masalahnya jika "ngobrol" tersebut di lakukan secara konvensional di kantin atau di ruang rapat, kemungkinan ilmu yang di obrolkan akan hilang begitu saja dan kita harus sering mengadakan forum-forum ngobrol ini.



Cara yang paling sederhana untuk mengatasi masalah hilangnya pengetahuan hasil ngobrol tersebut adalah memberikan sebuah forum diskusi yang terasip yang dapat diakses di kemudian hari. Contoh forum diskusi online yang paling sederhana adalah mailing list, bagi anda yang kesulitan untuk membangun sendiri server mailing list tentunya dapat saja menggunakan jasa gratisan dari http://groups.yahoo.com.



Bagi anda yang rela untuk bersusah payah sedikit sebenarnya membuat mailing list server tidak terlalu sukar. Software mailing list yang bagus dan biasanya ada di distribusi Linux Fedora Core 5 adalah mailman. Dengan menggunakan mailman, maka mail server yang kita gunakan dapat dengan mudah mengakomodasi jasa mailing list dan mengarsip semua diskusinya untuk kemudian hari digunakan dalam proses analisa dan sintesa yang diperlukan untuk menulis pengetahuan menjadi sebuah dokumen manual atau howto.



Mailman digunakan pada awal operasional mailing list server groups.or.id. Saat ini mailing list server groups.or.id mengunakan software ezmlm yang lebih baik lagi tapi lebih kompleks cara instalasinya.



Mudah-mudahan dengan sedikit pengetahuan ini kita dapat mengarahkan dengan baik pembangunan infrastruktur manajemen pengetahuan yang ada di corporate supaya tetap dapat menjaga tingkat kompetitif corporate tersebut.

Indowebster.com free file upload in indonesia


Jika dibandingkan dengan web sejenis, indowebster mempunyai banyak kelebihan dibanding para kompetitornya. fasilitas searching, akan memudahkan untuk kita untuk mencari file yang diinginkan. anda bisa menggunakan specific searching untuk mendapatkan file yang diharapkan. free account juga diberikan kepada member, agar dapat mengupload file. setahu saya, fasilitas untuk mengupload file tidak dibatasi. ada juga fasilitas forum diskusi yang digunakan untuk memposting link ke file2 video yang ada di server indowebster.


karena berada di area local (IIX), kecepatan download juga cukup tinggi. beberapa kali saya mencoba mendownload file ukuran 700 Mb (1 CD), hanya membutuhkan waktu sekitar satu jam an (kecepatan download sampai dengan 768 Kbps). kecepatan upload juga tidak mengecewakan, sampai di atas 1 Mbps. bila dibandingkan dengan layanan sejenis, bandwidth dari indowebster cukup membuat ngiler :) (catatan: kecepatan dl/up tergantung dengan besar bandwitdh yang diberikan ISP)


salah satu kekurangan indowebster adalah, tidak adanya fasilitas untuk mengupload file video, misalnya: *.ogm. terlepas dari itu, indowebster layak diperhitungkan sebagai penyedia layanan free file hosting. (ag)


silahkan mengunjungi websitenya di indowebster.com

FreeMeter - Monitor Bandwidth realtime di windows XP

on Monday, April 6, 2009


FreeMeter adalah program bandwith meter opensource layaknya DUmeter, hanya saja FreeMeter gratis untuk di gunakan bagi pencari software gratisan hehehehe, termasuk saya, FreeMeter memiliki pilihan pencatat pergantian bandwith dapat di lakukan setiap 1 menit, 1/2 menit, 1/5 menit dan 1/10 menit, dimana memudah kan kita memantau bandwidth current kita saat menggunakan bandwith, selain itu Freemeter banyak memberi tool bagi kita yaitu , peringatan email masuk, check email, layanan ping, tracert route, uPNP NAT, dan log pencatat pemakaian bagi pengguna internet yang memiliki limit volume base, heheheheheh


oke deh yang tertarik silahkan kunjungi : Download

Proxy server ubuntu 7.10

untuk install ubuntu saya anggap rekan rekan sudah bisa menginstal nya, dan sudah berjalan normal


mulai deh..langsung pake root aja ya..biar gampang


1. install paket squid


#apt-get install squid


ket: pada ubuntu versi 7.10 paket squid yang diberikan biasanya adalah squid2.6STABLE14


2. pindahkan file konfigurasi squid yang asli


#mv /etc/squid/squid.conf /etc/squid/squid.conf.original


3. buat konfigurasi squid yang baru


#nano /etc/squid/squid.conf


-- isinya copy mulai tulisan dibawah ini --


http_port 3128 transparent


icp_port 3130


udp_incoming_address 0.0.0.0


udp_outgoing_address 255.255.255.255


hierarchy_stoplist cgi-bin ?


acl QUERY urlpath_regex cgi-bin \?


no_cache deny QUERY


cache_mem 64 MB


cache_swap_low 90


cache_swap_high 95


connect_timeout 1 minutes


negative_ttl 5 minutes


read_timeout 15 minutes


request_timeout 5 minutes


persistent_request_timeout 1 minutes


client_lifetime 5 day


pconn_timeout 120 seconds


shutdown_lifetime 30 seconds


maximum_object_size 20480 KB


minimum_object_size 0 KB


maximum_object_size_in_memory 4096 KB


ipcache_size 1024


ipcache_low 90


ipcache_high 95


fqdncache_size 1024


cache_replacement_policy lru


memory_replacement_policy lru


cache_dir ufs /var/spool/squid 15000 16 256


cache_access_log /var/log/squid/access.log


cache_log /var/log/squid/cache.log


cache_store_log /var/log/squid/store.log


log_ip_on_direct on


debug_options ALL,1


client_netmask 255.255.255.255


ftp_user Squid@


ftp_list_width 32


ftp_passive on


ftp_sanitycheck on


ftp_telnet_protocol on


redirect_children 10


auth_param basic children 10


auth_param basic realm Squid proxy-caching web server


auth_param basic credentialsttl 2 hours


auth_param basic casesensitive off


refresh_pattern ^ftp: 1440 20% 10080


refresh_pattern ^gopher: 1440 0% 1440


refresh_pattern . 0 20% 4320


quick_abort_min 16 KB


quick_abort_max 16 KB


quick_abort_pct 95


acl all src 0.0.0.0/0.0.0.0


acl manager proto cache_object


acl localhost src 127.0.0.1/255.255.255.255


acl to_localhost dst 127.0.0.0/8


acl SSL_ports port 443 563 6667 7000


acl Safe_ports port 80


acl Safe_ports port 81


acl Safe_ports port 21


acl Safe_ports port 443 563


acl Safe_ports port 70


acl Safe_ports port 210


acl Safe_ports port 1025-65535


acl Safe_ports port 280


acl Safe_ports port 488


acl Safe_ports port 591


acl Safe_ports port 777 110


acl Safe_ports port 4461


acl Safe_ports port 5050


acl CONNECT method CONNECT


http_access allow manager localhost


acl perusahaan src 192.168.10.0/24 # ini bisa diganti sesuai ip lokal yang dipake


http_access allow perusahaan


http_access deny manager


http_access deny !Safe_ports


http_access deny CONNECT !SSL_ports


http_access deny all


http_reply_access allow all


icp_access allow all


miss_access allow all


cache_mgr namalo # nama lo disini, ya nama lo, bego amat sich lo.... he, he, he...


visible_hostname domainlo.com # terserah nama domainnya asal aja, cuma formalitas doang


logfile_rotate 10


buffered_logs off


snmp_port 3401


snmp_access allow localhost


snmp_access deny all


snmp_access deny all


coredump_dir /var/spool/squid


ie_refresh on


##Delay pools


acl download url_regex -i ftp \.exe$ \.mp3$ \.mp4$ \.tar.gz$ \.gz$ \.tar.bz2$ \.rpm$ \.zip$ \.rar$


acl download url_regex -i \.avi$ \.mpg$ \.mpeg$ \.rm$ \.iso$ \.wav$ \.mov$ \.dat$ \.mpe$ \.mid$


acl download url_regex -i \.midi$ \.rmi$ \.wma$ \.wmv$ \.ogg$ \.ogm$ \.m1v$ \.mp2$ \.mpa$ \.wax$


acl download url_regex -i \.m3u$ \.asx$ \.wpl$ \.wmx$ \.dvr-ms$ \.snd$ \.au$ \.aif$ \.asf$ \.m2v$


acl download url_regex -i \.m2p$ \.ts$ \.tp$ \.trp$ \.div$ \.divx$ \.mod$ \.vob$ \.aob$ \.dts$


acl download url_regex -i \.ac3$ \.cda$ \.vro$ \.deb$


delay_pools 1


delay_class 1 1


delay_parameters 1 6000/32000


delay_access 1 allow download


delay_access 1 deny all


-- berakhir diatas tulisan ini --


simpan dengan menekan ctrl+x tekan y kemudian enter


ket: disini kita make konsep delay pools yaitu untuk blok download diatas 32kb pada file-file yang disebutkan diatas maka otomatis download maksimal yang dapet sekitar 6 kbps (lihat 6000/32000). cara ini biasanya digunain untuk blok user-user yang make download akselerator atau sejenisnya. Untuk lebih jelasnya mengenai delay pools, belajarnya cari aja di internet, Ok.


4. aktifkan squid


#/etc/init.d/squid start


5. sekarang tinggal transparant proxynya, pake aja iptables


#/sbin/iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128


#/sbin/iptables -t nat -A PREROUTING -i eth1 -p udp --dport 80 -j REDIRECT --to-ports 3128


ket:


-t nat = akan membuat satu tabel baru pada iptables


-A PREROUTING = akan membuat satu aturan baru pada bagian ROUTING nya.


-i eth1 = perintah akan mengarah ke bagian eth1 atau client yaitu pada jaringan lokal kita.


tcp = paket tcp


udp = paket udp


--dport 80 = untuk port 80


-j REDIRECT = akan diteruskan


--to-ports 3128 = ke port 3128 yaitu port proxy


6. jangan lupa simpen transparant proxy nya di rc.local agar setiap kali server dinyalain kita nggak perlu repot lagi nyeting transparant proxy nya


#nano /etc/rc.local


dibawah rc.local tambahkan iptables berikut


/sbin/iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-ports 3128


/sbin/iptables -t nat -A PREROUTING -i eth1 -p udp --dport 80 -j REDIRECT --to-ports 3128


simpen make ctrl+x tekan y kemudian enter


nah udahan dulu ya, cobain aja gak ada ayng marah kok heheheheh