Anda di halaman 1dari 42

MICROCONTROLER

1.1. Organisasi Memori


Semua divais 8051 mempunyai ruang alamat yang terpisah untuk memori program dan
memori data, seperti yang ditunjukkan pada gambar1.1. dan gambar 1.2. Pemisahan secara
logika dari memori program dan data, mengijinkan memori data untuk diakses dengan
pengalamatan 8 bit, yang dengan cepat dapat disimpan dan dimanipulasi dengan P! 8 bit.
Selain itu, pengalamatan memori data 1" bit dapat juga dibangkitkan melalui register #P$%.
&emori program ' %(&, )P%(& dan *+,S- . hanya dapat dibaca, tidak ditulis. &emori
program dapat mencapai sampai "/0 byte. Pada 81S51, /0 byte memori program terdapat
didalam chip. !ntuk membaca memori program eksternal mikrokontroller mengirim sinyal
PS)2 ' program store enable .
3ambar 1.1. #iagram blok mikrokontroller 8051
&emori data ' %,& . menempati ruang alamat yang terpisah dari memori program. Pada
keluarga 8051, 128 byte terendah dari memori data, berada didalam chip. %,& eksternal
'maksimal "/0 byte.. #alam pengaksesan %,& )ksternal, mikrokontroller mingirimkan
sinyal %# ' baca . dan 4% ' tulis ..
3ambar 1.2. ,rsitektur &emori &ikrokontroller 8051
1.1.1. Program Memory
3ambar 1.2. menunjukkan suatu peta bagian ba5ah dari memori program. Setelah reset P!
mulai melakukan eksekusi dari lokasi 0000-. Sebagaimana yang ditunjukkan pada gambar
1.6, setiap interupsi ditempatkan pada suatu lokasi tertentu pada memori program. 7nterupsi
menyebabkan P! untuk melompat ke lokasi dimana harus dilakukan suatu layanan tertentu.
7nterupsi )ksternal 0, sebagi contoh, menempatai lokasi 0006-. 8ika 7nterupsi )ksternal 0
akan digunakan, maka layanan rutin harus dimulai pada lokasi 0006-. 8ika interupsi ini tidak
digunakan, lokasi layanan ini dapat digunakan untuk berbagai keperluan sebagai &emori
Program.
3ambar 1.6. Peta 7nterupsi mikrokontroller 8051
1.1.2 Memory Data
Pada gambar 1.2. menunjukkan ruang memori data internal dan eksternal pada keluarga 8051.
P! membangkitkan sinyal %# dan 4% yang diperlukan selama akses %,& eksternal.
&emori data internal terpetakan seperti pada gambar 1.2. %uang memori dibagi menjadi tiga
blok, yang diacukan sebagai 128 byte lo5er, 128 byte upper dan ruang S*%.
,lamat memori data internal selalu mempunyai lebar data satu byte. Pengalamatan langsung
diatas 9*h akan mengakses satu alamat memori, dan pengalamatan tak langsung diatas 9*h
akan mengakses satu alamat yang berbeda. #emikianlah pada gambar 1./ menunjukkan 128
byte bagian atas dan ruang S*% menempati blok alamat yang sama, yaitu 80h sampai dengan
**h, yang sebenarnya mereka terpisah secara :isik
128 byte %,& bagian ba5ah dikelompokkan lagi menjadi beberapa blok, seperti yang
ditunjukkan pada gambar 1.5. 62 byte %,& paling ba5ah, dikelompokkan menjadi / bank
yang masing;masing terdiri dari 8 register. 7nstruksi program untuk memanggil register;
register ini dinamai sebagai %0 sampai dengan %9. #ua bit pada Program Status 4ord 'PS4.
dapat memilih register bank mana yang akan digunakan. Penggunaan register %0 sampai
dengan %9 ini akan membuat pemrograman lebih e:isien dan singkat, bila dibandingkan
pengalamatan secara langsung.
3ambar 1./. &emori data internal
3ambar 1.5. %,& internal 128 byte paling ba5ah
Semua pada lokasi %,& 128 byte paling ba5ah dapat diakses baik dengan menggunakan
pengalamatan langsung dan tak langsung. 128 byte paling atas hanya dapat diakses dengan
cara tak langsung, gambar 1.".
3ambar 1.". %,& internal 128 byte paling atas
1.1.3. Special Function Register
Sebuah peta memori yang disebut ruang special :unction register ' S*% . ditunjukkan pada
gambar berikut. Perhatikan bah5a tidak semua alamat;alamat tersebut ditempati, dan alamat;
alamat yang tak ditempati tidak diperkenankan untuk diimplementasikan. ,kses baca untuk
alamat ini akan menghasilkan data random, dan akses tulis akan menghasilkan e:ek yang tak
jelas.
,ccumulator
, adalah register akumulator. &nemonik untuk instruksi spesi:ik akumulator ini secara
sederhana dapat disingkat sebagai ,.
%egister <
%egister < digunakan pada saat opersi perkalian dan pembagian. Selain untuk keperluan
tersebut diatas, register ini dapat digunakan untuk register bebas.
Program Status 4ord
%egister PS4 terdiri dari in:ormasi status dari program yang secara detail ditunjukkan pada
$abel 1.1.
Stack Pointer
%egister Pointer stack mempunyai lebar data 8 bit. %egister ini akan bertambah sebelum data
disimpan selama eksekusi push dan call. Sementara stack dapat berada disembarang tempat
%,&. Pointer stack dia5ali di alamat 09h setelah reset. -al ini menyebabkan stack untuk
memulai pada lokasi 08h.
#ata Pointer
Pointer #ata '#P$%. terdiri dari byte atas '#P-. dan byte ba5ah '#P+.. *ungsi ini ditujukan
untuk menyimpan data 1" bit. #apat dimanipulasi sebagai register 1" bit atau dua 8 bit
register yang berdiri sendiri.
3ambar 1.9. Peta S*%
Ports 0, 1, 2 dan 6
P0, P1, P2 dan P6 adalah S*% yang ditempati oleh Port 0, 1, 2 dan 6. &enulis suatu logika 1
terhadap sebuah bit dari sebuah port S*% ' P0, P1, P2 atau P6. menyebabkan pin output port
yang bersesesuaian akan berada dalam kondisi logika high =1>. #an sebaliknya
<u::er #ata Serial
<u::er serial sesungguhnya merupakan dua buah register yang terpisah, bu::er pemancar dan
bu::er penerima. 0etika data diisikan ke S<!*, maka akan menuju ke bu::er pemancar dan
ditahan untuk proses transmisi. 0etika data diambil dari S<!*, maka akan berasal dari bu::er
penerima.
%egisters $imer
Pasangan register ' $-0, $+0. dan '$-1, $+1. adalah register pencacah 1" bit untuk $imer?
ounter 0 dan 1, masing;masing.
%egister ontrol
%egisters 7P, 7), $&(#, $(2, S(2, dan P(2 terdiri dari bit control dan status.
Program Status 4ord
PS4 atau Program Status 4ord berisi bit;bit status yang berkaitan dengan kondisi atau
keadaan P! mikrokontroler pada saat tersebut. PS4 berada dalam lokasi ruang S*%
' perhatikan pada gambar 1.1, dengan lokasi alamat #0h .. Pada PS4 ini kita dapat
memantau beberapa status yang meliputi@ carry bit, auAiliary carry ' untuk operasi <# .,
dua bit pemilih bank register, :lag over:lo5, sebuah bit paritas dan dua :lag status yang bisa
didi:inisikan sendiri. <it carry dapat juga anda guakan pada keperluan operasi aritmatika,
juga bisa digunakan sebagai universal akumulator untuk beberapa operasi boolean.
$able 1.2.1 Program Status 4ord
&S< +S<
B , *0 %S1 %S0 (C ; P

BIT SYMBO F!"#TIO"
PS4.9 B arry :lag.
PS4." , ,uAilliary arry :lag. '*or <# operations..
PS4.5 *0 *lag 0. ',vailable to the user :or general purposes..
PS4./ %S1
%egister bank select control bit 1.
Set?cleared by so:t5are to determine 5orking register bank.
'See 2ote..
PS4.6 %S0
%egister bank select control bit 0.
Set?cleared by so:t5are todetermine 5orking register bank. 'See
2ote..
PS4.2 (C (ver:lo5 :lag.
PS4.1 ; !ser;de:inable :lag.
PS4.0 P
Parity :lag.
Set?cleared by hard5are each instruction cycle to indicate an
odd?even number o: DoneE bits in the ,ccumulator, i.e., even
parity.
<it %S0 dan %S1 dapat digunakan untuk memilih satu dari empat bank register sebagaimana
ditunjukkan pada tabel 11.2. <it paritas dapat digunakan untuk mengetahuai jumlah logika F1F
pada akumulator@ PG1 bila pada akumulator mempunyai logika F1F yang jumlahnya ganjil, dan
PG0 jika akumulator mempunyai logika F1F yang jumlahnya genap. #ua bit yang lain PS41
dan PS45 dapat digunakan untuk berbagai macam tujuan
$abel 1. 2. ,lamat rekening bank
RS1 RS$ Ban% &''ress R&M
0 0 0 00 h ; 09 h
0 1 1 08 h ; 0* h
1 0 2 10 h ; 19 h
1 1 6 18 h ; 1* h
1.2. Pengalamatan
&ode pengalamatan, mengacu bagaimana anda mengalamati suatu lokasi memori tertentu
&ode pengalamatan pada set instruksi 8051 adalah ditunjukkan sebagai berikut
7mmediate ,ddressing &(C ,,H20h
#irect ,ddressing &(C ,,60h
7ndirect ,ddressing &(C ,,I%0
%egister ,ddressing &ode@ &(C ,,%0
)Aternal #irect &(CJ ,,I#P$%
ode 7ndirect &(C ,,I,K#P$%
Jch ,,%0
1.2.1 Imme'iate &''ressing (segera)
7mmediate addressing dinamakan seperti ini, karena nilai yang akan disimpan didalam
memori, secara langsung berada dalam kode.
org 0h
start:MOV A,#20h; put constant 20 into Acc
end
Org 0h
Start:MOV 70h,#0h; put constant 0 into RAM 70h
MOV 71h,#1h;
MOV 72h,#2h;
end
;
Org 0h
Start:MOV DPR,#12!"h;put constant 12!" into DPR
end
Org 0h
Start:MOV PS#,#0; Se$ect register %an& 0
MOV R0,#0; put 0 into register 0
MOV R1,#1; put 1 into register 1
MOV R2,#2; put 2 into register 2
MOV R!,#!; put ! into register !
MOV R",#"; put " into register "
MOV R',#'; put ' into register '
MOV R(,#(; put ( into register (
MOV R7,#7; put 7 into register 7
end
;
org 0h
Start:MOV PS#,#); Se$ect register %an& 1
MOV R0,#0; put 0 into register 0
MOV R1,#1; put 1 into register 1
MOV R2,#2; put 2 into register 2
MOV R!,#!; put ! into register !
MOV R",#"; put " into register "
MOV R',#'; put ' into register '
MOV R(,#(; put ( into register (
MOV R7,#7; put 7 into register 7
end
7mmediate addressing adalah pengalamatan yang sangat cepat karena nilai yang akan
diloadkan berada didalam instruksi tersebut.
1.2.2. Direct &''ressing
#isebut direct addressing karena nilai yang akan disimpan didalam memori, diperoleh secara
langsung dari memori yang lain.
org 0h
Start:MOV A,!0h;
end
Org 0h
Start:Mo* 70h,#1;put constant 1 into RAM 70h
Mo* A, 70h;cop+ RAM 70 content into Acc
Mo* A,#0 ;put constant 0 into Acc
Mo* ,0h,A ;cop+ Acc content into RAM ,0h
end
-n%+te e.u 70h
Port1 e.u ,0h
Org 0h
Start:Mo* -n%+te,#!;put constant ! into RAM 70h
Mo* A,-n%+te ;cop+ RAM 70h content into Acc
Mo* A,#0 ;/$ear accu0u$ator
Mo* Port1,A ;cop+ Acc content into RAM ,0h
end
Org 0h
Mo* DPR,#/haracter
Start:Mo* A, #0
-nc DPR
Mo*c A, 1A2DPR
Mo* R0,A
S30p Start
/haracter:
D4 0,1,2,!,",',(,7,),,
1.2.3 In'irect &''ressing
7ndirect addressing adalah mode pengalamatan yang sangat ampuh, yang memberikan
:leksibelitas dalam hal trans:er data. 7ndirect addressing juga satu;satunya cara untuk
mengakses 128 byte ekstra dari internal %,& yang ditemukan pada keluarga 8052.
&(C ,,I%0
7nstruksi ini menyebabkan 8051 menganalisa nilai dari register %0. 8051 kemudian akan
mengambil data dari akumulator dengan nilai yang berasal dari alamat %,& internal yang
ditunjukkan oleh %0. Sebagai contoh, misal %0 akan digunakan untuk menandai alamat %,&
/0h yang berisi data "9h. 0etika instruksi diatas, dieksekusi maka 8051 akan melihat nilai
dari %0, yang berisi /0h, dan mengirimkan isi %,& /0h 'dalam hal ini mempunyai nilai "9h.
ke akumulator.
&(C %0,H11h L
&(C I%0,H01hL
7nstruksi tersebut adalah tidak valid. 0arena indirect addressing selalu mengacu ke %,&
internal, dua instruksi ini akan menulis nilai 01 ke %,& internal alamat 11h pada 8052. Pada
8051 instruksi tersebut akan menghasilkan hasil yang tak terdi:inisi, karena 8051 hanya
mempunyai internal %,& 128 byte
Org 0h
Start:Mo* PS#, #0 ; choose register %an& 0
Mo* R0, #7)h; put constant 7)h into R0
Mo* 1R0, #1 ; put contanta 1 into 7)h
end
Org 0h
Start:Mo* PS#,#0; pi$ih register %an& 1
Mo* R0,,0h; cop+ RAM ,0h content into R0
Mo* 1R0,#1; put constant 1 into ,0h
5nd
;
1.3. Set Instru%si
Program pengendali mikrokontroler disusun dari kumpulan instruksi, instruksi tersebut setara
dengan kalimat perintah bahasa manusia yang hanya terdiri atas predikat dan objek. #engan
demikian tahap pertama pembuatan program pengendali mikrokontroler dimulai dengan
pengenalan dan pemahaman predikat 'kata kerja. dan objek apa saja yang dimiliki
mikrokontroler.
(bjek dalam pemrograman mikrokontroler 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. 0ombinasi dari =kata kerja> dan objek
itulah yang membentuk perintah pengatur kerja mikrokontroler.
7ntruksi &(C ,,M9* merupakan contoh sebuah intruksi dasar yang sangat spesi:ik, &(C
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 M9* di;copy;kan ke ,kumulator ,.
Penyebutan data dalam &S51
#ata bisa berada diberbagai tempat yang berlainan, dengan demikian dikenal beberapa cara
untuk menyebut data 'dalam bahasa 7nggris sering disebut sebagai =,ddressing &ode>.,
antara lain sebagai berikut.
1. Penyebutan data konstan 'immediate addressing mode.@ &(C ,,HM20. #ata konstan
merupakan data yang berada di dalam instruksi. ontoh instruksi ini mempunyai makna data
konstan M20 'sebagai data konstan ditandai dengan =H>. di;copy;kan ke ,kumulator ,. Bang
perlu benar;benar diperhatikan dalam perintah ini adalah bilangan M20 merupakan bagian dari
instruksi.
2. Pnyebutan 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 @ &(C ,,M60. ontoh instruksi ini mempunyai makna data yang berada di
dalam memori nomor M60 di;copy;kan ke ,kumulator. Sekilas intruksi ini sama dengan
instruksi data konstan di atas, perbedaannya instruksi di atas memakai tanda =H> yang
menandai M20 adalah data konstan, sedangkan dalam instruksi ini karena tidak ada tanda =H>
maka M60 adalah nomor dari memori.
6. 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 @ &(C ,,I%0.
/. #alam instruksi ini register serba guna %0 dipakai untuk mencatat nomor memori,
sehingga instruksi ini mempunyai makna memori yang nomornya tercatat dalam %0 isinya di;
copy;kan ke ,kumulator ,.
5. $anda =I> dipakai untuk menandai nomor memori disimpan di dalam %0.
". <andingkan dengan instruksi penyebutan nomor memori secara langsung di atas, dalam
instruksi ini nomor memori terlebih dulu disimpan di %0 dan %0 berperan menunjuk memori
mana yang dipakai, sehingga kalau nilai %0 berubah memori yang ditunjuk juga akan
berubah pula.
9. #alam instruksi ini register serba guna %0 ber:ungsi dengan register penampung alamat
'indirect address register., selain %0 register serba guna %1 juga bisa dipakai sebagai register
penampung alamat.
8. Penyebutan data dalam register 'register addressing mode.@ &(C ,,%5. 7nstruksi ini
mempunyai makna data dalam register serba guna %5 di;copy;kan ke ,kumulator ,.
7nstruksi ini membuat register serba guna %0 sampai %9 sebagai tempat penyimpan data yang
sangat praktis yang kerjanya sangat cepat.
1. #ata yang dimaksud dalam bahasan di atas semuanya berada di dalam memori data
'termasuk register serba guna letaknya juga di dalam memori data.. #alam penulisan
program, sering;sering diperlukan tabel baku yang disimpan bersama dengan program
tersebut. $abel semacam ini sesungguhnya merupakan data yang berada di dalam memori
programN
10. !ntuk keperluan ini, &S51 mempunyai cara penyebutan data dalam memori program
yang dilakukan secara indirect 'code indirect addressing mode. @ &(C ,,I,K#P$%.
Perhatikan dalam instruksi ini &(C digantikan dengan &(C, tambahan huru: tersebut
dimaksud untuk membedakan bah5a instruksi ini dipakai di memori program. '&(C tanpa
huru: artinya instruksi dipakai di memori data..
$anda =I> dipakai untuk menandai ,K#P$% dipakai untuk menyatakan nomor memori yang
isinya di;copy;kan ke ,kumulator ,, dalam hal ini nilai yang tersimpan dalam #P$% '#ata
Pointer %egister ; 2 byte. ditambah dengan nilai yang tersimpan dalam ,kumulator , '1 byte.
dipakai untuk menunjuk nomor memori program.
Secara keseluruhan ,$8151 mempunyai sebanyak 255 macam instruksi, yang dibentuk
dengan mengkombinasikan =kata kerja> dan objek. D0ata kerja> tersebut secara kelompok
dibahas sebagai berikut @
1.3.1 Instru%si copy 'ata
0ode dasar untuk kelompok ini adalah &(C, singkatan dari &(C) yang artinya
memindahkan, meskipun demikian lebih tepat dikatakan perintah ini mempunyai makna
peng;copy;an data. -al ini bisa dijelaskan berikut @ setelah instruksi &(C ,,%9 dikerjakan,
,kumulator , dan register serba guna %9 berisikan data yang sama, yang asalnya tersimpan
di dalam %9.
Perintah &(C dibedakan sesuai dengan jenis memori ,$81A051. Perintah ini pada memori
data dituliskan menjadi &(C, misalkan @
&(C ,,M20
&(C ,,I%1
&(C ,,P1
&(C P6,,
!ntuk pemakaian pada memori program, perintah ini dituliskan menjadi &(C, hanya ada 2
jenis instruksi yang memakai &(C, yakni@
&(C ,,I,K#P$% L #P$% sebagai register indirect
&(C ,,I,KP L P sebagai register indirect
Selain itu, masih dikenal pula perintah &(CJ, yakni perintah yang dipakai untuk memori
data eksternal 'J singkatakan dari )Aternal.. Perintah ini hanya dimiliki oleh anggota
keluarga &S51 yang mempunyai memori data eksternal, misalnya ,$8151 dan lain
sebagainya, dan jelas tidak dikenal oleh kelompok ,$81A051 yang tidam punya memori
data eksternal. -anya ada " macam instruksi yang memakai &(CJ, instruksi;instruksi
tersebut adalah@
&(CJ ,,I#P$%
&(CJ ,,I%0
&(CJ ,,I%1
&(CJ I#P$%,,
&(CJ I%0,,
&(CJ I%1,,
Mnemonic Operation
&''ressing Mo'e *+ect.
Dir In' Reg Imm Timer uS
&ov ,,OsrcP ,GOsrcP C C C C 1
&ov OdestP,, OdestPG, C C C C 1
&ov OdestP,
OsrcP
OdestPGOsrcP C C C C 1
&ov
#P$%,Hdata1"
#P$%G1" bit
immediate const
,ccumulator (nly 1
Push OsrcP 7nc SP C C C 1
Pop OsrcP #ec SP #ata Pointer (nly 2
Jch ,,ObyteP
,cc and ObyteP
eAchange data
,ccumulator (nly 1
Jchd ,,I%i
,cc and I%i
eAchange lo5 nibbles
C C C 1
1.3.2 Instru%si &ritmati%a
Perinta, &DD 'an &DD#
7si ,kumulator , ditambah dengan bilangan 1 byte, hasil penjumlahan akan ditampung
kembali dalam ,kumulator. #alam operasi ini bit arry ' :lag dalam PS4 Q Program Status
4ord. ber:ungsi sebagai penampung limpahan hasil penjumlahan. 8ika hasil penjumlahan
tersebut melimpah 'nilainya lebih besar dari 255. bit arry akan bernilai =1>, kalau tidak bit
arry bernilai =0>. ,## sama dengan ,##, hanya saja dalam ,## nilai bit arry dalam
proses sebelumnya ikut dijumlahkan bersama.
<ilangan 1 byte yang ditambahkan ke ,kumulator, 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 @
,## ,,%0 L register serba guna
,## ,,26 L bilangan konstan
,## ,,I%0 L no memori tak langsung
,## ,,P1 L no memori langsung 'port 1.
Perinta, S!BB
7si ,kumulator , dikurangi dengan bilangan 1 byte berikut dengan nilai bit arry, hasil
pengurangan akan ditampung kembali dalam ,kumulator. #alam operasi ini bit arry juga
ber:ungsi sebagai penampung limpahan hasil pengurangan. 8ika hasil pengurangan tersebut
melimpah 'nilainya kurang dari 0. bit arry akan bernilai =1>, kalau tidak bit arry bernilai
=0>.
S!<< ,,%0 L , G , ; %0 ;
S!<< ,,HM26 L , G , ; M26
S!<< ,,I%1
S!<< ,,P0
Perinta, D&
Perintah #, '#ecimal ,djust. dipakai setelah perintah ,##L ,## atau S!<<, dipakai
untuk merubah nilai biner 8 bit yang tersimpan dalam ,kumulator menjadi 2 buah bilangan
desimal yang masing;masing terdiri dari nilai biner / bit.
Perinta, M! &B
<ilangan biner 8 bit dalam ,kumulator , dikalikan dengan bilangan biner 8 bit dalam
register <. -asil perkalian berupa bilangan biner 1" bit, 8 bit bilangan biner yang bobotnya
lebih besar ditampung di register <, sedangkan 8 bit lainnya yang bobotnya lebih kecil
ditampung di ,kumulator ,.
<it (C dalam PS4 'Program Status 4ord. dipakai untuk menandai nilai hasil perkalian yang
ada dalam register <. <it (C akan bernilai =0> jika register < bernilai M00, kalau tidak bit (C
bernilai =1>.
&(C ,,H10
&(C <,H20
&!+ ,<
Perinta, DI- &B
<ilangan biner 8 bit dalam ,kumulator , dibagi dengan bilangan biner 8 bit dalam register <.
-asil pembagian berupa bilangan biner 8 bit ditampung di ,kumulator, sedangkan sisa
pembagian berupa bilangan biner 8 bit ditampung di register <.
<it (C dalam PS4 'Program Status 4ord. dipakai untuk menandai nilai sebelum pembagian
yang ada dalam register <. <it (C akan bernilai =1> jika register < asalnya bernilai M00.
$able 1.6. 7nstruksi ,ritmatika
Mnemonic Operation
&''ressing Mo'e *+ect.
Dir In' Reg Imm Timer uS
,dd ,,ObyteP ,G,KObyteP C C C C 1
,ddc ,,ObyteP ,G,KObytePK C C C C 1
Subb ,,ObyteP ,G,;ObyteP; C C C C 1
7nc , ,G,K1 ,ccumulator (nly 1
7nc ObyteP ObytPGObytPK1 C C C 1
7nc #P$% #P$%G#P$%K1 #ata Pointer (nly 2
#ec , ,G,;1 ,ccumulator (nly 1
#ec ObyteP ObytPGObytP;1 C C C 1
&ul ,< <@,G<A, ,ccumulator and < (nly /
#iv ,<
,G7ntR,?<S
<G&odR,?<S
,ccumulator and < only /
#, , #ec ,djust ,ccumulator (nly 1
1.3.3 Instru%si ogi%a
0elompok perintah ini dipakai untuk melakukan operasi logika mikrokontroler &S51,
operasi logika yang bisa dilakukan adalah operasi ,2# 'kode operasi ,2+., operasi (%
'kode operasi (%+. dan operasi )Aclusive;(% 'kode operasi J%+..
#ata yang dipakai dalam operasi ini bisa berupa data yang berada dalam ,kumulator atau
data yang berada dalam memori;data, hal ini sedikit berlainan dengan operasi aritmatik yang
harus melihatkan ,kumulator secara aktip.
-asil operasi ditampung di sumber data yang pertama.
1. (perasi logika ,2# 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;,2+;kan bilangan asal. <it yang ingin di;=0>;kan di5akili dengan =0> pada
data konstan, sedangkan bit lainnya diberi nilai =1>, misalnya. 7nstruksi ,2+ P1,HT01111110
akan mengakibatkan bit 0 dan bit 9 dari Port 1 'P1. bernilai =0> sedangkan bit;bit lainnya
tetap tidak berubah nilai.
2. (perasi logika (% 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;(%+;kan bilangan asal. <it yang ingin di;=1>;kan di5akili dengan =1> pada
data konstan, sedangkan bit lainnya diberi nilai =0>, misalnya @7nstruksi (%+ ,,HT01111110
akan mengakibatkan bit 1 sampai dengan bit " dari ,kumulator bernilai =1> sedangkan bit;bit
lainnya tetap tidak berubah nilai.
6. (perasi logika )Aclusive;(% 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;J%+;kan bilangan asal. <it yang ingin
dibalik;nilai di5akili dengan =1> pada data konstan, sedangkan bit lainnya diberi nilai =0>,
misalnya@ 7nstruksi J%+ ,,HT01111110 akan mengakibatkan bit 1 sampai dengan bit " dari
,kumulator berbalik nilai, sedangkan bit;bit lainnya tetap tidak berubah nilai.
Mnemonic Operation
&''ressing Mo'e *+ect.
Dir In' Reg Imm Timer uS
,nl ,,ObyteP ,G, and ObyteP C C C C 1
,nl ObyteP,, ObytePGObytePanl , C C C C 1
,nl ObyteP,Hdata ObytePGObytePand Hdata C C C C 1
(rl ,,ObyteP ,G, or ObyteP ,ccumulator (nly 1
(rl ObyteP,, ObytPGObytPorl , C C C 1
(rl ObyteP,Hdata ObytePGObyteP or Hdata #ata Pointer (nly 2
Jrl ,,ObyteP ,G, AorObyteP ,ccumulator (nly 1
JrlObyteP,, ObytPGObytPAor , C C C 1
Jrl ObyteP,Hdata ObytePGObytePAor Hdata ,ccumulator and < (nly /
+% , ,G00h ,ccumulator only 1
P+ , ,G not , ,ccumulator only 1
%+ , %otate , le:t 1 bit ,ccumulator only 1
%+ ,
%otate , le:t trough
arry
,ccumulator only 1
%% , %otate , right 1 bit ,ccumulator only 1
%%
%otate , right trough
carry
,ccumulator only 1
S4,P , S5ap nibbles in , ,ccumulator only 1
(perasi logika pada umumnya mencakup empat hal, yaitu operasi ,2#, operasi (%, operasi
)J;(% dan operasi 2($. &S51 hanya bisa melaksanakan tiga jenis operasi logika yang
ada, yakni intruksi ,2+ ',2# +ogical. untuk operasi ,2# instruksi (%+ '(% +ogical.
untuk operasi (%, P+ 'omplement bit. untuk operasi 2($.
<it arry pada PS4 diperlakukan sebagai =akumulator bit>, dengan demikian operasi ,2#
dan operasi (% dilakukan antara bit yang tersimpan pada bit arry dengan salah satu dari
25" bit data yang dibahas di atas. ontoh dari instruksi;instruksi ini adalah @
,2+ ,P1.1
,2+ ,?P1.2
7nstruksi ,2+ ,P1.1 meng;,2#;kan nilai pada bit arry dengan nilai Port 1 bit 1 'P1.1.,
dan hasil operasi tersebut ditampung pada bit arry. 7nstruksi ,2+ ,?P1.1 persis sama
dengan instruksi sebelumnya, hanya saja sebelum di;,2#;kan, nilai P1.1 dibalik
'complemented. lebih dulu, jika nilai P1.1G=0> maka yang di;,2#;kan dengan bit arry
adalah =1>, demikian pula sebaliknya. -al serupa berlaku pada instruksi (%+.
7nstruksi P+ dipakai untuk membalik 'complement. nilai semua 25" bit data yang dibahas
di atas. &isalnya @
P+
P+ P1.0
P+ akan membalik nilai biner dalam bit arry 'jangan lupa bit arry merupakan salah
satu bit yang ada dalam 25" bit yang dibahas di atas, yakni bit nomor M)9 atau PS4.9..
1.3.. Instru%si ompatan
Pada dasarnya program dijalankan intruksi demi instruksi, artinya selesai menjalankan satu
instruksi mikrokontroler langsung menjalankan instruksi berikutnya, untuk keperluan ini
mikrokontroler dilengkapi dengan Program ounter yang mengatur pengambilan intruksi
secara berurutan. &eskipun demikian, program yang kerjanya hanya berurutan saja tidaklah
banyak artinya, untuk keperluan ini mikrokontroler dilengkapi dengan instruksi;instruksi
untuk mengatur alur program.
Secara umum kelompok instruksi yang dipakai untuk mengatur alur program terdiri atas
instruksi;instruksi 8!&P 'setara dengan statemen 3($( dalam Pascal., instruksi;instruksi
untuk membuat dan memakai sub;rutin?modul 'setara dengan P%()#!%) dalam Pascal.,
instruksi;instruksi 8!&P bersyarat 'conditional 8ump, setara dengan statemen 7* .. $-)2
dalam Pascal.. #i samping itu ada pula instruksi P!S- dan P(P yang bisa memengaruhi alur
program.
0arena Program ounter adalah satu;satunya register dalam mikrokontroler yang mengatur
alur program, maka kelompok instruksi pengatur program yang dibicarakan di atas,
semuanya merubah nilai Program ounter, sehingga pada saat kelompok instruksi ini
dijalankan, nilai Program ounter akan tidak akan runtun dari nilai instruksi sebelumnya.
Selain karena instruksi;instruksi di atas, nilai Program ounter bisa pula berubah karena
pengaruh perangkat keras, yaitu saat mikrokontroler di;reset atau menerima sinyal interupsi
dari perangkat input?output. -al ini akan dibicarakan secara detail dibagian lagi.
&ikrokontroler menjalankan intruksi demi instruksi, selesai menjalankan satu instruksi
mikrokontroler langsung menjalankan instruksi berikutnya, hal ini dilakukan dengan cara
nilai Program ounter bertambah sebanyak jumlah byte yang membentuk instruksi yang
sedang dijalankan, dengan demikian pada saat instruksi bersangkutan dijalankan Program
ounter selalu menyimpan nomor memori;program yang menyimpan instruksi berikutnya.
Pada saat mikrokontroler menjalankan kelompok instruksi 8!&P, nilai Program ounter
yang runtun sesuai dengan alur program diganti dengan nomor memori;program baru yang
dikehendaki programer.
&ikrokontroler &S51 mempunyai 6 macam intruksi 8!&P, yakni instruksi +8&P '+ong
8ump., instruksi ,8&P ',bsolute 8ump. dan instruksi S8&P 'Short 8ump.. 0erja dari ketiga
instruksi ini persis sama, yakni memberi nilai baru pada Program ounter, kecepatan
melaksanakan ketiga instruksi ini juga persis sama, yakni memerlukan 5aktu 2 periode
instruksi 'jika &S51 bekerja pada :rekuensi 12 &-U, maka instruksi ini dijalankan dalam
5aktu 2 mikro;detik., yang berbeda dalam jumlah byte pembentuk instruksinya, instruksi
+8&P dibentuk dengan 6 byte, sedangkan instuksi ,8&P dan S8&P cukup 2 byte.
Instru%si /MP
0ode untuk instruksi +8&P adalah M02, nomor memori;program baru yang dituju dinyatakan
dengan bilangan biner 1" bit, dengan demikian instruksi ini bisa menjangkau semua memori;
program &S51 yang jumlahnya "/ 0ilo<yte. 7nstruksi +8&P terdiri atas 6 byte, yang bisa
dinyatakan dengan bentuk umum 02 aa aa, aa yang pertama adalah nomor memori;program
bit 8 sampai dengan bit 15, sedangkan aa yang kedua adalah nomor memori;program bit 0
sampai dengan bit 9.
Pemakaian instruksi +8&P bisa dipelajari dari potongan program berikut @
+8&P $ugas<aru
V
(%3 M2000
$ugas<aru@
&(C ,,P6.1
#alam potongan program di atas, (%3 adalah perintah pada assembler agar berikutnya
assembler bekerja pada memori;program nomor yang disebut di belakang (%3 'dalam hal
ini minta assembler berikutnya bekerja pada memori;program nomor M2000.. $ugas<aru
disebut sebagai +,<)+, yakni sarana assembler untuk menandai? menamai nomor memori;
program. #engan demikian, dalam potongan program di atas, memori;program nomor M2000
diberi nama $ugas<aru, atau bisa juga dikatakan bah5a $ugas<aru bernilai M2000. 'atatan @
+,<)+ ditulis minimal satu huru: lebih kiri dari instruksi, artinya +,<)+ ditulis setelah
menekan tombol )nter, tapi instruksi ditulis setelah menekan tombol )nter, kemudian diikuti
dengan 1 tombol spasi atau tombol $,<..
#engan demikian intruksi +8&P $ugas<aru di atas, sama artinya dengan +8&P M2000 yang
oleh assembler akan diterjemahkan menjadi 02 20 00 'heksadesimal..
Instru%si &/MP
2omor memori;program baru yang dituju dinyatakan dengan bilangan biner 11 bit, dengan
demikian instruksi ini hanya bisa menjangkau satu daerah memori;program &S51 sejauh 2
0ilo<yte. 7nstruksi ,8&P terdiri atas 2 byte, byte pertama merupakan kode untuk instruksi
,8&P '00001b. yang digabung dengan nomor memori;program bit nomor 8 sampai dengan
bit nomor 10, byte kedua dipakai untuk menyatakan nomor memori;program bit nomor 0
sampai dengan bit nomor 9.
<erikut ini adalah potongan program untuk menjelaskan pemakaian instruksi ,8&P@
(%3 M800
,8&P #aerah7ni
,8&P #aerah+ain
(%3 M100
#aerah7ni@
. . .
(%3 M1000
#aerah+ain@
. . .
Potongan program di atas dimulai di memori;program nomor M800, dengan demikian
instruksi ,8&P #aerah7ni bisa dipakai, karena nomor;memori M800 'tempat instruksi ,8&P
#aerah7ni. dan +,<)+ #aerah7ni yang terletak di dalam satu daerah memori;progam 2
0ilo<yte yang sama dengan. '#ikatakan terletak di dalam satu daerah memori;program 2
0ilo<yte yang sama, karena bit nomor 11 sampai dengan bit nomor 15 dari nomor
memorinya sama..
$api ,8&P #aerah+ain akan di;salah;kan oleh ,ssembler, karena #aerah+ain yang terletak
di memori;program nomor M1000 terletak di daerah memori;program 2 0ilo<yte yang lain.
0arena instruksi ,8&P hanya terdiri dari 2 byte, sedangkan instruksi +8&P 6 byte, maka
memakai instruksi ,8&P lebih hemat memori;program dibanding dengan +8&P. -anya saja
karena jangkauan instrusksi ,8&P hanya 2 0ilo<yte, pemakaiannya harus hati;hati.
&emori;program 7 mikrokontroler ,$811051 dan ,$812051 masing;masing hanya 1
0ilo<yte dan 2 0ilo<yte, dengan demikian program untuk kedua mikrokontroler di atas tidak
perlu memakai instruksi +8&P, karena program yang ditulis tidak mungkin menjangkau lebih
dari 2 0ilo<yte memori;program.
Instru%si S/MP
2omor memori;program dalam instruksi ini tidak dinyatakan dengan nomor memori;program
yang sesungguhnya, tapi dinyatakan dengan =pergeseran relatip> terhadap nilai Program
ounter saat instruksi ini dilaksanakan.
Pergeseran relatip tersebut dinyatakan dengan 1 byte bilangan 2>s complement, yang bisa
dipakai untuk menyakatakan nilai antara Q128 sampai dengan K129. 2ilai minus dipakai
untuk menyatakan bergeser ke instruksi;instruksi sebelumnya, sedangkan nilai positip untuk
menyatakan bergeser ke instruksi;instruksi sesudahnya.
&eskipun jangkauan instruksi S8&P hanya Q128 sampai K129, tapi instruksi ini tidak dibatasi
dengan pengertian daerah memori;program 2 0ilo<yte yang membatasi instruksi ,8&P.
(%3 M0*80
S8&P #aerah+ain
. . .
(%3 M1000
#aerah+ain@
#alam potongan program di atas, memori;program M0*80 tidak terletak dalam daerah
memori;program 2 0ilo<yte yang sama dengan M1000, tapi instruksi S8&P #aerah+ain tetap
bisa dipakai, asalkan jarak antara instruksi itu dengan +,<)+ #aerah+ain tidak lebih dari
129 byte.
Instru%si su01rutin
7nstruksi;instruksi untuk membuat dan memakai sub;rutin?modul program, selain melibatkan
Program ounter, melibatkan pula Stack yang diatur oleh %egister Stack Pointer.
Sub;rutin merupakan suatu potong program yang karena berbagai pertimbangan dipisahkan
dari program utama. <agian;bagian di program utama akan =memanggil> ',++. sub;rutin,
artinya mikrokontroler sementara meninggalkan alur program utama untuk mengerjakan
instruksi;instruksi dalam sub;rutin, selesai mengerjakan sub;rutin mikrokontroler kembali ke
alur program utama.
Satu;satunya cara membentuk sub;rutin adalah memberi instruksi %)$ pada akhir potongan
program sub;rutin. Program sub;rutin di;>panggil> dengan instruksi ,,++ atau +,++.
,gar nantinya mikrokontroler bisa meneruskan alur program utama, pada saat menerima
instruksi ,,++ atau +,++, sebelum mikrokontroler pergi mengerjakan sub;rutin, nilai
Program ounter saat itu disimpan dulu ke dalam Stack 'Stack adalah sebagian kecil dari
memori;data yang dipakai untuk menyimpan nilai Program ounter secara otomatis, kerja
dari Stack dikendalikan oleh %egister Stack Poiner..
Selanjutnya mikrokontroler mengerjakan instruksi;instruksi di dalam sub;rutin sampai
menjumpai instruksi %)$ yang ber:ungsi sebagai penutup dari sub;rutin. Saat menerima
instruksi %)$, nilai asal Program ounter sebelum mengerjakan sub;rutin yang disimpan di
dalam Stack, dikembalikan ke Program ounter sehingga mikrokontroler bisa meneruskan
pekerjaan di alur program utama.
7nstruksi ,,++ dipakai untuk me;=manggil> program sub;rutin dalam daerah memori;
program 2 0ilo<yte yang sama, setara dengan instruksi ,8&P yang sudah dibahas di atas.
Sedangkan instruksi +,++ setara dengan instruksi +,++, yang bisa menjangkau seluruh
memori;program mikrokontroler &S51 sebanyak "/ 0ilo<yte. '$api tidak ada instrusk
S,++ yang setara dengan instruksi S8&P..
Program untuk ,$811051 dan ,$812051 tidak perlu memakai instruksi +,++.
7nstruksi %)$ dipakai untuk mengakhiri program sub;rutin, di samping itu masih ada pula
instruksi %)$7, yakni instruksi yang dipakai untuk mengakhiri Program +ayanan 7nterupsi
'7nterrupt Service %outine., yaitu semacam program sub;rutin yang dijalankan
mikrokontroler pada saat mikrokontroler menerima sinyal permintaan interupsi.
atatan @ Saat mikrokontroler menerima sinyal permintaaan interupsi, mikrokontroler akan
melakukan satu hal yang setara dengan intruksi +,++ untuk menjalankan Program
+ayanan 7nterupsi dari sinyal interupsi bersangkutan. #i samping itu, mikrokontroler juga
me;=mati>;kan sementara mekanisme layanan interupsi, sehingga permintaan interupsi
berikutnya tidak dilayani. Saat menerima instruksi %)$7, makanisme layanan interusi
kembali diaktipkan dan mikrokontroler melaksanakan hal yang setara dengan instruksi %)$.
Instru%si ompatan Bersyarat
7nstruksi 8ump bersyarat merupakan instruksi inti bagi mikrokontroler, tanpa kelompok
instruksi ini program yang ditulis tidak banyak berarti. 7nstruksi;instruksi ini selain
melibatkan Program ounter, melibatkan pula kondisi;kondisi tertentu yang biasanya dicatat
dalam bit;bit tertentu yang dihimpun dalam %egister tertentu.
0husus untuk keluarga mikrokontroler &S51 yang mempunyai kemampuan menangani
operasi dalam level bit, instruksi jump bersyarat dalam &S51 dikaitkan pula dengan
kemampuan operasi bit &S51.
2omor memori;program baru yang harus dituju tidak dinyatakan dengan nomor memori;
program yang sesungguhnya, tapi dinyatakan dengan =pergeseran relatip> terhadap nilai
Program ounter saat instruksi ini dilaksanakan. ara ini dipakai pula untuk instruksi S8&P.
Instru%si /2 3 /"2
7nstruksi 8W '8ump i: Wero. dan instruksi 82W '8ump i: not Wero. adalah instruksi 8!&P
bersyarat yang memantau nilai ,kumulator ,.
&(C ,,H0
82W <ukan2ol
8W 2ol
. . .
<ukan2ol@
. . .
2ol @
. . .
#alam contoh program di atas, &(C ,,H0 membuat , bernilai nol, hal ini mengakibatkan
instruksi 82W <ukan2ol tidak akan pernah dikerjakan '82W artinya 8ump kalau nilai ,OP0,
syarat ini tidak pernah dipenuhi karena saat instruksi ini dijalankan nilai ,G0., sedangankan
instruksi 8W 2ol selalu dikerjakan karena syaratnya selalu dipenuhi.
Instru%si /# 3 /"#
7nstruksi 8 '8ump on arry. dan instruksi 82 '8ump on no arry. adalah instruksi jump
bersyarat yang memantau nilai bit arry di dalam Program Status 4ord 'PS4..
<it arry merupakan bit yang banyak sekali dipakai untuk keperluan operasi bit, untuk
menghemat pemakaian memori;program disediakan 2 instruksi yang khusus untuk
memeriksa keadaan bit arry, yakni 8 dan 82. 0arena bit akan diperiksa sudah pasti,
yakni bit arry, maka instruksi ini cukup dibentuk dengan 2 byte saja, dengan demikian bisa
lebih menghemat memori program.
8 Periksa
8< PS4.9,Periksa
-asil kerja kedua instruksi di atas sama, yakni &S51 akan 8!&P ke Periksa jika ternyata
bit arry bernilai =1> 'ingat bit arry sama dengan PS4 bit 9.. &eskipun sama tapi instruksi
8 Periksa lebih pendek dari instruksi 8< PS4.9,Periksa, instruksi pertama dibentuk dengan
2 byte dan instruksi yang kedua 6 byte.
7nstruksi 8< sama dengan instruksi 8<, hanya saja jika ternyata bit yang diperiksa memang
benar bernilai =1>, selain &S51 akan 8!&P ke instruksi lain yang dikehendaki &S51 akan
me;nol;kan bit yang baru saja diperiksa
Instru%si /B 3 /"B 3 /B#
7nstruksi 8< '8ump on <it Set., instruksi 82< '8ump on not <it Set. dan instruksi 8< '8ump
on <it Set $hen lear <it. merupakan instruksi 8ump bersyarat yang memantau nilai;nilai bit
tertentu. <it;bit tertentu bisa merupakan bit;bit dalam register status maupun kaki input
mikrokontroler &S51.
Pengujian 2ilai <oolean dilakukan dengan instruksi 8!&P bersyarat, ada 5 instruksi yang
dipakai untuk keperluan ini, yakni instruksi 8< '8!&P i: bit set., 82< '8!&P i: bit 2ot Set.,
8 '8!&P i: arry <it set., 82 '8!&P i: arry <it 2ot Set. dan 8< '8!&P i: <it Set and
lear <it..
#alam instruksi 8< dan 82<, salah satu dari 25" bit yang ada akan diperiksa, jika keadaannya
':alse atau true. memenuhi syarat, maka &S51 akan menjalankan instruksi yang tersimpan
di memori;program yang dimaksud. ,lamat memori;program dinyatakan dengan bilangan
relatip terhadap nilai Program ounter saat itu, dan cukup dinyatakan dengan angka 1 byte.
#engan demikian instruksi ini terdisi dari 6 byte, byte pertama adalah kode operasinya 'M21
untuk 8< dan M60 untuk 82<., byte kedua untuk menyatakan nomor bit yang harus diuji, dan
byte ketiga adalah bilangan relatip untuk instruksi tujuan.
ontoh pemakaian instruksi 8< dan 82< sebagai berikut @
8< P1.1,M
82< P1.1,M
7nstruksi;instruksi di atas memantau kedaan kaki 7 &S51 Port 1 bit 1. 7nstruksi pertama
memantau P1.1, jika P1.1 bernilai =1> maka &S51 akan mengulang instruksi ini, 'tanda M
mempunyai arti jika syarat terpenuhi kerjakan lagi instruksi bersangkutan.. 7nstruksi
berikutnya melakukan hal sebaliknya, yakni selama P1.1 bernilai =0> maka &S51 akan
tertahan pada instruksi ini.
Instru%si proses 'an test
7nstruksi;instruksi 8ump bersyarat yang dibahas di atas, memantau kondisi yang sudah terjadi
yang dicatat &S51. ,da dua instruksi yang melakukan dulu suatu proses baru kemudian
memantau hasil proses untuk menentukan apakah harus 8ump. 0edua instruksi yang
dimaksud adalah instruksi #82W dan instruksi 82).
Instru%si D/"2
7nstruksi #82W '#ecrement and 8ump i: not Wero., merupakan instruksi yang akan
mengurangi 1 nilai register serbaguna '%0..%9. atau memori;data, dan 8ump jika ternyata
setelah pengurangan 1 tersebut hasilnya tidak nol.
ontoh berikut merupakan potongan program untuk membentuk 5aktu tunda secara
sederhana @
&(C %0,H26
#82W %0,M
7nstruksi &(C %0,HM26 memberi nilai M26 pada %0, selanjutnya setiap kali instruksi #82W
%0,M dikerjakan, &S51 akan mengurangi nilai %0 dengan =1>, jika %0 belum menjadi nol
maka &S51 akan mengulang instruksi tersebut 'tanda M dalam instruksi ini maksudnya
adalah kerjakan kembali instruksi ini.. Selama mengerjakan 2 instruksi di atas, semua
pekerjaan lain akan tertunda, 5aktu tundanya ditentukan oleh besarnya nilai yang diisikan ke
%0.
Instru%si #/"*
7nstruksi 82) 'ompare and 8ump i: 2ot )Xual. membandingkan dua nilai yang disebut
dan &S akan 8ump kalau kedua nilai tersebut tidak samaN
&(C ,,P1
82) ,,HM0,,$idakSama
...
S8&P )J7$
L
$idakSama@
...
7nstruksi &(C ,,P1 membaca nilai input dari Port 1, instruksi 82) ,,HM0,,$idaksama
memeriksa apakah nilai Port 1 yang sudah disimpan di , sama dengan M0,, jika tidak maka
8ump ke $idakSama
1... Interupsi
8051 mempunyai 5 buah sumber interupsi. #ua buah interupsi eksternal, dua buah interupsi
timer dan sebuah interupsi port serial.
&eskipun memerlukan pengertian yang lebih mendalam, pengetahuan mengenai interupsi
sangat membantu mengatasi masalah pemrograman mikroprosesor?mikrokontroler dalam hal
menangani banyak peralatan input?output. Pengetahuan mengenai interupsi tidak cukup
hanya dibahas secara teori saja, diperlukan contoh program yang konkrit untuk memahami.
Saat kaki %)S)$ pada 7 mikroprosesor?mikrokontroler menerima sinyal reset 'pada &S51
sinyal tersebut berupa sinyal =1> sesaat, pada prosesor lain umumnya merupakan sinyal =0>
sesaat., Program ounter diisi dengan sebuah nilai. 2ilai tersebut dinamakan sebagai vektor
reset 'reset vector., merupakan nomor a5al memori;program yang menampung program
yang harus dijalankan.
Pembahasan di atas memberi gambaran bah5a proses reset merupakan peristi5a perangkat
keras 'sinyal reset diumpankan ke kaki %eset. yang dipakai untuk mengatur kerja dari
perangkat lunak, yakni menentukan aliran program prosesor 'mengisi Program ounter
dengan vektor reset..
Program yang dijalankan dengan cara reset, merupakan program utama bagi prosesor.
Peristi5a perangkat keras yang dipakai untuk mengatur kerja dari perangkat lunak, tidak
hanya terjadi pada proses reset, tapi terjadi pula dalam proses interupsi.
#alam proses interupsi, terjadinya sesuatu pada perangkat keras tertentu dicatat dalam :lip;
:lop khusus, :lip;:lop tersebut sering disebut sebagai =petanda> ':lag., catatan dalam petanda
tersebut diatur sedemikian rupa sehingga bisa merupakan sinyal permintaan interupsi pada
prosesor. 8ika permintaan interupsi ini dilayani prosesor, Program ounter akan diisi dengan
sebuah nilai. 2ilai tersebut dinamakan sebagai vektor interupsi 'interrupt vector., yang
merupakan nomor a5al memori;program yang menampung program yang dipakai untuk
melayani permintaan interupsi tersebut.
Program yang dijalankan dengan cara interupsi, dinamakan sebagai program layanan
interupsi '7S% ; 7nterrupt Service %outine.. Saat prosesor menjalankan 7S%, pekerjaan yang
sedang dikerjakan pada program utama sementara ditinggalkan, selesai menjalankan 7S%
prosesor kembali menjalankan program utama, seperti yang digambarkan dalam 3ambar 1.
4am0ar 1.5 Bagan %er6a prosesor melayani interupsi
Sebuah prosesor bisa mempunyai beberapa perangkat keras yang merupakan sumber sinyal
permintaan interupsi, masing;masing sumber interupsi dilayani dengan 7S% berlainan, dengan
demikian prosesor mempunyai beberapa vektor interupsi untuk memilih 7S% mana yang
dipakai melayani permintaan interupsi dari berbagai sumber. 0adang kala sebuah vektor
interupsi dipakai oleh lebih dari satu sumber interupsi yang sejenis, dalam hal semacam ini
7S% bersangkutan harus menentukan sendiri sumber interupsi mana yang harus dilayani saat
itu.
8ika pada saat yang sama terjadi lebih dari satu permintaan interupsi, prosesor akan melayani
permintaan interupsi tersebut menurut perioritas yang sudah ditentukan, selesai melayani
permintaan interupsi perioritas yang lebih tinggi, prosesor melayani permintaan interupsi
berikutnya, baru setelah itu kembali mengerjakan program utama.
Saat prosesor sedang mengerjakan 7S%, bisa jadi terjadi permintaan interupsi lain, jika
permintaan interupsi yang datang belakangan ini mempunyai perioritas lebih tinggi, 7S% yang
sedang dikerjakan ditinggal dulu, prosesor melayani permintaan yang perioritas lebih tinggi,
selesai melayani interupsi perioritas tinggi prosesor meneruskan 7S% semula, baru setelah itu
kembali mengerjakan program utama. -al ini dikatakan sebagai interupsi bertingkat 'nested
interrupt., tapi tidak semua prosesor mempunyai kemampuan melayani interupsi secara ini.
1...1. Sum0er interupsi M#S71
Seperti terlihat dalam 3ambar 2, ,$8151 mempunyai " sumber interupsi, yakni 7nterupsi
)Aternal ')Aternal 7nterrupt. yang berasal dari kaki 72$0 dan 72$1, 7nterupsi $imer '$imer
7nterrupt. yang berasal dari $imer 0 maupun $imer 1, 7nterupsi Port Seri 'Serial Port
7nterrupt. yang berasal dari bagian penerima dan bagian pengirim Port Seri.
#i samping itu ,$8152 mempunyai 2 sumber interupsi lain, yakni 7nterupsi $imer 2
bersumber dari $imer 2 yang memang tidak ada pada ,$8151.
<it 7)0 'atau bit 7)1. dalam $(2 merupakan petanda ':lag. yang menandakan adanya
permintaan 7nterupsi )ksternal. ,da 2 keadaan yang bisa meng;aktip;kan petanda ini, yang
pertama karena level tegangan =0> pada kaki 72$0 'atau 72$1., yang kedua karena terjadi
transisi sinyal =1> menjadi =0> pada kaki 72$0 'atau 72$1.. Pilihan bentuk sinyal ini
ditentukan le5at bit 7$0 'atau bit 7$1. yang terdapat dalam register $(2.
1. 0alau bit 7$0 'atau 7$1. G>0> maka bit 7)0 'atau 7)1. dalam $(2 menjadi =1> saat kaki
72$0G>0>.
2. 0alau bit 7$0 'atau 7$1. G>1> maka bit 7)0 'atau 7)1. dalam $(2 menjadi =1> saat terjadi
transisi sinyal =1> menjadi =0> pada kaki 72$0.
&enjelang prosesor menjalankan 7S% dari 7nterupsi )ksternal, bit 7)0 'atau bit 7)1.
dikembalikan menjadi =0>, menandakan permintaan 7nterupsi )ksternal sudah dilayani.
2amun jika permintaan 7nterupsi )kternal terjadi karena level tegangan =0> pada kaki 7$0
'atau 7$1., dan level tegangan pada kaki tersebut saat itu masih G>0> maka bit 7)0 'atau bit
7)1. akan segera menjadi =1> lagiN
<it $*0 'atau bit $*1. dalam $(2 merupakan petanda ':lag. yang menandakan adanya
permintaan 7nterupsi $imer, bit $*0 'atau bit $*1. menjadi =1> pada saat terjadi limpahan
pada pencacah biner $imer 0 'atau $imer 1..
&enjelang prosesor menjalankan 7S% dari 7nterupsi $imer, bit $*0 'atau bit $*1.
dikembalikan menjadi =0>, menandakan permintaan 7nterupsi $imer sudah dilayani.
7nterupsi port seri terjadi karena dua hal, yang pertama terjadi setelah port seri selesai
mengirim data 1 byte, permintaan interupsi semacam ini ditandai dengan petanda ':lag.
$7G>1>. Bang kedua terjadi saat port seri telah menerima data 1 byte secara lengkap,
permintaan interupsi semacam ini ditandai dengan petanda ':lag. %7G>1>.
Petanda di atas tidak dikembalikan menjadi =0> menjelang prosesor menjalankan 7S% dari
7nterupsi port seri, karena petanda tersebut masih diperlukan 7S% untuk menentukan sumber
interupsi berasal dari $7 atau %7. ,gar port seri bisa dipakai kembali setelah mengirim atau
menerima data, petanda;petanda tadi harus di;nol;kan le5at program.
Petanda permintaan interupsi '7)0, $*0, 7)1, $*1, %7 dan $7. semuanya bisa di;nol;kan atau
di;satu;kan le5at instruksi, pengaruhnya sama persis kalau perubahan itu dilakukan oleh
perangkat keras. ,rtinya permintaan interupsi bisa diajukan le5at pemrograman, misalnya
permintaan interupsi eksternal 7$0 bisa diajukan dengan instruksi S)$< 7)0.
1...2 Menga%ti8%an Interupsi
Semua sumber permintaan interupsi yang di bahas di atas, masing;masing bisa di;aktip;kan
atau di;nonaktip;kan secara tersendiri le5at bit;bit yang ada dalam register 7) '7nterrupt
)nable %egister..
<it )J0 dan )J1 untuk mengatur interupsi eksternal 72$0 dan 72$1, bit )$0 dan )$1 untuk
mengatur interupsi timer 0 dan timer 1, bit )S untuk mengatur interupsi port seri, seperti
yang digambarkan dalam 3ambar 2. #i samping itu ada pula bit ), yang bisa dipakai untuk
mengatur semua sumber interupsi sekali gus.
Setelah reset, semua bit dalam register 7) bernilai =0>, artinya sistem interupsi dalam keadaan
non;aktip. !ntuk mengaktipkan salah satu sistem interupsi, bit pengatur interupsi
bersangkutan diaktipkan dan juga ), yang mengatur semua sumber interupsi. &isalnya
instruksi yang dipakai untuk mengaktipkan interupsi ekternal 72$0 adalah S)$< )J0
disusul dengan S)$< ),.
&S< +S<
*& 9 9 *S *T1 *91 *T$ *9$

BIT SYMBO F!"#TIO"
7).9 ),
#isables all interrupts. 7: ),G0, no interrupt 5ill be
ackno5ledged. 7: ),G1, each interrupt source is individually
enabled or disabled by setting or clearing its enable bit.
7)." ; ;
7).5 ; ;
7)./ )S
)nables or disables the Serial Port interrupt. 7: )SG0, the Serial
Port interrupt is disabled.
7).6 )$1
)nables or disables the $imer 1 (ver:lo5 interrupt. 7: )$1G0, the
$imer 1 interrupt is disabled.
7).2 )J1
)nables or disables )Aternal 7nterrupt 1. 7: )J1G0, )Aternal
interrupt 1 is disabled.
7).1 )$0
)nables or disables the $imer 0 (ver:lo5 interrupt. 7: )$0G0, the
$imer 0 interrupt is disabled.
7).0 )J0
)nables or disables )Aternal interrupt 0. 7: )J0G0, )Aternal
interrupt 0 is disabled.
1...3 -e%tor Interupsi
Saat &S51 menanggapi permintaan interupsi, Program ounter diisi dengan sebuah nilai
yang dinamakan sebagai vektor interupsi, yang merupakan nomor a5al dari memori;program
yang menampung 7S% untuk melayani permintaan interupsi tersebut. Cektor interupsi itu
dipakai untuk melaksanakan inststuksi +,++ yang diaktipkan secara perangkat keras.
Cektor interupsi untuk interupsi eksternal 72$0 adalah M0006, untuk interupsi timer 0 adalah
M000<, untuk interupsi ekternal 72$1 adalah M0016, untuk interupsi timer 1 adalah M001<
dan untuk interupsi port seri adalah M0026.
8arak vektor interupsi satu dengan lainnya sebesar 8, atau hanya tersedia 8 byte untuk setiap
7S%. 8ika sebuah 7S% memang hanya pendek saja, tidak lebih dari 8 byte, maka 7S% tersebut
bisa langsung ditulis pada memori;program yang disediakan untuknya. 7S% yang lebih
panjang dari 8 byte ditulis ditempat lain, tapi pada memori;program yang ditunjuk oleh
vektor interupsi diisikan instruksi 8!&P ke arah 7S% bersangkutan
Source -ector &''ress
Reset Sistem
$$$$:
)Asternal 0 0006-
$imer 0 000<-
)Asternal 1 0016-
$imer 1 001<-
Port Serial 0026-
$imer 2 002<-
1.... Ting%atan Perioritas
&asing;masing sumber interupsi bisa ditempatkan pada dua tingkatan perioritas yang
berbeda. Pengaturan tingkatan perioritas isi dilakukan dengan bit;bit yang ada dalam register
7P '7nterrupt Priority..
<it PJ0 dan PJ1 untuk mengatur tingkatan perioritas interupsi eksternal 72$0 dan 72$1, bit
P$0 dan P$1 untuk mengatur interupsi timer 0 dan timer 1, bit PS untuk mengatur interupsi
port seri, seperti yang digambarkan dalam 3ambar 2.
Setelah reset, semua bit dalam register 7P bernilai =0>, artinya semua sumber interupsi
ditempatkan pada tingkatan tanpa perioritas. &asing;masing sumber interupsi bisa
ditempatkan pada tingkatan perioritas utama dengan cara men;=satu>;kan bit pengaturnya.
&isalnya interupsi timer 0 bisa ditempatkan pada tingkatan perioritas utama dengan instruksi
S)$< P$1.
Sebuah 7S% untuk interupsi tanpa perioritas bisa diinterupsi oleh sumber interupsi yang
berada dalam tingkatan perioritas utama. $api interupsi yang berada pada tingkatan perioritas
yang sama, tidak dapat saling meng;interupsi.
8ika 2 permintaan interupsi terjadi pada saat yang bersamaan, sedangkan kedua interupsi
tersebut terletak pada tingkatan perioritas yang berlainan, maka interupsi yang berada pada
tingkatan perioritas utama akan dilayani terlebih dulu, setelah itu baru melayani interupsi
pada tingkatan tanpa perioritas.
8ika kedua permintaan tersebut bertempat pada tingkatan perioritas yang sama, perioritas
akan ditentukan dengan urutan sebagai berikut @ interupsi eksternal 72$0, interupsi timer 0,
interupsi ekternal 72$1, interupsi timer 1 dan terakhir adalah interupsi port seri.
<agan +engkap Sistem 7nterupsi &S51
&eskipun sistem interupsi &S51 termasuk sederhana dibandingkan dengan sistem interupsi
&"8-11 buatan &otorola, tapi karena menyangkut 5 sumber interupsi yang masing;
masing harus diatur secara tersendiri, tidak mudah untuk mengingat semua masalah tersebut,
terutama pada saat membuat program sering dirasakan sangat merepotkan membolak;balik
buku untuk mengatur masing;masing sumber interupsi tersebut.
3ambar 2 menggambarkan sistem interupsi &S51 selangkapnya, berikut dengan masing;
masing bit dalam register;register S*% 'Special *unction %egister. yang dipakai untuk
mengatur masing;masing sumber interupsi.
Saklar yang digambarkan dalam 3ambar 2 me5akili bit dalam register yang harus diatur
untuk mengendalikan sumber interupsi, kotak bergambar bendera kecil merupakan :lag
'petanda. dalam register yang mencatat adanya permintaan interupsi dari masing;masing
sumber interupsi. 0edudukan saklar dalam gambar tersebut menggambarkan kedudukan a5al
setelah &S51 di;reset.
3ambar ini sangat membantu saat penulisan program menyangkut interupsi &S51.
Interrupt Priority Register ( IP )
&S< +S<
9 9 9 PS PT1 P91 PT$ P9$
"ote;
BIT SYMBO F!"#TIO"
7P.9 ; ;
7P." ; ;
7P.5 ; ;
7P./ PS
#e:ines the Serial Port interrupt priority level. PSG1 programs it to
the higher priority level.
7P.6 P$1
#e:ines the $imer 1 interrupt priority level. P$1G1 programs it to
the higher priority level.
7P.2 PJ1
#e:ines the )Aternal 7nterrupt 1 priority level. PJ1G1 programs it
to the higher priority level.
7P.1 P$0
)nables or disables the $imer 0 interrupt priority level. P$0G1
programs it to the higher priority level.
7P.0 PJ0
#e:ines the )Aternal 7nterrupt 0 priority level. PJ0G1 programs it
to the higher priority level.

1.7 Timer #ounter
$imer dan ounter merupakan sarana input yang kurang dapat perhatian pemakai
mikrokontroler, dengan sarana input ini mikrokontroler dengan mudah bisa dipakai untuk
mengukur lebar pulsa, membangkitkan pulsa dengan lebar yang pasti, dipakai dalam
pengendalian tegangan secara P4& 'Pulse 4idth &odulation. dan sangat diperlukan untuk
aplikasi remote control dengan in:ra merah.
Pada dasarnya sarana input yang satu ini merupakan seperangkat pencacah biner 'binary
counter. yang terhubung langsung ke saluran;data mikrokontroler, sehingga mikrokontroler
bisa membaca kedudukan pancacah, bila diperlukan mikrokontroler dapat pula merubah
kedudukan pencacah tersebut.
Seperti layaknya pencacah biner, bilamana sinyal denyut 'clock. yang diumpankan sudah
melebihi kapasitas pencacah, maka pada bagian akhir untaian pencacah akan timbul sinyal
limpahan, sinyal ini merupakan suatu hal yang penting sekali dalam pemakaian pencacah.
$erjadinya limpahan pencacah ini dicatat dalam sebuah :lip;:lop tersendiri.
#i samping itu, sinyal denyut yang diumpankan ke pencacah harus pula bisa dikendalikan
dengan mudah. -al;hal yang dibicarakan di atas diringkas dalam 3ambar 1.
&S;51 mempunyai dua buah register timer? counter 1" bit, yaitu $imer 0 dan $imer 1.
0eduanya dapat dikon:igurasikan untuk beroperasi sebagai timer atau counter, seperti yang
terlihat pada gambar di ba5ah.
3ambar 1.1. 0onsep dasar $imer?ounter sebagai sarana input
Sinyal denyut yang diumpankan ke pencacah bisa dibedakan menjadi 2 macam, yang pertama
yalah sinyal denyut dengan :rekuensi tetap yang sudah diketahui besarnya dan yang kedua
adalah sinyal denyut dengan :rekuensi tidak tetap.
8ika sebuah pencacah bekerja dengan :rekuensi tetap yang sudah diketahui besarnya,
dikatakan pencacah tersebut bekerja sebagai timer, karena kedudukan pencacah tersebut
setara dengan 5aktu yang bisa ditentukan dengan pasti.
8ika sebuah pencacah bekerja dengan :rekuensi yang tidak tetap, dikatakan pencacah tersebut
bekerja sebagai counter, kedudukan pencacah tersebut hanyalah menyatakan banyaknya pulsa
yang sudah diterima pencacah.
!ntaian pencacah biner yang dipakai, bisa merupakan pencacah biner menaik 'count up
binary counter. atau pencacah biner menurun 'count do5n binary counter..

1.7.1 Fasilitas Timer3#ounter
0eluarga mikrokontroler &S51, misalnya ,$8151 dan ,$81A051, dilengkapi dengan
dua perangkat $imer?ounter, masing;masing dinamakan sebagai $imer 0 dan $imer 1.
Sedangkan untuk jenis yang lebih besar, misalnya ,$8152, mempunyai tambahan satu
perangkat $imer?ounter lagi yang dinamakan sebagai $imer 2.
Perangkat $imer?ounter tersebut merupakan perangkat keras yang menjadi satu dalam chip
mikrokontroler &S51, bagi pemakai mikrokontroler &S51 perangkat tersebut dikenal
sebagai S*% 'Special *unction %egister. yang berkedudukan sebagai memori;data internal.
Pencacah biner untuk $imer 0 dibentuk dengan register $+0 '$imer 0 +o5 <yte, memori;
data internal nomor M",. dan register $-0 '$imer 0 -igh <yte, memori;data internal nomor
M"..
Pencacah biner untuk $imer 1 dibentuk dengan register $+1 '$imer 1 +o5 <yte, memori;
data internal nomor M"<. dan register $-1 '$imer 1 -igh <yte, memori;data internal nomor
M"#..
Pencacah biner pembentuk $imer?ounter &S51 merupakan pencacah biner menaik 'count
up binary counter. yang mencacah dari M0000 sampai M****, saat kedudukan pencacah
berubah dari M**** kembali ke M0000 akan timbul sinyal limpahan.
!ntuk mengatur kerja $imer?ounter dipakai 2 register tambahan yang dipakai bersama oleh
$imer 0 dan $imer 1. %egister tambahan tersebut adalah register $(2 '$imer ontrol
%egister, memori;data internal nomor M88, bisa dialamat secara bit. dan register $&(#
'$imer &ode %egister, memori;data internal nomor M81..
Pencacah biner $imer 0 dan 1
$+0, $-0, $+1 dan $-1 merupakan S*% 'Special *unction %egister. yang dipakai untuk
membentuk pencacah biner perangkat $imer 0 dan $imer 1. 0apasitas keempat register
tersebut masing;masing 8 bit, bisa disusun menjadi / macam &ode pencacah biner seperti
terlihat dalam 3ambar 2a sampai 3ambar 2d.
Pada &ode 0, &ode 1 dan &ode 2 $imer 0 dan $imer 1 masing;masing bekerja sendiri,
artinya bisa dibuat $imer 0 bekerja pada &ode 1 dan $imer 1 bekerja pada &ode 2, atau
kombinasi mode lainnya sesuai dengan keperluan.
Pada &ode 6 $+0, $-0, $+1 dan $-1 dipakai bersama;sama untuk menyusun sistem timer
yang tidak bisa di;kombinasi lain.
Susunan $+0, $-0, $+1 dan $-1 pada masing;masing mode adalah sebagai berikut@
Mo'e $ < Pencaca, Biner 13 0it
3ambar 1.10 &ode 0 ; Pencacah <iner 16 <it
Pencacah biner dibentuk dengan $+A 'maksudnya bisa $+0 atau $+1. sebagai pencacah biner
5 bit 'meskipun kapasitas sesungguhnya 8 bit., limpahan dari pencacah biner 5 bit ini
dihubungkan ke $-A 'maksudnya bisa $-0 atau $-1. membentuk sebuah untaian pencacah
biner 16 bit, limpahan dari pencacah 16 bit ini ditampung di :lip;:lop $*A 'maksudnya bisa
$*0 atau $*1. yang berada di dalam register $(2.
&ode ini meneruskan sarana $imer yang ada pada mikrokontroler &S/8 'mikrokontroler
pendahulu &S51., dengan maksud rancangan alat yang dibuat dengan &S/8 bisa dengan
mudah diadaptasikan ke &S51. &ode ini tidak banyak dipakai lagi.
Mo'e 1 < Pencaca, Biner 1= 0it
3ambar 1.11 &ode 1 ; Pencacah <iner 1" <it
&ode ini sama dengan &ode 0, hanya saja register $+A dipakai sepenuhnya sebagai
pencacah biner 8 bit, sehingga kapasitas pencacah biner yang tersbentuk adalah 1" bit.
Seiring dengan sinyal denyut, kedudukan pencacah biner 1" bit ini akan bergerak dari M0000
'biner 0000 0000 0000 0000., M0001, M0002 V sampai M**** 'biner 1111 1111 1111 1111.,
kemudian melimpah kembali menjadi M0000.
Mo'e 2 < Pencaca, Biner 5 0it 'engan Isi !lang
4am0ar 1.12 Mo'e 2 1 Pencaca, Biner 5 Bit 'engan Isi !lang
$+A dipakai sebagai pencacah biner 8 bit, sedangkan $-A dipakai untuk menyimpan nilai
yang diisikan ulang ke $+A, setiap kali kedudukan $+A melimpah 'berubah dari M** menjadi
M00.. #engan cara ini bisa didapatkan sinyal limpahan yang :rekuensinya ditentukan oleh
nilai yang disimpan dalam $-0.
Mo'e 3 < 4a0ungan Pencaca, Biner 1= 0it 'an 5 Bit
3ambar 1.16 &ode 6 Q 3abungan Pencacah <iner 1" <it dan 8 <it
Pada &ode 6 $+0, $-0, $+1 dan $-1 dipakai untuk membentuk 6 untaian pencacah, yang
pertama adalah untaian pencacah biner 1" bit tanpa :asiltas pemantau sinyal limpahan yang
dibentuk dengan $+1 dan $-1. Bang kedua adalah $+0 yang dipakai sebagai pencacah biner
8 bit dengan $*0 sebagai sarana pemantau limpahan. Pencacah biner ketiga adalah $-0 yang
dipakai sebagai pencacah biner 8 bit dengan $*1 sebagai sarana pemantau limpahan.
%egister Pengatur $imer
%egister $&(# dan register $(2 merupakan register pembantu untuk mengatur kerja
$imer 0 dan $imer 1, kedua register ini dipakai bersama oleh $imer 0 dan $imer 1.
3ambar 1.1/ #enah susunan bit dalam register $&(#
%egister $&(# dibagi menjadi 2 bagian secara simitris, bit 0 sampai 6 register $&(#
'$&(# bit 0 .. $&(# bit 6. dipakai untuk mengatur $imer 0, bit / sampai 9 register
$&(#) '$&(# bit / .. $&(# bit 9. dipakai untuk mengatur $imer 1, pemakaiannya
sebagai berikut @
1. <it &0?&1 dipakai untuk menentukan &ode $imer seperti yang terlihat dalam $abel di
3ambar 6a.
2. <it ?$Y dipakai untuk mengatur sumber sinyal denyut yang diumpankan ke pencacah
biner. 8ika ?$YG0 sinyal denyut diperoleh dari osilator kristal yang :rekuensinya sudah
dibagi 12, sedangkan jika ?$YG1 maka sinyal denyut diperoleh dari kaki $0 'untuk $imer 0.
atau kaki $1 'untuk $imer 1..
6. <it 3,$) merupakan bit pengatur saluran sinyal denyut. <ila bit 3,$)G0 saluran sinyal
denyut hanya diatur oleh bit $%A 'maksudnya adalah $%0 atau $%1 pada register $(2..
<ila bit 3,$)G1 kaki 72$0 'untuk $imer 0. atau kaki 72$1 'untuk $imer 1. dipakai juga
untuk mengatur saluran sinyal denyut 'lihat 3ambar /..
3ambar 1.15 #enah susunan bit dalam register $(2
%egister $(2 dibagi menjadi 2 bagian, / bit pertama 'bit 0 .. bit 6, bagian yang diarsir
dalam 3ambar 6b. dipakai untuk keperluan mengatur kaki 72$0 dan 72$1, ke;empat bit ini
dibahas dibagian lain.
&S< +S<
$*1 $%1 $*0 $%0 7)1 7$1 7)0 7$0
<7$ SB&<(+ *!2$7(2
$(2.9 $*1
$imer 1 over:lo5 :lag. Set by hard5are on $imer?ounter
over:lo5. leared by hard5are 5hen processor vector to
interrupt routine, or clearing the bit in so:t5are.
$(2." $%1
$imer 1 %un control bit . Set? cleared by so:t5are to turn $imer?
ounter on?o::
$(2.5 $*0
$imer 0 over:lo5 :lag. Set by hard5are on $imer?ounter
over:lo5. leared by hard5are 5hen processor vector to
interrupt routine, or clearing the bit in so:t5are.
$(2./ $%0
$imer 1 %un control bit . Set? cleared by so:t5are to turn $imer?
ounter on?o::
$(2.6 7)1
7nterrupt 1 )dge :lag. Set by hard5are 5hen eAternal interrupt
edge detected. leared 5hen interrupt processed.
$(2.2 7$1
7nterrupt 1 type control bit. Set? cleared by so:t5are to spece:y
:alling edge? lo5 level trigerred eAternal interupts
$(2.1 7)0
7nterrupt 0 )dge :lag. Set by hard5are 5hen eAternal interrupt
edge detected. leared 5hen interrupt processed.
$(2.0 7$0
7nterrupt 0 type control bit. Set? cleared by so:t5are to spece:y
:alling edge? lo5 level trigerred eAternal interupts
Sisa / bit dari register $(2 'bit /..bit 9. dibagi menjadi 2 bagian secara simitris yang
dipakai untuk mengatur $imer0?$imer 1, sebagai berikut@
1. <it $*A 'maksudnya adalah $*0 atau $*1. merupakan bit penampung limpahan 'lihat
3ambar 2., $*A akan menjadi =1> setiap kali pencacah biner yang terhubung padanya
melimpah 'kedudukan pencacah berubah dari M**** kembali menjadi M0000.. <it $*A di;
nol;kan dengan istruksi +% $*0 atau +% $*1. 8ika sarana interupsi dari $imer 0?$imer 1
dipakai, $%A di;nol;kan saat &S51 menjalankan rutin layanan interupsi '7S% Q 7nterupt
Service %outine..
2. <it $%A 'maksudnya adalah $%0 atau $%1. merupakan bit pengatur saluran sinyal denyut,
bila bit ini G0 sinyal denyut tidak disalurkan ke pencacah biner sehingga pencacah berhenti
mencacah. <ila bit 3,$) pada register $&(# G1, maka saluran sinyal denyut ini diatur
bersama oleh $%A dan sinyal pada kaki 72$0?72$1 'lihat 3ambar /..
1.7.2 Mengatur Timer
3ambar / merupakan bagan susunan rangkaian yang bisa terjadi pada $imer 1 secara
lengkap, digambarkan pula hubungan;hubungan semua register pembentuk dan pengatur
$imer 1. 3ambar ini berlaku pula untuk $imer 0.
#alam pemakaian sesungguhnya, rangkaian yang dipakai hanya sebagian dari rangkaian
lengkap tersebut, sesuai dengan keperluan sistem yang dibangun. %angkaian yang
dikehendaki dibentuk dengan mengatur register $&(#), sedangkan kerja dari $imer
dikendalikan le5at register $(2.
3ambar 1.1". #iagram blok timer? counter

Setelah &S51 di;reset register $&(# bernilai M00, hal ini berarti @
1. bit ?$Y G>0>, menurut 3ambar / keadaan ini membuat saklar S1 ke posisi atas, sumber
sinyal denyut berasal dari osilator kristal yang :rekuensinya sudah dibagi 12, pencacah biner
yang dibentuk dengan $+1 dan $-1 ber:ungsi sebagai timer. 8ika sistem yang dirancang
memang menghendaki $imer 1 bekerja sebagai timer maka bit ?$Y tidak perlu diatur lagi.
$api jika sistem yang dirancang menghendaki agar $imer 1 bekerja sebagai counter untuk
menghitung pulsa yang masuk le5at kakai $1 'P6.5., maka posisi saklar S1 harus
dikeba5ahkan dengan membuat bit ?$Y menjadi =1>.
2. bit 3,$)G>0>, hal ini membuat output gerbang (% selalu =1> tidak dipengaruhi keadaan =0>
atau =1> pada kaki 72$1 'P6.6.. #alam keadaan semacam ini, saklar S2 hanya dikendalikan
le5at bit $%1 dalam register $(2. 8ika $%1G>1> saklar S2 tertutup sehingga sinyal denyut
dari S1 disalurkan ke sistem pencacah biner, aliran sinyal denyut akan dihentikan jika
$%G>0>.
Sebaliknya jika bit 3,$)G>1>, output gerbang (% akan mengikuti keadaan kaki 72$1, saat
72$1G>0> apa pun keadaan bit $%1 output gerbang ,2# selalu G>0> dan saklar S1 selalu
terbuka, agar saklar S1 bisa tertutup kaki 72$1 dan bit $%1 harus G>1> secara bersamaan.8ika
sistem yang dirancang menghendaki kerja dari timer?counter dikendalikan dari sinyal yang
berasal dari luar chip, maka bit 3,$) harus dibuat menjadi =1>
6. bit &1 dan &0G>0>, berarti $+1 dan $-1 disusun menjadi pencacah biner 16 bit '&ode 0.,
jika dikehendaki $imer 1 bekerja pada mode 1 seperti terlihat dalam 3ambar /, maka bit &1
harus dibuat menjadi =0> dan bit &0 menjadi =1>.
Pengetahuan di atas dipakai sebagai dasar untuk mengatur dan mengendalikan $imer seperti
terlihat dalam contoh;contoh berikut @
Setelah reset $&(# bernilai M00, berarti $imer 1 bekerja sebagai pencacah biner 16 bit,
sumber sinyal denyut dari osilator kristal atau $imer 1 bekerja sebagai =timer>, bit 3,$) G>0>
berarti kaki 72$1 tidak berpengaruh pada rangkaian sehingga $imer 1 hanya dikendalikan
dari bit $%1.
#alam pemakaian biasanya dipakai pencacah biner 1" bit, untuk keperluan itu instruksi yang
diperlukan untuk mengatur $&(# adalah @
&(C $&(#,HT00010000
atatan dalam instruksi di atas tanda =H> menyatakan bagian di belakangnya adalah bilangan
konstan yang akan diisikan ke $&(#, =T> merupakan a5alan yang menandakan bah5a
bilangan di belakangnya adalah bilangan biner. Penulisan dengan bilangan biner semacam
ini, memudahkan untuk mengenali dengan cepat bit;bit apa saja yang diisikan ke $&(#.
<ilangan biner T00010000 diisikan ke $&(#, berakibat bit 9 $&(# 'bit 3,$). bernilai
=0>, bit " 'bit ?$Y. bernilai =0>, bit 5 dan / 'bit &1 dan &0. bernilai =01>, ke;empat bit ini
dipakai untuk mengatur $imer 1, sehingga $imer 1 bekerja sebagai timer dengan pencacah
biner 1" bit yang dikendalikan hanya dengan $%1.
8ika dikehendaki pencacah biner dipakai sebagai counter untuk mencacah jumlah pulsa yang
masuk le5at kaki $1 'P6.5., instruksinya menjadi @
&(C $&(#,HT01010000
Perbedaannya dengan instruksi di atas adalah dalam instruksi ini bit " 'bit ?$Y. bernilai =1>.
Selanjutnya jika diinginkan sinyal dari perangkat keras di luar chip &S51 bisa ikut
mengendalikan $imer 1, instruksi pengatur $imer 1 akan menjadi @
&(C $&(#,HT11010000
#alam hal ini bit 9 'bit 3,$). bernilai =1>.
Setelah mengatur kon:igurasi $imer 0 seperti di atas, pencacah biner belum mulai mencacah
sebelum diperintah dengan instruksi @
S)$< $%1
Perlu diingatkan jika bit 3,$) G =1>, selama kaki 72$1 bernilai =0> pencacah biner belum
akan mencacah. !ntuk menghentikan proses pencacahan, dipakai instruksi
+% $%1
#i atas hanya dibahas $imer 1 saja, tata canya untuk $imer 0 persis sama. Bang perlu
diperhatikan adalah register $&(# dipakai untuk mengatur $imer 0 dan juga $imer 1,
sedangkan $&(# tidak bisa dialamati secara bit 'non bit addressable. sehingga jika jika
kedua $imer dipakai, pengisian bit;bit dalam register $&(# harus dipikirkan sekali gus
untuk $imer 0 dan $imer 1.
<it $%1 dan $%0 yang dipakai untuk mengendalikan proses pencacahan, terletak di dalam
register $(2 'memori;data internal nomor M88. yang bisa dialamati secara bit 'bit
addressable.. Sehingga $%0 dan $%1 bisa diatur secara terpisah 'dengan perintah S)$< atau
+%., tidak seperti mengatur $&(# yang harus dilakukan secara bersamaan.
#emikian pula bit penampung limpahan pencacah biner $*0 dan $*1, juga terletak dalam
register $(2 yang masing;masing bisa di;monitor sendiri.
Sebagimana ditunjukkan pada gambar 1.11 mikrokontroller dapat beraksi sebagai timer atau
counter, sesuai dengan kebutuhan. Perhatikan pada saklar sebelah kiri dan kanan pada
diagram blok tersebut. &ikrokontroller akan ber:ungsi sebagai timer ketika saklar diposisikan
ke atas dan sebaliknya akan ber:ungsi sebagai counter bila saklar diposisikan ke ba5ah,
dengan mengontrol bit ?$ pada register $&(#. Posisi saklar sebelah kanan, bergantung
pada bit 3,$) 'register $&(#., $%1 ' register $(20 dan 72$1.
1.=. Port Serial
!mumnya orang selalu menganggap port seri pada &S51 adalah !,%$ yang bekerja
secara asinkron, jarang yang menyadari port seri tersebut bisa pula bekerja secara sinkron,
pada hal sebagai port seri yang bekerja secara sinkron merupakan sarana yang baik sekali
untuk menambah input?output bagi mikrokontroler.
3ambar 1.19. 0omunikasi serial dengan komputer

#ikenal 2 macam cara transmisi data secara seri. 0edua cara tersebut dibedakan oleh sinyal
denyut 'clock. yang dipakai untuk men;=dorong> data seri, kalau clock dikirim bersama
dengan data seri, cara tersebut dikatakan sebagai transmisi data seri secara sinkron.
Sedangkan dalam transmisi data seri secara asinkron, clock tidak dikirim bersama data seri,
rangkaian penerima data harus membangkitkan sendiri clock pendorong data seri.
Port seri &S51 bisa dipakai dalam / mode kerja yang berbeda. #ari / mode tersebut, 1
mode diantaranya bekerja secara sinkron dan 6 lainnya bekerja secara asinkron. Secara
ringkas ke;empat mode kerja tersebut bisa dibedakan sebagai berikut@
Mo'e $
&ode ini bekerja secara sinkron, data seri dikirim dan diterima melalui kaki P6.0 '%A#., dan
kaki P6.1 '$A#. dipakai untuk menyalurkan clock pendorong data seri yang dibangkitkan
&S51.
#ata dikirim?diterima 8 bit sekali gus, dimulai dari bit yang bobotnya paling kecil 'bit 0. dan
diakhiri dengan bit yang bobotnya paling besar 'bit 9.. 0ecepatan pengiriman data 'baud rate.
adalah 1?12 :rekuensi osilator kristal.
Mo'e 1
&ode ini dan mode;mode berikutnya bekerja secara asinkron, data dikirim melalui kaki P6.1
'$A#. dan diterima melalui kaki P6.0 '%A#..
Pada &ode 1 data dikirim?diterima 10 bit sekali gus, dia5ali dengan 1 bit start, disusul
dengan 8 bit data yang dimulai dari bit yang bobotnya paling kecil 'bit 0., diakhiri dengan 1
bit stop. Pada &S51 yang ber:ungsi sebagai penerima bit stop ditampung pada %<8 dalam
register S(2. 0ecepatan pengiriman data 'baud rate. bisa diatur sesuai dengan keperluan.
&ode inilah yang umum dikenal sebagai !,%$ '!niversal ,synchronous
%eceiver?$ransmitter..
Mo'e 2
#ata dikirim?diterima 11 bit sekali gus, dia5ali dengan 1 bit start, disusul 8 bit data yang
dimulai dari bit yang bobotnya paling kecil 'bit 0., kemudian bit ke 1 yang bisa diatur lebih
lanjut, diakhiri dengan 1 bit stop.
Pada &S51 yang ber:ungsi sebagai pengirim, bit 1 tersebut berasal dari bit $<8 dalam
register S(2. Pada &S52 yang ber:ungsi sebagai penerima, bit 1 ditampung pada bit %<8
dalam register S(2, sedangkan bit stop diabaikan tidak ditampung. 0ecepatan pengiriman
data 'baud rate. bisa dipilih antara 1?62 atau 1?"/ :rekuensi osilator kristal.
&ode 6 &ode ini sama dengan &ode 2, hanya saja kecepatan pengiriman data 'baud rate.
bisa diatur sesuai dengan keperluan, seperti halnya &ode 1.
Pada mode asinkron '&ode 1, &ode 2 dan &ode 6., port seri &S51 bekerja secara :ull
dupleA, artinya pada saat yang sama port seri ini bisa mengirim data sekali gus menerima
data.
%egister S<!* merupakan register penghubung port seri. #alam ke;empat mode di atas,
semua instruksi yang mengakibatkan perubahan isi S<!* akan mengakibatkan port seri
mengirimkan data keluar dari &S51. ,gar port seri bisa menerima data, bit %)2 dalam
register S(2 harus bernilai =1>. Pada mode 0, proses penerimaan data dimulai dengan
instruksi +% %7, sedangkan dalam mode lainnya proses penerimaan data dia5ali oleh bit
start yang bernilai =0>. #ata yang diterima port seri dari luar &S51, diambil dengan
instruksi &(C ,,S<!*.
&engambil data dari S<!* dan menyimpan data ke S<!* sesungguhnya bekerja pada dua
register yang berlainan, meskipun nama registernya sama;sama S<!*.
1.=.1 Register1register Port Seri M#S71
&S51 dilengkapi dengan 2 register dan beberapa bit tambahan untuk keperluan pemakai
port seri.
S<!* merupakan S*% 'Special *unction %egister. yang terletak pada memori;data internal
dengan nomor M11. S<!* mempunyai kegunaan ganda, data yang disimpan pada S<!* akan
dikirim keluar &S51 le5at port seri, sedangkan data dari luar &S51 yang diterima port
seri diambil dari S<!* pula. 8adi meskipun hanya menempati satu nomor memori;data
internal 'nomor M11., sesungguhnya S<!* terdiri dari 2 register yang berbeda.
S(2 merupakan S*% 'Special *unction %egister. yang terletak pada memori;data internal
dengan nomor M18, merupakan register utama untuk mengatur kerja port seri &S51. Setelah
reset semua bit dalam S(2 bernilai =0>.
1. <it S&0 dan bit S&1 'bit 9 dan bit " pada register S&(#. dipakai untuk menentukan
mode kerja port seri. Setelah reset kedua bit ini bernilai =0>
2. <it %)2 'bit /. dipakai untuk mengaktipkan kemampuan port seri menerima data. Pada
mode 0 kaki %A# 'kaki P6.0. dipakai untuk mengirim data seri '%)2G>0>. dan juga untuk
menerima data seri '%)2G>1>.. Si:at ini terba5a pula pada saat port seri bekerja pada mode
1, 2 dan 6, meskipun pada mode;mode tersebut kaki %A# hanya dipakai untuk mengirim
data, agar kaki %A# bisa dipakai untuk menerima data terlebih dulu harus dibuat %)2G>1>.
Setelah reset bit %)2 bernilai =0>.
6. Pada mode kerja 2 dan mode kerja 6, port seri bekerja dengan 1 bit data, S<!* yang
kapasitasnya 8 bit tidak cukup untuk keperluan ini. <it ke;sembilan yang akan dikirim
terlebih dulu diletakkan di $<8 'bit 6., sedangkan bit %<8 'bit 2. merupakan bit yang dipakai
untuk menampung bit ke;sembilan yang diterima port seri.
/. Pada mode kerja 1, %<8 dipakai untuk menampung bit stop yang diterima, dengan
demikian apa bila %<8 bernilai =1> maka data diterima dengan benar, sebaliknya apa bila
%<8G>0> berarti terjadi kesalahan kerangka ':raming error..
0alau bit S&2 'bit 5. bernilai =1>, jika terjadi kesalahan kerangka, %7 tidak akan menjadi =1>
meskipun S<!* sudah berisi data dari port seri.
<it ke 1 ini bisa dipakai sebagai bit pariti, hanya saja bit pariti yang dikirim harus ditentukan
sendiri dengan program dan diletakkan pada $<8, dan bit pariti yang diterima pada %<8
dipakai untuk menentukan integritas data secara program pula. $idak seperti dalam !,%$
standard, semuanya itu dikerjakan oleh perangkat keras dalam 7 !,%$.
5. <it $7 'bit 1. merupakan petanda yang setara dengan petanda $#%) '$ransmitter #ata
%egister )mpty. yang umum dijumpai pada !,%$ standard. Setelah port seri selesai
mengirim data yang disimpan ke;dalam S<!*, bit $7 akan bernilai =1> dengan sendirinya, bit
ini harus di;nol;kan dengan program agar bisa dipakai untuk memantau keadaan S<!* dalam
pengiriman data berikutnya.
Sub;rutin Serial(ut berikut dipakai untuk mengirim data seri, bisa dipakai untuk semua mode
port seri. <aris 02 menunggu $7 menjadi =1>, dimaksud untuk memastikan pengiriman data
sebelumnya sudah selesai. #ata yang akan dikirim sebelumnya sudah disimpan di ,, pada
baris 06 data tersebut dikirim melalui port seri dengan cara meletakannya di S<!*. ,gar $7
bisa dipakai untuk memantau keadaan S<!* pada pengiriman data berikutnya, pada baris 0/
$7 di;nol;kan.
01@ Serial(ut@
02@ 82< $7,M L tunggu data sebelumnya selesai dikirim
06@ &(C S<!*,, L kirim data baru
0/@ +% $7 L petanda ada pengiriman baru
05@ %)$
". <it %7 'bit 0. merupakan petanda yang setara dengan petanda %#%* '%eceiver #ata
%egister *ull. yang umum dijumpai pada !,%$ standard. Setelah S<!* menerima data dari
port seri, bit %7 akan bernilai =1> dengan sendirinya, bit ini harus di;nol;kan dengan program
agar bisa dipakai untuk memantau keadaan S<!* dalam penerimaan data berikutnya.
Sub;rutin Serial7n berikut dipakai untuk menerima data seri, bisa dipakai untuk semua mode
port seri. <aris 02 menunggu %7 menjadi =1>, dimaksud untuk memastikan sudah ada data
baru yang diterima pada S<!*. Pada baris 06 data pada S<!* diambil ke ,. ,gar %7 bisa
dipakai untuk memantau keadaan S<!* pada pengiriman data berikutnya, pada baris 0/ %7
di;nol;kan.
01@ Serial7n@
02@ 82< %7,M L tunggu S<!* berisi data baru
06@ &(C ,,S<!* L ambil data
0/@ +% %7 L pentanda data sudah diambil
05@ %)$
Mo'e $ port serial
!,%$ merupakan standard yang dipakai untuk komunikasi data seri dengan komputer,
komunikasi data seri dengan modem dan lain sebagainya.
0omunikasi data seri secara sinkron seperti mode 0, merupakan komunikasi data seri yang
banyak dipakai untuk menghubungkan 7;7 digital dalam sebuah sistem, misalnya pada 7
Serial ))P%(&, cara ini belakangan menjadi makin populer karena rangkaiannya sederhana
dan tidak makan tempat.
#alam dunia digital, dikenal 6 macam teknik transmisi data seri secara sinkron untuk
keperluan di atas, yang paling terkenal adalah teknik ciptaan Philips yang dinamakan sebagai
72 '7nter 7 ommunication., &otorola mengenalkan teknik yang dinamakan sebagai SP7
'Serial Peripheral 7nter:ace. dan 2ational Semiconductor menciptakan &icro4ire.
$ransmisi data seri yang dipakai pada mode 0, tidak sepadan dengan 6 teknik yang disebut di
atas, tapi dengan perancangan yang cermat mode 0 ini bisa dihubungkan ke SP7, sehingga
bisa dipakai untuk menghubungkan &S51 dengan mikrokontroler &otorola &"8-11.
Sinyal data seri sinkron yang ada pada kaki P6.0 dan P6.1, sesungguhnya murni merupakan
sinyal yang biasa dipakai untuk mengendalikan shi:t;register, dengan demikian dengan
menghubungkan shi:t register ke port seri, bisa menambah port input maupun port output
dengan mudah.

<aud %ate
<aud rate pada mode 0 adalah tertentu@ pada mode 0, <aud %ate G 1?12 A *rekuensi (silator.
<aud rate pada mode 2 bergantung pada nilai bit S&(# pada S*% P(2. 8ika S&(# G 0,
baud rate adalah 1?"/ :rekuensi osilator. 8ika S&(#G1, baud rate adalah 1?62 :rekuensi
osilator. Penentuan baud rate mode 2 adalah sebagai berikut@
Sedangkan baud rate pada mode 1 dan 6 ditentukan oleh nilai laju over:lo5 dari $imer 1.
&enggunakan $imer 1 untuk membangkitkan <aud %ate
0etika timer 1 digunakan untuk membangkitkan clock baud rate, baud rate pada mode 1 dan
6 adalah ditentukan oleh laju over:lo5 timer 1 dan nilai dari S&(#. Penentuan baud rate
untuk mode 1 dan 6 adalah sebagai berikut@
7nterupsi timer 1 harus disable pada aplikasi ini. Pada kebanyakan aplikasi, timer ini
dioperasikan sebagai timer, dengan mode auto reload mode 2. Pada kasus ini baud rate
diberikan dengan rumus sebagai berikut@
1.>. Ba,asa &sem0ly
Secara :isik, kerja dari sebuah mikrokontroler dapat dijelaskan sebagai siklus pembacaan
instruksi yang tersimpan di dalam memori. &ikrokontroler menentukan alamat dari memori
program yang akan dibaca, dan melakukan proses baca data di memori. #ata yang dibaca
diinterprestasikan sebagai instruksi. ,lamat instruksi disimpan oleh mikrokontroler di
register, yang dikenal sebagai program counter. 7nstruksi ini misalnya program aritmatika
yang melibatkan 2 register. Sarana yang ada dalam program assembly sangat minim, tidak
seperti dalam bahasa pemrograman tingkat atas 'high level language programming.
semuanya sudah siap pakai. Penulis program assembly harus menentukan segalanya,
menentukan letak program yang ditulisnya dalam memori;program, membuat data konstan
dan tablel konstan dalam memori;program, membuat variabel yang dipakai kerja dalam
memori;data dan lain sebagainya.
1.>.1 Program sum0er assem0ly
Program;sumber assembly 'assembly source program. merupakan kumpulan dari baris;baris
perintah yang ditulis dengan program penyunting;teks 'teAt editor. sederhana, misalnya
program )#7$.(& dalam #(S, atau program 2($)P,# dalam 4indo5s atau &7#);51.
0umpulan baris;printah tersebut biasanya disimpan ke dalam :ile dengan nama ekstensi
Y.,S& dan lain sebagainya, tergantung pada program ,ssembler 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 / 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.
,ntara bagian;bagian tersebut dipisahkan dengan sebuah spasi atau tabulator.
Bagian la0el
+abel dipakai untuk memberi nama pada sebuah baris;perintah, agar bisa mudah
menyebitnya dalam penulisan program. +abel bisa ditulis apa saja asalkan dia5ali dengan
huru:, biasa panjangnya tidak lebih dari 1" huru:. -uru:;huru: berikutnya boleh merupakan
angka atau tanda titik dan tanda garis ba5ah. 0alau 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.
#alam 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.
<agian 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 %o'e operasi
0ode operasi 'operation code atau sering disingkat sebagai (pode. merupakan bagian
perintah yang harus dikerjakan. #alam hal ini dikenal dua macam kode operasi, yang pertama
adalah kode;operasi untuk mengatur kerja mikroprosesor ? mikrokontroler. 8enis kedua
dipakai untuk mengatur kerja program assembler, sering dinamakan sebagai assembler
directive.
0ode;operasi ditulis dalam bentuk mnemonic, yakni bentuk singkatan;singkatan yang relatip
mudah diingat, misalnya adalah &(C, ,,++, %)$ dan lain sebagainya. 0ode;operasi ini
ditentukan oleh pabrik pembuat mikroprosesor?mikrokontroler, dengan demikian setiap
prosesor mempunyai kode;operasi yang berlainan.
0ode;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.
$ugas penerjemahan tersebut dilakukan oleh program yang dinamakan sebagai Program
,ssembler.
#i 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 '(%3., dipakai untuk membentuk variabel '#S.,
membentuk tabel dan data konstan '#<, #4. dan lain sebagainya.
Bagian operan'
(perand 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.
<entuk operand sangat bervariasi, bisa berupa kode;kode yang dipakai untuk menyatakan
%egister 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.
!ntuk 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.
#i samping itu operand bisa berupa persamaan matematis sederhana atau persamaan
<oolean, dalam hal semacam ini program ,ssembler akan menghitung nilai dari persamaan;
persamaan dalam operand, selanjutnya merubah hasil perhitungan tersebut ke kode biner
yang dimengerti oleh prosesor. 8adi perhitungan di dalam operand dilakukan oleh program
assembler bukan oleh prosesorN
Bagian %omentar
<agian komentar merupakan catatan;catatan penulis program, bagian ini meskipun tidak
mutlak diperlukan tapi sangat membantu masalah dokumentasi. &embaca 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 huru: pertama dari komentar sering;sering berupa tanda titik;koma,
merupakan tanda pemisah khusus untuk komentar.
!ntuk keperluan dokumentasi yang intensip, sering;sering sebuah baris yang merupakan
komentar saja, dalam hal ini huru: pertama dari baris bersangkutan adalah tanda titik;koma.
,$81S51 memiliki sekumpulan instruksi yang sangat lengkap. 7nstruksi &(C untuk byte
dikelompokkan sesuai dengan mode pengalamatan 'addressing modes.. &ode pengalamatan
menjelaskan bagaimana operand dioperasikan. <erikut penjelasan dari berbagai mode
pengalamatan. <entuk program assembly yang umum ialah sebagai berikut @
a0el3Sim0ol Opco'e Operan' ?omentar
(rg 0-
Start@
0iri@
#elay@
#el1@
#el2@
&ov
&ov
&ov
all
%+
#)
82)
Sjmp
mov
mov
djnU
djnU
ret
end
,, H11111110b
%0, H9
P0, ,
#elay
,
%0
%0, H0, 0iri
Start
%1, H255
%2, H255
%2, del2
%1, del1
L 7si ,kumulator
L 7si %0 dengan 9
L opy , ke P0
L Panggil #elay
7si memori ialah bilangan heksadesimal yang dikenal oleh mikrokontroler kita, yang
merupakan representasi dari bahasa assembly yang telah kita buat. &nemonic atau opcode
ialah kode yang akan melakukan aksi terhadap operand . (perand ialah data yang diproses
oleh opcode. Sebuah opcode bisa membutuhkan 1 ,2 atau lebih operand, kadang juga tidak
perlu operand. Sedangkan komentar dapat kita berikan dengan menggunakan tanda titik koma
'L.. <erikut contoh jumlah operand yang berbeda beda dalam suatu assembly.
82) %5,H22-, aksi Ldibutuhkan 6 buah operand
&(CJ I#P$%, , Ldibutuhkan 2 buah operand
%+ , L1 buah operand
2(P L tidak memerlukan operand
Program yang telah selesai kita buat dapat disimpan dengan ekstension .asm. +alu kita dapat
membuat program objek dengan ekstension -)J dengan menggunakan compiler &7#);51,
yang dijelaskan sebagai berikut@
1.>.2 &ssem0ly isting
Program;sumber assembly di atas, setelah selesai ditulis diserahkan ke program ,ssembler
untuk diterjemahkan. Setiap prosesor mempunyai program assembler tersendiri, bahkan satu
macam prosesor bisa memiliki beberapa macam program ,ssembler buatan pabrik perangkat
lunak yang berlainan.
-asil utama pengolahan program ,ssembler adalah program;obyek. Program;obyek ini bisa
berupa sebuah :ile 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 ,ssembly +isting di 3ambar 2.
<agian kanan 3ambar 2 merupakan program;sumber ,ssembly karya asli penulis program,
setelah diterjemahkan oleh program ,ssembler 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 ,ssembly +isting.
&embaca ,ssembly +isting bisa memberikan gambaran yang lebih jelas bagi program yang
ditulis, bagi pemula ,ssembly +isting memberi pengertian yang lebih mendalam tentang isi
memori;program, sehingga bisa lebih dibayangkan bagaimana kerja dari sebuah program.
Line Addr Code Source
1: Org 0H
2: 0000 74 FE Start: Mov A,#11111110b
3: 0002 78 07 Mov R0,#7
4: 0004 F5 80 Kiri: Mov P0,A
5: 0006 12 00 1 a!! "#!a$
6: 000% 23 R& A
7: 000A 18 "E R0
8: 000' '8 00 F6 ()E R0,#0,Kiri
%: 000E 78 07 Mov R0,#7
10: 0010 F5 80 Ka*a*: Mov P0,A
11: 0012 12 00 1 a!! "#!a$
12: 0015 03 RR A
13: 0016 18 "E R0
14: 0017 '8 00 F6 ()E R0,#0,Ka*a*
15: 001A 80 E4 S+,- Start
16: .
17: 001 7% FF "#!a$: ,ov R1,#255
18: 001E 7A FF "#!1: ,ov R2,#255
1%: 0020 "A FE "#!2: /+*0 R2,/#!2
20: 0022 "% FA /+*0 R1,/#!1
21: 0024 22 r#t
22: #*/
1.5. Perang%at una%
1.8.1 ompiler &7#) Studio
&;7#) Studio adalah salah satu cara yang digunakan untuk menjalankan kompilasi untuk
divais &S;51. &;7#) Studio mempunyai beberapa :itur yang dapat digunakan untuk edit,
compil, dan debug :ile.
$he &;7#) Studio juga dapat digunakan untuk menulis program dalam bahasa . #engan
menggunakan so:t5are ini, maka kita dapat melihat error pada report :ile +S$.
3ambar 1.11. &;7#) Studio
<ila anda perhatikan pada menu toolbar dan menu pilihan, tampak terlihat disable. -al ini
karena :ile belum dibuat. !ntuk membuat sebuah :ile, lakukan langkah;langkah berikut@
1. &embuat *ile <aru
!ntuk membuat :ile baru, klik pada menu *ile atau short cut seperti yang ditunjukkan pada
gambar, sehingga akan tampak halaman kosong.
*igure 1.20. *ile baru dengan halaman kosong
2. Menulis se0ua, program
$ulis program assembly pada halaman kosong, dan lakukan penyimpanan :ile. <ila :ile telah
tersimpan maka akan tampak teks instruksi yang ber5arna;5arni. Sebagaimana yang
ditunjukan pada gambar 6.
3ambar 1.21 &enu penyimpanan :ile
3. ?ompilasi
,gar :ile dengan ekstensi ,S& tersebut dapat diloadkan ke mikrokontroller, maka perlu
dilakukan kompilasi dari :ile ,S& ke -)J.
3ambar 1.22 0ompilasi :ile
.. De0ug
3ambar 1.26 #ebug :ile