Friday 1 April 2011

Compiling *.asm Code to INTEL HEX Format

If the *.asm code list been written then we must convert that in to *.hex then can be downloaded in to flash AT89C51 memory.

For example, the code list is shown below

$mod51

org 00h

jmp mulai

;program dimulai di sini

mulai:

mov r1, #05h

loop:

dec r1

mov a, #01h

mov p1, a

call tunda

kiri:

rl a

mov p1, a

call tunda

cjne a, #80h, kiri

kanan:

rr a

mov p1, a

call tunda

cjne a, #01h, kanan

cjne r1, #00h, loop

ljmp mulai

;

tunda:

mov r4, #02h

ulang:

dec r4

mov r3, #0ffh

tunda1:

dec r3

mov r2, #0ffh

tunda2:

dec r2

cjne r2, #00h, tunda2

cjne r3, #00h, tunda1

cjne r4, #00h, ulang

ret

end

(you must refer to this page for the circuit diagram), when this code been written (for example using notepad), then save it with .asm file extension) by using ASEM.exe (click here to download ) we can to compile and convert it in to *.hex. This process is shown below.


If compiling process completed, and there is no error (we can to assure by open *.lst file extension), so the *.hex can be downloaded in to flash memory of AT89C51


source : http://trensains.com/compile_to_hex.htm

Interruption Handling

Timer/Counters
The AT89C51 has two 16-bit Timer/Counter registers: Timer 0 and Timer 1. The AT89C52 has these two Timer/Counters, and in addition Timer 2. All three can be configured to operate either as Timers or event Counters. As a Timer, the register is incremented every machine cycle. Thus, the register counts machine cycles. Since a machine cycle consists of 12 oscillator periods, the count rate is 1/12 of the oscillator frequency. As a Counter, the register is incremented in response to a 1 to- 0 transition at its corresponding external input pin, T0, T1, or (in the AT89C52) T2. The external input is sampled during S5P2 of every machine cycle. When the samples show a high in one cycle and a low in the next cycle, the
count is incremented. The new count value appears in the register during S3P1 of the cycle following the one in which the transition was detected. Since 2 machine cycles (24 oscillator periods) are required to recognize a l-to-0 transition, the maximum count rate is 1/24 of the oscillator frequency. There are no restrictions on the duty cycle of the external input signal, but it should be held for at least one full machine cycle to ensure that a given level is sampled at least once before it changes. In addition to the Timer or Counter functions, Timer 0 and Timer 1 have four operating modes: (13 bit timer, 16 bit timer, 8 bit auto-reload, split timer). Timer 2 in the AT89C52 has three modes of operation: Capture, Auto-Reload, and baud rate generator.

Timer 0 and Timer 1

Timer/Counters 1 and 0 are present in both the AT89C51 and AT89C52. The Timer or Counter function is selected by control bits C/T in the Special Function Register TMOD (Figure 6). These two Timer/Counters have four operating modes, which are selected by bit pairs (M1, M0) in TMOD. Modes 0, 1, and 2 are the same for both Timer/Counters, but Mode 3 is different. The four modes are described in the following sections.


source : http://trensains.com/interruption.htm

Instructions For Program Flow Control

with instruction for program flow control, microcontroller can to jump or branch to the address of memory program to take another action. Each action is consisting of a set of microcontroller instructions. This branching instructions are partitioned in to two categories, unconditional and conditional jump.

Instructions for Unconditional Jump

This instruction is happened without any condition that must be met. There are four instructions for unconditional jump in MCS 51 family assembly language, i.e SJMP, AJMP, LJMP and JMP.

Instructions for Conditional Jump

This instruction is happened if satisfy a certain condition. There are about eight instructions for conditional jump in MCS 51 family assembly language, i.e JZ, JNZ, JC, JNC, JB, JNB, CJNE, and DJNZ.


source:

http://trensains.com/interruption.htm


Instruction For Data Processing

