BAB 7
BAHASA PEMROGRAMAN MIKROPROSESOR
Pengurangan (SUBB)
Instruksi ini akan mengurangi isi data pada register A dengan sebuah
byte dan dikurangi lagi dengan carry dan hasilnya disimpan di register
A. Mirip dengan penjumlahan, pengurangan hanya bisa melibatkan
register A. Contohnya :
SUBB A, #85H ; register A = register A - 85 Hex - carry
Perkalian (MUL)
Instruksi ini akan mengalikan isi data pada register A dengan register B
dan hasilnya disimpan di register A. Contohnya :
MUL AB ; register A = register A * register B
Pembagian (DIV)
Instruksi ini akan membagi isi data pada register A dengan register B
dan hasilnya disimpan di register A. Contohnya :
DIV AB ; register A = register A/register B (*)
(*) = karena register merupakan tipe byte, maka hasil pembagian akan
selalu bertipe byte atau bilangan bulat.
Selain dari operator aritmatika di atas, ada operator jenis unary yang
termasuk operator aritmatika yaitu :
Penambahan Satu (INC)
INC merupakan singkatan dari Increment, instruksi ini akan menambah
isi data pada destination operand dengan konstanta 1. Contohnya :
INC A ; register A = register A + 1
Pengurangan Satu (DEC)
DEC merupakan singkatan dari decrement, instruksi ini akan
mengurangi isi data pada destination operand dengan konstanta 1.
Contohnya :
DEC A ; register A = register A - 1
CJNE : Instruksi ini membandingkan isi register atau isi memori dengan
sutau data. Jika sama, instruksi baris berikutnya akan dikerjakan, jika
tidak sama maka instruksi yang ditunjuk oleh label akan dikerjakan.
Contoh : CJNE R0, #20, tidak_sama
Keterangan : jika isi register R0 tidak sama dengan 20, maka aliran
program akan menuju ke label tidak_sama
DJNZ : Instruksi ini mengurangi isi register atau memori dengan satu,
jika = 0 maka instruksi baris berikutnya dikerjakan, jika ≠ 0 maka
instruksi diarahkan ke label.
Contoh : DJNZ R0, ulang
Keterangan : isi register R0 dikurangi 1, jika ≠ 0 maka lanjut ke label
ulang
JB : Instruksi ini menguji kondisi suatu bit, jika bit yang diuji = 1 maka
lanjut ke label. Jika bit yang diuji = 0 maka lanjut ke instruksi
berikutnya.
Contoh : JB TF0, ulang
Keterangan : jika bit pada TF0 = 1 maka lanjut ke label ulang
JC : Instruksi ini menguji kondisi carry flag, jika carry flag = 1 maka
lanjut ke label. Jika carry flag = 0 maka lanjut ke instruksi berikutnya.
JZ : Instruksi ini menguji isi register A, jika register A = 0 maka lanjut
ke label. Jika register A ≠ 0 maka lanjut ke instruksi berikutnya.
JNZ : Instruksi ini menguji isi register A, jika register A ≠ 0 maka lanjut
ke label. Jika register A = 0 maka lanjut ke instruksi berikutnya.
Percabangan tidak bersyarat
Beberapa contoh perintah percabangan tidak bersyarat diantaranya
adalah :
SJMP : Instruksi ini langsung mengarahkan aliran program menuju ke
alamat yang ditunjuk.
Contoh : SJMP mulai
Keterangan : menuju ke label mulai
DJNZ
Instruksi ini termasuk perintah unary, yaitu hanya memerlukan satu
operand saja untuk dievaluasi. DJNZ akronim dari decrement and jump
if not zero, terjemahannya : kurangi 1 dan lompat jika tidak nol. Aliran
programnya diperlihatkan seperti gambar 7.4. Sebagai contoh seperti
pada pseudo code berikut :
MOV A, #10
Test_nilai : DJNZ A, Test_nilai
Nol : NOP
Jika dilihat dari diagram alir pada gambar 7.4, maka perintah DJNZ
dapat digunakan untuk mengarahkan program sehingga terjadi looping
selama kondisinya belum terpenuhi, pada contoh program di atas adalah
jika isi register A belum nol maka program akan terus looping.
X1
CRYSTAL
U1 U3 U2
C1 C2 19 39 d0 d0 3 2 a0 a0 8 9 d0
XTAL1 P0.0/AD0 D0 Q0 A0 D0
38 d1 d1 4 5 a1 a1 7 10 d1
22p 22p P0.1/AD1 D1 Q1 A1 D1
37 d2 d2 7 6 a2 a2 6 11 d2
P0.2/AD2 D2 Q2 A2 D2
18 36 d3 d3 8 9 a3 a3 5 13 d3
XTAL2 P0.3/AD3 D3 Q3 A3 D3
35 d4 d4 13 12 a4 a4 4 14 d4
P0.4/AD4 D4 Q4 A4 D4
34 d5 d5 14 15 a5 a5 3 15 d5
P0.5/AD5 D5 Q5 A5 D5
33 d6 d6 17 16 a6 a6 2 16 d6
P0.6/AD6 D6 Q6 A6 D6
9 32 d7 d7 18 19 a7 a7 1 17 d7
VCC RST P0.7/AD7 D7 Q7 A7 D7
a8 23
A8
21 a8 1 a9 22
P2.0/A8 OE A9
22 a9 11 a10 19
P2.1/A9 LE A10
23 a10 a11 21
P2.2/A10 A11
29 24 a11 74HC373
PSEN P2.3/A11
ale 30 25 a12 a12 18
ALE P2.4/A12 CE
31 26 20
EA P2.5/A13 OE/VPP
C3 P2.6/A14
27
10u 28 2732
P2.7/A15
ale
rst p10 1 10
P1.0 P3.0/RXD
p11 2 11
P1.1 P3.1/TXD
p12 3 12
P1.2 P3.2/INT0
R1 p13 4 13
P1.3 P3.3/INT1
p14 5 14
1k P1.4 P3.4/T0
p15 6 15
P1.5 P3.5/T1
p16 7 16
P1.6 P3.6/WR
p17 8 17
P1.7 P3.7/RD
80C31
D7 D6 D5 D4 D3 D2 D1 D0
p17
p16
p15
p14
p13
p12
p11
p10
Gambar 7.5 Port 1 Terhubung ke LED
Sifat open drain pada Port 1 membuat kita harus berpikir secara terbalik,
biasanya logika 1 atau HIGH ekivalen dengan tegangan 5 Volt sehingga
dapat langsung digunakan untuk menyalakan LED. Tapi karena sifat
open drain maka untuk menyalakan LED justru harus diberikan logika
LOW, dan ini hanya berlaku jika LED terhubung secara pull up.
Pada rangkaian gambar 7.6 alamat PPI 8255 dimulai dari 8000 Hex
dan berakhir di 8003 Hex. Karena offset alamatnya menggunakan 16
Bit, maka kode perintah yang digunakan juga harus 16 Bit.
X1
VCC
CRYSTAL
RP?
1
U1 U3 U2
C1 C2 19 39 d0 d0 3 2 a0 a0 8 9 d0 d0 2
XTAL1 P0.0/AD0 D0 Q0 A0 D0
38 d1 d1 4 5 a1 a1 7 10 d1 d1 3
22p 22p P0.1/AD1 D1 Q1 A1 D1
37 d2 d2 7 6 a2 a2 6 11 d2 d2 4
P0.2/AD2 D2 Q2 A2 D2
18 36 d3 d3 8 9 a3 a3 5 13 d3 d3 5
XTAL2 P0.3/AD3 D3 Q3 A3 D3
35 d4 d4 13 12 a4 a4 4 14 d4 d4 6
P0.4/AD4 D4 Q4 A4 D4
34 d5 d5 14 15 a5 a5 3 15 d5 d5 7
P0.5/AD5 D5 Q5 A5 D5
33 d6 d6 17 16 a6 a6 2 16 d6 d6 8
P0.6/AD6 D6 Q6 A6 D6
9 32 d7 d7 18 19 a7 a7 1 17 d7 d7 9
RST P0.7/AD7 D7 Q7 A7 D7
a8 23
A8
21 a8 1 a9 22 RESPACK-8
VCC P2.0/A8 OE A9
22 a9 11 a10 19
P2.1/A9 LE A10
23 a10 a11 21
P2.2/A10 A11
29 24 a11 74HC373
PSEN P2.3/A11
ale 30 25 18
ALE P2.4/A12 CE
31 26 20
EA P2.5/A13 OE/VPP
27
P2.6/A14
28 2732
P2.7/A15
C3
ale
1u 1 10
P1.0 P3.0/RXD U9 U6 RP1
2 11
P1.1 P3.1/TXD
rst 3 12 d0 34 4 1 20 9
P1.2 P3.2/INT0 D0 PA0
4 13 d1 33 3 2 19 8
P1.3 P3.3/INT1 D1 PA1
5 14 d2 32 2 3 18 7
P1.4 P3.4/T0 D2 PA2
R1 6 15 d3 31 1 4 17 6
P1.5 P3.5/T1 D3 PA3
7 16 wr d4 30 40 5 16 5
1k P1.6 P3.6/WR D4 PA4
8 17 rd d5 29 39 6 15 4
P1.7 P3.7/RD D5 PA5
d6 28 38 7 14 3
D6 PA6
80C31 d7 27 37 8 13 2
D7 PA7
DBG_FETCH=1 9 12
rd 5 18 10 11 1
RD PB0
wr 36 19
WR PB1
a0 9 20 LED-BARGRAPH-GRN 330
A0 PB2
a1 8 21
A1 PB3
35 22
RESET PB4
U10:A PB5
23
6 24
CS PB6
1 2 25
PB7
14
7404 PC0
15
PC1
16
PC2
17
PC3
13
PC4
12
PC5
11
PC6
10
PC7
8255A
Brain storming
Penambahan PPI 8255 memang dapat menjadi solusi apabila minimum
sistem kekurangan Port I/O. Namun harus dipertimbangkan juga apakah
penambahan Port tersebut efisien atau tidak. Penambahan PPI berarti
menambah rumit pengkabelan pada sistem minimum, tetapi
memudahkan pemrograman. Sebaliknya jika tidak menambah PPI maka
rangkaian menjadi lebih compact, tetapi mungkin program menjadi lebih
rumit. Setiap penambahan secara hardware dan software memiliki
advantage dan disadvantage masing-masing.