11 9. ALEPROG
Berfungsi untuk demultiplexer pada saat Port 0 bekerja sebagai data bus pengaksesan memori eksternal. Pada paruh pertama memory cycle, Pin ALE
mengeluarkan sinyal latch yang menahan alamat ke eksternal register. Pada paruh kedua memory cycle, Port 0 digunakan sebagai data bus. Jadi fungsi
utama dari ALE adalah untuk memberikan signal ke IC latch bisa 74CT573 agar menahan menyimpan address dari port 0 yang akan menuju memori
eksternal, dan selanjutnya port 0 akan mengeluarkan data melalui port 0 juga. 10. EA VPP
EA Eksternal Access digunakan untuk memilih penggunaan memori. Jika EA high maka yang dipilih adalah memori internal, jika EA low atau dihubung ke
GND maka yang dipilih atau memori yang dipakai adalah memori luar.
2.1.4 Register Fungsi Khusus a. Akumulator
ACC digunakan sebagai register utama dalam proses aritmatik dan penyimpanan data sementara. Dalam penulisan instruksi ACC ditulis A. ACC
menempati alamat E0h. Register ini bisa diakses per byte maupun per bit.
b. Register B
Register B menempati alamat F0h. Register ini dipakai bersama-sama dengan Register A pada proses aritmatik perkalian dan pembagian. Register B juga
bisa diakses Per byte dan per bit.
12
c. PSW Program Status Word Program Status Word atau PSW berisi bit-bit yang berkaitan dengan kondisi
CPU. Status yang tersimpan dalam PSW meliputi : carry bit, auxiliary carry
untuk operasi BCD, dua bit pemilih bank register, overflow flag, parity, dan dua flag status yang bisa didefiniskan sendiri user definable.
d. P0 - P3 Register Port
Register port merupakan SFR yang mengatur kerja port-port 8051P0-P3. Register ini merupakan alamat Latch dari masing-masing port. Menulis atau
membaca latch ini sama dengan menulis atau membaca latch yang bersangkutan sehingga data data bisa ditulis ke dan dibaca dari masing-masing
port 8051. Mov 80h,45h
Sama artinya dengan Mov P0,45h
e. Data Pointer DPTR dan Stack Pointer SP
Data pointer DPTR adalah register 16 bit yang biasa dipakai untuk pengalamatan data 16 bit. Misalnya pada saat membaca atau menulis RAM
eksternal dengan perintah MOVX. DPTR menempati dua alamat dalam memori SFR 82h dan 83h. DPTR bisa diakses sebagai register 8 bit dengan
nama DPL DPTR bit 0 - bit 7 dan DPH DPTR bit 8-bit 15. DPTR tidak bisa diakses per bit.
Stack pointer merupakan register 8 bit, dipakai untuk menyimpan data sementara pada saat perintah push, pop dan call, ret. Misalnya suatu rutin yang
13 memakai register A akan memanggil call subrutin yang juga memakai
register A, maka agar data register A pada rutin pertama tidak dimodifikasi oleh subrutin yang dipanggil, data register A harus disimpan dulu di SP
dengan perintah push. Setelah subrutin selesai dikerjakan, data register A yang tersimpan di
SP di baca kembali melalui perintah pop dan disimpan di register A. Perintah call akan menyimpan isi PC program counter ke dalam SP dan
mengambilnya kembali setelah instruksi ret. Pada saat reset SP memiliki alamat 07h, namun karena SP akan ditambahkan satu sebelum data disimpan
melalui perintah push, tumpukan data yang disimpan akan dimulai pada alamat 08h. Alamat ini menempati memori internal 8051 SP tidak bisa dialamati per
bit.
2.1.5 Struktur Memori
Mikrokontroler MCS-51 memiliki kendali yang berbeda untuk mengakses memori RAM atau memori data dan ROM atau memori program. Kendali untuk
memori program adalah PSEN dan kendali untuk memori data adalah RD. Mikrokontroler MCS-51 memiliki lebar bus alamat 16 bit, sehingga memori dapat
diakses sebesar 2×64 KB. Memori program internal dipakai jika Pin EA dihubungkan ke VCC. Sedangkan kalau EA dihubungkan ke GND maka memori program akan
diakses eksternal. Untuk memori data internal MCS-51 adalah sebesar 128 byte. Jika dipakai memori data Eksternal dapat diakses sebesar 64 KB.
14
2.1.5.1 Memori RAM
Pemakaian RAM harus diperhatikan agar tidak tumpang tindih dengan memori stack pointer SP. Salah satu kesalahan mikrokontroler jika Pemakaian RAM
tumpang tindih dengan SP adalah memori pada RAM internal akan hilang jika di reset. Tabel 2.2 memperlihatkan Struktur RAM 128 byte.Memori internal RAM 128
byte bisa dibagi menjadi 3 area: Tabel 2.2 Struktur RAM 128 byte
30H-7FH 20H-2FH
00H-1FH
1. Bank-bank Register
Bank register dibagi menjadi 4 grup yaitu bank 0 sampai bank 3. masing masing bank menempati alamat sebesar 8 byte. Tabel 2.3. adalah susunan
bank-bank register. Tabel 2.3 Susunan bank-bank register
Alamat Bank Register RS1,RS0
00-07 Bank 0 00
08-0F Bank 1 01
10-17 Bank 2 10
18-1F Bank 3 11
Area scratch pad 80 byte
Area yang bisa dialamati per Bit 16 byte
Bank-bank register 32 Byte
15 Masing-masing alamat dalam satu grup diberi nama R0-R7. Alamat R0-R7
ditentukan oleh Bank register yang aktif saat itu. Semua alamat R0-R7 bisa di alamati dengan model pengalamatan langsung.
R0 dan R1 juga bisa dialamati dengan model pengalamatan tak langsung. Pada model pengalamatan tak langsung R0 dan R1 menyimpan alamat RAM internal
yang akan diakses.
2. Memori Yang Bisa Dialamati Per-Bit
Area ini menempati alamat 20H-2FH 16 Byte sebagai byte dan 00H- 07FH 128bit sebagai alamat bit. Area memori ini berfungsi untuk
menyimpan tipe data bolean atau 2 keadaan. Ada 2 cara untuk mengakses memori ini.
- Cara mengakses sebagai byte bisa dilakukan dengan pengalamatan langsung, misal. Mov 20H, 20H. Akan menulis data 45 H ke alamat 20H.
- Pengaksesan secara bit dilakukan dengan mengakses alamat bit yang bersangkutan,misal.
Mov C,13H Akan memindahkan alamat pada bit ke-13 ke bit C carry. Alamat 13H
adalah bit ke-3 dari alamat 22H. Bahasa assembler MCS-51 memiliki penulisan yang lain untuk mengakses bit ke-3 yaitu 22.3H,sehingga
Mov C,22.3H
3. Are
alam han
lang
2.1.5.2 M R
catu daya, langsung re
dengan pen sebagai me
bekerja.
2.1.6 An ea Memori
Area me mat paling a
nya bisa diak gsung.
emory RO
ROM read dipakai un
eset dan ak nggunaanya
emori progr
ntar Muka
Gambar 2
Scratch Pa
emori ini y atas RAM i
kses sebaga
M
Only mem ntuk menyim
an menjalan a ROM dis
ram dan tida
Memori E
2.3 89C51 m
16
atch
ang disebu internal seb
ai byte deng
mory isinya mpan progr
nkan progra ebut sebaga
ak bisa di t
Eksternal
mengakses t area scrat
besar 80 byt gan mode p
a tidak beru am, Begitu
am-program ai memori p
tulis ke RO
EPROM da tch patch m
te alamat 3 pengalamata
ubah meski u catu daya
m yang ada program. M
OM saat mik
an RAM Ek memory me
30H-7FH. an langsung
ipun IC keh ada maka
pada ROM Memori ROM
krokontroler
ksternal enempati
Area ini g dan tak
hilangan IC akan
M. Sesuai M hanya
r sedang
17 Memori program ROM dan memori data RAM eksternal diakses dengan
menggunakan P0 dan P2 sebagai bus data dan bus alamat. P0 akan menyediakan jalur data yang di-multipleks dengan jalur alamat orde rendah A0-A7, dan P2
menyediakan jalur alamat orde tinggi A8-A15. Konfigurasi pengaksesan memori eksternal ditunjukkkan pada gambar 2.2. EFROM 64 KB dan RAM 32 KB.
Konfigurasi ini memisahkan antara memori programROM dengan Memori data RAM.Kendali sinyal baca untuk ROM adalah PSEN sedangkan RAM mendapat
sinyal baca dan sinyal tulis dari P3.7RD dan P3.6WR, sementara EPROM tidak mendapat sinyal kendali tulis. Pin EA dihubungkan ke ground sehingga 8051 hanya
akan melaksanakan perintah-perintah yang tersimpan di EPROM eksternal. P0, selain dihubungkan ke jalur data EPROM dan RAM, juga dihubungkan
dengan masukan latch agar alamat orde rendah A0-A7 yang dikeluarkan oleh P0 bisa dipisahkan dari jalur data EPROM. Pada saat P0 mengeluarkan alamat yang
valid, ALE akan memberikan pulsa sehingga sehingga IC latch akan menyimpan alamat ini dan memberikannya ke jalur Alamat EPROM dan RAM. Bersamaan
dengan itu, P2 akan mengeluarkan alamat orde tinggi A8-A15 yang secara langsung terhubung dengan jalur alamat EPROM dan RAM.
PSEN akan diaktifkan 2 kali setiap satu siklus mesin saat membaca program dari EPROM eksternal. Saat PSEN aktif berlogika 0 EPROM akan mengeluarkan
data yang diterjemahkan sebagai perintah yang harus dijalankan oleh mikrokontroler. Pada saat mengakses RAM, PSEN berada pada logika tinggi.
18 Penulisan ke RAM dilakukan dengan mengaktifkan sinyal tulis RD=1 dan
WR=0, CPU akan mengirimkan data ke RAM setelah terlebih dahulu mengirimkan alamat RAM. Yang akan dituliskan. Sementara itu, pembacaan dilakukan dengan
mengaktifkan sinyal baca RD=0 dan WR=1, CPU akan memberikan alamat RAM yang akan dibaca, mengaktifkan sinyal baca dan membaca data RAM dari jalur data.
2.1.7 Osilator
Osilator berfungsi untuk menyediakan sinyal clock dan pewaktuan bagi semua perangkat internal 8051. Untuk menyediakan sinyal Clock digunakan dengan dua
cara yaitu: 1. Dengan menggunakan pembangkit frekwensi eksternal seperti pada gambar
2.4
Gambar 2.4 Pemakaian osilator eksternal - Pin Xtal satu pada mikrokontroler 8051 dihubungkan ke keluaran
pembangkit frekwensi eksternal. - Pin Xtal dua dibiarkan mengambang.
- Pin Ground pada pembangkit frekwensi eksternal dihubungkan ke Ground pada mikrokontroler 8051.
19 2. Dengan menggunakan Kristal dan 2 kapasitor 30 pF dan 47 pF, Seperti pada
gambar 2.5 Hal yang paling mendasar dari osilator sebenarnya adalah untuk
menentukan siklus mesin. Siklus mesin adalah waktu minimum yang diperlukan oleh mikrokontroler untuk menjalankan satu perintah. Siklus mesin ini akan menentukan
kecepatan mikrokontroler seberapa cepat mikrokontroler menjalankan suatu perintah. Satu siklus mesin mikrokontroler 8051 adalah 12 kali periode frekwensi
osilator dengan frekwensi 12 Mhz, maka satu siklus mesin adalah 112 dikali 12 Mhz.
Gambar 2.5 Pembangkit sinyal clock internal Jadi kecepatan satu siklus mikrokontroler 8051 jika frekwensi pada XTAL1 12 Mhz
adalah 1 Mhz atau 1 mikro detik. Berarti untuk melakukan satu perintah mikrokontroler 8051 hanya dalam satu mikro detik. Atau 1 juta perintah dalam satu
detik.
2.2 Central Processing Unit CPU
CPU terdiri atas dua bagian, yaitu unit pengendali control unit serta unit aritmetika dan logika ALU.
20 Fungsi utama unit pengendali adalah mengambil, mengkode, dan
melaksanakan urutan instruksi sebuah program yang tersimpan dalam memori. Unit pengendali menghasilkan dan mengatur sinyal pengendali yang
diperlukan untuk menyerempakkan operasi, aliran, dan instruksi program.Unit aritmetika dan logika berfungsi untuk melakukan proses perhitungan yang
diperlukan selama program dijalankan serta mempertimbangkan suatu kondisi dan mengambil keputusan yang diperlukan untuk instruksi-instruksi
berikutnya.
2.2.1 Penggunanaan Softwere 8051 IDE
Softwere 8051 IDE ini digunakan untuk menulis program dalam bahasa assembler. Setelah program assembler selesai ditulis kemudian di-save dan di
assemble. Program di assemble dengan tujuan untuk mengecek
Gambar 2.6 Softwere 8051 IDE kesalahan penulisan. Jika masih ada kesalahan penulisan, maka softwere 8051
memberi peringatan, sehingga program dapat diubah sampai tidak ada pesan peringatan lagi.
21
2.2.2 Penggunaan Softwere Downloader
Softwere downloader digunakan agar downloader dapat mendownload program assembler ke mikrokontroler AT89C51. Softwere dapat dijalankan
jika komputer terhubung dengan alat downloader beserta mikrokontroler yang digunakan.
Gambar 2.7 DT-HIQ Programmer Cara menggunakan softwere downloader adalah dengan meng-klik open file
untuk mengambil program assembler dari hasil kompilasi, kemudian klik Auto programming untuk mengisikan hasil kompilasi tersebut ke mikrokontroler.
2.3 Mode-Mode Pengalamatan
Data atau operan bisa berada di tempat yang berbeda sehingga dikenal beberapa cara untuk mengakses data tersebut. Inilah yang dikenal sebagai
mode pengalamatan. Beberapa mode pengalamatan yang dikenal antara lain:
22
2.3.1 Mode Pengalamatan Segera immediate addressing mode
Mode pengalamatan ini menggunakan konstanta. Data konstanta ini merupakan data yang menyatu dengan instruksi. Contoh instruksinya:
MOV A, 20 h Instruksi tersebut diatas mempunyai arti bahwa data konstantanya,
yaitu 20h perlu disalin ke akumulator. Tanda ‘’ dipakai untuk menunjukan bahwa data berupa konstanta.
2.3.2 Mode Pengalamatan Langsung direct addressing mode
Cara ini dipakai untuk menunjuk data yang berada di suatu lokasi memori. Contoh instruksinya:
MOV A, 30h Instruksi ini mempunyai arti agar data pada alamat 30h diambil dan
dipindahkan ke akumulator. Bila diperhatikan, maka kita akan bisa lihat bahwa instruksi diatas tidak menyertakan tanda ‘’. Tanpa tanda ‘’, maka data
diartikan sebagai alamat memori.
2.3.3 Mode Pengalamatan Tidak Langsung indirect addressing mode
Mode pengalamatan ini dipakai untuk mengakses data yang alamatnya berada dalam suatu register. Contoh instruksi:
MOV A, R0
Arti dari instruksi tersebut adalah data yang alamatnya berada di register R0
disalin ke akumulator. Tanda “” menyatakan bahwa alamat lokasi data
23
berada dalam suatu register. Jadi data tersebut sendiri tidak berada di R0. Yang berada di R0 adalah alamatnya.
2.3.4 Mode Pengalamatan Register register addressing mode
Mode pengalamatan ini dipakai untuk mengakses suatu data yang tersimpan dalam register. Contoh instruksi:
MOV A, R0
Arti dari instruksi diatas adalah bahwa data pada register R0 disalin ke
akumulator. Jadi, berbeda dengan mode pengalamatan tidak langsung yang menjadikan register sebagai tempat penyimpanan alamat data, maka pada
mode pengalamatan register ini, data disimpan langsung di register.
2.3.5 Mode Pengalamatan Berindeks
Mode pengalamatan ini dipakai untuk mengakses data yang tersimpan dalam memori program. Seperti yang telah dibahas sebelumnya, memori program bisa
menyimpan data yang bisa diakses hingga 64 Kb. Keuntungan dari menyimpan data di memori program adalah karena memori program berupa ROM non-volatile sehingga
data tersimpan terus menerus. Contoh instruksi:
MOVC, A, A + DPTR
Arti instruksi diatas adalah data yang lokasinya disimpan di A+ DPTR dipindahkan ke akumulator. Perhatikan bahwa perintah yang digunakan adalah
MOVC, bukan MOV. MOVC menandakan bahwa data yang diakses berada di memori program sedangkan MOV digunakan untuk mengakses memori data.
24
2.4 Bus-Bus Pada AT89C51
1. Bus Alamat Bus alamat berfungsi sebagai lintasan saluran pengalamatan antara alat
dengan sebuah computer. Pengalamatan ini harus ditentukan terlebih dahulu untuk menghindari terjadinya kesalahan pengiriman sebuah instruksi dan terjadinya bentrok
antara dua buah alat yang bekerja secara bersamaan. 2. Bus Data
Bus data merupakan sejumlah lintasan saluran keluar-masuknya data dalam suatu mikrokontroler. Pada umumnya saluran data yang masuk sama dengan
saluran data yang keluar. 3. Bus Kontrol
Bus control atau bus pengendali ini berfungsi untuk menyerempakkan operasi mikrokontroler dengan operasi luar.
2.5 INSTRUKSI-INSTRUKSI DALAM BAHASA ASEMBLER
Beberapa instruksi dasar yang umum digunakan pada pemrograman mikrokontroler AT89C51 adalah:
1. MOV, MOVC DAN MOV X
- Instruksi MOV digunakan untuk menyalin data antara 2 operand. - Instruksi MOVC digunakan untuk menyalin data yang terdapat pada
memori program internal.
25 - Instruksi MOVX digunakan untuk menyalin data yang terdapat pada
memori program eksternal. Tabel 2.4 MOV, MOVC DAN MOV X
Contoh syntax Keterangan
MOV A,R1 Salin nilai R1 ke akumulator
MOV A,R1 Salin isi lokasi yang ditunjuk R1 ke A
MOV A,P1 Salin data dari port 1 ke A
MOV P1,A Salin data pada Akumulator ke A
MOVC A,X+DPTR
Salin data int.yang ditunjuk DPTR ke A MOVX A,DPTR
Salin data eks, yang ditunjuk DPTR ke A MOVX DPTR,A
Salin data Akumulator ke lokasi yang ditunjuk DPTR
2. ADD DAN SUBB
1. Instruksi ADD digunakan untuk melakukan operasi penjumlahan Akumulator dengan suatu operand dan hasilnya disimpan dalam
Akumulator. 2. Instruksi SUBB digunakan untuk melakukan operasi pengurangan
Akumulator dengan suatu operand dan hasilnya disimpan dalam Akumulator
Tabel 2.5 Instruksi ADD DAN SUBB Contoh Syntax
Keterangan ADD A,20
A =A+20 ADD A,R0
A =A+R0 SUBB A,B
A =A-B SUBB A,10
A =A-10
26
3. MUL AB DAN DIV AB
- Instruksi MUL AB digunakan untuk melakukan operasi perkalian antara Akumulator dengan Register B .Hasilnya berupa data 16 bit dengan low
byte pada A dan high byte pada B. Contoh: A =50 h B=A0h
Mul AB = 3200 maka: A=00h B= 32H - Instruksi DIV AB digunakan untuk melakukan operasi pembagian
antara Akumulator dengan Register B. Hasilnya, pembagian disimpan pada Register B.
Contoh: Misal A=FBh B=12h
DIV AB hasil =0Dh
maka A=0Dh B=11h Karena, FBh= 0D ×12 + 1
4. DEC DAN INC
1. Instruksi DEC digunakan untuk melakukan pengurangan sebesar satu pada setiap operand.
2. Intruksi INC digunakan untuk melakukan penambahan sebesar satu pada setiap operand. Seprti yang terlihat pada tabel 2.6
Tabel 2.6 Instruksi DEC DAN INC Contoh Syntax
Keterangan DEC A
A = A-1 DEC R0
R0 = R0-1 INC A
A = A+1 INC DPTR
DPTR = DPTR +1
27
5. ORL,ANL DAN CPL
1. Instruksi orl digunakan untuk melakukan operasi OR antara 2 operand 2. Instruksi Anl digunakan untuk melakukan operasi AND antara 2 operand
3. Instruksi CPL digunakan untuk melakukan operasi komplemen suatu operand
Tabel 2.7 InstruksiDEC ORL,ANL DAN CPL Contoh Syntax
Akumulator RegisterB
Hasil ORL A,B
0011 1010 1111 0000
1111 1010 ANL A,B
0011 1010 1111 0000
0011 0000 CPL A
0011 1010 ________________ 1100 0101
6. SETB Dan CLR
1. Instruksi SETB digunakan untuk memberikan logika satu pada bit operand.
2. Instruksi CLR digunakan untuk memberikan logika nol pada bit operand Mulai:
Setb p2.0
Setb Pacc.0
Clr P2.1
Clr acc.1
28
7. PUSH Dan POP
1.Intruksi PUSH digunakan untuk menyimpan operand ke dalam stack. 2.Instruksi pop digunakan untuk mengembalikan nilai operand dan stack.
PUSH 7 PUSH 6
PUSH 5 MOV R7,04H
LoopA: MOV R6,0FFH
LoopB: MOV R5,0FFH
Djnz R5,
Djnz R6,loopB
Djnz R7,loopA
Pop 5
Pop 6
Pop 7
8. JMP, JB, JNB, JZ, JNZ, DAN CJNE
1. JMP JUMPdigunakan untuk melakukan lompatan ke suatu blok program
2. JBjump if bit dan JNBjump if not bit digunakan untuk melakukan lompatan ke suatu blok program jika nilai operand satu bit atau nol not
bit 3. JZ jump If jero dan JNZjump if not jero digunakan untuk melakukan
lompatan ke suatu blok program jika nilai operand 0 jero atau 1 not jero
29 4. CJNEcompare and jump If not equal digunakan untuk melakukan
perbandingan dua operand dan lompat ke blok program lain jika tidak sama.
9. CALL Dan RET
1. Instruksi CALL digunakan untuk memanggil prosedur tertentu dalam program sub program
2. Instruksi RET digunakan untuk mengembalikan ke baris program yang melakukan CALL.
2.6 BEBERAPA ISTILAH DALAM PEMROGRAMAN