Commonly, data processing instruction are grouped in to two categories: instructions for logical operation and arithmetic.Instructions for arithmetic consist of addition, subtraction, increment, decrement, multiplication, division and decimal adjustment. instructions for logical operation consists of AND, OR, EX-OR, complement, clear, rotation and swap.

Almost of these instructions are using register A (accumulator) at every operation (for multiplication and division are using accumulator . Such instructions add, subb, mul and div. Where as inc and dec can be hold in every register.

Addition and subtraction operation.

Example code for this operation is shown below.

org 00h

mov a, #20 ;putting 20 in to accumulator

add a, #8 ;adding accumulator by 8. The result is stored in accumulator (acc=28)

; this is an example for immediate addressing mode

mov 70h, #4 ;putting 4 in to register that has address 70h

add a, 70h ;adding accumulator by the contents of register that has address 70h (acc=32)

; this is an example for direct addressing mode

mov 78h, #9 ;putting 9 in to register that has address 78h

mov r0, #78h ;putting 78h in to register r0

add a, @r0 ;adding acc by the contents of the register that its address is stored in r0 (acc=41)

mov a, #100 ;putting 100 in to accumulator

subb a, #8 ;subtraction acc by 8 (acc=92)

....

....

Increment and decrement operation.

org 00h

mov a, #10 ;putting 10 in to accumulator

inc a ;adding accumulator by 1

dec a ;subtracting accumulator by 1

mov r0, #9 ;putting 9 in to register r0

inc r0 ;adding register r0 by 1

dec r0 ;subtracting register r0 by 1

.....

.....

Multiplication and division operation.

org 00h

mov a, #10 ;putting 10 in to accumulator

mov b, #2 ;putting 2 in to register B

mul ab ;multiply content of accumulator by the content of B,

;The result is stored in A (low byte) and high byte is stored in B

mov a, #20 ;putting 20 in to accumulator

mov b, #4 ;putting 4 in to register B

div ab ;dividing the content of accumulator by the content of B

; the result is stored in A, where as the reminder is stored in B

...

...

Decimal adjustment

org 00h

mov a, #10h ;putting 10h in to accumulator (acc=10h)

da a ;adjusting the content of accumulator in to decimal number (acc=80bcd)

...

...

org 00h

mov a, #0FFh ;putting FFh in to accumulator

anl a, #0F ;force high nible low (acc=00001111b)

mov a, #10101010b ;putting 10101010 in to accumulator

orl a, #0F0h ;force high nible high (acc=11111010b)

cpl a ; complement the content of accumulator (acc=00000101b)

clr a ; clear the content of accumulator (acc=00000000b)

...

...


source : http://trensains.com/data_processing.htm

Instruction for Data Transfer

The general instruction for transferring data is MOV instruction. This instructions is used for byte and bit oriented that are grouped in to several category, such as immediate addressing mode, direct addressing mode, register indirect addressing mode and stack data transfer.

Another word to describe immediate addressing mode is immediate constant addressing, that refers to the source data is a constant. The example of this mode is describe below :

org 00h

mov a, #10h

mov a, #11111010b

mov r0, #28

...

...

The beginning code is org 00h, has means that the origin of the code is occupy at 00h.

mov a, #10h is putting 10 h in to the accumulator

mov a, #11111010b is putting 11111010b in to the accumulator

mov a, #28 is putting 28 in to the accumulator

This mode refers to specifying an internal data registers by its address. The example of this mode is describe below :

org 8000h

mov a, 70h

mov r0, #11111010b

mov 70h, r0

...

...

The beginning code is org 8000h, has means that the origin of the code is occupy at 8000h.

mov a, 70h is copying contents of register that has address 70h to the accumulator

mov r0, #11111010b is putting 11111010b in to the register r0

mov 70h, r0 is copying contents of r0 (11111010b) to the register that has address 70h

In this mode, the address of the source is not given explicitly but include in the target register. The example of this mode is describe below :

org 00h

mov r0, #70h

mov @r0, #28h

...

...

The beginning code is org 00h, has means that the origin of the code is occupy at 00h.

mov r0, #70h is putting 70 h in to regisrtor r0

mov @r0, #28h is putting 28h in to the address that saved in register r0


source : http://trensains.com/data_transfer.htm

Assembly Language For AT89C51

A microcontroller reads data from its ports, then executes that data with appropriate instruction that be saved on its memory. Finally, a microcontroller emits the result of processed data to its ports (depends on the program).

All of microcontroller operation is appropriate to that code. The data code is interpreted as an instruction that be stored by microprocessor in a register, called the program counter.

The code is hex intel formatted. The program can be write as assembly language then compiled to hex file by assembler such as ASEM 51.

  • Instructions for Data Transfer
  • Instructions for Data Processing
  • Instructions for Program Flow Control
  • Interruptions Handling
  • Code Compiling


Instructions for Data Transfer

This instructions is used for data transfer from one register to another, include its ports.


Instructions for Data Processing

This instructions is used for data processing in specific register, such as arithmetic operation and logical operation.


Instructions for Program Flow Control

This instructions is used for controlling program flow, such as unconditional and conditional jump to another address.


Interruptions Handling

This instructions is used for interruption handling, such as timer, external and serial communication interrupt.

Induktor

Secara fisik, induktor adalah berupa lilitan dari kawat penghantar (yang memiliki isolasi), baik berinti besi atau udara. Induktor memiliki dua bentuk yaitu belitan dengan inti yang lurus (dikenal dengan solenoid) dan belitan dengan inti melingkar (dikenal sebagai toroid). Gambar berikut adalah penjelasan tentang induktor (solenoid).

Prinsip Kerja Solenoid.

Garis-garis warna biru adalah merupakan garis gaya medan magnet. Dari gambar dapat dilihat bahwa garis gaya medan magnet paling banyak (kuat) terdapat di tengah solenoid. Di luar itu, garis gaya magnetnya adalah lemah. Untuk menghitung besarnya induktansi solenoid, maka dapat menggunakan persamaan berikut:

dengan L adalah nilai induktasi (satuan Henry), µ adalah nilai permeabilitas inti, N adalah banyaknya belitan, A adalah luas dari penampang melintang induktor (meter persegi), sedangkan l adalah panjang toroid (meter).

Penjelasan toroid diperlihatkan pada gambar berikut:

Prinsip Kerja Toroid

Untuk menghitung besarnya induktansi toroid, maka dapat menggunakan persamaan berikut:

dengan L adalah nilai induktasi (satuan Henry), µ adalah nilai permeabilitas inti, N adalah banyaknya belitan, A adalah luas dari penampang melintang induktor (meter persegi), sedangkan r adalah jari-jari toroid (meter).


source : http://trensains.com/induktor.htm

Kapasitor

(sumber : http://cnt121.com/2007/11/03/kapasitor-2/)

Kapasitor

KAPASITOR (KONDENSATOR)

Kapasitor (Kondensator) yang dalam rangkaian elektronika dilambangkan dengan huruf Cadalah suatu alat yang dapat menyimpan energi/muatan listrik di dalam medan listrik, dengan cara mengumpulkan ketidakseimbangan internal dari muatan listrik. Kapasitor ditemukan oleh Michael Faraday (1791-1867). Satuan kapasitor disebut Farad (F). Satu Farad = 9 x 1011 cm2 yang artinya luas permukaan kepingan tersebut.

Struktur sebuah kapasitor terbuat dari 2 buah plat metal yang dipisahkan oleh suatu bahan dielektrik. Bahan-bahan dielektrik yang umum dikenal misalnya udara vakum, keramik, gelas dan lain-lain. Jika kedua ujung plat metal diberi tegangan listrik, maka muatan-muatan positif akan mengumpul pada salah satu kaki (elektroda) metalnya dan pada saat yang sama muatan-muatan negatif terkumpul pada ujung metal yang satu lagi. Muatan positif tidak dapat mengalir menuju ujung kutub negatif dan sebaliknya muatan negatif tidak bisa menuju ke ujung kutub positif, karena terpisah oleh bahan dielektrik yang non-konduktif. Muatan elektrik ini tersimpan selama tidak ada konduksi pada ujung-ujung kakinya. Di alam bebas, phenomena kapasitor ini terjadi pada saat terkumpulnya muatan-muatan positif dan negatif di awan.

prinsip.jpg

1.1. Kapasitansi

Kapasitansi didefinisikan sebagai kemampuan dari suatu kapasitor untuk dapat menampung muatan elektron. Coulombs pada abad 18 menghitung bahwa 1 coulomb = 6.25 x 1018 elektron. Kemudian Michael Faraday membuat postulat bahwa sebuah kapasitor akan memiliki kapasitansi sebesar 1 farad jika dengan tegangan 1 volt dapat memuat muatan elektron sebanyak 1 coulombs. Dengan rumus dapat ditulis :

Q = C V

Q = muatan elektron dalam C (coulombs)

C = nilai kapasitansi dalam F (farad)

V = besar tegangan dalam V (volt)

Dalam praktek pembuatan kapasitor, kapasitansi dihitung dengan mengetahui luas area plat metal (A), jarak (t) antara kedua plat metal (tebal dielektrik) dan konstanta (k) bahan dielektrik. Dengan rumus dapat di tulis sebagai berikut :

C = (8.85 x 10-12) (k A/t)

Berikut adalah tabel contoh konstanta (k) dari beberapa bahan dielektrik yang disederhanakan.

7.jpg

Untuk rangkaian elektronik praktis, satuan farad adalah sangat besar sekali. Umumnya kapasitor yang ada di pasaran memiliki satuan : µF, nF dan pF.

1 Farad = 1.000.000 µF (mikro Farad)

1 µF = 1.000.000 pF (piko Farad)

1 µF = 1.000 nF (nano Farad)

1 nF = 1.000 pF (piko Farad)

1 pF = 1.000 µµF (mikro-mikro Farad)

1 µF = 10-6 F

1 nF = 10-9 F

1 pF = 10-12 F

Konversi satuan penting diketahui untuk memudahkan membaca besaran sebuah kapasitor. Misalnya 0.047µF dapat juga dibaca sebagai 47nF, atau contoh lain 0.1nF sama dengan 100pF.

Kondensator diidentikkan mempunyai dua kaki dan dua kutub yaitu positif dan negatif serta memiliki cairan elektrolit dan biasanya berbentuk tabung.

Kapasitor

Sedangkan jenis yang satunya lagi kebanyakan nilai kapasitasnya lebih rendah, tidak mempunyai kutub positif atau negatif pada kakinya, kebanyakan berbentuk bulat pipih berwarna coklat, merah, hijau dan lainnya seperti tablet atau kancing baju yang sering disebut kapasitor (capacitor).

Kapasitor

2.2 Wujud dan Macam Kondensator

Berdasarkan kegunaannya kondensator di bagi menjadi :

1. Kondensator tetap (nilai kapasitasnya tetap tidak dapat diubah)

2. Kondensator elektrolit (Electrolit Condenser = Elco)

3. Kondensator variabel (nilai kapasitasnya dapat diubah-ubah)

Pada kapasitor yang berukuran besar, nilai kapasitansi umumnya ditulis dengan angka yang jelas. Lengkap dengan nilai tegangan maksimum dan polaritasnya. Misalnya pada kapasitor elco dengan jelas tertulis kapasitansinya sebesar 100µF25v yang artinya kapasitor/ kondensator tersebut memiliki nilai kapasitansi 100 µF dengan tegangan kerja maksimal yang diperbolehkan sebesar 25 volt.

Kapasitor yang ukuran fisiknya kecil biasanya hanya bertuliskan 2 (dua) atau 3 (tiga) angka saja. Jika hanya ada dua angka, satuannya adalah pF (pico farads). Sebagai contoh, kapasitor yang bertuliskan dua angka 47, maka kapasitansi kapasitor tersebut adalah 47 pF. Jika ada 3 digit, angka pertama dan kedua menunjukkan nilai nominal, sedangkan angka ke-3 adalah faktor pengali. Faktor pengali sesuai dengan angka nominalnya, berturut-turut 1 = 10, 2 = 100, 3 = 1.000, 4 = 10.000, 5 = 100.000 dan seterusnya.

Contoh :

6.jpg

Untuk kapasitor polyester nilai kapasitansinya bisa diketahui berdasarkan warna seperti pada resistor.

5.jpg

Contoh :

14.jpg

Seperti komponen lainnya, besar kapasitansi nominal ada toleransinya. Pada tabel 2.3 diperlihatkan nilai toleransi dengan kode-kode angka atau huruf tertentu. Dengan tabel tersebut pemakai dapat dengan mudah mengetahui toleransi kapasitor yang biasanya tertera menyertai nilai nominal kapasitor. Misalnya jika tertulis 104 X7R, maka kapasitansinya adalah 100nF dengan toleransi +/-15%. Sekaligus diketahui juga bahwa suhu kerja yang direkomendasikan adalah antara -55Co sampai +125Co .

81.jpg


Dari penjelasan di atas bisa diketahui bahwa karakteristik kapasitor selain kapasitansi juga tak kalah pentingnya yaitu tegangan kerja dan temperatur kerja. Tegangan kerja adalah tegangan maksimum yang diijinkan sehingga kapasitor masih dapat bekerja dengan baik. Misalnya kapasitor 10uF25V, maka tegangan yang bisa diberikan tidak boleh melebihi 25 volt dc. Umumnya kapasitor-kapasitor polar bekerja pada tegangan DC dan kapasitor non-polar bekerja pada tegangan AC. Sedangkan temperatur kerja yaitu batasan temperatur dimana kapasitor masih bisa bekerja dengan optimal. Misalnya jika pada kapasitor tertulis X7R, maka kapasitor tersebut mempunyai suhu kerja yang direkomendasikan antara -55Co sampai +125Co. Biasanya spesifikasi karakteristik ini disajikan oleh pabrik pembuat di dalam datasheet.

2.3. Rangkaian Kapasitor

Rangkaian kapasitor secara seri akan mengakibatkan nilai kapasitansi total semakin kecil. Di bawah ini contoh kapasitor yang dirangkai secara seri.

9.jpg

Pada rangkaian kapasitor yang dirangkai secara seri berlaku rumus :

10.jpg

Rangkaian kapasitor secara paralel akan mengakibatkan nilai kapasitansi pengganti semakin besar. Di bawah ini contoh kapasitor yang dirangkai secara paralel.

11.jpg

Pada rangkaian kapasitor paralel berlaku rumus :

12.jpg

2.4. Fungsi Kapasitor

Fungsi penggunaan kapasitor dalam suatu rangkaian :

1. Sebagai kopling antara rangkaian yang satu dengan rangkaian yang lain (pada PS = Power Supply)

2. Sebagai filter dalam rangkaian PS

3. Sebagai pembangkit frekuensi dalam rangkaian antenna

4. Untuk menghemat daya listrik pada lampu neon

5. Menghilangkan bouncing (loncatan api) bila dipasang pada saklar

2.5. Tipe Kapasitor

Kapasitor terdiri dari beberapa tipe, tergantung dari bahan dielektriknya. Untuk lebih sederhana dapat dibagi menjadi 3 bagian, yaitu kapasitor electrostatic, electrolytic dan electrochemical.

  • Kapasitor Electrostatic

Kapasitor electrostatic adalah kelompok kapasitor yang dibuat dengan bahan dielektrik dari keramik, film dan mika. Keramik dan mika adalah bahan yang popular serta murah untuk membuat kapasitor yang kapasitansinya kecil. Tersedia dari besaran pF sampai beberapa µF, yang biasanya untuk aplikasi rangkaian yang berkenaan dengan frekuensi tinggi. Termasuk kelompok bahan dielektrik film adalah bahan-bahan material seperti polyester (polyethylene terephthalate atau dikenal dengan sebutan mylar), polystyrene, polyprophylene, polycarbonate, metalized paper dan lainnya.

Mylar, MKM, MKT adalah beberapa contoh sebutan merek dagang untuk kapasitor dengan bahan-bahan dielektrik film. Umumnya kapasitor kelompok ini adalah non-polar.

  • Kapasitor Electrolytic

Kelompok kapasitor electrolytic terdiri dari kapasitor-kapasitor yang bahan dielektriknya adalah lapisan metal-oksida. Umumnya kapasitor yang termasuk kelompok ini adalah kapasitor polar dengan tanda + dan – di badannya. Mengapa kapasitor ini dapat memiliki polaritas, adalah karena proses pembuatannya menggunakan elektrolisa sehingga terbentuk kutub positif anoda dan kutub negatif katoda.

Telah lama diketahui beberapa metal seperti tantalum, aluminium, magnesium, titanium, niobium, zirconium dan seng (zinc) permukaannya dapat dioksidasi sehingga membentuk lapisan metal-oksida (oxide film). Lapisan oksidasi ini terbentuk melalui proses elektrolisa, seperti pada proses penyepuhan emas. Elektroda metal yang dicelup ke dalam larutan elektrolit (sodium borate) lalu diberi tegangan positif (anoda) dan larutan electrolit diberi tegangan negatif (katoda). Oksigen pada larutan electrolyte terlepas dan mengoksidasi permukaan plat metal. Contohnya, jika digunakan Aluminium, maka akan terbentuk lapisan Aluminium-oksida (Al2O3) pada permukaannya.

13.jpg

Dengan demikian berturut-turut plat metal (anoda), lapisan-metal-oksida dan electrolyte (katoda) membentuk kapasitor. Dalam hal ini lapisan-metal-oksida sebagai dielektrik. Dari rumus (2) diketahui besar kapasitansi berbanding terbalik dengan tebal dielektrik. Lapisan metal-oksida ini sangat tipis, sehingga dengan demikian dapat dibuat kapasitor yang kapasitansinya cukup besar.

Karena alasan ekonomis dan praktis, umumnya bahan metal yang banyak digunakan adalah aluminium dan tantalum. Bahan yang paling banyak dan murah adalah aluminium. Untuk mendapatkan permukaan yang luas, bahan plat Aluminium ini biasanya digulung radial. Sehingga dengan cara itu dapat diperoleh kapasitor yang kapasitansinya besar. Sebagai contoh 100uF, 470uF, 4700uF dan lain-lain, yang sering juga disebut kapasitor elco.

Bahan electrolyte pada kapasitor tantalum ada yang cair tetapi ada juga yang padat. Disebut electrolyte padat, tetapi sebenarnya bukan larutan electrolit yang menjadi elektroda negatif-nya, melainkan bahan lain yaitu manganese-dioksida. Dengan demikian kapasitor jenis ini bisa memiliki kapasitansi yang besar namun menjadi lebih ramping dan mungil. Selain itu karena seluruhnya padat, maka waktu kerjanya (lifetime) menjadi lebih tahan lama. Kapasitor tipe ini juga memiliki arus bocor yang sangat kecil Jadi dapat dipahami mengapa kapasitor Tantalum menjadi relatif mahal.

  • Kapasitor Electrochemical

Satu jenis kapasitor lain adalah kapasitor electrochemical. Termasuk kapasitor jenis ini adalah battery dan accu. Pada kenyataannya battery dan accu adalah kapasitor yang sangat baik, karena memiliki kapasitansi yang besar dan arus bocor (leakage current) yang sangat kecil. Tipe kapasitor jenis ini juga masih dalam pengembangan untuk mendapatkan kapasitansi yang besar namun kecil dan ringan, misalnya untuk aplikasi mobil elektrik dan telepon selular.