Anda di halaman 1dari 194

c c 



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 CPU 8 bit. Selain itu, pengalamatan
memori data 16 bit dapat juga dibangkitkan melalui register DPTR. Memori program ( ROM,
EPROM dan FLASH ) hanya dapat dibaca, tidak ditulis. Memori program dapat mencapai
sampai 64K byte. Pada 89S51, 4K byte memori program terdapat didalam chip. Untuk membaca
memori program eksternal mikrokontroller mengirim sinyal PSEN ( program store enable )

Gambar 1.1. Diagram blok mikrokontroller 8051

Memori data ( RAM ) menempati ruang alamat yang terpisah dari memori program. Pada
keluarga 8051, 128 byte terendah dari memori data, berada didalam chip. RAM eksternal
(maksimal 64K byte). Dalam pengaksesan RAM Eksternal, mikrokontroller mingirimkan sinyal
RD ( baca ) dan WR ( tulis ).
Gambar 1.2. Arsitektur Memori Mikrokontroller 8051

c c c    

Gambar 1.2. menunjukkan suatu peta bagian bawah dari memori program. Setelah reset CPU
mulai melakukan eksekusi dari lokasi 0000H. Sebagaimana yang ditunjukkan pada gambar 1.3,
setiap interupsi ditempatkan pada suatu lokasi tertentu pada memori program. Interupsi
menyebabkan CPU untuk melompat ke lokasi dimana harus dilakukan suatu layanan tertentu.
Interupsi Eksternal 0, sebagi contoh, menempatai lokasi 0003H. Jika Interupsi Eksternal 0 akan
digunakan, maka layanan rutin harus dimulai pada lokasi 0003H. Jika interupsi ini tidak
digunakan, lokasi layanan ini dapat digunakan untuk berbagai keperluan sebagai Memori
Program.

Gambar 1.3. Peta Interupsi mikrokontroller 8051

c c 

Pada gambar 1.2. menunjukkan ruang memori data internal dan eksternal pada keluarga 8051.
CPU membangkitkan sinyal RD dan WR yang diperlukan selama akses RAM eksternal. Memori
data internal terpetakan seperti pada gambar 1.2. Ruang memori dibagi menjadi tiga blok, yang
diacukan sebagai 128 byte lower, 128 byte upper dan ruang SFR.
Alamat memori data internal selalu mempunyai lebar data satu byte. Pengalamatan langsung
diatas 7Fh akan mengakses satu alamat memori, dan pengalamatan tak langsung diatas 7Fh akan
mengakses satu alamat yang berbeda. Demikianlah pada gambar 1.4 menunjukkan 128 byte
bagian atas dan ruang SFR menempati blok alamat yang sama, yaitu 80h sampai dengan FFh,
yang sebenarnya mereka terpisah secara fisik
128 byte RAM bagian bawah dikelompokkan lagi menjadi beberapa blok, seperti yang
ditunjukkan pada gambar 1.5. 32 byte RAM paling bawah, dikelompokkan menjadi 4 bank yang
masing-masing terdiri dari 8 register. Instruksi program untuk memanggil register-register ini
dinamai sebagai R0 sampai dengan R7. Dua bit pada Program Status Word (PSW) dapat
memilih register bank mana yang akan digunakan. Penggunaan register R0 sampai dengan R7 ini
akan membuat pemrograman lebih efisien dan singkat, bila dibandingkan pengalamatan secara
langsung.

Gambar 1.4. Memori data internal


Gambar 1.5. RAM internal 128 byte paling bawah

Semua pada lokasi RAM 128 byte paling bawah dapat diakses baik dengan menggunakan
pengalamatan langsung dan tak langsung. 128 byte paling atas hanya dapat diakses dengan cara
tak langsung, gambar 1.6.

Gambar 1.6. RAM internal 128 byte paling atas

c c  
 



Sebuah peta memori yang disebut ruang special function register ( SFR ) ditunjukkan pada
gambar berikut. Perhatikan bahwa tidak semua alamat-alamat tersebut ditempati, dan alamat-
alamat yang tak ditempati tidak diperkenankan untuk diimplementasikan. Akses baca untuk
alamat ini akan menghasilkan data random, dan akses tulis akan menghasilkan efek yang tak
jelas.
Accumulator
ACC adalah register akumulator. Mnemonik untuk instruksi spesifik akumulator ini secara
sederhana dapat disingkat sebagai A.
Register B
Register B digunakan pada saat opersi perkalian dan pembagian. Selain untuk keperluan tersebut
diatas, register ini dapat digunakan untuk register bebas.
Program Status Word
Register PSW terdiri dari informasi status dari program yang secara detail ditunjukkan pada
Tabel 1.1.
Stack Pointer
Register Pointer stack mempunyai lebar data 8 bit. Register ini akan bertambah sebelum data
disimpan selama eksekusi push dan call. Sementara stack dapat berada disembarang tempat
RAM. Pointer stack diawali di alamat 07h setelah reset. Hal ini menyebabkan stack untuk
memulai pada lokasi 08h.
Data Pointer
Pointer Data (DPTR) terdiri dari byte atas (DPH) dan byte bawah (DPL). Fungsi ini ditujukan
untuk menyimpan data 16 bit. Dapat dimanipulasi sebagai register 16 bit atau dua 8 bit register
yang berdiri sendiri.

Gambar 1.7. Peta SFR


Ports 0, 1, 2 dan 3

P0, P1, P2 dan P3 adalah SFR yang ditempati oleh Port 0, 1, 2 dan 3. Menulis suatu logika 1
terhadap sebuah bit dari sebuah port SFR ( P0, P1, P2 atau P3) menyebabkan pin output port
yang bersesesuaian akan berada dalam kondisi logika high µ1¶. Dan sebaliknya

Buffer Data Serial


Buffer serial sesungguhnya merupakan dua buah register yang terpisah, buffer pemancar dan
buffer penerima. Ketika data diisikan ke SBUF, maka akan menuju ke buffer pemancar dan
ditahan untuk proses transmisi. Ketika data diambil dari SBUF, maka akan berasal dari buffer
penerima.

Registers Timer
Pasangan register ( TH0, TL0) dan (TH1, TL1) adalah register pencacah 16 bit untuk Timer/
Counter 0 dan 1, masing-masing.

Register Control
Registers IP, IE, TMOD, TCON, SCON, dan PCON terdiri dari bit control dan status.

Program Status Word


PSW atau Program Status Word berisi bit-bit status yang berkaitan dengan kondisi atau keadaan
CPU mikrokontroler pada saat tersebut. PSW berada dalam lokasi ruang SFR ( perhatikan pada
gambar 1.9, dengan lokasi alamat D0h ). Pada PSW ini kita dapat memantau beberapa status
yang meliputi: carry bit, auxiliary carry ( untuk operasi BCD ), dua bit pemilih bank register, flag
overflow, sebuah bit paritas dan dua flag status yang bisa didifinisikan sendiri. Bit carry dapat
juga anda guakan pada keperluan operasi aritmatika, juga bisa digunakan sebagai universal
akumulator untuk beberapa operasi boolean.

Table 1.2.1 Program Status Word

MSB LSB
CY AC F0 RS1 RS0 OV - P

s  s  
PSW.7 CY Carry flag.
PSW.6 AC Auxilliary Carry flag. (For BCD operations.)
PSW.5 F0 Flag 0. (Available to the user for general purposes.)
Register bank select control bit 1.
PSW.4 RS1 Set/cleared by software to determine working register bank. (See
Note.)
Register bank select control bit 0.
PSW.3 RS0 Set/cleared by software todetermine working register bank. (See
Note.)
PSW.2 OV Overflow flag.
PSW.1 - User-definable flag.
Parity flag.
Set/cleared by hardware each instruction cycle to indicate an
PSW.0 P
odd/even number of ³one´ bits in the Accumulator, i.e., even
parity.

Bit RS0 dan RS1 dapat digunakan untuk memilih satu dari empat bank register sebagaimana
ditunjukkan pada tabel 19.2. Bit paritas dapat digunakan untuk mengetahuai jumlah logika '1'
pada akumulator: P=1 bila pada akumulator mempunyai logika '1' yang jumlahnya ganjil, dan
P=0 jika akumulator mempunyai logika '1' yang jumlahnya genap. Dua bit yang lain PSW1 dan
PSW5 dapat digunakan untuk berbagai macam tujuan

Tabel 1. 2. Alamat rekening bank

c  s  !""


!
0 0 0 00 h - 07 h
0 1 1 08 h - 0F h
1 0 2 10 h - 17 h
1 1 3 18 h - 1F h


c  
 
Mode pengalamatan, mengacu bagaimana anda mengalamati suatu lokasi memori tertentu Mode
pengalamatan pada set instruksi 8051 adalah ditunjukkan sebagai berikut

Immediate Addressing MOV A,#20h


Direct Addressing MOV A,30h
Indirect Addressing MOV A,@R0
External Direct MOVX A,@DPTR
Code Indirect MOVC A,@A+DPTR

c  c
"
!""

Immediate 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
atart:MOV 70h,#0h; put constant 0 into RAM 70h
MOV 71h,#1h;
MOV 72h,#2h;
end
;
Org 0h
atart:MOV DPTR,#1234h;put constant 1234 into DPTR
end
Org 0h
atart:MOV Pa ,#0; aelect register bank 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 R3,#3; put 3 into register 3
MOV R4,#4; put 4 into register 4
MOV R5,#5; put 5 into register 5
MOV R6,#6; put 6 into register 6
MOV R7,#7; put 7 into register 7
end
;
org 0h
atart:MOV Pa ,#8; aelect register bank 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 R3,#3; put 3 into register 3
MOV R4,#4; put 4 into register 4
MOV R5,#5; put 5 into register 5
MOV R6,#6; put 6 into register 6
MOV R7,#7; put 7 into register 7
end

Immediate addressing adalah pengalamatan yang sangat cepat karena nilai yang akan diloadkan
berada didalam instruksi tersebut.

c   
!""

Disebut direct addressing karena nilai yang akan disimpan didalam memori, diperoleh secara
langsung dari memori yang lain.

org 0h
atart:MOV A,30h;
end
Org 0h
atart:Mov 70h,#1;put constant 1 into RAM 70h
Mov A, 70h;copy RAM 70 content into Acc
Mov A,#0 ;put constant 0 into Acc
Mov 90h,A ;copy Acc content into RAM 90h
end
Inbyte equ 70h
Port1 equ 90h
Org 0h
atart:Mov Inbyte,#3;put constant 3 into RAM 70h
Mov A,Inbyte ;copy RAM 70h content into Acc
Mov A,#0 ;Clear accumulator
Mov Port1,A ;copy Acc content into RAM 90h
end
Org 0h
Mov DPTR,#Character
atart:Mov A, #0
Inc DPTR
Movc A, @A+DPTR
Mov R0,A
amp atart
Character:
DB 0,1,2,3,4,5,6,7,8,9

c   "
!""

Indirect addressing adalah mode pengalamatan yang sangat ampuh, yang memberikan
fleksibelitas dalam hal transfer data. Indirect addressing juga satu-satunya cara untuk mengakses
128 byte ekstra dari internal RAM yang ditemukan pada keluarga 8052.

MOV A,@R0

Instruksi ini menyebabkan 8051 menganalisa nilai dari register R0. 8051 kemudian akan
mengambil data dari akumulator dengan nilai yang berasal dari alamat RAM internal yang
ditunjukkan oleh R0. Sebagai contoh, misal R0 akan digunakan untuk menandai alamat RAM
40h yang berisi data 67h. Ketika instruksi diatas, dieksekusi maka 8051 akan melihat nilai dari
R0, yang berisi 40h, dan mengirimkan isi RAM 40h (dalam hal ini mempunyai nilai 67h) ke
akumulator.

MOV R0,#99h ;
MOV @R0,#01h;

Instruksi tersebut adalah tidak valid. Karena indirect addressing selalu mengacu ke RAM
internal, dua instruksi ini akan menulis nilai 01 ke RAM internal alamat 99h pada 8052. Pada
8051 instruksi tersebut akan menghasilkan hasil yang tak terdifinisi, karena 8051 hanya
mempunyai internal RAM 128 byte

Org 0h
atart:Mov Pa , #0 ; choose register bank 0
Mov R0, #78h; put constant 78h into R0
Mov @R0, #1 ; put contanta 1 into 78h
end
Org 0h
atart:Mov Pa ,#0; pilih register bank 1
Mov R0,90h; copy RAM 90h content into R0
Mov @R0,#1; put constant 1 into 90h
End
;

c  
  

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

Objek 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. Kombinasi dari µkata kerja¶ dan objek itulah yang membentuk perintah
pengatur kerja mikrokontroler.
Intruksi MOV A,$7F merupakan contoh sebuah intruksi dasar yang sangat spesifik, MOV
merupakan µkata kerja¶ yang memerintahkan peng-copy-an data, merupakan predikat dalam
kalimat perintah ini. Sedangkan objeknya adalah data yang di-copy-kan, dalam hal ini adalah
data yang ada di dalam memori nomor $7F di-copy-kan ke Akumulator A.
Penyebutan data dalam MCS51
Data bisa berada diberbagai tempat yang berlainan, dengan demikian dikenal beberapa cara
untuk menyebut data (dalam bahasa Inggris sering disebut sebagai µAddressing Mode¶), antara
lain sebagai berikut.
1. Penyebutan data konstan (immediate addressing mode): MOV A,#$20. Data konstan
merupakan data yang berada di dalam instruksi. Contoh instruksi ini mempunyai makna data
konstan $20 (sebagai data konstan ditandai dengan µ#¶) di-copy-kan ke Akumulator A. Yang
perlu benar-benar diperhatikan dalam perintah ini adalah bilangan $20 merupakan bagian dari
instruksi.
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 : MOV A,$30. Contoh instruksi ini mempunyai makna data yang berada di dalam memori
nomor $30 di-copy-kan ke Akumulator. Sekilas intruksi ini sama dengan instruksi data konstan
di atas, perbedaannya instruksi di atas memakai tanda µ#¶ yang menandai $20 adalah data
konstan, sedangkan dalam instruksi ini karena tidak ada tanda µ#¶ maka $30 adalah nomor dari
memori.
3. Penyebutan data secara tidak langsung (indirect addressing mode), cara ini dipakai untuk
menunjuk data yang berada di dalam memori, kalau memori penyimpan data ini letaknya
berubah-rubah sehingga nomor memori tidak disebut secara langsung tapi di-µtitip¶-kan ke
register lain : MOV A,@R0.
4. Dalam instruksi ini register serba guna R0 dipakai untuk mencatat nomor memori, sehingga
instruksi ini mempunyai makna memori yang nomornya tercatat dalam R0 isinya di-copy-kan ke
Akumulator A.
5. Tanda µ@¶ dipakai untuk menandai nomor memori disimpan di dalam R0.
6. Bandingkan dengan instruksi penyebutan nomor memori secara langsung di atas, dalam
instruksi ini nomor memori terlebih dulu disimpan di R0 dan R0 berperan menunjuk memori
mana yang dipakai, sehingga kalau nilai R0 berubah memori yang ditunjuk juga akan berubah
pula.
7. Dalam instruksi ini register serba guna R0 berfungsi dengan register penampung alamat
(indirect address register), selain R0 register serba guna R1 juga bisa dipakai sebagai register
penampung alamat.
8. Penyebutan data dalam register (register addressing mode): MOV A,R5. Instruksi ini
mempunyai makna data dalam register serba guna R5 di-copy-kan ke Akumulator A. Instruksi
ini membuat register serba guna R0 sampai R7 sebagai tempat penyimpan data yang sangat
praktis yang kerjanya sangat cepat.
9. Data yang dimaksud dalam bahasan di atas semuanya berada di dalam memori data (termasuk
register serba guna letaknya juga di dalam memori data). Dalam penulisan program, sering-
sering diperlukan tabel baku yang disimpan bersama dengan program tersebut. Tabel semacam
ini sesungguhnya merupakan data yang berada di dalam memori program!
10. Untuk keperluan ini, MCS51 mempunyai cara penyebutan data dalam memori program yang
dilakukan secara indirect (code indirect addressing mode) : MOVC A,@A+DPTR.
Perhatikan dalam instruksi ini MOV digantikan dengan MOVC, tambahan huruf C tersebut
dimaksud untuk membedakan bahwa instruksi ini dipakai di memori program. (MOV tanpa
huruf C artinya instruksi dipakai di memori data).
Tanda µ@¶ dipakai untuk menandai A+DPTR dipakai untuk menyatakan nomor memori yang
isinya di-copy-kan ke Akumulator A, dalam hal ini nilai yang tersimpan dalam DPTR (Data
Pointer Register - 2 byte) ditambah dengan nilai yang tersimpan dalam Akumulator A (1 byte)
dipakai untuk menunjuk nomor memori program.

Secara keseluruhan AT8951 mempunyai sebanyak 255 macam instruksi, yang dibentuk dengan
mengkombinasikan µkata kerja¶ dan objek. ³Kata kerja¶ tersebut secara kelompok dibahas
sebagai berikut :

c  c   "


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

MOV A,$20
MOV A,@R1
MOV A,P1
MOV P3,A

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

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


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

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

!""
 "
#$


 
 
 " 
 

Mov A,<src> A=<src> V V V V 1
Mov <dest>,A <dest>=A V V V V 1
Mov <dest>,
<dest>=<src> V V V V 1
<src>
Mov DPTR=16 bit
Accumulator Only 1
DPTR,#data16 immediate const
Push <src> Inc SP V V V 1
Pop <src> Dec SP Data Pointer Only 2
Acc and <byte>
Xch A,<byte> Accumulator Only 1
exchange data
Acc and @Ri
Xchd A,@Ri V V V 1
exchange low nibbles


c    !  


%!"!

Isi Akumulator A ditambah dengan bilangan 1 byte, hasil penjumlahan akan ditampung kembali
dalam Akumulator. Dalam operasi ini bit Carry (C flag dalam PSW ± Program Status Word)
berfungsi sebagai penampung limpahan hasil penjumlahan. Jika hasil penjumlahan tersebut
melimpah (nilainya lebih besar dari 255) bit Carry akan bernilai µ1¶, kalau tidak bit Carry
bernilai µ0¶. ADDC sama dengan ADD, hanya saja dalam ADDC nilai bit Carry dalam proses
sebelumnya ikut dijumlahkan bersama.
Bilangan 1 byte yang ditambahkan ke Akumulator, bisa berasal dari bilangan konstan, dari
register serba guna, dari memori data yang nomor memorinya disebut secara langsung maupun
tidak langsung, seperti terlihat dalam contoh berikut :

ADD A,R0 ; register serba guna


ADD A,#$23 ; bilangan konstan
ADD A,@R0 ; no memori tak langsung
ADD A,P1 ; no memori langsung (port 1)


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

SUBB A,R0 ; A = A - R0 - C
SUBB A,#$23 ; A = A - $23
SUBB A,@R1
SUBB A,P0


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


% !s
Bilangan biner 8 bit dalam Akumulator A dikalikan dengan bilangan biner 8 bit dalam register B.
Hasil perkalian berupa bilangan biner 16 bit, 8 bit bilangan biner yang bobotnya lebih besar
ditampung di register B, sedangkan 8 bit lainnya yang bobotnya lebih kecil ditampung di
Akumulator A.
Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai hasil perkalian yang
ada dalam register B. Bit OV akan bernilai µ0¶ jika register B bernilai $00, kalau tidak bit OV
bernilai µ1¶.

MOV A,#10
MOV B,#20
MUL AB


% !s
Bilangan biner 8 bit dalam Akumulator A dibagi dengan bilangan biner 8 bit dalam register B.
Hasil pembagian berupa bilangan biner 8 bit ditampung di Akumulator, sedangkan sisa
pembagian berupa bilangan biner 8 bit ditampung di register B.
Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai sebelum pembagian
yang ada dalam register B. Bit OV akan bernilai µ1¶ jika register B asalnya bernilai $00.

Table 1.3. Instruksi Aritmatika

!""
 "
#$


 
 
 " 
 

Add A,<byte> A=A+<byte> V V V V 1
Addc A,<byte> A=A+<byte>+C V V V V 1
Subb A,<byte> A=A-<byte>-C V V V V 1
Inc A A=A+1 Accumulator Only 1
Inc <byte> <byt>=<byt>+1 V V V 1
Inc DPTR DPTR=DPTR+1 Data Pointer Only 2
Dec A A=A-1 Accumulator Only 1
Dec <byte> <byt>=<byt>-1 V V V 1
Mul AB B:A=BxA Accumulator and B Only 4
A=Int[A/B]
Div AB Accumulator and B only 4
B=Mod[A/B]
DA A Dec Adjust Accumulator Only 1


c      

Kelompok perintah ini dipakai untuk melakukan operasi logika mikrokontroler MCS51, operasi
logika yang bisa dilakukan adalah operasi AND (kode operasi ANL), operasi OR (kode operasi
ORL) dan operasi Exclusive-OR (kode operasi XRL).
Data yang dipakai dalam operasi ini bisa berupa data yang berada dalam Akumulator atau data
yang berada dalam memori-data, hal ini sedikit berlainan dengan operasi aritmatik yang harus
melihatkan Akumulator secara aktip.
Hasil operasi ditampung di sumber data yang pertama.

1. Operasi logika AND banyak dipakai untuk me-µ0¶-kan beberapa bit tertentu dari sebuah
bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data
konstan yang di-ANL-kan bilangan asal. Bit yang ingin di-µ0¶-kan diwakili dengan µ0¶ pada data
konstan, sedangkan bit lainnya diberi nilai µ1¶, misalnya. Instruksi ANL P1,#%01111110 akan
mengakibatkan bit 0 dan bit 7 dari Port 1 (P1) bernilai µ0¶ sedangkan bit-bit lainnya tetap tidak
berubah nilai.

2. Operasi logika OR banyak dipakai untuk me-µ1¶-kan beberapa bit tertentu dari sebuah
bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data
konstan yang di-ORL-kan bilangan asal. Bit yang ingin di-µ1¶-kan diwakili dengan µ1¶ pada data
konstan, sedangkan bit lainnya diberi nilai µ0¶, misalnya :Instruksi ORL A,#%01111110 akan
mengakibatkan bit 1 sampai dengan bit 6 dari Akumulator bernilai µ1¶ sedangkan bit-bit lainnya
tetap tidak berubah nilai.
3. Operasi logika Exclusive-OR banyak dipakai untuk membalik nilai (complement) beberapa bit
tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit
sebagai data konstan yang di-XRL-kan bilangan asal. Bit yang ingin dibalik-nilai diwakili
dengan µ1¶ pada data konstan, sedangkan bit lainnya diberi nilai µ0¶, misalnya: Instruksi XRL
A,#%01111110 akan mengakibatkan bit 1 sampai dengan bit 6 dari Akumulator berbalik nilai,
sedangkan bit-bit lainnya tetap tidak berubah nilai.

!""
 "
#$


 
 
 " 
 

Anl A,<byte> A=A and <byte> V V V V 1
Anl <byte>,A <byte>=<byte>anl A V V V V 1
Anl <byte>,#data <byte>=<byte>and #data V V V V 1
Orl A,<byte> A=A or <byte> Accumulator Only 1
Orl <byte>,A <byt>=<byt>orl A V V V 1
Orl <byte>,#data <byte>=<byte> or #data Data Pointer Only 2
Xrl A,<byte> A=A xor<byte> Accumulator Only 1
Xrl<byte>,A <byt>=<byt>xor A V V V 1
Xrl <byte>,#data <byte>=<byte>xor #data Accumulator and B Only 4
CLR A A=00h Accumulator only 1
CPL A A= not A Accumulator only 1
RL A Rotate A left 1 bit Accumulator only 1
Rotate A left trough
RLC A Accumulator only 1
Carry
RR A Rotate A right 1 bit Accumulator only 1
Rotate A right trough
RRC Accumulator only 1
carry
SWAP A Swap nibbles in A Accumulator only 1

Operasi logika pada umumnya mencakup empat hal, yaitu operasi AND, operasi OR, operasi
EX-OR dan operasi NOT. MCS51 hanya bisa melaksanakan tiga jenis operasi logika yang ada,
yakni intruksi ANL (AND Logical) untuk operasi AND instruksi ORL (OR Logical) untuk
operasi OR, CPL (Complement bit) untuk operasi NOT.
Bit Carry pada PSW diperlakukan sebagai µakumulator bit¶, dengan demikian operasi AND dan
operasi OR dilakukan antara bit yang tersimpan pada bit Carry dengan salah satu dari 256 bit
data yang dibahas di atas. Contoh dari instruksi-instruksi ini adalah :

ANL C,P1.1
ANL C,/P1.2

Instruksi ANL C,P1.1 meng-AND-kan nilai pada bit Carry dengan nilai Port 1 bit 1 (P1.1), dan
hasil operasi tersebut ditampung pada bit Carry. Instruksi ANL C,/P1.1 persis sama dengan
instruksi sebelumnya, hanya saja sebelum di-AND-kan, nilai P1.1 dibalik (complemented) lebih
dulu, jika nilai P1.1=µ0¶ maka yang di-AND-kan dengan bit Carry adalah µ1¶, demikian pula
sebaliknya. Hal serupa berlaku pada instruksi ORL.
Instruksi CPL dipakai untuk membalik (complement) nilai semua 256 bit data yang dibahas di
atas. Misalnya :
CPL C
CPL P1.0

CPL C akan membalik nilai biner dalam bit Carry (jangan lupa bit Carry merupakan salah satu
bit yang ada dalam 256 bit yang dibahas di atas, yakni bit nomor $E7 atau PSW.7).

c  &   


Pada dasarnya program dijalankan intruksi demi instruksi, artinya selesai menjalankan satu
instruksi mikrokontroler langsung menjalankan instruksi berikutnya, untuk keperluan ini
mikrokontroler dilengkapi dengan Program Counter yang mengatur pengambilan intruksi secara
berurutan. Meskipun 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 JUMP (setara dengan statemen GOTO dalam Pascal), instruksi-instruksi untuk
membuat dan memakai sub-rutin/modul (setara dengan PROCEDURE dalam Pascal), instruksi-
instruksi JUMP bersyarat (conditional Jump, setara dengan statemen IF .. THEN dalam Pascal).
Di samping itu ada pula instruksi PUSH dan POP yang bisa memengaruhi alur program.
Karena Program Counter adalah satu-satunya register dalam mikrokontroler yang mengatur alur
program, maka kelompok instruksi pengatur program yang dibicarakan di atas, semuanya
merubah nilai Program Counter, sehingga pada saat kelompok instruksi ini dijalankan, nilai
Program Counter akan tidak akan runtun dari nilai instruksi sebelumnya.
Selain karena instruksi-instruksi di atas, nilai Program Counter bisa pula berubah karena
pengaruh perangkat keras, yaitu saat mikrokontroler di-reset atau menerima sinyal interupsi dari
perangkat input/output. Hal ini akan dibicarakan secara detail dibagian lagi.

Mikrokontroler menjalankan intruksi demi instruksi, selesai menjalankan satu instruksi


mikrokontroler langsung menjalankan instruksi berikutnya, hal ini dilakukan dengan cara nilai
Program Counter bertambah sebanyak jumlah byte yang membentuk instruksi yang sedang
dijalankan, dengan demikian pada saat instruksi bersangkutan dijalankan Program Counter selalu
menyimpan nomor memori-program yang menyimpan instruksi berikutnya.
Pada saat mikrokontroler menjalankan kelompok instruksi JUMP, nilai Program Counter yang
runtun sesuai dengan alur program diganti dengan nomor memori-program baru yang
dikehendaki programer.
Mikrokontroler MCS51 mempunyai 3 macam intruksi JUMP, yakni instruksi LJMP (Long
Jump), instruksi AJMP (Absolute Jump) dan instruksi SJMP (Short Jump). Kerja dari ketiga
instruksi ini persis sama, yakni memberi nilai baru pada Program Counter, kecepatan
melaksanakan ketiga instruksi ini juga persis sama, yakni memerlukan waktu 2 periode instruksi
(jika MCS51 bekerja pada frekuensi 12 MHz, maka instruksi ini dijalankan dalam waktu 2
mikro-detik), yang berbeda dalam jumlah byte pembentuk instruksinya, instruksi LJMP dibentuk
dengan 3 byte, sedangkan instuksi AJMP dan SJMP cukup 2 byte.

 '
Kode untuk instruksi LJMP adalah $02, nomor memori-program baru yang dituju dinyatakan
dengan bilangan biner 16 bit, dengan demikian instruksi ini bisa menjangkau semua memori-
program MCS51 yang jumlahnya 64 KiloByte. Instruksi LJMP terdiri atas 3 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 7.
Pemakaian instruksi LJMP bisa dipelajari dari potongan program berikut :
LJMP TugasBaru
«
ORG $2000
TugasBaru:
MOV A,P3.1

Dalam potongan program di atas, ORG adalah perintah pada assembler agar berikutnya
assembler bekerja pada memori-program nomor yang disebut di belakang ORG (dalam hal ini
minta assembler berikutnya bekerja pada memori-program nomor $2000). TugasBaru disebut
sebagai LABEL, yakni sarana assembler untuk menandai/ menamai nomor memori-program.
Dengan demikian, dalam potongan program di atas, memori-program nomor $2000 diberi nama
TugasBaru, atau bisa juga dikatakan bahwa TugasBaru bernilai $2000. (Catatan : LABEL ditulis
minimal satu huruf lebih kiri dari instruksi, artinya LABEL ditulis setelah menekan tombol
Enter, tapi instruksi ditulis setelah menekan tombol Enter, kemudian diikuti dengan 1 tombol
spasi atau tombol TAB).
Dengan demikian intruksi LJMP TugasBaru di atas, sama artinya dengan LJMP $2000 yang oleh
assembler akan diterjemahkan menjadi 02 20 00 (heksadesimal).

 !'
Nomor memori-program baru yang dituju dinyatakan dengan bilangan biner 11 bit, dengan
demikian instruksi ini hanya bisa menjangkau satu daerah memori-program MCS51 sejauh 2
KiloByte. Instruksi AJMP terdiri atas 2 byte, byte pertama merupakan kode untuk instruksi
AJMP (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 7.
Berikut ini adalah potongan program untuk menjelaskan pemakaian instruksi AJMP:

ORG $800
AJMP DaerahIni
AJMP DaerahLain
ORG $900
DaerahIni:
...
ORG $1000
DaerahLain:
...

Potongan program di atas dimulai di memori-program nomor $800, dengan demikian instruksi
AJMP DaerahIni bisa dipakai, karena nomor-memori $800 (tempat instruksi AJMP DaerahIni)
dan LABEL DaerahIni yang terletak di dalam satu daerah memori-progam 2 KiloByte yang
sama dengan. (Dikatakan terletak di dalam satu daerah memori-program 2 KiloByte yang sama,
karena bit nomor 11 sampai dengan bit nomor 15 dari nomor memorinya sama).
Tapi AJMP DaerahLain akan di-salah-kan oleh Assembler, karena DaerahLain yang terletak di
memori-program nomor $1000 terletak di daerah memori-program 2 KiloByte yang lain.
Karena instruksi AJMP hanya terdiri dari 2 byte, sedangkan instruksi LJMP 3 byte, maka
memakai instruksi AJMP lebih hemat memori-program dibanding dengan LJMP. Hanya saja
karena jangkauan instrusksi AJMP hanya 2 KiloByte, pemakaiannya harus hati-hati.
Memori-program IC mikrokontroler AT89C1051 dan AT89C2051 masing-masing hanya 1
KiloByte dan 2 KiloByte, dengan demikian program untuk kedua mikrokontroler di atas tidak
perlu memakai instruksi LJMP, karena program yang ditulis tidak mungkin menjangkau lebih
dari 2 KiloByte memori-program.

 '
Nomor memori-program dalam instruksi ini tidak dinyatakan dengan nomor memori-program
yang sesungguhnya, tapi dinyatakan dengan µpergeseran relatip¶ terhadap nilai Program Counter
saat instruksi ini dilaksanakan.
Pergeseran relatip tersebut dinyatakan dengan 1 byte bilangan 2¶s complement, yang bisa dipakai
untuk menyakatakan nilai antara ±128 sampai dengan +127. Nilai minus dipakai untuk
menyatakan bergeser ke instruksi-instruksi sebelumnya, sedangkan nilai positip untuk
menyatakan bergeser ke instruksi-instruksi sesudahnya.
Meskipun jangkauan instruksi SJMP hanya ±128 sampai +127, tapi instruksi ini tidak dibatasi
dengan pengertian daerah memori-program 2 KiloByte yang membatasi instruksi AJMP.

ORG $0F80
SJMP DaerahLain
...
ORG $1000
DaerahLain:

Dalam potongan program di atas, memori-program $0F80 tidak terletak dalam daerah memori-
program 2 KiloByte yang sama dengan $1000, tapi instruksi SJMP DaerahLain tetap bisa
dipakai, asalkan jarak antara instruksi itu dengan LABEL DaerahLain tidak lebih dari 127 byte.

 ()
Instruksi-instruksi untuk membuat dan memakai sub-rutin/modul program, selain melibatkan
Program Counter, melibatkan pula Stack yang diatur oleh Register Stack Pointer.
Sub-rutin merupakan suatu potong program yang karena berbagai pertimbangan dipisahkan dari
program utama. Bagian-bagian di program utama akan µmemanggil¶ (CALL) 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 RET pada akhir potongan
program sub-rutin. Program sub-rutin di-¶panggil¶ dengan instruksi ACALL atau LCALL.
Agar nantinya mikrokontroler bisa meneruskan alur program utama, pada saat menerima
instruksi ACALL atau LCALL, sebelum mikrokontroler pergi mengerjakan sub-rutin, nilai
Program Counter saat itu disimpan dulu ke dalam Stack (Stack adalah sebagian kecil dari
memori-data yang dipakai untuk menyimpan nilai Program Counter secara otomatis, kerja dari
Stack dikendalikan oleh Register Stack Poiner).
Selanjutnya mikrokontroler mengerjakan instruksi-instruksi di dalam sub-rutin sampai
menjumpai instruksi RET yang berfungsi sebagai penutup dari sub-rutin. Saat menerima
instruksi RET, nilai asal Program Counter sebelum mengerjakan sub-rutin yang disimpan di
dalam Stack, dikembalikan ke Program Counter sehingga mikrokontroler bisa meneruskan
pekerjaan di alur program utama.
Instruksi ACALL dipakai untuk me-µmanggil¶ program sub-rutin dalam daerah memori-program
2 KiloByte yang sama, setara dengan instruksi AJMP yang sudah dibahas di atas. Sedangkan
instruksi LCALL setara dengan instruksi LCALL, yang bisa menjangkau seluruh memori-
program mikrokontroler MCS51 sebanyak 64 KiloByte. (Tapi tidak ada instrusk SCALL yang
setara dengan instruksi SJMP).
Program untuk AT89C1051 dan AT89C2051 tidak perlu memakai instruksi LCALL.
Instruksi RET dipakai untuk mengakhiri program sub-rutin, di samping itu masih ada pula
instruksi RETI, yakni instruksi yang dipakai untuk mengakhiri Program Layanan Interupsi
(Interrupt Service Routine), yaitu semacam program sub-rutin yang dijalankan mikrokontroler
pada saat mikrokontroler menerima sinyal permintaan interupsi.
Catatan : Saat mikrokontroler menerima sinyal permintaaan interupsi, mikrokontroler akan
melakukan satu hal yang setara dengan intruksi LCALL untuk menjalankan Program Layanan
Interupsi dari sinyal interupsi bersangkutan. Di samping itu, mikrokontroler juga me-µmati¶-kan
sementara mekanisme layanan interupsi, sehingga permintaan interupsi berikutnya tidak
dilayani. Saat menerima instruksi RETI, makanisme layanan interusi kembali diaktipkan dan
mikrokontroler melaksanakan hal yang setara dengan instruksi RET.

  s



Instruksi Jump bersyarat merupakan instruksi inti bagi mikrokontroler, tanpa kelompok instruksi
ini program yang ditulis tidak banyak berarti. Instruksi-instruksi ini selain melibatkan Program
Counter, melibatkan pula kondisi-kondisi tertentu yang biasanya dicatat dalam bit-bit tertentu
yang dihimpun dalam Register tertentu.
Khusus untuk keluarga mikrokontroler MCS51 yang mempunyai kemampuan menangani operasi
dalam level bit, instruksi jump bersyarat dalam MCS51 dikaitkan pula dengan kemampuan
operasi bit MCS51.
Nomor memori-program baru yang harus dituju tidak dinyatakan dengan nomor memori-
program yang sesungguhnya, tapi dinyatakan dengan µpergeseran relatip¶ terhadap nilai Program
Counter saat instruksi ini dilaksanakan. Cara ini dipakai pula untuk instruksi SJMP.

 '*+'*
Instruksi JZ (Jump if Zero) dan instruksi JNZ (Jump if not Zero) adalah instruksi JUMP
bersyarat yang memantau nilai Akumulator A.

MOV A,#0
JNZ BukanNol
JZ Nol
...
BukanNol:
...
Nol :
...

Dalam contoh program di atas, MOV A,#0 membuat A bernilai nol, hal ini mengakibatkan
instruksi JNZ BukanNol tidak akan pernah dikerjakan (JNZ artinya Jump kalau nilai A<>0,
syarat ini tidak pernah dipenuhi karena saat instruksi ini dijalankan nilai A=0), sedangankan
instruksi JZ Nol selalu dikerjakan karena syaratnya selalu dipenuhi.

 '+'
Instruksi JC (Jump on Carry) dan instruksi JNC (Jump on no Carry) adalah instruksi jump
bersyarat yang memantau nilai bit Carry di dalam Program Status Word (PSW).
Bit Carry merupakan bit yang banyak sekali dipakai untuk keperluan operasi bit, untuk
menghemat pemakaian memori-program disediakan 2 instruksi yang khusus untuk memeriksa
keadaan bit Carry, yakni JC dan JNC. Karena bit akan diperiksa sudah pasti, yakni bit Carry,
maka instruksi ini cukup dibentuk dengan 2 byte saja, dengan demikian bisa lebih menghemat
memori program.

JC Periksa
JB PSW.7,Periksa

Hasil kerja kedua instruksi di atas sama, yakni MCS51 akan JUMP ke Periksa jika ternyata bit
Carry bernilai µ1¶ (ingat bit Carry sama dengan PSW bit 7). Meskipun sama tapi instruksi JC
Periksa lebih pendek dari instruksi JB PSW.7,Periksa, instruksi pertama dibentuk dengan 2 byte
dan instruksi yang kedua 3 byte.
Instruksi JBC sama dengan instruksi JB, hanya saja jika ternyata bit yang diperiksa memang
benar bernilai µ1¶, selain MCS51 akan JUMP ke instruksi lain yang dikehendaki MCS51 akan
me-nol-kan bit yang baru saja diperiksa

 's+'s+'s
Instruksi JB (Jump on Bit Set), instruksi JNB (Jump on not Bit Set) dan instruksi JBC (Jump on
Bit Set Then Clear Bit) merupakan instruksi Jump bersyarat yang memantau nilai-nilai bit
tertentu. Bit-bit tertentu bisa merupakan bit-bit dalam register status maupun kaki input
mikrokontroler MCS51.
Pengujian Nilai Boolean dilakukan dengan instruksi JUMP bersyarat, ada 5 instruksi yang
dipakai untuk keperluan ini, yakni instruksi JB (JUMP if bit set), JNB (JUMP if bit Not Set), JC
(JUMP if Carry Bit set), JNC (JUMP if Carry Bit Not Set) dan JBC (JUMP if Bit Set and Clear
Bit).
Dalam instruksi JB dan JNB, salah satu dari 256 bit yang ada akan diperiksa, jika keadaannya
(false atau true) memenuhi syarat, maka MCS51 akan menjalankan instruksi yang tersimpan di
memori-program yang dimaksud. Alamat memori-program dinyatakan dengan bilangan relatip
terhadap nilai Program Counter saat itu, dan cukup dinyatakan dengan angka 1 byte. Dengan
demikian instruksi ini terdisi dari 3 byte, byte pertama adalah kode operasinya ($29 untuk JB dan
$30 untuk JNB), byte kedua untuk menyatakan nomor bit yang harus diuji, dan byte ketiga
adalah bilangan relatip untuk instruksi tujuan.
Contoh pemakaian instruksi JB dan JNB sebagai berikut :

JB P1.1,$
JNB P1.1,$

Instruksi-instruksi di atas memantau kedaan kaki IC MCS51 Port 1 bit 1. Instruksi pertama
memantau P1.1, jika P1.1 bernilai µ1¶ maka MCS51 akan mengulang instruksi ini, (tanda $
mempunyai arti jika syarat terpenuhi kerjakan lagi instruksi bersangkutan). Instruksi berikutnya
melakukan hal sebaliknya, yakni selama P1.1 bernilai µ0¶ maka MCS51 akan tertahan pada
instruksi ini.

  
"

Instruksi-instruksi Jump bersyarat yang dibahas di atas, memantau kondisi yang sudah terjadi
yang dicatat MCS51. Ada dua instruksi yang melakukan dulu suatu proses baru kemudian
memantau hasil proses untuk menentukan apakah harus Jump. Kedua instruksi yang dimaksud
adalah instruksi DJNZ dan instruksi CJNE.

 '*
Instruksi DJNZ (Decrement and Jump if not Zero), merupakan instruksi yang akan mengurangi 1
nilai register serbaguna (R0..R7) atau memori-data, dan Jump jika ternyata setelah pengurangan
1 tersebut hasilnya tidak nol.
Contoh berikut merupakan potongan program untuk membentuk waktu tunda secara sederhana :
MOV R0,#$23
DJNZ R0,$

Instruksi MOV R0,#$23 memberi nilai $23 pada R0, selanjutnya setiap kali instruksi DJNZ R0,$
dikerjakan, MCS51 akan mengurangi nilai R0 dengan µ1¶, jika R0 belum menjadi nol maka
MCS51 akan mengulang instruksi tersebut (tanda $ dalam instruksi ini maksudnya adalah
kerjakan kembali instruksi ini). Selama mengerjakan 2 instruksi di atas, semua pekerjaan lain
akan tertunda, waktu tundanya ditentukan oleh besarnya nilai yang diisikan ke R0.

 '#
Instruksi CJNE (Compare and Jump if Not Equal) membandingkan dua nilai yang disebut dan
MCS akan Jump kalau kedua nilai tersebut tidak sama!

MOV A,P1
CJNE A,#$0A,TidakSama
...
SJMP EXIT
;
TidakSama:
...

Instruksi MOV A,P1 membaca nilai input dari Port 1, instruksi CJNE A,#$0A,Tidaksama
memeriksa apakah nilai Port 1 yang sudah disimpan di A sama dengan $0A, jika tidak maka
Jump ke TidakSama

c &  


8051 mempunyai 5 buah sumber interupsi. Dua buah interupsi eksternal, dua buah interupsi
timer dan sebuah interupsi port serial.
Meskipun 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 RESET pada IC mikroprosesor/mikrokontroler menerima sinyal reset (pada MCS51
sinyal tersebut berupa sinyal µ1¶ sesaat, pada prosesor lain umumnya merupakan sinyal µ0¶
sesaat), Program Counter diisi dengan sebuah nilai. Nilai tersebut dinamakan sebagai vektor
reset (reset vector), merupakan nomor awal memori-program yang menampung program yang
harus dijalankan.
Pembahasan di atas memberi gambaran bahwa proses reset merupakan peristiwa perangkat keras
(sinyal reset diumpankan ke kaki Reset) yang dipakai untuk mengatur kerja dari perangkat lunak,
yakni menentukan aliran program prosesor (mengisi Program Counter dengan vektor reset).
Program yang dijalankan dengan cara reset, merupakan program utama bagi prosesor.

Peristiwa perangkat keras yang dipakai untuk mengatur kerja dari perangkat lunak, tidak hanya
terjadi pada proses reset, tapi terjadi pula dalam proses interupsi.
Dalam proses interupsi, terjadinya sesuatu pada perangkat keras tertentu dicatat dalam flip-flop
khusus, flip-flop tersebut sering disebut sebagai µpetanda¶ (flag), catatan dalam petanda tersebut
diatur sedemikian rupa sehingga bisa merupakan sinyal permintaan interupsi pada prosesor. Jika
permintaan interupsi ini dilayani prosesor, Program Counter akan diisi dengan sebuah nilai. Nilai
tersebut dinamakan sebagai vektor interupsi (interrupt vector), yang merupakan nomor awal
memori-program yang menampung program yang dipakai untuk melayani permintaan interupsi
tersebut.
Program yang dijalankan dengan cara interupsi, dinamakan sebagai program layanan interupsi
(ISR - Interrupt Service Routine). Saat prosesor menjalankan ISR, pekerjaan yang sedang
dikerjakan pada program utama sementara ditinggalkan, selesai menjalankan ISR prosesor
kembali menjalankan program utama, seperti yang digambarkan dalam Gambar 1.

( (c ,s
- 
 



Sebuah prosesor bisa mempunyai beberapa perangkat keras yang merupakan sumber sinyal
permintaan interupsi, masing-masing sumber interupsi dilayani dengan ISR berlainan, dengan
demikian prosesor mempunyai beberapa vektor interupsi untuk memilih ISR mana yang dipakai
melayani permintaan interupsi dari berbagai sumber. Kadang kala sebuah vektor interupsi
dipakai oleh lebih dari satu sumber interupsi yang sejenis, dalam hal semacam ini ISR
bersangkutan harus menentukan sendiri sumber interupsi mana yang harus dilayani saat itu.
Jika 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 ISR, bisa jadi terjadi permintaan interupsi lain, jika
permintaan interupsi yang datang belakangan ini mempunyai perioritas lebih tinggi, ISR yang
sedang dikerjakan ditinggal dulu, prosesor melayani permintaan yang perioritas lebih tinggi,
selesai melayani interupsi perioritas tinggi prosesor meneruskan ISR semula, baru setelah itu
kembali mengerjakan program utama. Hal ini dikatakan sebagai interupsi bertingkat (nested
interrupt), tapi tidak semua prosesor mempunyai kemampuan melayani interupsi secara ini.

c & c  (

 .c
Seperti terlihat dalam Gambar 2, AT89C51 mempunyai 6 sumber interupsi, yakni Interupsi
External (External Interrupt) yang berasal dari kaki INT0 dan INT1, Interupsi Timer (Timer
Interrupt) yang berasal dari Timer 0 maupun Timer 1, Interupsi Port Seri (Serial Port Interrupt)
yang berasal dari bagian penerima dan bagian pengirim Port Seri.
Di samping itu AT89C52 mempunyai 2 sumber interupsi lain, yakni Interupsi Timer 2
bersumber dari Timer 2 yang memang tidak ada pada AT89C51.

Bit IE0 (atau bit IE1) dalam TCON merupakan petanda (flag) yang menandakan adanya
permintaan Interupsi Eksternal. Ada 2 keadaan yang bisa meng-aktip-kan petanda ini, yang
pertama karena level tegangan µ0¶ pada kaki INT0 (atau INT1), yang kedua karena terjadi
transisi sinyal µ1¶ menjadi µ0¶ pada kaki INT0 (atau INT1). Pilihan bentuk sinyal ini ditentukan
lewat bit IT0 (atau bit IT1) yang terdapat dalam register TCON.
1. Kalau bit IT0 (atau IT1) =¶0¶ maka bit IE0 (atau IE1) dalam TCON menjadi µ1¶ saat kaki
INT0=¶0¶.
2. Kalau bit IT0 (atau IT1) =¶1¶ maka bit IE0 (atau IE1) dalam TCON menjadi µ1¶ saat terjadi
transisi sinyal µ1¶ menjadi µ0¶ pada kaki INT0.
Menjelang prosesor menjalankan ISR dari Interupsi Eksternal, bit IE0 (atau bit IE1)
dikembalikan menjadi µ0¶, menandakan permintaan Interupsi Eksternal sudah dilayani. Namun
jika permintaan Interupsi Ekternal terjadi karena level tegangan µ0¶ pada kaki IT0 (atau IT1), dan
level tegangan pada kaki tersebut saat itu masih =¶0¶ maka bit IE0 (atau bit IE1) akan segera
menjadi µ1¶ lagi!

Bit TF0 (atau bit TF1) dalam TCON merupakan petanda (flag) yang menandakan adanya
permintaan Interupsi Timer, bit TF0 (atau bit TF1) menjadi µ1¶ pada saat terjadi limpahan pada
pencacah biner Timer 0 (atau Timer 1).
Menjelang prosesor menjalankan ISR dari Interupsi Timer, bit TF0 (atau bit TF1) dikembalikan
menjadi µ0¶, menandakan permintaan Interupsi Timer sudah dilayani.

Interupsi port seri terjadi karena dua hal, yang pertama terjadi setelah port seri selesai mengirim
data 1 byte, permintaan interupsi semacam ini ditandai dengan petanda (flag) TI=¶1¶. Yang
kedua terjadi saat port seri telah menerima data 1 byte secara lengkap, permintaan interupsi
semacam ini ditandai dengan petanda (flag) RI=¶1¶.
Petanda di atas tidak dikembalikan menjadi µ0¶ menjelang prosesor menjalankan ISR dari
Interupsi port seri, karena petanda tersebut masih diperlukan ISR untuk menentukan sumber
interupsi berasal dari TI atau RI. Agar port seri bisa dipakai kembali setelah mengirim atau
menerima data, petanda-petanda tadi harus di-nol-kan lewat program.

Petanda permintaan interupsi (IE0, TF0, IE1, TF1, RI dan TI) semuanya bisa di-nol-kan atau di-
satu-kan lewat instruksi, pengaruhnya sama persis kalau perubahan itu dilakukan oleh perangkat
keras. Artinya permintaan interupsi bisa diajukan lewat pemrograman, misalnya permintaan
interupsi eksternal IT0 bisa diajukan dengan instruksi SETB IE0.

c & 
 /  

Semua sumber permintaan interupsi yang di bahas di atas, masing-masing bisa di-aktip-kan atau
di-nonaktip-kan secara tersendiri lewat bit-bit yang ada dalam register IE (Interrupt Enable
Register).
Bit EX0 dan EX1 untuk mengatur interupsi eksternal INT0 dan INT1, bit ET0 dan ET1 untuk
mengatur interupsi timer 0 dan timer 1, bit ES untuk mengatur interupsi port seri, seperti yang
digambarkan dalam Gambar 2. Di samping itu ada pula bit EA yang bisa dipakai untuk mengatur
semua sumber interupsi sekali gus.
Setelah reset, semua bit dalam register IE bernilai µ0¶, artinya sistem interupsi dalam keadaan
non-aktip. Untuk mengaktipkan salah satu sistem interupsi, bit pengatur interupsi bersangkutan
diaktipkan dan juga EA yang mengatur semua sumber interupsi. Misalnya instruksi yang dipakai
untuk mengaktipkan interupsi ekternal INT0 adalah SETB EX0 disusul dengan SETB EA.

MSB LSB
#! 0 0 # #c #0c # #0

s  s  
Disables all interrupts. If EA=0, no interrupt will be acknowledged.
IE.7 EA If EA=1, each interrupt source is individually enabled or disabled
by setting or clearing its enable bit.
IE.6 - -
IE.5 - -
Enables or disables the Serial Port interrupt. If ES=0, the Serial
IE.4 ES
Port interrupt is disabled.
Enables or disables the Timer 1 Overflow interrupt. If ET1=0, the
IE.3 ET1
Timer 1 interrupt is disabled.
Enables or disables External Interrupt 1. If EX1=0, External
IE.2 EX1
interrupt 1 is disabled.
Enables or disables the Timer 0 Overflow interrupt. If ET0=0, the
IE.1 ET0
Timer 0 interrupt is disabled.
Enables or disables External interrupt 0. If EX0=0, External
IE.0 EX0
interrupt 0 is disabled.

c & 
  


Saat MCS51 menanggapi permintaan interupsi, Program Counter diisi dengan sebuah nilai yang
dinamakan sebagai vektor interupsi, yang merupakan nomor awal dari memori-program yang
menampung ISR untuk melayani permintaan interupsi tersebut. Vektor interupsi itu dipakai
untuk melaksanakan inststuksi LCALL yang diaktipkan secara perangkat keras.
Vektor interupsi untuk interupsi eksternal INT0 adalah $0003, untuk interupsi timer 0 adalah
$000B, untuk interupsi ekternal INT1 adalah $0013, untuk interupsi timer 1 adalah $001B dan
untuk interupsi port seri adalah $0023.
Jarak vektor interupsi satu dengan lainnya sebesar 8, atau hanya tersedia 8 byte untuk setiap ISR.
Jika sebuah ISR memang hanya pendek saja, tidak lebih dari 8 byte, maka ISR tersebut bisa
langsung ditulis pada memori-program yang disediakan untuknya. ISR yang lebih panjang dari 8
byte ditulis ditempat lain, tapi pada memori-program yang ditunjuk oleh vektor interupsi diisikan
instruksi JUMP ke arah ISR bersangkutan

 

 !""

IE0 0003H
TF0 000BH
IE1 0013H
TF1 001BH
RI + TI 0023H

c & & 


 

Masing-masing sumber interupsi bisa ditempatkan pada dua tingkatan perioritas yang berbeda.
Pengaturan tingkatan perioritas isi dilakukan dengan bit-bit yang ada dalam register IP (Interrupt
Priority).
Bit PX0 dan PX1 untuk mengatur tingkatan perioritas interupsi eksternal INT0 dan INT1, bit
PT0 dan PT1 untuk mengatur interupsi timer 0 dan timer 1, bit PS untuk mengatur interupsi port
seri, seperti yang digambarkan dalam Gambar 2.
Setelah reset, semua bit dalam register IP bernilai µ0¶, artinya semua sumber interupsi
ditempatkan pada tingkatan tanpa perioritas. Masing-masing sumber interupsi bisa ditempatkan
pada tingkatan perioritas utama dengan cara men-µsatu¶-kan bit pengaturnya. Misalnya interupsi
timer 0 bisa ditempatkan pada tingkatan perioritas utama dengan instruksi SETB PT1.
Sebuah ISR untuk interupsi tanpa perioritas bisa diinterupsi oleh sumber interupsi yang berada
dalam tingkatan perioritas utama. Tapi interupsi yang berada pada tingkatan perioritas yang
sama, tidak dapat saling meng-interupsi.
Jika 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.
Jika kedua permintaan tersebut bertempat pada tingkatan perioritas yang sama, perioritas akan
ditentukan dengan urutan sebagai berikut : interupsi eksternal INT0, interupsi timer 0, interupsi
ekternal INT1, interupsi timer 1 dan terakhir adalah interupsi port seri.
Bagan Lengkap Sistem Interupsi MCS51
Meskipun sistem interupsi MCS51 termasuk sederhana dibandingkan dengan sistem interupsi
MC68HC11 buatan Motorola, 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.
Gambar 2 menggambarkan sistem interupsi MCS51 selangkapnya, berikut dengan masing-
masing bit dalam register-register SFR (Special Function Register) yang dipakai untuk mengatur
masing-masing sumber interupsi.
Saklar yang digambarkan dalam Gambar 2 mewakili bit dalam register yang harus diatur untuk
mengendalikan sumber interupsi, kotak bergambar bendera kecil merupakan flag (petanda)
dalam register yang mencatat adanya permintaan interupsi dari masing-masing sumber interupsi.
Kedudukan saklar dalam gambar tersebut menggambarkan kedudukan awal setelah MCS51 di-
reset.
Gambar ini sangat membantu saat penulisan program menyangkut interupsi MCS51.


  

1 2

MSB LSB
0 0 0  c 0c  0

 
3
s  s  
IP.7 - -
IP.6 - -
IP.5 - -
Defines the Serial Port interrupt priority level. PS=1 programs it to
IP.4 PS
the higher priority level.
Defines the Timer 1 interrupt priority level. PT1=1 programs it to
IP.3 PT1
the higher priority level.
Defines the External Interrupt 1 priority level. PX1=1 programs it to
IP.2 PX1
the higher priority level.
Enables or disables the Timer 0 interrupt priority level. PT0=1
IP.1 PT0
programs it to the higher priority level.
Defines the External Interrupt 0 priority level. PX0=1 programs it to
IP.0 PX0
the higher priority level.


c .
 


Timer dan Counter 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 PWM (Pulse Width Modulation) dan sangat diperlukan untuk
aplikasi remote control dengan infra 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.
Terjadinya limpahan pencacah ini dicatat dalam sebuah flip-flop tersendiri.
Di samping itu, sinyal denyut yang diumpankan ke pencacah harus pula bisa dikendalikan
dengan mudah. Hal-hal yang dibicarakan di atas diringkas dalam Gambar 1.
MCS-51 mempunyai dua buah register timer/ counter 16 bit, yaitu Timer 0 dan Timer 1.
Keduanya dapat dikonfigurasikan untuk beroperasi sebagai timer atau counter, seperti yang
terlihat pada gambar di bawah.

Gambar 1.9. Konsep dasar Timer/Counter sebagai sarana input

Sinyal denyut yang diumpankan ke pencacah bisa dibedakan menjadi 2 macam, yang pertama
yalah sinyal denyut dengan frekuensi tetap yang sudah diketahui besarnya dan yang kedua
adalah sinyal denyut dengan frekuensi tidak tetap.
Jika sebuah pencacah bekerja dengan frekuensi tetap yang sudah diketahui besarnya, dikatakan
pencacah tersebut bekerja sebagai timer, karena kedudukan pencacah tersebut setara dengan
waktu yang bisa ditentukan dengan pasti.
Jika sebuah pencacah bekerja dengan frekuensi yang tidak tetap, dikatakan pencacah tersebut
bekerja sebagai counter, kedudukan pencacah tersebut hanyalah menyatakan banyaknya pulsa
yang sudah diterima pencacah.
Untaian pencacah biner yang dipakai, bisa merupakan pencacah biner menaik (count up binary
counter) atau pencacah biner menurun (count down binary counter).

c . c
+ 

Keluarga mikrokontroler MCS51, misalnya AT89C51 dan AT89Cx051, dilengkapi dengan dua
perangkat Timer/Counter, masing-masing dinamakan sebagai Timer 0 dan Timer 1. Sedangkan
untuk jenis yang lebih besar, misalnya AT89C52, mempunyai tambahan satu perangkat
Timer/Counter lagi yang dinamakan sebagai Timer 2.
Perangkat Timer/Counter tersebut merupakan perangkat keras yang menjadi satu dalam chip
mikrokontroler MCS51, bagi pemakai mikrokontroler MCS51 perangkat tersebut dikenal sebagai
SFR (Special Function Register) yang berkedudukan sebagai memori-data internal.
Pencacah biner untuk Timer 0 dibentuk dengan register TL0 (Timer 0 Low Byte, memori-data
internal nomor $6A) dan register TH0 (Timer 0 High Byte, memori-data internal nomor $6C).
Pencacah biner untuk Timer 1 dibentuk dengan register TL1 (Timer 1 Low Byte, memori-data
internal nomor $6B) dan register TH1 (Timer 1 High Byte, memori-data internal nomor $6D).
Pencacah biner pembentuk Timer/Counter MCS51 merupakan pencacah biner menaik (count up
binary counter) yang mencacah dari $0000 sampai $FFFF, saat kedudukan pencacah berubah
dari $FFFF kembali ke $0000 akan timbul sinyal limpahan.
Untuk mengatur kerja Timer/Counter dipakai 2 register tambahan yang dipakai bersama oleh
Timer 0 dan Timer 1. Register tambahan tersebut adalah register TCON (Timer Control Register,
memori-data internal nomor $88, bisa dialamat secara bit) dan register TMOD (Timer Mode
Register, memori-data internal nomor $89).
Pencacah biner Timer 0 dan 1
TL0, TH0, TL1 dan TH1 merupakan SFR (Special Function Register) yang dipakai untuk
membentuk pencacah biner perangkat Timer 0 dan Timer 1. Kapasitas keempat register tersebut
masing-masing 8 bit, bisa disusun menjadi 4 macam Mode pencacah biner seperti terlihat dalam
Gambar 2a sampai Gambar 2d.
Pada Mode 0, Mode 1 dan Mode 2 Timer 0 dan Timer 1 masing-masing bekerja sendiri, artinya
bisa dibuat Timer 0 bekerja pada Mode 1 dan Timer 1 bekerja pada Mode 2, atau kombinasi
mode lainnya sesuai dengan keperluan.
Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai bersama-sama untuk menyusun sistem timer yang
tidak bisa di-kombinasi lain.
Susunan TL0, TH0, TL1 dan TH1 pada masing-masing mode adalah sebagai berikut:

"
4
%s
c(

Gambar 1.10 Mode 0 - Pencacah Biner 13 Bit

Pencacah biner dibentuk dengan TLx (maksudnya bisa TL0 atau TL1) sebagai pencacah biner 5
bit (meskipun kapasitas sesungguhnya 8 bit), limpahan dari pencacah biner 5 bit ini dihubungkan
ke THx (maksudnya bisa TH0 atau TH1) membentuk sebuah untaian pencacah biner 13 bit,
limpahan dari pencacah 13 bit ini ditampung di flip-flop TFx (maksudnya bisa TF0 atau TF1)
yang berada di dalam register TCON.
Mode ini meneruskan sarana Timer yang ada pada mikrokontroler MCS48 (mikrokontroler
pendahulu MCS51), dengan maksud rancangan alat yang dibuat dengan MCS48 bisa dengan
mudah diadaptasikan ke MCS51. Mode ini tidak banyak dipakai lagi.

"
c4
%s
c5(
Gambar 1.11 Mode 1 - Pencacah Biner 16 Bit

Mode ini sama dengan Mode 0, hanya saja register TLx dipakai sepenuhnya sebagai pencacah
biner 8 bit, sehingga kapasitas pencacah biner yang tersbentuk adalah 16 bit. Seiring dengan
sinyal denyut, kedudukan pencacah biner 16 bit ini akan bergerak dari $0000 (biner 0000 0000
0000 0000), $0001, $0002 « sampai $FFFF (biner 1111 1111 1111 1111), kemudian melimpah
kembali menjadi $0000.

"
4
%s
,("
 

( (c c "


)
%s
,s"
 

TLx dipakai sebagai pencacah biner 8 bit, sedangkan THx dipakai untuk menyimpan nilai yang
diisikan ulang ke TLx, setiap kali kedudukan TLx melimpah (berubah dari $FF menjadi $00).
Dengan cara ini bisa didapatkan sinyal limpahan yang frekuensinya ditentukan oleh nilai yang
disimpan dalam TH0.

"
4((
%s
c5(",s

Gambar 1.13 Mode 3 ± Gabungan Pencacah Biner 16 Bit dan 8 Bit

Pada Mode 3 TL0, TH0, TL1 dan TH1 dipakai untuk membentuk 3 untaian pencacah, yang
pertama adalah untaian pencacah biner 16 bit tanpa fasiltas pemantau sinyal limpahan yang
dibentuk dengan TL1 dan TH1. Yang kedua adalah TL0 yang dipakai sebagai pencacah biner 8
bit dengan TF0 sebagai sarana pemantau limpahan. Pencacah biner ketiga adalah TH0 yang
dipakai sebagai pencacah biner 8 bit dengan TF1 sebagai sarana pemantau limpahan.
Register Pengatur Timer
Register TMOD dan register TCON merupakan register pembantu untuk mengatur kerja Timer 0
dan Timer 1, kedua register ini dipakai bersama oleh Timer 0 dan Timer 1.
Gambar 1.14 Denah susunan bit dalam register TMOD

Register TMOD dibagi menjadi 2 bagian secara simitris, bit 0 sampai 3 register TMOD (TMOD
bit 0 .. TMOD bit 3) dipakai untuk mengatur Timer 0, bit 4 sampai 7 register TMODE (TMOD
bit 4 .. TMOD bit 7) dipakai untuk mengatur Timer 1, pemakaiannya sebagai berikut :
1. Bit M0/M1 dipakai untuk menentukan Mode Timer seperti yang terlihat dalam Tabel di
Gambar 3a.
2. Bit C/T* dipakai untuk mengatur sumber sinyal denyut yang diumpankan ke pencacah biner.
Jika C/T*=0 sinyal denyut diperoleh dari osilator kristal yang frekuensinya sudah dibagi 12,
sedangkan jika C/T*=1 maka sinyal denyut diperoleh dari kaki T0 (untuk Timer 0) atau kaki T1
(untuk Timer 1).
3. Bit GATE merupakan bit pengatur saluran sinyal denyut. Bila bit GATE=0 saluran sinyal
denyut hanya diatur oleh bit TRx (maksudnya adalah TR0 atau TR1 pada register TCON). Bila
bit GATE=1 kaki INT0 (untuk Timer 0) atau kaki INT1 (untuk Timer 1) dipakai juga untuk
mengatur saluran sinyal denyut (lihat Gambar 4).

Gambar 1.15 Denah susunan bit dalam register TCON

Register TCON dibagi menjadi 2 bagian, 4 bit pertama (bit 0 .. bit 3, bagian yang diarsir dalam
Gambar 3b) dipakai untuk keperluan mengatur kaki INT0 dan INT1, ke-empat bit ini dibahas
dibagian lain.

MSB LSB
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
BIT SYMBOL FUNCTION
Timer 1 overflow flag. Set by hardware on Timer/Counter
TCON.7 TF1 overflow. Cleared by hardware when processor vector to interrupt
routine, or clearing the bit in software.
Timer 1 Run control bit . Set/ cleared by software to turn Timer/
TCON.6 TR1
Counter on/off
Timer 0 overflow flag. Set by hardware on Timer/Counter
TCON.5 TF0 overflow. Cleared by hardware when processor vector to interrupt
routine, or clearing the bit in software.
Timer 1 Run control bit . Set/ cleared by software to turn Timer/
TCON.4 TR0
Counter on/off
Interrupt 1 Edge flag. Set by hardware when external interrupt
TCON.3 IE1
edge detected. Cleared when interrupt processed.
Interrupt 1 type control bit. Set/ cleared by software to specefy
TCON.2 IT1
falling edge/ low level trigerred external interupts
Interrupt 0 Edge flag. Set by hardware when external interrupt
TCON.1 IE0
edge detected. Cleared when interrupt processed.
Interrupt 0 type control bit. Set/ cleared by software to specefy
TCON.0 IT0
falling edge/ low level trigerred external interupts

Sisa 4 bit dari register TCON (bit 4..bit 7) dibagi menjadi 2 bagian secara simitris yang dipakai
untuk mengatur Timer0/Timer 1, sebagai berikut:
1. Bit TFx (maksudnya adalah TF0 atau TF1) merupakan bit penampung limpahan (lihat Gambar
2), TFx akan menjadi µ1¶ setiap kali pencacah biner yang terhubung padanya melimpah
(kedudukan pencacah berubah dari $FFFF kembali menjadi $0000). Bit TFx di-nol-kan dengan
istruksi CLR TF0 atau CLR TF1. Jika sarana interupsi dari Timer 0/Timer 1 dipakai, TRx di-nol-
kan saat MCS51 menjalankan rutin layanan interupsi (ISR ± Interupt Service Routine).
2. Bit TRx (maksudnya adalah TR0 atau TR1) merupakan bit pengatur saluran sinyal denyut,
bila bit ini =0 sinyal denyut tidak disalurkan ke pencacah biner sehingga pencacah berhenti
mencacah. Bila bit GATE pada register TMOD =1, maka saluran sinyal denyut ini diatur
bersama oleh TRx dan sinyal pada kaki INT0/INT1 (lihat Gambar 4).

c . 



Gambar 4 merupakan bagan susunan rangkaian yang bisa terjadi pada Timer 1 secara lengkap,
digambarkan pula hubungan-hubungan semua register pembentuk dan pengatur Timer 1.
Gambar ini berlaku pula untuk Timer 0.
Dalam pemakaian sesungguhnya, rangkaian yang dipakai hanya sebagian dari rangkaian lengkap
tersebut, sesuai dengan keperluan sistem yang dibangun. Rangkaian yang dikehendaki dibentuk
dengan mengatur register TMODE, sedangkan kerja dari Timer dikendalikan lewat register
TCON.
Gambar 1.16. Diagram blok timer/ counter

Setelah MCS51 di-reset register TMOD bernilai $00, hal ini berarti :

1. bit C/T* =¶0¶, menurut Gambar 4 keadaan ini membuat saklar S1 ke posisi atas, sumber sinyal
denyut berasal dari osilator kristal yang frekuensinya sudah dibagi 12, pencacah biner yang
dibentuk dengan TL1 dan TH1 berfungsi sebagai timer. Jika sistem yang dirancang memang
menghendaki Timer 1 bekerja sebagai timer maka bit C/T* tidak perlu diatur lagi.
Tapi jika sistem yang dirancang menghendaki agar Timer 1 bekerja sebagai counter untuk
menghitung pulsa yang masuk lewat kakai T1 (P3.5), maka posisi saklar S1 harus dikebawahkan
dengan membuat bit C/T* menjadi µ1¶.
2. bit GATE=¶0¶, hal ini membuat output gerbang OR selalu µ1¶ tidak dipengaruhi keadaan µ0¶
atau µ1¶ pada kaki INT1 (P3.3). Dalam keadaan semacam ini, saklar S2 hanya dikendalikan lewat
bit TR1 dalam register TCON. Jika TR1=¶1¶ saklar S2 tertutup sehingga sinyal denyut dari S1
disalurkan ke sistem pencacah biner, aliran sinyal denyut akan dihentikan jika TR=¶0¶.
Sebaliknya jika bit GATE=¶1¶, output gerbang OR akan mengikuti keadaan kaki INT1, saat
INT1=¶0¶ apa pun keadaan bit TR1 output gerbang AND selalu =¶0¶ dan saklar S1 selalu
terbuka, agar saklar S1 bisa tertutup kaki INT1 dan bit TR1 harus =¶1¶ secara bersamaan.Jika
sistem yang dirancang menghendaki kerja dari timer/counter dikendalikan dari sinyal yang
berasal dari luar chip, maka bit GATE harus dibuat menjadi µ1¶
3. bit M1 dan M0=¶0¶, berarti TL1 dan TH1 disusun menjadi pencacah biner 13 bit (Mode 0),
jika dikehendaki Timer 1 bekerja pada mode 1 seperti terlihat dalam Gambar 4, maka bit M1
harus dibuat menjadi µ0¶ dan bit M0 menjadi µ1¶.
Pengetahuan di atas dipakai sebagai dasar untuk mengatur dan mengendalikan Timer seperti
terlihat dalam contoh-contoh berikut :
Setelah reset TMOD bernilai $00, berarti Timer 1 bekerja sebagai pencacah biner 13 bit, sumber
sinyal denyut dari osilator kristal atau Timer 1 bekerja sebagai µtimer¶, bit GATE =¶0¶ berarti
kaki INT1 tidak berpengaruh pada rangkaian sehingga Timer 1 hanya dikendalikan dari bit TR1.
Dalam pemakaian biasanya dipakai pencacah biner 16 bit, untuk keperluan itu instruksi yang
diperlukan untuk mengatur TMOD adalah :

MOV TMOD,#%00010000

Catatan dalam instruksi di atas tanda µ#¶ menyatakan bagian di belakangnya adalah bilangan
konstan yang akan diisikan ke TMOD, µ%¶ merupakan awalan yang menandakan bahwa
bilangan di belakangnya adalah bilangan biner. Penulisan dengan bilangan biner semacam ini,
memudahkan untuk mengenali dengan cepat bit-bit apa saja yang diisikan ke TMOD.
Bilangan biner %00010000 diisikan ke TMOD, berakibat bit 7 TMOD (bit GATE) bernilai µ0¶,
bit 6 (bit C/T*) bernilai µ0¶, bit 5 dan 4 (bit M1 dan M0) bernilai µ01¶, ke-empat bit ini dipakai
untuk mengatur Timer 1, sehingga Timer 1 bekerja sebagai timer dengan pencacah biner 16 bit
yang dikendalikan hanya dengan TR1.
Jika dikehendaki pencacah biner dipakai sebagai counter untuk mencacah jumlah pulsa yang
masuk lewat kaki T1 (P3.5), instruksinya menjadi :

MOV TMOD,#%01010000

Perbedaannya dengan instruksi di atas adalah dalam instruksi ini bit 6 (bit C/T*) bernilai µ1¶.
Selanjutnya jika diinginkan sinyal dari perangkat keras di luar chip MCS51 bisa ikut
mengendalikan Timer 1, instruksi pengatur Timer 1 akan menjadi :

MOV TMOD,#%11010000

Dalam hal ini bit 7 (bit GATE) bernilai µ1¶.


Setelah mengatur konfigurasi Timer 0 seperti di atas, pencacah biner belum mulai mencacah
sebelum diperintah dengan instruksi :
SETB TR1
Perlu diingatkan jika bit GATE = µ1¶, selama kaki INT1 bernilai µ0¶ pencacah biner belum akan
mencacah. Untuk menghentikan proses pencacahan, dipakai instruksi
CLR TR1
Di atas hanya dibahas Timer 1 saja, tata canya untuk Timer 0 persis sama. Yang perlu
diperhatikan adalah register TMOD dipakai untuk mengatur Timer 0 dan juga Timer 1,
sedangkan TMOD tidak bisa dialamati secara bit (non bit addressable) sehingga jika jika kedua
Timer dipakai, pengisian bit-bit dalam register TMOD harus dipikirkan sekali gus untuk Timer 0
dan Timer 1.
Bit TR1 dan TR0 yang dipakai untuk mengendalikan proses pencacahan, terletak di dalam
register TCON (memori-data internal nomor $88) yang bisa dialamati secara bit (bit
addressable). Sehingga TR0 dan TR1 bisa diatur secara terpisah (dengan perintah SETB atau
CLR), tidak seperti mengatur TMOD yang harus dilakukan secara bersamaan.
Demikian pula bit penampung limpahan pencacah biner TF0 dan TF1, juga terletak dalam
register TCON 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. Mikrokontroller akan berfungsi sebagai timer ketika saklar diposisikan ke atas dan
sebaliknya akan berfungsi sebagai counter bila saklar diposisikan ke bawah, dengan mengontrol
bit C/T pada register TMOD. Posisi saklar sebelah kanan, bergantung pada bit GATE (register
TMOD), TR1 ( register TCON0 dan INT1.

c 5  


Umumnya orang selalu menganggap port seri pada MCS51 adalah UART 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.

Gambar 1.17. Komunikasi serial dengan komputer

Dikenal 2 macam cara transmisi data secara seri. Kedua 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 MCS51 bisa dipakai dalam 4 mode kerja yang berbeda. Dari 4 mode tersebut, 1 mode
diantaranya bekerja secara sinkron dan 3 lainnya bekerja secara asinkron. Secara ringkas ke-
empat mode kerja tersebut bisa dibedakan sebagai berikut:

"

Mode ini bekerja secara sinkron, data seri dikirim dan diterima melalui kaki P3.0 (RxD), dan
kaki P3.1 (TxD) dipakai untuk menyalurkan clock pendorong data seri yang dibangkitkan
MCS51.
Data dikirim/diterima 8 bit sekali gus, dimulai dari bit yang bobotnya paling kecil (bit 0) dan
diakhiri dengan bit yang bobotnya paling besar (bit 7). Kecepatan pengiriman data (baud rate)
adalah 1/12 frekuensi osilator kristal.

"
c
Mode ini dan mode-mode berikutnya bekerja secara asinkron, data dikirim melalui kaki P3.1
(TxD) dan diterima melalui kaki P3.0 (RxD).
Pada Mode 1 data dikirim/diterima 10 bit sekali gus, diawali 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
MCS51 yang berfungsi sebagai penerima bit stop ditampung pada RB8 dalam register SCON.
Kecepatan pengiriman data (baud rate) bisa diatur sesuai dengan keperluan.
Mode inilah yang umum dikenal sebagai UART (Universal Asynchronous
Receiver/Transmitter).

"

Data dikirim/diterima 11 bit sekali gus, diawali dengan 1 bit start, disusul 8 bit data yang dimulai
dari bit yang bobotnya paling kecil (bit 0), kemudian bit ke 9 yang bisa diatur lebih lanjut,
diakhiri dengan 1 bit stop.
Pada MCS51 yang berfungsi sebagai pengirim, bit 9 tersebut berasal dari bit TB8 dalam register
SCON. Pada MCS52 yang berfungsi sebagai penerima, bit 9 ditampung pada bit RB8 dalam
register SCON, sedangkan bit stop diabaikan tidak ditampung. Kecepatan pengiriman data (baud
rate) bisa dipilih antara 1/32 atau 1/64 frekuensi osilator kristal.
Mode 3 Mode ini sama dengan Mode 2, hanya saja kecepatan pengiriman data (baud rate) bisa
diatur sesuai dengan keperluan, seperti halnya Mode 1.

Pada mode asinkron (Mode 1, Mode 2 dan Mode 3), port seri MCS51 bekerja secara full duplex,
artinya pada saat yang sama port seri ini bisa mengirim data sekali gus menerima data.
Register SBUF merupakan register penghubung port seri. Dalam ke-empat mode di atas, semua
instruksi yang mengakibatkan perubahan isi SBUF akan mengakibatkan port seri mengirimkan
data keluar dari MCS51. Agar port seri bisa menerima data, bit REN dalam register SCON harus
bernilai µ1¶. Pada mode 0, proses penerimaan data dimulai dengan instruksi CLR RI, sedangkan
dalam mode lainnya proses penerimaan data diawali oleh bit start yang bernilai µ0¶. Data yang
diterima port seri dari luar MCS51, diambil dengan instruksi MOV A,SBUF.
Mengambil data dari SBUF dan menyimpan data ke SBUF sesungguhnya bekerja pada dua
register yang berlainan, meskipun nama registernya sama-sama SBUF.

c 5 c

)

 
 .c
MCS51 dilengkapi dengan 2 register dan beberapa bit tambahan untuk keperluan pemakai port
seri.
SBUF merupakan SFR (Special Function Register) yang terletak pada memori-data internal
dengan nomor $99. SBUF mempunyai kegunaan ganda, data yang disimpan pada SBUF akan
dikirim keluar MCS51 lewat port seri, sedangkan data dari luar MCS51 yang diterima port seri
diambil dari SBUF pula. Jadi meskipun hanya menempati satu nomor memori-data internal
(nomor $99), sesungguhnya SBUF terdiri dari 2 register yang berbeda.

SCON merupakan SFR (Special Function Register) yang terletak pada memori-data internal
dengan nomor $98, merupakan register utama untuk mengatur kerja port seri MCS51. Setelah
reset semua bit dalam SCON bernilai µ0¶.
1. Bit SM0 dan bit SM1 (bit 7 dan bit 6 pada register SMOD) dipakai untuk menentukan mode
kerja port seri. Setelah reset kedua bit ini bernilai µ0¶
2. Bit REN (bit 4) dipakai untuk mengaktipkan kemampuan port seri menerima data. Pada mode
0 kaki RxD (kaki P3.0) dipakai untuk mengirim data seri (REN=¶0¶) dan juga untuk menerima
data seri (REN=¶1¶). Sifat ini terbawa pula pada saat port seri bekerja pada mode 1, 2 dan 3,
meskipun pada mode-mode tersebut kaki RxD hanya dipakai untuk mengirim data, agar kaki
RxD bisa dipakai untuk menerima data terlebih dulu harus dibuat REN=¶1¶. Setelah reset bit
REN bernilai µ0¶.
3. Pada mode kerja 2 dan mode kerja 3, port seri bekerja dengan 9 bit data, SBUF yang
kapasitasnya 8 bit tidak cukup untuk keperluan ini. Bit ke-sembilan yang akan dikirim terlebih
dulu diletakkan di TB8 (bit 3), sedangkan bit RB8 (bit 2) merupakan bit yang dipakai untuk
menampung bit ke-sembilan yang diterima port seri.
4. Pada mode kerja 1, RB8 dipakai untuk menampung bit stop yang diterima, dengan demikian
apa bila RB8 bernilai µ1¶ maka data diterima dengan benar, sebaliknya apa bila RB8=¶0¶ berarti
terjadi kesalahan kerangka (framing error).
Kalau bit SM2 (bit 5) bernilai µ1¶, jika terjadi kesalahan kerangka, RI tidak akan menjadi µ1¶
meskipun SBUF sudah berisi data dari port seri.
Bit ke 9 ini bisa dipakai sebagai bit pariti, hanya saja bit pariti yang dikirim harus ditentukan
sendiri dengan program dan diletakkan pada TB8, dan bit pariti yang diterima pada RB8 dipakai
untuk menentukan integritas data secara program pula. Tidak seperti dalam UART standard,
semuanya itu dikerjakan oleh perangkat keras dalam IC UART.
5. Bit TI (bit 1) merupakan petanda yang setara dengan petanda TDRE (Transmitter Data
Register Empty) yang umum dijumpai pada UART standard. Setelah port seri selesai mengirim
data yang disimpan ke-dalam SBUF, bit TI akan bernilai µ1¶ dengan sendirinya, bit ini harus di-
nol-kan dengan program agar bisa dipakai untuk memantau keadaan SBUF dalam pengiriman
data berikutnya.
Sub-rutin SerialOut berikut dipakai untuk mengirim data seri, bisa dipakai untuk semua mode
port seri. Baris 02 menunggu TI menjadi µ1¶, dimaksud untuk memastikan pengiriman data
sebelumnya sudah selesai. Data yang akan dikirim sebelumnya sudah disimpan di A, pada baris
03 data tersebut dikirim melalui port seri dengan cara meletakannya di SBUF. Agar TI bisa
dipakai untuk memantau keadaan SBUF pada pengiriman data berikutnya, pada baris 04 TI di-
nol-kan.

01: SerialOut:
02: JNB TI,$ ; tunggu data sebelumnya selesai dikirim
03: MOV SBUF,A ; kirim data baru
04: CLR TI ; petanda ada pengiriman baru
05: RET

6. Bit RI (bit 0) merupakan petanda yang setara dengan petanda RDRF (Receiver Data Register
Full) yang umum dijumpai pada UART standard. Setelah SBUF menerima data dari port seri, bit
RI akan bernilai µ1¶ dengan sendirinya, bit ini harus di-nol-kan dengan program agar bisa dipakai
untuk memantau keadaan SBUF dalam penerimaan data berikutnya.
Sub-rutin SerialIn berikut dipakai untuk menerima data seri, bisa dipakai untuk semua mode port
seri. Baris 02 menunggu RI menjadi µ1¶, dimaksud untuk memastikan sudah ada data baru yang
diterima pada SBUF. Pada baris 03 data pada SBUF diambil ke A. Agar RI bisa dipakai untuk
memantau keadaan SBUF pada pengiriman data berikutnya, pada baris 04 RI di-nol-kan.

01: SerialIn:
02: JNB RI,$ ; tunggu SBUF berisi data baru
03: MOV A,SBUF ; ambil data
04: CLR RI ; pentanda data sudah diambil
05: RET

"
 


UART merupakan standard yang dipakai untuk komunikasi data seri dengan komputer,
komunikasi data seri dengan modem dan lain sebagainya.
Komunikasi data seri secara sinkron seperti mode 0, merupakan komunikasi data seri yang
banyak dipakai untuk menghubungkan IC-IC digital dalam sebuah sistem, misalnya pada IC
Serial EEPROM, cara ini belakangan menjadi makin populer karena rangkaiannya sederhana dan
tidak makan tempat.
Dalam dunia digital, dikenal 3 macam teknik transmisi data seri secara sinkron untuk keperluan
di atas, yang paling terkenal adalah teknik ciptaan Philips yang dinamakan sebagai I2C (Inter IC
Communication), Motorola mengenalkan teknik yang dinamakan sebagai SPI (Serial Peripheral
Interface) dan National Semiconductor menciptakan MicroWire.
Transmisi data seri yang dipakai pada mode 0, tidak sepadan dengan 3 teknik yang disebut di
atas, tapi dengan perancangan yang cermat mode 0 ini bisa dihubungkan ke SPI, sehingga bisa
dipakai untuk menghubungkan MCS51 dengan mikrokontroler Motorola MC68HC11.
Sinyal data seri sinkron yang ada pada kaki P3.0 dan P3.1, sesungguhnya murni merupakan
sinyal yang biasa dipakai untuk mengendalikan shift-register, dengan demikian dengan
menghubungkan shift register ke port seri, bisa menambah port input maupun port output dengan
mudah.

Baud Rate
Baud rate pada mode 0 adalah tertentu: pada mode 0, Baud Rate = 1/12 x Frekuensi Osilator.
Baud rate pada mode 2 bergantung pada nilai bit SMOD pada SFR PCON. Jika SMOD = 0, baud
rate adalah 1/64 frekuensi osilator. Jika SMOD=1, baud rate adalah 1/32 frekuensi osilator.
Penentuan baud rate mode 2 adalah sebagai berikut:

Sedangkan baud rate pada mode 1 dan 3 ditentukan oleh nilai laju overflow dari Timer 1.

Menggunakan Timer 1 untuk membangkitkan Baud Rate


Ketika timer 1 digunakan untuk membangkitkan clock baud rate, baud rate pada mode 1 dan 3
adalah ditentukan oleh laju overflow timer 1 dan nilai dari SMOD. Penentuan baud rate untuk
mode 1 dan 3 adalah sebagai berikut:

Interupsi 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:

c 6 s%!
(

Secara fisik, kerja dari sebuah mikrokontroler dapat dijelaskan sebagai siklus pembacaan
instruksi yang tersimpan di dalam memori. Mikrokontroler menentukan alamat dari memori
program yang akan dibaca, dan melakukan proses baca data di memori. Data yang dibaca
diinterprestasikan sebagai instruksi. Alamat instruksi disimpan oleh mikrokontroler di register,
yang dikenal sebagai program counter. Instruksi 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.
c 6 c    (

(
Program-sumber assembly (assembly source program) merupakan kumpulan dari baris-baris
perintah yang ditulis dengan program penyunting-teks (text editor) sederhana, misalnya program
EDIT.COM dalam DOS, atau program NOTEPAD dalam Windows atau MIDE-51. Kumpulan
baris-printah tersebut biasanya disimpan ke dalam file dengan nama ekstensi *.ASM dan lain
sebagainya, tergantung pada program Assembler yang akan dipakai untuk mengolah program-
sumber assembly tersebut.
Setiap baris-perintah merupakan sebuah perintah yang utuh, artinya sebuah perintah tidak
mungkin dipecah menjadi lebih dari satu baris. Satu baris perintah bisa terdiri atas 4 bagian,
bagian pertama dikenali sebagai label atau sering juga disebut sebagai symbol, bagian kedua
dikenali sebagai kode operasi, bagian ketiga adalah operand dan bagian terakhir adalah
komentar.
Antara bagian-bagian tersebut dipisahkan dengan sebuah spasi atau tabulator.

s(

Label dipakai untuk memberi nama pada sebuah baris-perintah, agar bisa mudah menyebitnya
dalam penulisan program. Label bisa ditulis apa saja asalkan diawali dengan huruf, biasa
panjangnya tidak lebih dari 16 huruf. Huruf-huruf berikutnya boleh merupakan angka atau tanda
titik dan tanda garis bawah. Kalau sebuah baris-perintah tidak memiliki bagian label, maka
bagian ini boleh tidak ditulis namun spasi atau tabulator sebagai pemisah antara label dan bagian
berikutnya mutlak tetap harus ditulis.
Dalam sebuah program sumber bisa terdapat banyak sekali label, tapi tidak boleh ada label yang
kembar.
Sering sebuah baris-perintah hanya terdiri dari bagian label saja, baris demikian itu memang
tidak bisa dikatakan sebagai baris-perintah yang sesungguhnya, tapi hanya sekedar memberi
nama pada baris bersangkutan.
Bagian label sering disebut juga sebagai bagian symbol, hal ini terjadi kalau label tersebut tidak
dipakai untuk menandai bagian program, melainkan dipakai untuk menandai bagian data.

s "
 

Kode operasi (operation code atau sering disingkat sebagai OpCode) merupakan bagian perintah
yang harus dikerjakan. Dalam hal ini dikenal dua macam kode operasi, yang pertama adalah
kode-operasi untuk mengatur kerja mikroprosesor / mikrokontroler. Jenis kedua dipakai untuk
mengatur kerja program assembler, sering dinamakan sebagai assembler directive.
Kode-operasi ditulis dalam bentuk mnemonic, yakni bentuk singkatan-singkatan yang relatip
mudah diingat, misalnya adalah MOV, ACALL, RET dan lain sebagainya. Kode-operasi ini
ditentukan oleh pabrik pembuat mikroprosesor/mikrokontroler, dengan demikian setiap prosesor
mempunyai kode-operasi yang berlainan.
Kode-operasi berbentuk mnemonic tidak dikenal mikroprosesor/mikrokontroler, agar program
yang ditulis dengan kode mnemonic bisa dipakai untuk mengendalikan prosesor, program
semacam itu diterjemahkan menjadi program yang dibentuk dari kode-operasi kode-biner, yang
dikenali oleh mikroprosesor/mikrokontroler.
Tugas penerjemahan tersebut dilakukan oleh program yang dinamakan sebagai Program
Assembler.
Di luar kode-operasi yang ditentukan pabrik pembuat mikroprosesor/mikrokontroler, ada pula
kode-operasi untuk mengatur kerja dari program assembler, misalnya dipakai untuk menentukan
letak program dalam memori (ORG), dipakai untuk membentuk variabel (DS), membentuk tabel
dan data konstan (DB, DW) dan lain sebagainya.

s 
"
Operand merupakan pelengkap bagian kode operasi, namun tidak semua kode operasi
memerlukan operand, dengan demikian bisa terjadi sebuah baris perintah hanya terdiri dari kode
operasi tanpa operand. Sebaliknya ada pula kode operasi yang perlu lebih dari satu operand,
dalam hal ini antara operand satu dengan yang lain dipisahkan dengan tanda koma.
Bentuk operand sangat bervariasi, bisa berupa kode-kode yang dipakai untuk menyatakan
Register dalam prosesor, bisa berupa nomor-memori (alamat memori) yang dinyatakan dengan
bilangan atau pun nama label, bisa berupa data yang siap di-operasi-kan. Semuanya disesuaikan
dengan keperluan dari kode-operasi.
Untuk membedakan operand yang berupa nomor-memori atau operand yang berupa data yang
siap di-operasi-kan, dipakai tanda-tanda khusus atau cara penulisan yang berlainan.
Di samping itu operand bisa berupa persamaan matematis sederhana atau persamaan Boolean,
dalam hal semacam ini program Assembler akan menghitung nilai dari persamaan-persamaan
dalam operand, selanjutnya merubah hasil perhitungan tersebut ke kode biner yang dimengerti
oleh prosesor. Jadi perhitungan di dalam operand dilakukan oleh program assembler bukan oleh
prosesor!

s

Bagian komentar merupakan catatan-catatan penulis program, bagian ini meskipun tidak mutlak
diperlukan tapi sangat membantu masalah dokumentasi. Membaca komentar-komentar pada
setiap baris-perintah, dengan mudah bisa dimengerti maksud tujuan baris bersangkutan, hal ini
sangat membantu orang lain yang membaca program.
Pemisah bagian komentar dengan bagian sebelumnya adalah tanda spasi atau tabulator,
meskipun demikian huruf pertama dari komentar sering-sering berupa tanda titik-koma,
merupakan tanda pemisah khusus untuk komentar.
Untuk keperluan dokumentasi yang intensip, sering-sering sebuah baris yang merupakan
komentar saja, dalam hal ini huruf pertama dari baris bersangkutan adalah tanda titik-koma.
AT89S51 memiliki sekumpulan instruksi yang sangat lengkap. Instruksi MOV untuk byte
dikelompokkan sesuai dengan mode pengalamatan (addressing modes). Mode pengalamatan
menjelaskan bagaimana operand dioperasikan. Berikut penjelasan dari berbagai mode
pengalamatan. Bentuk program assembly yang umum ialah sebagai berikut :

(
+ (   "

" 7

Org 0H
Start: Mov A, #11111110b ; Isi Akumulator
Mov R0, #7 ; Isi R0 dengan 7
Kiri: Mov P0, A ; Copy A ke P0
Call Delay ; Panggil Delay
RL A
DEC R0
CJNE R0, #0, Kiri
Sjmp Start
Delay: mov R1, #255
Del1: mov R2, #255
Del2: djnz R2, del2
djnz R1, del1
ret
end

Isi memori ialah bilangan heksadesimal yang dikenal oleh mikrokontroler kita, yang merupakan
representasi dari bahasa assembly yang telah kita buat. Mnemonic atau opcode ialah kode yang
akan melakukan aksi terhadap operand . Operand 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 (;). Berikut contoh jumlah
operand yang berbeda beda dalam suatu assembly.

CJNE R5,#22H, aksi ;dibutuhkan 3 buah operand


MOVX @DPTR, A ;dibutuhkan 2 buah operand
RL A ;1 buah operand
NOP ; tidak memerlukan operand

Program yang telah selesai kita buat dapat disimpan dengan ekstension .asm. Lalu kita dapat
membuat program objek dengan ekstension HEX dengan menggunakan compiler MIDE-51,
yang dijelaskan sebagai berikut:

c 6 !
(

Program-sumber assembly di atas, setelah selesai ditulis diserahkan ke program Assembler untuk
diterjemahkan. Setiap prosesor mempunyai program assembler tersendiri, bahkan satu macam
prosesor bisa memiliki beberapa macam program Assembler buatan pabrik perangkat lunak yang
berlainan.
Hasil utama pengolahan program Assembler adalah program-obyek. Program-obyek ini bisa
berupa sebuah file tersendiri, berisikan kode-kode yang siap dikirimkan ke memori-program
mikroprosesor/mikrokontroler, tapi ada juga program-obyek yang disisipkan pada program-
sumber assembly seperti terlihat dalam Assembly Listing di Gambar 2.
Bagian kanan Gambar 2 merupakan program-sumber Assembly karya asli penulis program,
setelah diterjemahkan oleh program Assembler kode-kode yang dihasilkan berikut dengan
nomor-nomor memori tempat penyimpanan kode-kode tadi, disisipkan pada bagian kiri setiap
baris perintah, sehingga bentuk program ini tidak lagi dikatakan sebagai program-sumber
assembly tapi dikatakan sebagai Assembly Listing.
Membaca Assembly Listing bisa memberikan gambaran yang lebih jelas bagi program yang
ditulis, bagi pemula Assembly Listing memberi pengertian yang lebih mendalam tentang isi
memori-program, sehingga bisa lebih dibayangkan bagaimana kerja dari sebuah program.

þ  
 
c 
  
  ccccccc
 
 
 
 cc !"
 #$
 c 
 %%
&' 
#  
c c
(( 
cc ccc !"
c c
c cc 
c c%
&' ((
c c  )*+  
c ,
c c#

 !" *c


c c 

 !c *


c#  
 ! -)(.-!
  #
-)(.c-!c
c  ! 
 !(-


c , 
 

1.8.1 Compiler MIDE Studio

M-IDE Studio adalah salah satu cara yang digunakan untuk menjalankan kompilasi untuk divais
MCS-51. M-IDE Studio mempunyai beberapa fitur yang dapat digunakan untuk edit, compil,
dan debug file.
The M-IDE Studio juga dapat digunakan untuk menulis program dalam bahasa C. Dengan
menggunakan software ini, maka kita dapat melihat error pada report file LST.

Gambar 1.19. M-IDE Studio

Bila anda perhatikan pada menu toolbar dan menu pilihan, tampak terlihat disable. Hal ini karena
file belum dibuat. Untuk membuat sebuah file, lakukan langkah-langkah berikut:

1. Membuat File Baru


Untuk membuat file baru, klik pada menu File atau short cut seperti yang ditunjukkan pada
gambar, sehingga akan tampak halaman kosong.
Figure 1.20. File baru dengan halaman kosong

 

(% 
Tulis program assembly pada halaman kosong, dan lakukan penyimpanan file. Bila file telah
tersimpan maka akan tampak teks instruksi yang berwarna-warni. Sebagaimana yang ditunjukan
pada gambar 3.

Gambar 1.21 Menu penyimpanan file

 7 
Agar file dengan ekstensi ASM tersebut dapat diloadkan ke mikrokontroller, maka perlu
dilakukan kompilasi dari file ASM ke HEX.

Gambar 1.22 Kompilasi file


& 
(

Gambar 1.23 Debug file

c ,      
 /8
   (c &9

Sangat disayangkan sekali, bahwa keberadaan LPT pada sebuah computer, terutama pada
notebook, sudah sangat jarang terlihat, padahal keinginan untuk belajar mikrokontroller sudah
tidak bisa ditahan lagi, sehingga kebutuhan sebuah programmer sangat mutlak sangat diperlukan.
Pembuatan programmer dengan menggunakan port serial dapat digunakan sebagai alternative
untuk melakukan pemrograman ke mikrokontroller, dan keberadaan port serial ini dapat
tergantikan dengan menggunakan konverter USB to RS232, apabila di pc atau notebook anda
tidak tersedia port serial RS232. Dengan harga yang sangat terjangkau. Berikut merupakan
skamatik dari sebuah website yang sangat berguna sekali, 8052.com

Pada gambar tersebut tampak hanya diperlukan tiga buah kabel yang menghubungkan dari port
serial RS232 ke rangkaian programmer. IC AT89c2051 dapat digantikan dengan AT89s2051, ic
tersebut merupakan saudara dari 89s51 dengan pin dan ROM yang lebih sedikit, tetapi dengna
kemampuan yang tidak kalah hebat. IC ini sesungguhny hanya berfungsi sebagai konverter dari
data serial menjadi data parallel, sehingga dapat digunakan untuk melakukan pemrograman
secara ISP ke rangkaian target.

1. Buat rangkaian programmer ISP serial sesuai dengan gambar berikut


#s!!c
  !#

'!3
1. Mahasiswa memahami rangkaian mikrokontroller untuk menghidupkan dan mematikan LED.
2. Mahasiswa dapat memahami program assembly untuk menghidupkan dan mematikan LED.
3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL dan RR.
4. Mahasiswa memahami pembuatan instruksi waktu tunda

Gambar 1.1 Rangkaian Display LED

Perhatikan pada gambar 1.1 tersebut. Delapan buah LED terhubung ke port 0, yang difungsikan
sebagai output. Pada konfigurasi tersebut LED akan nyala bila diberi logika LOW µ0¶ melalui
port 0, dan LED akan padam bila diberi logika HIGH µ1¶ melalui port 0. Agar Display LED ini
dapat aktiv maka jumper EN LED harus dihubungkan singkat.

 (c c    

Pada percobaan 1.1 ini LED akan dihidupkan atau dimatikan dengan mengirimkan data tertentu
pada port 0.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper pada LED_EN, untuk mengaktifkan 8 buah LED
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program

5. Ketik program berikut ini:(download file prog11a.asm)

%
3 : 9;cccc(<  "
cccc
 -  < 

 #"

6. Simpanlah program yang anda ketik dan beri nama : prog11a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)

9. Lakukan pengamatan pada LED

10. Gantilah data tersebut diatas dengan data seperti pada tabel berikut dan lakukan pencatatan
LED mana yang padam.


 (c  
((
= "

Pada percobaan ini, 8 LED akan berkedip secara kontinu.


Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
4. Ketik program berikut ini:(download file prog12a.asm)
%
3 : 9;cccccccc(<7 "(
cccccccc
 

<
8 "
 : 9;(<7 "(

 

<
8 "
- 
<

3 :c9;..

c3 :9;..

3"->9"

"->c9"
c



"

5. Simpanlah program yang anda ketik dan beri nama : prog12a.asm


6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
8. Lakukan pengamatan pada LED
9. Gantilah data tersebut untuk mengedipkan sebuah LED, dua buah LED dan seterusnya,sesuai
tabel berikut ini.


 (c    
("

Pada percobaan ini, sebuah LED atau lebih dapat dihidupkan atau dimatikan dengan perintah
setb dan clr.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
4. Ketik program berikut ini:(download file prog13a.asm)
%
3  <
   ?@
  
- <- 


"

5. Simpanlah program yang anda ketik dan beri nama : prog13a.asm


6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
8. Lakukan pengamatan pada LED
9. Gantilah data tersebut untuk menghidupkan LED yang lain: LED 2, LED 3, LED 4, LED 5,
LED 6, LED 7 dan LED 8.
10. Lakukan percobaan berikut untuk mengedipkan LED 1, dengan mengetikka program berikut
ini.

%
3  <7   ?@
  
  c<7   ?@
  c
  <7   ?@
  
  <7   ?@
  
  &<7   ?@
  &
  .<7   ?@
  .
  5<7   ?@
  5
  6<7   ?@
  6

<
8 "

(  <7   ?c@
  

(  c<7   ?c@
  c

(  <7   ?c@
  

(  <7   ?c@
  

(  &<7   ?c@
  &

(  .<7   ?c@
  .

(  5<7   ?c@
  5

(  6<7   ?c@
  6
- < 

<

3 :c9;..

c3 :9;..

3"->9"

"->c9"
c



"

11. Rencanakan program untuk mengedipkan dua buah LED, tiga buah LED dan seterusnya
dengan instruksi Setb dan Clr.


 (c &   +1 

/"%2
Pada percobaan ini, sebuah LED akan berjalan dari kiri ke kanan dan sebaliknya, program ini
memanfaatkan instruksi RL dan RR.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
4. Ketik program berikut ini:(download file prog14a.asm)

A
3 :!9;ccccccc(
 :9;6
73 : 9!


!
#
'#9;97
 :9;6
73 : 9!


!
#
'#9;97
- 
<

3 :c9;..

c3 :9;..

3"->9"

"->c9"
c



"
5. Simpanlah program yang anda ketik dan beri nama : prog14a.asm
6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
8. Lakukan pengamatan pada LED
9. Lakukan perubahan pada program tersebut untuk menjalankan dua buah LED kekiri dan
kekanan, tiga buah LED kekiri dan kekanan , dan seterusnya.

#s!!
!7! As

'!3
1 Mahasiswa memahami rangkaian mikrokontroller dengan interface ke saklar
2. Mahasiswa dapat memahami program assembly untuk mengambil data saklar dan
mengeluarkan data ke LED.
3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, RL dan RR.

Gambar 2.2. Rangkaian Interface Push Button

Pada gambar 2.2.a tersebut tampak rangkaian push button, bila saklar ditekan maka port sesuai
dengan bit tersebut akan mendapat logika low µ0¶ dan sebaliknya bila saklar tidak ditekan maka
port tersebut akan mendapat logika high µ1¶.

 ( c ! ( 

Pada percobaan ini, LED akan nyala bila saklar ditekan sesuai dengan bit tersebut.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Buka jumper pada EN_DAC apabila sedang terhubung.
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog21a.asm)

%
3 :!9 <! ("" " 
!
 : 9!<7 "!
 
- 

"

6. Simpanlah program yang anda ketik dan beri nama : prog21a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
9. Lakukan pengamatan pada LED.

  7 "#1c)))&).)5)6),2
SW1
SW2
SW3
SW4
SW5
SW6
SW7
SW8



 (   7)7

Pada percobaan ini, LED akan berjalan kekanan atau kekiri mengikuti penekanan tombol P2.0
atau P2.1.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
4. Ketik program berikut ini: (download file prog22a.asm)

 %

3's  9
c<
-(  9 %"%  BcB

/<'   C9  # 

c3's  c9
<
-(  c9 %"%  BcB
%<'   cC9  # 
- 
<- / 
:
 
 
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<("  

 #7
7
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

/3 :!9;ccccccc(<
"" !

/c3 : 9!<
""  
"
<"


's  c9
/<
-(  c9 %"%  BcB
- #"
/<'   cC9   
#"
/

/3!
- 
/c
#"
/3

<
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<("  

 #7
7
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
%3 :!9;ccccccc(<
"" !
%c3 : 9!<
""  
"
<"


's  9%<
-(  9 %"%  BcB
- #"%<'   C9   
#"%
%3!
- %c
#"%3

<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 
"


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
"
3 :c9;..
"
c3 :9;..
"
3"->9"

"->c9"
c



"

5. Simpanlah program yang anda ketik dan beri nama : prog22a.asm


6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
8. Lakukan pengamatan pada LED.
9. Lakukan modifikasi pada percobaan tersebut sesuai dengan dengan mengganti port tersebut
dengan P2.2 ( putar kanan ) dan P2.3 ( putar kiri ).


 (  
+"#
"
"#

Pada percobaan ini, LED yang ON akan bertambah atau berkurang mengikuti penekanan tombol
P2.1 (UP) atau P2.2 (DN). LED akan berhenti bertambah atau atau berkurang bila ditakan
tombol P2.0 ( ENTER).
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program (download
file prog23a.asm)
Gambar 2.5. Diagram alir percobaan 2.3

4. Ketik program berikut ini:

org 0h
start:
mov R7,#1 ;inisialisasi data setting
aetup:mov A,R7 ;simpan data R7 ke A
cpl A ;komplemen A,
mov P0,A ;output data ke LED
nb p2.0,getout;bilasw1(P2.0)ditekan mkgetout(selesai)
b P2.1,aetDn ;bila sw2(P2.1) ditekan mk INC R7
inc R7 ;R7:=R7+1
acall delay ;waktu tunda, antar penekanan tombol
cne R7,#100d,setup;deteksi apakah setting=100d
mov R7,#1 ;reset R7 -> 1
smp aetup
;
aetDn:Mov A,R7 ;simpan data R7 ke A
cpl A ;komplemen A,
mov P0,A ;output data ke LED
nb P2.0,getout;bila sw1(P2.0)ditekan mkgetoutselesai)
b p2.2,aetup ;bila sw2(P2.1) ditekan mk INC R7
dec R7 ;R7:=R7-1
acall delay ;waktu tunda lama penekanan tombol
cne R7,#0d,setDn;deteksi apakah setting=0d
mov R7,#1d ;reset R7 -> 1
smp aetdn
getout:
smp getout
;
delay:mov R0,#255
delay1:mov R2,#255
dnz R2,$
dnz R0,delay1
ret
end

5. Simpanlah program yang anda ketik dan beri nama : prog23a.asm


6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
8. Lakukan pengamatan pada LED.
9. Lakukan modifikasi pada percobaan tersebut sesuai dengan dengan mengganti port tersebut
dengan P2.5 (Setting UP), P2.6 (Setting Dn) dan P2.7 (Enter).

#s!!
  !6#( #

'!3
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan 7 segmen
2. Mahasiswa dapat memahami program assembly untuk menampilkan data ke 7 segment
3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, dan waktu tunda.

(a)
(b)

Tabel 3.1. Tabel kebenaran 74LS138

 
#!s#  
##
 s ! (c +(! +(s c    & . 5 6
0 0 0 1 0 0 0 1 1 1 1 1 1 1
0 0 1 1 0 0 1 0 1 1 1 1 1 1
0 1 0 1 0 0 1 1 0 1 1 1 1 1
0 1 1 1 0 0 1 1 1 0 1 1 1 1
1 0 0 1 0 0 1 1 1 1 0 1 1 1
1 0 1 1 0 0 1 1 1 1 1 0 1 1
1 1 0 1 0 0 1 1 1 1 1 1 0 1
1 1 1 1 0 0 1 1 1 1 1 1 1 0

Pada tabel kebenaran tersebut tampak bahwa seven segmen yang hidup tergantung pada output
dari dekoder 74LS138, yang sedang mengeluarkan logika low ´0´, sehingga dari 8 buah display
tersebut, selalu hanya satu display yang akan dihidupkan. Agar display tampak nyala secara
bersamaan maka ketiga display tersebut harus dihidupkan secara bergantian dengan waktu tunda
tertentu.
Pada gambar tersebut seven segment commont anoda dikendalikan dengan menggunakan
transistor PNP melalui decoder 74LS138, apabila ada logika low pada basis transistor, maka 7
segment akan nyala dan sebaliknya akan padam.
Gambar 3.2 Modul 7 Segment tunggal

Tabel 3.2. Data Display 7 Segmen

 5  .  &      c   
g f e d c b a
1 0 0 0 0 0 0 0
1 1 1 1 0 0 1 1
0 1 0 0 1 0 0 2
0 1 1 0 0 0 0 3
: : : : : : : :
0 0 0 1 0 0 0 A
0 0 0 0 0 1 1 b

Pada tabel tersebut tampak bahwa untuk menghidupkan sebuah segmen, harus dikirimkan data
logika low ´0´ dan sebaliknya untuk mematikan segmen, harus dikirimkan data logika high ´1´.


 ( c 
(%7 
"6

1c2

Pada percobaan ini, karakter µA¶ akan ditampilkan pada 7 Segmen Display 1
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog31a.asm)
 %
3  .<  .C?@
  5<  5C?@
  6<  6C?@
 : 9;cc(<
 7 
B!B
- < 


"

6. Simpanlah program yang anda ketik dan beri nama : prog31a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
9. Lakukan pengamatan pada LED.
10.Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

 7 
 
C Display 2
E Display 5
3 Display 8



 (  7 
"6



Pada percobaan ini, karakter µAbC¶ akan ditampilkan pada 7 Segmen Display 1, Display 2 dan
Display 3 secara berturutan
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog32a.asm)
%
3  .<  .CBB
  5<  5CBB
  6<  6CBB
 : 9;cc(<
 7 
B!B
"
< = "
<

(  .<  .CBcB
  5<  5CBB
  6<  6CBB
 : 9;ccc(<
 7 
B(B
"
< = "
<
  .<  .CBB

(  5<  5CBcB
  6<  6CBB
 : 9;cccc(<
 7 
BB
"
< = "
<
- < 

<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 
"


" 
"


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
"
3 :c9;.
"
c3 :9;.
"
3"->9"

"->c9"
c



"

6. Simpanlah program yang anda ketik dan beri nama : prog32a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
9. Lakukan pengamatan pada LED.
10.Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

 7 
 
EFG Display 1, Display 2, Display 3
HJL Display 3, Display 4, Display 5
1A3 Display 6, Display 7, Display 8



 (  ,7 
"6



Pada percobaan ini, karakter µ12345678¶ akan ditampilkan pada 7 Segmen Display 1, Display 2
dan Display 3 s/d Display 8 secara berturutan :
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog33a.asm)

%
3  .
  5
  6
 : 9;cccccc(<
 7 
BcB
"

<

(  .
  5
  6
 : 9;ccc(<
 7 
BB
"

<
  .<

(  5
  6
 : 9;ccc(<
 7 
BB
"

<

(  .

(  5
  6
 : 9;cccc(<
 7 
B&B
"

<

  .
  5

(  6
 : 9;ccc(<
 7 
B.B
"

<

(  .
  5

(  6
 : 9;cc(<
 7 
B5B
"

<
  .

(  5

(  6
 : 9;ccccc(<
 7 
B6B
"

<

(  .

(  5

(  6
 : 9;c(<
 7 
B,B
"

<
- < 

<CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 
"


" 
"


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCC
"
3 :c9;.
"
c3 :9;.
"
3"->9"

"->c9"
c



"
6. Simpanlah program yang anda ketik dan beri nama : prog33a.asm
7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
9. Lakukan pengamatan pada 7 Segmen.
10. Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

 7 
 
LAbMIkro -
HAlloguy -
YournAme -



 ( & 
+"#
"

6



Pada percobaan ini, akan dibuat suatu simulasi setting UP (P2.1)/ DN (P2.2) dan penekanan
tombol Enter (P2.0), dan di displaykan ke display 7 Segmen. Data display akan bertambah dari
00 s/d 99 atau berkurang dari 99 s/d 00, sesuai dengan penekanan pada tombol UP/ DN.Bila
ditekan tombol Enter, maka tombol UP/ DN tidak akan berfungsi lagi.

Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:


1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program (download
file prog34a.asm)
Gambar 3.5. Diagram alir percobaan 3.4.

5. Ketik program berikut ini:

%

D%
%
Dc%

D%
<
3
 :69;c<"


3 :!96< "6
!
("

"
:



-( 9
 <(8c1  2"
 
 1

2
-(  c9
<(81  c2"
  6
6<63C6Ec
"
<8 " 

 ( 
-
69;c"9
<"

 %
Cc"
 :69;c<

6)Fc
- 

<

3 :!96< "6
!
("

"
:



-(  9
 <(8c1  2"
 
 1

2
-( 9
<(81  c2"
  6
"
6<63C6)c
"
<8 " 

 ( 
-
69;"9
<"

 %
C"
 :69;GG"<

6)FGG
- 
"

 3- 
 
<

:


3
 :!9%
 : 9;6


 :!9H!E 
 : 9!
  .<

(  5

(  6
"

<
 :!9
 : 9;6


 :!9H!E 
 : 9!

(  .<

(  5

(  6
"



<
s
3
 :(9;c"
":(
 :9
 :9(
 :(9;c"
":(
 :%9
 :9(


<
"
3 :9;
"
c3 :9;/%
"->9I
"->9"
c


<
6

3
"(cc(9cccccc(9ccc(9ccc(9cccc(
"(ccc(9cc(9ccccc(9c(9cc(

"

6. Simpanlah program yang anda ketik dan beri nama : prog34a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
9. Lakukan pengamatan pada 7 Segmen.

#s!!&
7!!7#

'!3
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan LCD Karakter 2 x 16
2. Mahasiswa dapat memahami program assembly untuk menampilkan data ke LCD Karakter 2
x 16
3. Mahasiswa memahami beberapa instruksi assembly dasar, MOV, Setb, Clr, dan waktu tunda.
4. Mahasiswa memahami mencetak karakter pada posisi baris dan kolom tertentu

Gambar 4.1. Rangkaian interface ke LCD Karakter 2 x16

Modul LCD Character dapat dengan mudah dihubungkan dengan mikrokontroller seperti
AT89S51. LCD yang akan kita praktikumkan ini mempunyai lebar display 2 baris 16 kolom atau
biasa disebut sebagai LCD Character 2x16, dengan 16 pin konektor, yang didifinisikan sebagai
berikut:
Gambar 4.2. Modul LCD Karakter 2x16

(
c c "

 
 
1 VSS Ground voltage
2 VCC +5V
3 VEE Contrast voltage
Register Select
4 RS 0 = Instruction Register
1 = Data Register
Read/ Write, to choose write or read mode
5 R/W 0 = write mode
1 = read mode
Enable
6 E 0 = start to lacht data to LCD character
1= disable
7 DB0 LSB
8 DB1 -
9 DB2 -
10 DB3 -
11 DB4 -
12 DB5 -
13 DB6 -
14 DB7 MSB
15 BPL Back Plane Light
16 GND Ground voltage

Display karakter pada LCD diatur oleh pin EN, RS dan RW:
Jalur EN dinamakan Enable. Jalur ini digunakan untuk memberitahu LCD bahwa anda sedang
mengirimkan sebuah data. Untuk mengirimkan data ke LCD, maka melalui program EN harus
dibuat logika low ³0´ dan set pada dua jalur kontrol yang lain RS dan RW. Ketika dua jalur yang
lain telah siap, set EN dengan logika ³1´ dan tunggu untuk sejumlah waktu tertentu ( sesuai
dengan datasheet dari LCD tersebut ) dan berikutnya set EN ke logika low ³0´ lagi.
Jalur RS adalah jalur Register Select. Ketika RS berlogika low ³0´, data akan dianggap sebagi
sebua perintah atau instruksi khusus ( seperti clear screen, posisi kursor dll ). Ketika RS
berlogika high ³1´, data yang dikirim adalah data text yang akan ditampilkan pada display LCD.
Sebagai contoh, untuk menampilkan huruf ³T´ pada layar LCD maka RS harus diset logika high
³1´.
Jalur RW adalah jalur kontrol Read/ Write. Ketika RW berlogika low (0), maka informasi pada
bus data akan dituliskan pada layar LCD. Ketika RW berlogika high ´1´, maka program akan
melakukan pembacaan memori dari LCD. Sedangkan pada aplikasi umum pin RW selalu diberi
logika low ´0´.
Pada akhirnya, bus data terdiri dari 4 atau 8 jalur ( bergantung pada mode operasi yang dipilih
oleh user ). Pada kasus bus data 8 bit, jalur diacukan sebagai DB0 s/d DB7
Beberapa perintah dasar yang harus dipahami adalah inisialisasi LCD Character,

 

Mengatur interface lebar data, jumlah dari baris dan ukuran font karakter

 += s6 s5 s. s& s s sc s


0 0 0 0 1 DL N F X X

!!!3
X : Don¶t care
3

("
DL=1, Lebar data interface 8 bit ( DB7 s/d DB0)
DL=0, Lebar data interface 4 bit ( DB7 s/d DB4)
Ketika menggunakan lebar data 4 bit, data harus dikirimkan dua kali
3
 :(
N=0, 1 baris
N=1, 2 baris
3

 /   

F=0, 5x7
F=1, 5x8

# "


Mengatur increment/ decrement dan mode geser

 += s6 s5 s. s& s s sc s


0 0 0 0 0 0 0 1 I/D S

3
+3 Increment/ decrement dari alamat DDRAM dengan 1 ketika kode karakter dituliskan ke
DDRAM.
I/D = ³0´, decrement
I/D= ³1´, increment
3Geser keseluruhan display kekanan dan kekiri
S=1, geser kekiri atau kekanan bergantung pada I/D
S=0, display tidak bergeser

+// 
Mengatur status display ON atau OFF, cursor ON/ OFF dan fungsi Cursor Blink

 += s6 s5 s. s& s s sc s


0 0 0 0 0 0 1 D C B

3 Mengatur display


D = 1, Display is ON
D = 0, Display is OFF

Pada kasus ini data display masih tetap berada di DDRAM, dan dapat ditampilkan kembali
secara langsung dengan mengatur D=1.

C : Menampilkan kursor
C = 1, kursor ditampilkan
C = 0, kursor tidak ditampilkan
B : Karakter ditunjukkan dengan kursor yang berkedip
B=1, kursor blink



Perintah ini hapus layar

 += s6 s5 s. s& s s sc s


0 0 0 0 0 0 0 0 0 1

(

7 "
Geser posisi kursor atau display ke kanan atau kekiri tanpa menulis atau baca data display.
Fungsi ini digunakan untuk koreksi atau pencarian display

 += s6 s5 s. s& s s sc s


0 0 0 0 0 1 S/C R/L X X

Catatan : x = Dont care

+ +  

0 0 Shift cursor position to the left


0 1 Shift cursor position to the right
1 0 Shift the entire display to the left
1 1 Shift the entire display to the right

  7
Modul LCD terdiri dari sejumlah memory yang digunakan untuk display. Semua teks yang kita
tuliskan ke modul LCD adalah disimpan didalam memory ini, dan modul LCD secara berturutan
membaca memory ini untuk menampilkan teks ke modul LCD itu sendiri.

Pada peta memori tersebut, daerah yang berwarna biru ( 00 s/d 0F dan 40 s/d 4F ) adalah display
yang tampak. Sebagaimanan yang anda lihat, jumlahnya sebanyak 16 karakter per baris dengan
dua baris. Angka pada setiap kotak adalah alamat memori yang bersesuaian dengan posisi dari
layar. Demikianlah karakter pertama di sudut kiri atas adalah menempati alamah 00h. Posisi
karakter berikutnya adalah alamat 01h dan seterusnya.
Akan tetapi, karakter pertama dari baris 2 sebagaimana yang ditunjukkan pada peta memori
adalah pada alamat 40h. Dimikianlah kita perlu untuk mengirim sebuah perintah ke LCD untuk
mangatur letak posisi kursor pada baris dan kolom tertentu. Instruksi Set Posisi Kursor adalah
80h. Untuk ini kita perlu menambahkan alamat lokasi dimana kita berharap untuk menempatkan
kursor.Sebagai contoh, kita ingin menampilkan kata ´World´ pada baris ke dua pada posisi
kolom ke sepuluh. Sesuai peta memori, posisi karakter pada kolom 11 dari baris ke dua,
mempunyai alamat 4Ah, sehingga sebelum kita tulis kata ´World´ pada LCD, kita harus
mengirim instruksi set posisi kursor, dan perintah untuk instruksi ini adalah 80h ditambah
dengan alamat 80h+4Ah =0Cah. Sehingga dengan mengirim perintah Cah ke LCD, akan
menempatkan kursor pada baris kedua dan kolom ke 11 dari DDRAM.

Set Alamat Memori DDRAM

 += s6 s5 s. s& s s sc s


0 0 1 A A A A A A A

3
A : Alamat RAM yang akan dipilih
Sehingga alamat RAM LCD adalah 000 0000 S/D 111 1111 b atau 00 s/d 7Fh

INISIALISASI
Sebelum kita dapat menggunakan modul LCD, kita harus melakukan inisialisasi dan
mengkonfigurasikannya. Hal ini dijalankan dengan mengirimkan sejumlah instruksi ke LCD.
Antara lain: pengaturan lebar data interface 8 bit atau 4 bit data bus, pemilihan ukuran font
karakter 5x8 atau 5x7 dan lain-lain, dengan instruksi sebagai berikut.

J"3
 :c9;c(<

8
J<#C
"C
 :c9;ccc(< 
9<,(9
/ .$6
8
J<
(#C
"C
 :c9;cc(< 9<  //9 (  //
8
J<#C
"C
 :c9;cc(<# "
9



8
J






 (& c 
(%7 
"7 


Pada percobaan ini, karakter µA¶ akan ditampilkan pada 7 Segmen Display 1
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog41a.asm)

%
J
3 :c9;,%< ! 9 8Cc Cc
8
J
 :c9;B!B<
 7 
!
8
J"
 3-  
J"3
 :c9;c(<

8
J
 :c9;ccc(< 
9,(9
/ .$6
8
J
 :c9;cc(< 9<  //9 (  //
8
J
 :c9;cc(<# "
9



8
J


<
=
J3
  5<  5CC
 : 9c< C6+"Cc

(  6<  6C#Cc
"
<"


  6<  6C#C


<
=
J"3

(  5<  5CCc
 : 9c< C6+"Cc

(  6<  6C#Cc
"
<"


 6<  6C#C


<
"
3 :9;
"
c3 :69;/%
"->69I
"->9"
c


<

"

6. Simpanlah program yang anda ketik dan beri nama : prog41a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
9. Lakukan pengamatan pada LED.
10. Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

 7 
 
1 Row 1, Col 2
Z Row 1, Col 8
& Row 2, Col 12



 (&  
7 
"7 

Pada percobaan ini, karakter µA¶ akan ditampilkan pada 7 Segmen Display 1
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog42a.asm)

%
J
3 :c9;,%< ! 9 8Cc Cc
8
J
 :c9;B=B
8
J"
 :c9;B
B
8
J"
 :c9;BB
8
J"
 :c9;BB
8
J"
 :c9;B B
8
J"
 :c9;B B
8
J"
 :c9;B
B
8
J"
 3-  
J"3
 :c9;c(<

8
J
 :c9;ccc(< 
9,(9
/ .$6
8
J
 :c9;cc(< 9  //9 (  //
8
J
 :c9;cc(<# "
9



8
J


<
=
J3
  5<  5CC
 : 9c< C6+"Cc

(  6<  6C#Cc
"
<"


  6<  6C#C


<
=
J"3

(  5<  5CCc
 : 9c< C6+"Cc

(  6<  6C#Cc
"
<"


 6<  6C#C


<
"
3 :9;
"
c3 :69;/%
"->69I
"->9"
c


<

"

6. Simpanlah program yang anda ketik dan beri nama : prog42a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
9. Lakukan pengamatan pada LED.
10.Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

 7 
  
Selamat Datang Row 1, Col 1
Mikrokontroller Row 2, Col 1


 (&  7 

 (

Pada percobaan ini, karakter µA¶ akan ditampilkan pada 7 Segmen Display 1
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog43a.asm)

 %
J
38
J%
 3-  
<
8
J%3
 :"9;8 "c< CK""
8 "cL
 :9;c5<Cc59 (
%
 (
"
 :c9;,%<cC,%9""
!   
8
J
<
8
c3<!C
 :9HE"<!CK!E L
 :c9!<cC!
"< C Ec
8
J"<
"->98
c<C)c9


<
J"3
 :c9;c(<

8
J<
 :c9;ccc(< 
9,(9
/ .$6
8
J<
 :c9;cc(< 9  //9 (  //
8
J
 :c9;cc(<# "
9



8
J


<
=
J3
  5<  5CC
 : 9c< C6+"Cc

(  6<  6C#Cc
"
<"


  6<  6C#C


<
=
J"3

(  5<  5CCc
 : 9c< C6+"Cc

(  6<  6C#Cc
"
<"


"
<"


 6<  6C#C


<
"
3 :9;
"
c3 :69;/%
"->69I
"->9"
c


<
8 "c3sB=

A
B<7 
" " 
<

"

6. Simpanlah program yang anda ketik dan beri nama : prog43a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
9. Lakukan pengamatan pada LCD.
10. Lakukan modifikasi pada program tersebut untuk mencetak karakter lain, sesuai tabel:

 7 
  
Selamat Datang Row 1, Col 1
Mikrokontroller Row 2, Col 1


 (& & 
%(

7 

Pada percobaan ini, karakter ´A´ akan ditampilkan pada layar LCD Karakter dan dilakukan
proses geser ke kanan.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini:




Dcccc(<c++00



Dccccc(<c++00
<
 %
J
3 :c9;,%
8
J
 :c9;B!B<7 
 "


8
J"
<
 :9;&<&$


 

$3 :c9;


8
J
"

"->9
$
- 
<
J"3
 :c9;c(<

8
J<
 :c9;ccc(< 
9
<,(9
/ .$6
8
J<
 :c9;cc(< 9
<  //9 (  //
8
J
 :c9;cc(<# "
9



8
J


<
=
J3
  5<C98
 "
 
 : 9c<6+"C Cc

(  6<#Cc
"
<"


  6<#C


<
=
J"3

(  5<Cc98
 "
"
 : 9c<6+"C Cc

(  6<#Cc
"
<"


 6<#C


<
"
3 :9;%
"c3"

"->9"c


<
"
3 :9;
"
c3 :69;/%
"->69I
"->9"
c


<

"


 (& . 
%(

7 
Pada percobaan ini, kalimat ´Welcome home´ akan ditampilkan pada layar LCD Karakter
dengan menggunakan look up table dan dilakukan proses geser ke kiri.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Pasang jumper LCD_EN, yang berfungsi untuk memberikan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini:




Dcccc(<c++00



Dccccc(<c++00
 %
J
38
J%



- 
<


3
 :59;&<6C&<


( &  

3 :c9;

<cC(


/
8
J
"

"->59<6C6)c9- 6M   

8
J%3
 :"9;8 "c< CK""
8 "cL
 :9;c5<Cc59 (
%
 (
"
 :c9;,%<cC,%9""
!   
8
J
<
8
c3<!C
 :9HE"<!CK!E L
 :c9!<cC!
"< C Ec
8
J"<
"->98
c<C)c9


<
J"3
 :c9;c(<

8
J<
 :c9;ccc(< 
9
<,(9
/ .$6
8
J<
 :c9;cc(< 9
<  //9 (  //
8
J
 :c9;cc(<# "
9



8
J


<
=
J3
  5<C  C98
 "
 
 : 9c<6+"C Cc

(  6<#CcC  c
"
<"


  6<#CC  c


<
=
J"3

(  5<C  Cc98
 "
"
 : 9c<6+"C Cc

(  6<#CcC  c
"
<"


 6<#CC  c


<
"
3 :9;%
"c3"

"->9"c


"
3 :9;
"
c3 :69;/%
"->69I
"->9"
c


<
8 "c3sB=

A
B<%

%
" (
 
<

"

6. Simpanlah program yang anda ketik dan beri nama : prog44a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)

#s!!.
!!( ( !##1!2
'!3
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan ADC 0804
2. Mahasiswa memahami setting tegangan referensi Vref ADC0804
3. Mahasiswa memahami perhitungan tegangan resolusi ADC0804
4. Mahasiswa dapat memahami program assembly untuk menampilkan data ADC ke 7 Segmen
5. Mahasiswa dapat memahami program assembly untuk menampilkan data ADC ke LCD
Karakter 2 x 16

Gambar 5.1 Rangkaian ADC0804

!!#

Konverter A/D tersedia secara komersial sebagai rangkaian terpadu dengan resolusi 8 bit sampai
dengan 16 bit. Pada percobaan ini akan memperkenalkan ADC0801, yaitu sebagai sebuah
konverter A/D 8 bit yang mudah diinterfacekandengan sistem mikrokontroller. A/D ini
menggunakan metode approksimasi berturut-turut untuk mengkonversikan masukan analog (0-
5V) menjadi data digital 8 bit yang ekivalen. ADC0801 mempunyai pembangkit clock internal
dan memerlukan catu daya +5V dan mempunyai waktu konversi optimum sekitar 100us.
Gambar 5.2 Konfigurasi pin ADC0804

Diagram konfigurasi pin ADC0804 ditunjukkan pada gambar 5.2. Pin 11 sampai 18 ( keluaran
digital ) adalah keluaran tiga keadaan, yang dapat dihubungkan langsung dengan bus data
bilamana diperlukan. Apabila CS ( pin 1 ) atau RD (pin2) dalam keadaan high (³1´), pin 11
sampai 18 akan mengambang ( high impedanze ), apabila CS dan RD rendah keduanya, keluaran
digital akan muncul pada saluran keluaran.
Sinyal mulai konversi pada WR (pin 3). Untuk memulai suatu konversi, CS harus rendah.
Bilamana WR menjadi rendah, konverter akam mengalami reset, dan ketika WR kembali kepada
keadaan high, konversi segera dimulai.
Konversi detak konverter harus terletak dalam daereh frekuensi 100 sampai 800kHz. CLK IN (
pin 4) dapat diturunkan dari detak mikrokontroller, sebagai kemungkinan lain, kita dapat
mempergunakan pembangkit clock internal dengan memasang rangkaian RC antara CLN IN (
pin 4) dan CLK R ( pin 19).
Pin 5 adalah saluran yang digunakan untuk INTR, sinyal selesai konversi. INTR akan menjadi
tinggi pada saat memulai konversi, dan akan aktiv rendah bila konversi telah selesai. Tepi turun
sinyal INTR dapat dipergunakan untuk menginterupsi sistem mikrokontroller, supaya
mikrokontroller melakukan pencabangan ke subrutine pelayanan yang memproses keluaran
konverter.
Pin 6 dan 7 adalah masukan diferensial bagi sinyal analog. A/D ini mempunyai dua ground, A
GND (pin 8) dan D GND ( pin10). Kedua pin ini harus dihubungkan dengan ground. Pin 20
harus dihubungkan dengan catu daya +5V
A/D ini mempunyai dua buah ground, A GND ( pin 8 ) dan D GND ( pin 10). Keduanya harus
dihubungkan dengan catu daya, sebesar +5V.
Pada A/D 0804 merupakan tegangan referensi yang digunakan untuk offset suatu keluaran digital
maksimum. Dengan persamaan sebagai berikut:
Misalnya anda menginginkan masuk analog maksimum sebesar 4 V, maka:

Vref=0.5 x 4 = 2 volt

Resolusi ini mempunyai arti sebagai berikut:


1: 2 1(
2 
1"
 2
0,000 0000 0000
0,0156 0000 0001
0,0313 0000 0010
4 1111 1111 255

A/D ini dapat dirangkai untuk menghasilkan konversi secara kontinu. Untuk melaksanakannya,
kita harus menghubungkan CS, dan RD ke ground dan menyambungkan WR dengan INTR
seperti pada gambar dibawah ini. Maka dengan ini keluaran digital yang kontinu akan muncul,
karena sinyal INTR menggerakkan masukan WR. Pada akhir konversi INTR berubah menjadi
low, sehingga keadaan ini akan mereset konverter dan mulai konversi.

Tabel 5.1 Koneksi Interface ADC ke Mikrokontroller

ADC Port Mikrokontroller


/INTR P3.2
/WR P3.3
/RD P3.4
D0 s/d D7 P1.0 s/d P1.7

Tabel 5.2. Instruksi logika pada pin kontrol A/D 0804

    7#( !!


/WR /RD /INTR DO S/D D7 Hi-Z ( High Impedansi )
1 1 1 - -
0 1 1 Hi-Z Reset
1 1 1 Hi-Z -
1 1 0 Hi-Z Konversi Selesai
1 0 1 Data Out Data Ready


 (. c !,&"
6



Pada percobaan ini, Data ADC dalam desimal akan ditampilkan pada 8 x 7 Segmen pada Display
1, Display 2, dan Display 3 yang masing-masing menampilkan data ratusan, puluhan dan satuan.

(a)

(b)

Gambar 5.3. Interface rangkaian display 7 segmen

Tabel 5.1. kebenaran 74LS138

 
#!s#  
##
 s ! (c +(! +(s c    & . 5 6
0 0 0 1 0 0 0 1 1 1 1 1 1 1
0 0 1 1 0 0 1 0 1 1 1 1 1 1
0 1 0 1 0 0 1 1 0 1 1 1 1 1
0 1 1 1 0 0 1 1 1 0 1 1 1 1
1 0 0 1 0 0 1 1 1 1 0 1 1 1
1 0 1 1 0 0 1 1 1 1 1 0 1 1
1 1 0 1 0 0 1 1 1 1 1 1 0 1
1 1 1 1 0 0 1 1 1 1 1 1 1 0

Pada tabel kebenaran tersebut tampak bahwa seven segmen yang hidup tergantung pada output
dari dekoder 74LS138, yang sedang mengeluarkan logika low ´0´, sehingga dari 8 buah display
tersebut, selalu hanya satu display yang akan dihidupkan. Agar display tampak nyala secara
bersamaan maka ketiga display tersebut harus dihidupkan secara bergantian dengan waktu tunda
tertentu.

Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:


1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG
2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog51a.asm)

(a)
(b)
(c)

%

D%
%
Dc%

D%
<
 %
3!
s


:



- 
<
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<("  
 ("!
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
!3  
 
 
 

(  

3-(  9

  &
 :!9 c

(  &


<
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 
  "
6


<" (
 39%9"
<""
 "(%


"

 
< (
6


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

:


3
 :!9
 : 9;6


 :!9H!E 
 : 9!

(  .<
  5

(  6
"

<
 :!9%
 : 9;6


 :!9H!E 
 : 9!
  .<

(  5

(  6
"

<
 :!9
 : 9;6


 :!9H!E 
 : 9!

(  .<

(  5

(  6
"



<
"
3 :9;
"
c3 :9;/%
"->9I
"->9"
c


<
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 
(%"(

"
 
<
-""C)%)
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
s
3
 :(9;c"
":(
 :9
 :9(
 :(9;c"
":(
 :%9
 :9(


<
6

3
"(cc(9cccccc(9ccc(9ccc(9cccc(
"(ccc(9cc(9ccccc(9c(9cc(
<

"

7. Simpanlah program yang anda ketik dan beri nama : prog51a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan modifikasi pada program tersebut dengan manambahkan kata SUHU, pada
Display1, 2, 3 dan 4 diikuti dengan data ADC.


 (.  !,&"
7 
$c5

Pada percobaan ini, Data ADC dalam desimal akan ditampilkan pada LCD Karakter 2x16 pada
Baris 1, Colom 1, 2 dan 3, yang masing-masing menampilkan data ratusan, puluhan dan satuan.

Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:


1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG
2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog52a.asm)

D%
%
Dc%

D%
<
 %
J
8
J%
3!
s

=

- 
<
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<("  
 ("!
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
!3  
 
 
 

(  

3-(  9

  &
 :!9 c
!
 : 9!

(  &


<
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 
  "
%
$c5
<"! G!s 9%9"
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
=
3
 :c9;G%
8
J
 :9
""9;%
 :c9
8
J"
<
 :c9;%
8
J
 :9%
""9;%
 :c9
8
J"
<
 :c9;(%
8
J
 :9
""9;%
 :c9
8
J"


<
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 
(%"(

"
 
<
-""C)%)
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
s
3
 :(9;c"
":(
 :9
 :9(
 :(9;c"
":(
 :%9
 :9(


<
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 
  !,&
<"(c
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
8
J%3
 :"9;8 "c< CK""
8 "cL
 :9;c5<Cc59 (
%
 (
"
 :c9;,%<cC,%9""
!   
8
J
<
8
c3<!C
 :9HE"<!CK!E L
 :c9!<cC!
"< C Ec
8
J"<
"->98
c<C)c9


<
J"3
 :c9;c(<

8
J
 :c9;ccc(< 
9,(9
/ .$6
8
J
 :c9;cc(< 9  //9 (  //
8
J
 :c9;cc(<# "
9



8
J


<
8
J3
  5<C  C98
 "
 
 : 9c<6+"C Cc

(  6<#CcC  c
"
<"


  6<#CC  c


<
=
J"3

(  5<C  Cc98
 "
"
 : 9c<6+"C Cc

(  6<#CcC  c
"
<"


 6<#CC  c


<
"
3 :9;
"
c3 :9;/%
"->9I
"->9"
c


<
8 "c3sB!,&B

"

7. Simpanlah program yang anda ketik dan beri nama : prog52a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan modifikasi pada program tersebut dengan manambahkan kata SUHU: , pada Baris 2
diikuti dengan data ADC.


 (.  !     "

/    
"   
%"
"7 


Dalam dunia elektronika, rangkaian komparator, umumnya diwujudkan dengan memanfaatkan


rangkaian op-amp yang dibangun sebagai komparator. Sesuai dengan prinsip kerja komparator,
membandingkan dua buah tegangan yang masuk pada input INV dan NON INV, untuk
menghasilkan suatu output tegangan saturasi. Dengan memanfaatkan instruksi aritmatika SUBB
dan instruksi lompatan JZ dan JC, maka rangkaian analog ini dapat digantikan dengan
menggunakan pemrograman assembly.
Gambar 5.10 Rangkaian komparator analog dengan IC OP-AMP

Apabila tegangan yang masuk pada VREF lebih besar daripada tegangan yang masuk pada VIN
maka VOUT akan mengeluarkan tegangan ~0 volt. Dan sebaliknya bila tegangan yang masuk
pada VREF lebih kecil dari pada VIN maka VOUT akam mengeluarkan tegangan VSAT.

Controlauhu:
mov a,dataaetting ; contoh dataaetting=50
mov b,dataADC ; contoh dataADC=30
clr c
subb a,b
nz OnHeater
ret
OnHeater:
c OffHeater
call HeaterOn ;Instruksi hidupkan heater
ret
OffHeater:
Call HeaterOff ;Instruksi matikan heater
ret
;

Pada instruksi tersebut diambil selisih antara dataSetting dan dataADC dengan menggunakan
instruksi SUBB, pengurangan ini akan menghasilkan tiga keadaan yaitu: NOL, NEGATIF atau
POSITIF. Hasil-hasil inilah yang harus dideteksi, keadaan NEGATIF dapat dideteksi dengan
memantau bit C (carry ), keadaan NOL dapat dideteksi dengan memantau register A
(accumulator).

Apabila diberikan keadaan input sesuai dengan contoh tersebut maka:


A=dataSetting=50
B=dataADC=30
SUBB A,B
A=50-30 =20 (keadaan POSITIF)
Sesuai dengan instruksi diatas maka program akan menuju ke Ret OnHeater, pada baris ini
dilakukan proses pengujian keadaan, dengan instruksi JC, karena keadaan POSITIF maka C=0
(clear) sehingga program akan memanggil HeaterOn

Apabila diberikan keadaan input sesuai dengan contoh tersebut maka:


A=dataSetting=50
B=dataADC=50
SUBB A,B
A=50-50 =00 (keadaan NOL)
Sesuai dengan instruksi diatas maka program akan menuju ke Ret.

Apabila diberikan keadaan input sesuai dengan contoh tersebut maka:


A=dataSetting=50
B=dataADC=51
SUBB A,B
A=50-51 =-1 (keadaan NEGATIF)
Sesuai dengan instruksi diatas maka program akan menuju ke OnHeater, pada baris ini dilakukan
proses pengujian keadaan, dengan instruksi JC, karena keadaan NEGATIF maka C=1 (clear)
sehingga program akan memanggil label OffHeater

Pada percobaan 5.3. ini indikator heater On dan Off, ditunjukkan pada layar LCD Karakter pada
baris 1. seperti yang ditunjukkan pada pemrograman berikut ini:

1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG


2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program (download
file prog53a.asm)

Gambar 5.11. Diagram alir (a) rutin utama (b) subrutin kontrol suhu pada percobaan 5.3.

dataaetting equ 30h


dataADC equ 31h
ratusan equ 32h
puluhan equ 33h
satuan equ 34h
org 0h
mov dataaetting,#50d; contoh datasetting=50
call init_lcd
start:call ADC
call Controlauhu
call bin2dec
call Display2LCD
smp start
;
Controlauhu:
mov a,dataaetting ; contoh dataaetting=50
mov b,dataADC ; contoh dataADC=30
clr c
subb a,b
nz OnHeater
ret
OnHeater:
c OffHeater
call HeaterOn ;Instruksi hidupkan heater
ret
OffHeater:
Call HeaterOff ;Instruksi matikan heater
ret
;
HeaterOn:
mov R1,#80h
call write_inst
mov R1,#'O'
call write_data
;
mov R1,#81h
call write_inst
mov R1,#'n'
call write_data
;
mov R1,#82h
call write_inst
mov R1,#' '
call write_data
ret
HeaterOff:
mov R1,#80h
call write_inst
mov R1,#'O'
call write_data
;
mov R1,#81h
call write_inst
mov R1,#'f'
call write_data
;
mov R1,#82h
call write_inst
mov R1,#'f'
call write_data
ret
;=======================================
;aubrutin ini untuk merubah data biner ke desimal
;menadi 3 digit = ratusan-puluhan-satuan
;=======================================
Bin2Dec:
mov A,dataADC
mov b,#100d
div ab
mov ratusan,a
mov a,b
mov b,#10d
div ab
mov puluhan,a
mov satuan,b
ret
;=================================================
;aubrutin untuk menampilkan data ke LCD character 2 x16
;pada DDRAM 0C9 0CA 0CB untukratusan, puluhan, and satuan
;=================================================
Display2LCD:
mov r1,#0c0h
call write_inst
mov a,ratusan
add a,#30h
mov r1,a
call write_data
;
mov r1,#0c1h
call write_inst
mov a,puluhan
add a,#30h
mov r1,a
call write_data
;
mov r1,#0c2h
call write_inst
mov a,satuan
add a,#30h
mov r1,a
call write_data
ret
;=======================================
;aubrutin ini digunakan untuk mengambil data ADC
;========================================
ADC: clr P3.3
nop
nop
nop
setb P3.3
eoc: b P3.2,eoc
clr P3.4
mov A,P1
mov dataADC,A
setb P3.4
ret
;
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst
mov r1,#00111000b ;¢ 
    
call write_inst
mov r1,#00001100b ;
      
call write_inst
mov r1,#00000110b ;Entry mode, aet increment
call write_inst
ret
;
write_inst:
clr P3.6 ; Ra = P2.0 = 0, write mode instruction
mov P0,R1 ; D7 s/d D0 = P0 = R1
setb P3.7 ; EN = 1 = P2.1
call delay ; call delay time
clr P3.7 ; EN = 0 = P2.1
ret
;
rite_data:
setb P3.6 ; Ra = P2.0 = 1, write mode data
mov P0,R1 ; D7 s/d D0 = P0 = R1
setb P3.7 ; EN = 1 = P2.1
call delay ; call delay time
clr p3.7 ; EN = 0 = P2.1
ret
;
delay: mov R0,#0
delay1:mov R2,#0fh
dnz R2,$
dnz R0,delay1
ret
end

6. Simpanlah program yang anda ketik dan beri nama : prog53a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
9. Lakukan modifikasi pada program tersebut dengan manambahkan kata SUHU: , pada Baris 2
diikuti dengan data ADC.


 (. & 7("!
%"

 
 "
 (

Kenapa kita membutuhkan look up table?: Look up table adalah suatu cara yang digunakan
untuk menghindari proses perkalian dan pembagian yang bertele-tele dan memusingkan bila
dilakukan dengan menggunakan bahasa assembly, yang tentunya harus dilakukan bila kita akan
kalibrasi suatu alat ukur. Contoh kalibrasi Termometer dengan menggunakan persamaan
persamaan berikut ini: Suhu = DataADC * 100/ 255 oC.
Contoh table untuk konversi data ke besaran suhu ( dengan menggunakan program Microsoft
Excell ). Karena data decimal maksimal adalah 255 dan suhu maksimal 100 maka Data look up
tablenya adalah 255/100.

Pada percobaan 5.4, kalibrasi dilakukan untuk perubahan range desimal (0 s/d 255) menjadi
range suhu(000.0 s/d 100.0 oC)

1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG


2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program (download
file prog54a.asm)

Ô  
 

  

 
  ! "
#" 
$
$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
$  Ô     " " Ô  

$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

&'



 &'
# &' 
&'(
"! &)
"!Ô  
 
 &'(

$

  ! "


"!
&*+ ,   $
&*+%-+   .
"!
 
$%-
 
.
"! /0
&*+$%-0
&*+.
"!
&*+ ,
 "$
&*+%-
  ".
"! /0
&*+$%-0
&*+.
"!& $&
&'$
Ô %) 
&'1$2%
  &'$Ô %)
 Ô $& 3   Ô 
$
"!
&*+ ,   $
&*+%-&   .
"!
 
$%
 

"! /0
&*+$%-0
&*+.
"!
&*+ ,
 "$
&*+%-
  ".
"! /0
&*+$%-0
&*+.
"!& 
  &'
&'1
  &'
 Ô 
$
"!
&*+ ,  
"!
 

"! /0
&*+
"!
&*+ ,
 "
"! /0
&*+
"!& 
&'$
  &'1
  &'
 Ô 
$
"!
&*+ ,&  
"!
 

"! /0
&*+
"!
&*+ ,
 "
"! /0
&*+
"!& 
  &'$
  &'1
  &'
 Ô 

$
Ô "!+ ,
Ô )"!+ ,
Ô#4+ 5
Ô#4+ Ô )

$
&  
Ô  (  1  (  )  6   )  6   )   1  (  1  (   6   ) 
Ô 6   )  6  1  (  1  (  1  (  )  6   )  6   )   1  (
Ô   1  (   6   )  6   )  6  1  (  1  (  1  (  )  6 
Ô  )  6   )   1  (  1  (   6   )  6   )  6  1  ( 
Ô 1  (  1  (  )  6   )  6   )   1  (  1  (   6   )
Ô  6   )  6  1  (  1  (  1  (  )  6   )  6   )   1 
Ô (  1  (   6   )  6   )  6  1  (  1 
$
 
Ô    ) )       ( (    1 1    6 6 6   ) ) )      ( (
Ô (   1 1 1   6 6    ) )       ( (    1 1    6 6
Ô 6   ) ) )      ( ( (   1 1 1   6 6    ) )       (
Ô (    1 1    6 6 6   ) ) )      ( ( (   1 1 1   6
Ô 6    ) )       ( (    1 1    6 6 6   ) ) )      (
Ô ( (   1 1 1   6 6    ) )       ( (    1 1    6
Ô 6    ) )       ( (    1 1    6 6 6 
$
   
Ô                           ) ) ) ) ) ) ) ) ) ) ) )
Ô ) ) ) ) ) ) ) ) ) ) ) ) )                         
Ô                           ( ( ( ( ( ( ( ( ( ( ( (
Ô ( ( ( ( ( ( ( ( ( ( ( ( ( (                        
Ô  1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1            
Ô               
Ô  6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 
$
+   
Ô                                      
Ô                                      
Ô                                      
Ô                                      
Ô                                      
Ô                                      
Ô                            )
$

 "
Ô )) )))))) ))) ))) )))) 
Ô ))) )) ))))) ) )) 
$
Ô



 (. . "%?@9 +c9 N

Pada percobaan 5.5, kalibrasi dilakukan untuk perubahan range desimal (0 s/d 255) menjadi
range suhu(000.0 s/d 100.0 oC) dengan menambahkan karakter koma, derajat dan Celcius yang
ditampilkan pada 7 segmen.

1. Pada saat langkah pemrograman posisikan saklar togle ke posisi PROG


2. Posisikan saklar togle ke RUN untuk mengaktifkan ADC0804 CS=0
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
"!
D%
 %
3!
"
:



- 
<
!3  
 
 
 

(  

3-(  9

  &
 :!9 c
 :"!9!

(  &


<

:


3
 : 9;
 :!9!
 :!9H!E 
 : 9;"6


 :!9H!E 
 : 9!
  .
  5
  6
"

<
 : 9;%
 :!9!
 :!9H!E 
 : 9;"6


 :!9H!E 
 : 9!

(  .
  5
  6
"

<
 : 9;
 :!9"!
 :!9H!E 
 : 9;"6


 :!9H!E 
 : 9!
  .

(  5
  6
"

<
 : 9;
%
 :!9"!
 :!9H!E 
 : 9;"6


 :!9H!E"
 : 9!
  .
  5

(  6
"

<

(  .

(  5
  6
 : 9;ccccccc(
"

<
  .

(  5

(  6
 : 9;cccc(
"

<

(  .

(  5

(  6
 : 9;cccc(
"



<
"
3 :9;
"
c3 :9;.%
"->9I
"->9"
c


<

%3
"(9&9,99599&969c9.9G9969c9.9G9969c9.9,99599&9,99599&9,99.9G9969c9.
"(G9969c9.9G99599&9,99599&9,99599&969c9.9G9969c9.9G9969c9.9,99599&
"(,99599&9,99.9G9969c9.9G9969c9.9G99599&9,99599&9,99599&969c9.9G9
"(69c9.9G9969c9.9,99599&9,99599&9,99.9G9969c9.9G9969c9.9G99599&9,9
"(599&9,99599&969c9.9G9969c9.9G9969c9.9,99599&9,99599&9,99.9G9969c
"(.9G9969c9.9G99599&9,99599&9,99599&969c9.9G9969c9.9G9969c9.9,9959
"(&9,99599&9,99.9G9969c9.9G9969c9.9G99599&9,9959
<
3
"(999c9c9999999&9&9.9.9.95959696969,9,9G9G9G999c9c9c999999&9&
"(&9.9.95959596969,9,9,9G9G9999c9c9999999&9&9.9.9.95959696969,9,9G9G
"(G999c9c9c999999&9&9&9.9.95959596969,9,9,9G9G9999c9c9999999&
"(&9.9.9.95959696969,9,9G9G9G999c9c9c999999&9&9&9.9.95959596969,9,9,9G
"(G9999c9c9999999&9&9.9.9.95959696969,9,9G9G9G999c9c9c999999&
"(&9&9.9.95959596969,9,9,9G9G9999c9c9999999&9&9.9.9.95959696969,9,9G
"(G9999c9c9999999&9&9.9.9.95959696969,9,9G9G9G9
<
%3
"(99999999999999999999999999c9c9c9c9c9c9c9c9c9c9c9c
"(c9c9c9c9c9c9c9c9c9c9c9c9c9999999999999999999999999
"(99999999999999999999999999&9&9&9&9&9&9&9&9&9&9&9&
"(&9&9&9&9&9&9&9&9&9&9&9&9&9&9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.9.
"(.95959595959595959595959595959595959595959595959595969696969696969696969696
"(6969696969696969696969696969,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,
"(,9,9G9G9G9G9G9G9G9G9G9G9G9G9G9G9G9G9G9G9G9G9G9G9G9G9G9
<
3
"(9999999999999999999999999999999999999
"(9999999999999999999999999999999999999
"(9999999999999999999999999999999999999
"(9999999999999999999999999999999999999
"(9999999999999999999999999999999999999
"(9999999999999999999999999999999999999
"(999999999999999999999999999c
<
"6

3
"(cc(9cccccc(9ccc(9ccc(9cccc(
"(ccc(9cc(9ccccc(9c(9cc(
<

"

#s!!5
 ( !!!(##

'!
1. Mahasiswa memahami rangkaian interface mikrokontroller dengan DAC0808
2. Mahasiswa memahami setting arus referensi pada DAC
3. Mahasiswa memahami perhitungan output tegangan
4. Mahasiswa memahami pemrograman assembly DAC
Gambar 6.1. Rangkaian DAC0808

# !!

DAC0808 merupakan salah satu contoh kenverter D/A. IC ini tidak mahal dan digunakan secara
luas dalam beberapa aplikasi, D/A ini menerapkan metode tangga R-2R 8 bit yang dilengkapi
dengan sumber arus acuan dan delapan buah transistor saklar untuk mengarahkan arus biner.
Suatu tegangan dan hambatan eksternal dipergunakan untuk mengatur arus acuan pada nilai yang
lazim berlaku yaitu 2 mA. DAC0808 mempunyai waktu pemantapan 150ns dan ketelitian relatif
.

Konfigurasi pin ditunjukkan seperti pada gambar 6.2. dengan penjelasan sebagai berikut. Pin 1
tidak dipakai ( NC singkatan dari no connection ). Pin 2 adalah penghubung ke ground. Pin 3 ( )
harus dipasang pada -12V. Pin 4 adalah saluran balik dari ground, yang sifatnya sebagi output
pembalik. Pin 5 s/d 12 merukan 8 bit masukan data. Pin 13 ( ) harus dipasang pada catu daya
+5V. Pin 14 dihubungkan dengan catu daya positif melalui hambatan R14, dan pin 15
dihubungkan ke ground melalui hambatan R15. Akhirnya sebuah kapasitor antar pin 16 dan pin
13 berfungsi untuk memberi kompensasi frekuensi bagi IC ini.
Gambar 6.2. Pin konfigurasi


 (5 c 

 


"!

Pada percobaan ini, suatu tegangan tertentu akan dikeluarkan melalui DAC
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Pasang jumper pada konektor EN_DAC untuk mengaktifkan rangkaian DAC
2. Atur arus IREF dengan menghubungkan konektor dengan menggunakan ampermeter, atur
potensio R14 untuk memberikan referensi arus tertentu sekitar 2mA
3. Pasang jumper pada konektor IREF
4. Hubungkan modul Microcontroller Trainer dengan power supply +5V
5. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
6. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
7. Ketik program berikut ini: (download file prog61a.asm)
%
 :!9;.<"
  "
 
3 : 9!< "!
 
- 

"

8. Simpanlah program yang anda ketik dan beri nama : prog61a.asm


9. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
10. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
11. Lakukan pengamatan dengan menggunakan Voltmeter.
12. Lakukan modifikasi pada program tersebut untuk mengelurakan tegangan lain, sesuai tabel:

 !1 2 !!# !1#2


1 ?
1,5 ?
2 ?
2,5 ?
3 ?
3,5 ?
4 ?
5 ?
6 ?
7 ?
8 ?
9 ?
10 ?



 (5  

 
+"c

Pada percobaan ini, tegangan tertentu akan dikeluarkan melalui DAC


Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Pasang jumper pada konektor EN_DAC untuk mengaktifkan rangkaian DAC
2. Atur arus IREF dengan menghubungkan konektor dengan menggunakan ampermeter, atur
potensio R14 untuk memberikan referensi arus tertentu sekitar 2mA
3. Pasang jumper pada konektor IREF
4. Hubungkan modul Microcontroller Trainer dengan power supply +5V
5. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
6. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
7. Ketik program berikut ini: (download file prog62a.asm)

%
 :!9;
3 : 9!
!
"

-
!9;..9
 :!9;
- 
<
"
3 :c9;..
"
c3 :9;..
"
3"->9"

"->c9"
c



"
7. Simpanlah program yang anda ketik dan beri nama : prog62a.asm
8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan pengamatan dengan menggunakan Voltmeter.

#s!!6
7# !&0&

'!3
1. Mahasiswa memahami rangkaian interface keypad 4x4 dengan mikrokontroller
2. Mahasiswa memahami bahasa assembly untuk pengambilan data keypad
3. Mahasiswa memahami bahasa assembly untuk pengambilan data keypad dan mengeluarkan ke
LED
4. Mahasiswa memahami bahasa assembly untuk pengambilan data keypad dan mengeluarkan ke
7 Segmen
5. Mahasiswa memahami bahasa assembly untuk pengambilan data keypad dan mengeluarkan ke
LCD Karakter

Gambar 7.1 Rangkaian interface keypad 4x4


Keypad serig digunakan sebagi suatu input pada beberapa peralatan yang berbasis
mikroprosessor atau mikrokontroller. Keypad sesungguhnya terdiri dari sejumlah saklar, yang
terhubung sebagai baris dan kolom dengan susuan seperti yang ditunjukkan pada gambar 7.2.
Agar mikrokontroller dapat melakukan scan keypad, maka port mengeluarkan salah satu bit dari
4 bit yang terhubung pada kolom dengan logika low ³0´ dan selanjutnya membaca 4 bit pada
baris untuk menguji jika ada tombol yang ditekan pada kolom tersebut. Sebagai konsekuensi,
selama tidak ada tombol yang ditekan, maka mikrokontroller akan melihat sebagai logika high
³1´ pada setiap pin yang terhubung ke baris.

Gambar 7.3. Rangkaian dasar keypad 4x4

6 c 
 ("
"c$&9) #)! 8)! 8

Pada percobaan ini, akan dilakukan scan data keypad COR-MEN-UpArr.- DnArr. dan
mengeluarkan data ke LED.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Buka jumper pada DAC_EN, apabila sedang terpasang.
2. Hubungkan jumper pada LED_EN.
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
Gambar 7.4. Display LED sebagai Output Data Keypad

5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini:(download file prog71a.asm)

(a)
(b)

 &(  
 (  c
 (  
 c(  
 8c(  &
 8(  .
 8(  5
 8&(  6
<

"
D6%

( 
D6c%

 
D 
<
 %
 : 9;cccccccc(
3
"&$&<( 

"&$&
 :!9
"<!C
"
-
!9;%9
"<
- < (##

"3 !<!C!
 : 9!< C!
- < (## !
<
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 

"c  $& 8
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7
"&$&3
 :
( 9;.<
( C.
 :
 9;%<
 C C
 &< cC  C
<

3
-( 8&9
 #<7

"->
( 97

 :
"9;!%<C!%


<

 #3
-( 89
!<7
 #
"->
( 9
 #
 :
"9;(%<C(%


<

!3
-( 89
!<
"->
( 9
!
 :
"9;%<C%


<

!3
-( 8c9
<
"->
( 9
!
 :
"9;"%<C"%



3 :
"9;%


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<%

" /7
"&$&( 

<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
"
3 :9;
"
c3 :9;.
"->9I
"->9"
c


<

"

7. Simpanlah program yang anda ketik dan beri nama : prog71a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan modifikasi pada program tersebut diatas untuk scan data keypad 3-6-9-ENT
11. Lakukan modifikasi pada program tersebut diatas untuk scan data keypad 2-5-8-0
12. Lakukan modifikasi pada program tersebut diatas untuk scan data keypad 1-4-7-CAN

6  
 ("
"&$&"

 


Pada percobaan ini, akan dilakukan scan data keypad dan mengeluarkan data ke LCD Karakter.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
4. Pasang jumper EN_LCD
5. Buka jumper pada EN_DAC, apabila sedang terpasang
6. Hubungkan modul Microcontroller Trainer dengan power supply +5V
7. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
8. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
9. Ketik program berikut ini:(download file prog72a.asm)

 &(  
 (  c
 (  
 c(  
 8c(  &
 8(  .
 8(  5
 8&(  6

"
D6%

( 
D6c%

 
D 
 %
 : 9;cccccccc(
  J
3
"&$& <( 

"&$&
 :!9
" <!C
"
 -
!9;%9=<
 -   < (## !c
<
=3 :c9;,%<  ! c 8"c 
 8
J
 :c9;%
 !""!9c
 :c9!
 8
J"  <8
"
 -   < (## !<
<
J"3
  :c9;c( <

  8
J <
  :c9;ccc( < 
9,(9
/ .$6
 8
J <
  :c9;cc( < 9  //9 (  //
  8
J
  :c9;cc( <# "
9



  8
J
  

<
=
J3
    5  <  5CC
  : 9c  < C6+"Cc
  
(  6  <  6C#Cc
  "
  <"


    6  <  6C#C
  

<
=
J"3
  
(  5  <  5CCc
  : 9c  < C6+"Cc
  
(  6  <  6C#Cc
  "
  <"


 "
   <"


   6   <  6C#C
  

<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 

"&$&
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
7
"&$&3
 :
( 9;. <
( C.
 :
 9;% <
 C C
  &   < &C
<

3-( 8&9
 # <7

 "->
( 97

 :
"9;!%  <
 

<

 #3-( 89
! <7
 #
 "->
( 9
 #
 :
"9;(%  <
 


!3-( 89
!<7
! 8
"->
( 9
!
 :
"9;%<


<

!3-( 8c9
<7
 8! 8
"->
( 9
!
 :
"9;"%<


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

3
( &
 
-( 8&9
5
"->
( 9
<7

 :
"9;%<


<

53-( 89
G
"->
( 9
5<7
5
 :
"9;5%<


<

G3-( 89
#
"->
( 9
G<7
G
 :
"9;G%<


<

#3-( 8c9

"->
( 9
#<7
#
 :
"9;
%<


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

3
( 
 
-( 8&9
.
"->
( 9

 :
"9;%<


<

.3-( 89
,
"->
( 9
.
 :
"9;.%<


<

,3-( 89

"->
( 9
,
 :
"9;,%<


<

3-( 8c9
c
"->
( 9

 :
"9;%<


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

c3
( 
 c
-( 8&9
&
"->
( 9
c
 :
"9;c%<



&3-( 89
6
"->
( 9
&
 :
"9;&%<



63-( 89
!
"->
( 9
6
 :
"9;6%<



!3-( 8c9

"->
( 9
!
 :
"9;%<



3 :
"9;%


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<%

" /7
"&$&( 

<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
"
3 :9;
"
c3 :9;.
"->9I
"->9"
c



"

5. Simpanlah program yang anda ketik dan beri nama : prog72a.asm


6. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
7. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
8. Lakukan pengamatan pada LCD
9. Lakukan modifikasi pada program tersebut untuk menampilkan data keypad ke lokasi
DDRAM LCD:

No Lokasi Display LCD Karakter Data Keypad


1 Baris 2 Kolom 2
2 Baris 2 Kolom 16

10. Lakukan modifikasi pada rangkaian tersebut untuk menampilan data keypad ke display 7
segmen sesuai dengan percobaan 3.

#s!!,
# #

'!
1. Mahasiswa mamahami rangkaian interface mikrokontroller dengan motor stepper
2. Mahasiswa memahami rangkaian driver motor stepper ULN2003
3. Mahasiswa memahami bahasa assembly untuk mengatur arah putaran motor stepper
4. Mahasiswa memahami bahasa assembly untuk mengatur arah putaran motor stepper dengan
menggunakan saklar.
Gambar 8.1. Rangkaian interface motor stepper dengan driver ULN2003

!!#

Pada Motor DC biasa, akan berputar dan berputar terus selama power supply ada. Tidak ada
rangkaian cerdas tertentu yang diperlukan untuk mengendalikan motor tersebut, kecuali hanya
memperlambat putaran atau membalik putaran, dengan menerapkan polaritas balik. Motor
stepper adalah sangat berbeda. Jika anda memberikan power pada motor ini, maka motor ini
akan berada dalam keadaan diam, agar motor dapat berputar, anda harus merubah sinyal yang
masuk ke motor. Sebagai ilustrasi, dapat dibayangkan sebuah kompas dengan elektromagnet
disekitarnya. Sebagaimana digambarkan pada gambar 2.2., apabila power yang diberikan pada
elektromagnet diganti, maka akan merubah posisi jarum dari kompas.

Gambar 4.2. Ilustrasi sebuah kompas dengan elektromagnet


Dengan empat buah elektromagnet maka gerakan akan melompat secara kasar. Sekarang
bayangkan susunan yang sama dengan 100 elektromagnet yang mengitari kompas. Dengan
mangatur energi yang mengalir pada setiap elektromagnet dalam berurutan, maka jarum akan
memerlukan sebanyak 100 langkah untuk melakukan satu kali putaran. Tetapi dengan
pengaturan 100 elektromagnet secara individu, akan memerlukan elektronika yang kompleks.

Gambar 4.3. Ilustrasi motor stepper dengan jarum kompas dengan elektromagnet

Pada ilustrasi tersebut, huruf-huruf yang melingkar mewakili elektromagnet. Semua magnet
dengan huruf yang sama berada dalam keadaan koneksi. Ketika anda memberi arus pada
rangkaian tersebut, maka semua elektromagnet dengan huruf yang sama akan on pada saat itu,
untuk menggerakkan kompas, maka elektromaget berikutnya harus dialiri arus, sehingga akan
menimbulkan gerakan.

Table 2.7.1. Full Step Mode

! s   7 #!
1 0 0 0 Take a step clock wise
0 1 0 0 another step clock wise
0 0 1 0 another step clock wise
0 0 0 1 another step clock wise
0 0 0 1 No step take
0 0 1 0 Take a step back

Mode Half Steps


Dengan menghidupkan dua koil pada waktu yang bersamaan maka motor akan berada dalam
posisi diantaranya.
Figure 2.7.4. Half step mode

Table 2.7.2. Half Step Mode

! s   7 #!
1 0 0 0 Take a step clock wise
1 1 0 0 Half a step clock wise
0 1 0 0 The complete full step clock wise
0 1 1 0 another half step clock wise
0 0 1 0 The complete full step clock wise
0 0 1 1 Another half step clock wise
0 0 0 1 The complete full step clock wise
1 0 0 1 another half step clock wise
1 0 0 0 Start position
Gambar 8.3. Bentuk fisik motor stepper disk drive 1,2´


 (, c 

    
%' '

Pada percobaan ini, motor stepper akan berputar searah jarum jam, terus menerus
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan kabel parallel antara P0 dengan motor stepper
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini:(download file prog81a.asm)
%
3
=
- 
<

=3
 : 9;ccccccc(< ":
c
"
<"


 : 9;ccccccc(< ":

"
<"


 : 9;ccccccc(< ":

"
<"


 : 9;ccccccc(< ":
&
"
<"




<

=3
 : 9;ccccccc(< ":
c
"
<"


 : 9;ccccccc(< ":

"
<"


 : 9;ccccccc(< ":

"
<"


 : 9;ccccccc(< ":
&
"
<"




<
"
3 :9;..
"
c3 :9;..
"->9I
"->9"
c



"

6. Simpanlah program yang anda ketik dan beri nama : prog81a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
9. Lakukan pengamatan arah putaran motor stepper apakah sudah sesuai ?
10. Lakukan modifikasi program tersebut diatas, untuk putaran motor yang berlawanan arah
jarum jam CCW.


 (, 
!%   
 

Pada percobaan ini, motor stepper akan berputar searah jarum jam, atau berlawanan arah jarum
jam bergantung pada posisi push button yang ditekan ( P2.0 atau P2.1 ) secara terus menerus.

Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:


1. Hubungkan kabel parallel antara P0 dengan motor stepper
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog82a.asm)
%
3
=3's  9=<=c

=
- 
<
=3's  c9=<=

=
- 
<

=3
 : 9;ccccccc(< ":
c
"
<"


 : 9;ccccccc(< ":

"
<"


 : 9;ccccccc(< ":

"
<"


 : 9;ccccccc(< ":
&
"
<"




<

=3
 : 9;ccccccc(< ":
c
"
<"


 : 9;ccccccc(< ":

"
<"


 : 9;ccccccc(< ":

"
<"


 : 9;ccccccc(< ":
&
"
<"




<
"
3 :9;..
"
c3 :9;..
"->9I
"->9"
c



"

7. Simpanlah program yang anda ketik dan beri nama : prog82a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan pengamatan arah putaran motor stepper apakah sudah sesuai ?
11. Lakukan modifikasi program tersebut diatas, saklar push button yang lain.

#s!!G
  #+#

'!
1. Mahasiswa memahami fungsi timer dan counter pada mikrokontroller
2. Mahasiswa memahami rangkaian interface untuk aplikasi timer dan counter
3. Mahasiswa dapat memanfaatkan fungsi counter untuk mencacah pulsa
4. Mahasiswa dapat memanfaatkan fungsi timer untuk membangkitkan clock dengan periode
tertentu.

( #

Pada keluarga MCS-51 terdapat dua buah timer/ counter 16 bit, yang dapat dikonfigurasikan
sebagai timer atau counter, 8 bit, 13 bit atau 16 bit sesuai dengan mode yang dipilih. Gambar
berikut merupakan contoh aplikasi Counter 8 bit dengan menggunakan mode 3


 (G c !  "

( 
,("
 #
Pada percobaan ini, pulsa diambil melalui clock generator yang dibangkitkan oleh IC 555 yang
mempunyai frekuensi 1 Hz, hasil cacahan biner pada register counter akan ditampilkan pada
LED.

Lakukan beberapa langkah percobaan sebagai berikut:


1. Hubungkan 1 buah kabel antara P3.5 dengan output clock IC 555
2. Hubungkan jumper konektor LED_EN
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog91a.asm)
 %
3 : 9;ccc(< "
 
,(


(   <cC9 
(
3 :!9  <!C
 !   <!C!
 : 9!   < C!
- (
   <  
:

#"

7. Simpanlah program yang anda ketik dan beri nama : prog91a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan pengamatan pada LED ? dan lengkapi tabel berikut.

    !#
   c   & . 5 6 ,
1
2
3
4
:
20



 (G  ! 
9 "

( 
,("
 6



Pada percobaan ini, pulsa diambil melalui clock generator yang dibangkitkan oleh IC 555 yang
mempunyai frekuensi 1 Hz, hasil cacahan biner pada register counter akan ditampilkan pada 7
Segmen.
Lakukan beberapa langkah percobaan sebagai berikut:
1. Hubungkan 1 buah kabel antara P3.5 dengan output clock IC 555
2. Hubungkan jumper konektor 7Segmen_EN
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog92a.asm)

D%
%
Dc%

D%
 %
 : 9;ccc( < "
 
,(

 
(  <cC9 
(
3 :!9 <!C
 s
  <( 
(

"
 
 6

<( 
"6


 - (
  <  
:

<
s
3
 :(9;c"
 ":(
 :9
 :9(
 :(9;c"
 ":(
 :%9
 :9(
 

<
6

3
   .
   5
   6
 :!9
 : 9;6


 :!9H!E 
 : 9!
"
  
<
 
(  .
   5
   6
 :!9%
 : 9;6


 :!9H!E 
 : 9!
 "
 
<
   .<
 
(  5
   6
 :!9
 : 9;6


 :!9H!E 
 : 9!
 "

 

<
"
3 :9;
"
c3 :9;/%
 "->9I
 "->9"
c
 

<
6

3
 "(cc(9cccccc(9ccc(9ccc(9cccc(
 "(ccc(9cc(9ccccc(9c(9cc(
<

"

7. Simpanlah program yang anda ketik dan beri nama : prog92a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan pengamatan pada display 7 segmen ? dan lengkapi tabel berikut.

  
6


1 ?
2 ?
3 ?
4 ?
5 ?
: :
20 ?

(  #
Pada keluarga MCS-51 terdapat dua buah timer/ counter 16 bit, yang dapat dikonfigurasikan
sebagai timer atau counter, 8 bit, 13 bit atau 16 bit sesuai dengan mode yang dipilih. Gambar
berikut merupakan contoh aplikasi Counter 16 bit dengan menggunakan mode 1


 (G  ! 
c9
(
c5("
 #

Pada percobaan ini, clock akan dibangkitkan dengan menggunakan fungsi timer 16 bit, dengan
periode 1 detik, Ton = 0,5 detik dan Toff = 0,5 detik, dengan tampilan LED

Pada mode ini, dengan kristal 12MHz maka timer akan overflow setiap 65.536 udetik. Pada
percobaan ini, untuk membangkitkan interupsi setiap 1000 udetik maka data yang harus diisikan
pada register TL1 dan TH1 adalah sebagai berikut:
65536 - 10000 = 55536 d or D8F0h
Maka interupsi TF1 akan segera dibangkitkan setiap 1000 x 1 udetik = 0,01 detik
pada pemrograman ini, RO diimplementasikan sebagai counter software, Register R0 akan
increment setiap Timer 1 overflow. Jika register R7 telah mendeteksi nilai 50 maka port P0.0 (
LED D0 ) akan nyala selama = 0,01 x 50 detik = 0,5 detik.
Lakukan beberapa langkah percobaan sebagai berikut:
1. Lepas kabel yang menghubungkan antara P3.5 dengan output clock IC 555
2. Hubungkan jumper konektor LED_EN
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog93a.asm)

%
3
(  <  Cc

<"


  <  C
"
<"


- <  
:

<

3 :9;<C
 : 9;c(< "
c9C
cc5(
 "3 :Ac9;,%<AcC,%
 :c9;%<cC%

(c<cCc9
 83'sc9 8<-   8/cC
c<cC
c3cC
 <CEc
'#9;.9 "


<
#"

7. Simpanlah program yang anda ketik dan beri nama : prog93a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan pengamatan pada nyala LED
11. Lakukan modifikasi pada program tersebut untuk membangkitkan frekuensi 10 Hz, 100 Hz,
dan 500 Hz dan lakukan pengamatan pada layar osciloscope

#s!!c
# !

'!
1. Mahasiswa memahami rangkaian interface port serial
2. Mahasiswa memahami mengkonfigurasikan komunikasi serial pada port serial PC
3. Mahasiswa memahami penulisan bahasa assembly untuk konfigurasi port serial
4. Mahasiswa memahami penulisan pemrograman delphi untuk komunikasi dengan
mikrokontroller.

Salah satu komunikasi yang paling ampuh untuk diimplementasikan dalam sistem komunikasi
digital adalah komunikasi dengan memanfaatkan jalur serial RS232. Mikrokontroller 89s51 telah
memiliki fasilitas UART, sehingga dapat melakukan komunikasi secara serial dengan level
RS2322 antar peralatan atau dengan komputer. MAX232 merupakan IC yang difungsikan untuk
merubah format TTL ke RS232 atau sebaliknya.
Gambar 10.1 Sistem komunikasi serial mikrokontroller dengan PC

Gambar 10.2. Rangkaian skematik MAX232

7 /  


"
A

 
Pengujian sistem komunikasi antara mikrokontroller dengan port serial computer dapat
dilakukan dengan memanfaatkan program hyperterminal pada sistem yang berbasis under
windows ( 98, ME dan XP ). Kelebihan penggunakan program ini, tidak diperlukan suatu bahasa
pemrograman dan kelemahannya, terbatas hanya pada proses pengujian.. Adapan cara
mengkonfigurasikannya adalah sebagai berikut:
Gambar 10.1 Pemilihan menu communication pada Accessories

Gambar 10.2 Pemilihan menu HyperTerminal pada communication

Gambar 10.3. (a) Pemberian nama koneksi (b) Pemilihan koneksi pada COM1
Gambar 10.4. (a) Properties serial komunikasi (b) windows HyperTerminal


 (c c 
 (7 
" "
  "

A

 

Lakukan beberapa langkah percobaan sebagai berikut:


1. Hubungkan kabel serial dari board Trainer ke Port Comm PC
2. Buat komunikasi dengan Hyperterminal
3. Ketik program asembly berikut ini:

%
 


 :"9; %


3!
 :!9H!E"
-
!9;9
$
- 
 

$3
" 
"
- 


 3- 
 
<

3
 : 9;.%<7 /  
 "
c
 : "9;%<s"
&s 
 :%c9;A

(c


<
%3
"

3-(9"

<

(  %""%"
 (
 

 :9(/
((!9;%
 :9!


<

" 3
"

 3-(9"

 <
<
 :(/9<


%
3
sB
 
%    
B9c9c9
#"

4. Simpanlah program yang anda ketik dan beri nama : hiper1a.asm


5. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
6. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
7. Lakukan pengamatan pada Layar Hyper Terminal

Gambar 10.4. Tampilan data pembacaan dari ROM


 (c  

"#"

 A

 

Pada percobaan ini LED dihidupkan sesuai dengan karakter (1 ±2 - 4 ) yang diterima dari
keyboard PC.
Lakukan beberapa langkah percobaan sebagai berikut:
1. Hubungkan jumper konektor ke LED_EN
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program Hyperterminal dan inputkan angka 0 s/d 9
5. Ketik program asembly berikut ini:

%
 


 :"9; %


3!
 :!9H!E"
-
!9;9
$
- 


$3
" 
"
- 


3%
-
!9;BcB9
$c
 : 9;ccccccc(

$c3-
!9;BB9
$
 : 9;ccccccc(

$3-
!9;B&B9
$
 : 9;ccccccc(

$3- 

<

3
 : 9;.%<7 /  
 "
c
 : "9;%<s"
&s 
 :%c9;A

(c


<
%3
"

3-(9"

<

(  %""%"
 (
 

 :9(/


<

" 3
"

 3-(9"

 <
<
 :(/9<


<
%
3
sB
 ( c9&B9c9c9
#"

Gambar 10.5. Menu pilihan tombol

6. Lakukan penekanan tombol 1, 2 atau 4


 (c 
 "

" 
    
"
 
#1
  "
%2
Pada percobaan ini, data dikirimkan melalui port communication serial PC secara serial dan
ditangkap oleh mikrokontroller untuk dioutputkan ke LED

Lakukan beberapa langkah percobaan sebagai berikut:


1. Hubungkan jumper konektor ke LED_EN
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program asembly berikut ini: (download file prog101a.asm)

%
 



3%
 : 9
- 

<

3
 : 9;.%<7 /  
 "
c
 : "9;%<s"
&s 
 :%c9;)c

(c


<
%3
"

3-(9"

<

(  %""%"
 (
 

 :9(/


<
#"

6. Buka Program Delphi


7. Ketik Program Delphi berikut ini, untuk menjalankan komunikasi melalui port serila dengan
base address 3F8h. (download file Ledserial.asm)

:
  c3  c<
"93(
<
 
(
CI/,<O(
""
 
P
C<O
  

P
"C<O": % 8(
P
"%Cc<O": %%%(
P
C.<O


P
 

 
OIQ  P
 
"
 
<
(

 
 :"$9(
E<O""

  

P
 :9I,<Oc(C
(": %P
 "$9
<
 :"$9(
E"<O""
": % 8(
P
 :9I<OsC%P
 "$9
<
 :"$9(
E"%<O""
": %%%(
P
 :9I<OAC%P
 "$9
<O " 
P
<O
 ("
C&(P
 :"$9(
E<O""

  

P
 :9I<Occ(CP
 "$9<O(6C9
 $(//
R$
<O(5C9
(
 "(

<O(.)&)C9 
<O(C9 
 (
<O(c)Ccc9"
%,(P

"<

"<
 
"

"JJ
<
(

 
 :"$9(

 :9"
 "$9

"

"<

 
"
  c   

1
"
3(-
2<
(

 
<

"<
 
"
  c s c 1
"
3(-
2<
(




 
 :"$9(
E<O""



P
9"$
"9I<Oc(C   (.P
 :9<O(.C#  % "
P

"<
CI<O /#ACc%
"
" (

"P
"3Cc<

"JJ
<

"<
 
"
  c s  1
"
3(-
2<
(




 
 :"$9(
E<O""



P
9"$
"9I<Oc(C   (.P
 :9<O(.C#  % "
P

"<
CI<O /#ACc%
"
" (

"P
"3C<

"JJ
<

"<
 
"
  c s  1
"
3(-
2<
(




 
 :"$9(
E<O""



P
9"$
"9I<Oc(C   (.P
 :9<O(.C#  % "
P

"<
CI<O /#ACc%
"
" (

"P
"3C&<

"JJ
<

"<
 
"
  c s & 1
"
3(-
2<
(




 
 :"$9(
E<O""



P
9"$
"9I<Oc(C   (.P
 :9<O(.C#  % "
P

"<
CI<O /#ACc%
"
" (

"P
"3C,<

"JJ
<

"<
 
"
  c s . 1
"
3(-
2<
(




 
 :"$9(
E<O""



P
9"$
"9I<Oc(C   (.P
 :9<O(.C#  % "
P

"<
CI<O /#ACc%
"
" (

"P
"3Cc5<

"JJ
<

"<
 
"
  c s 5 1
"
3(-
2<
(




 
 :"$9(
E<O""



P
9"$
"9I<Oc(C   (.P
 :9<O(.C#  % "
P

"<
CI<O /#ACc%
"
" (

"P
"3C<

"JJ
<

"<
 
"
  c s 6 1
"
3(-
2<
(




 
 :"$9(
E<O""



P
9"$
"9I<Oc(C   (.P
 :9<O(.C#  % "
P

"<
CI<O /#ACc%
"
" (

"P
"3C5&<

"JJ
<

"<
 
"
  c s , 1
"
3(-
2<
(




 
 :"$9(
E<O""



P
9"$
"9I<Oc(C   (.P
 :9<O(.C#  % "
P

"<
CI<O /#ACc%
"
" (

"P
"3Cc,<

"JJ
<

"<
 
"
  c s G 1
"
3(-
2<
(




 
 :"$9(
E<O""



P
9"$
"9I<Oc(C   (.P
 :9<O(.C#  % "
P

"<
CI<O /#ACc%
"
" (

"P
"3C<

"JJ
<

"<
 
"
  c s c 1
"
3(-
2<
(




 
 :"$9(
E<O""



P
9"$
"9I<Oc(C   (.P
 :9<O(.C#  % "
P

"<
CI<O /#ACc%
"
" (

"P
"3C..<

"JJ
<

"<

"

8. Simpanlah program yang anda ketik dan beri nama : prog101a.asm


9. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
10. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
11. Jalankan program delphi dengan menekan tombol F9 atau RUN
12. Lakukan penekanan pada tiap-tiap button dan lakukan pengamatan.

s  7
"#1+ " 2
1
2
4
8
16
32
64
128
255



 (c &
 "

"!
    

  1
"

  "
%2

Pada percobaan ini, data ADC0804 diambil menggunakan port 1 mikrokontroller dan dikirimkan
melalui port serial ke PC
Lakukan beberapa langkah percobaan sebagai berikut:
1. Hubungkan modul Microcontroller Trainer dengan power supply +5V
2. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
3. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
4. Ketik program asembly berikut ini: (download file prog102a.asm)

%


<
3!< ("""

" 
- 
<
!3  
 

(  

3-(  9

  &
 :!9 c

(  &


<

" 3
"

3-(9"

<
<
 :(/9<


<

3
 : 9;.%<>

 "
c
 : "9;%<
c "

 :%c9;%<
 ":
/ ("
&

(c



"

5. Buka Program Delphi


6. Ketik Program Delphi berikut ini, untuk menjalankan komunikasi melalui port serial dengan
base address 3F8h. (download file ADCserial)
:
  c3  c<
"93(
<
 
(
CI/,<O(
""
 
P
C<O
  

P
"C<O": % 8(
P
"%Cc<O": %%%(
P
C.<O


P
 

 
OIQ  P
 
"
 
<
(

 
 :"$9(
E<O""

  

P
 :9I,<Oc(C
(": %P
 "$9
<
 :"$9(
E"<O""
": % 8(
P
 :9I<OsC%P
 "$9
<
 :"$9(
E"%<O""
": %%%(
P
 :9I<OAC%P
 "$9
<O " 
P
<O
 ("
C&(P
 :"$9(
E<O""

  

P
 :9I<Occ(CP
 "$9<O(6C9
 $(//
R$
<O(5C9
(
 "(

<O(.)&)C9 
<O(C9 
 (
<O(c)Ccc9"
%,(P

"<

"<
 
"


:
JJ
<
(

 
 :"$9(

9"$
 :"9

"

"<
 
"
  c 
c
1
"
3(-
2<
(




 
 :"$9(
E<O""



P
9"$
"9Ic<OCc(9"

(P
 :9<O(C"
"P

"<
CIc<O- (Cc%
"
"P


:
JJ
<

"c 
$3C 1"2<

"<
 
"
  c s c 1
"
3(-
2<
(


<

c
(
"3C
<

"<

"

7. Simpanlah program yang anda ketik dan beri nama : prog102a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Jalankan program delphi dengan menekan tombol F9 atau RUN
11. Lakukan pengamatan untuk data ADC yang ditampilkan.

#s!!cc
# 

'!
1. Mahasiswa memahami sistem interupsi pada mikrokontroller
2. Mahasiswa dapat menerapkan sistem interupsi pada pembuatan jam digital
3. Mahasiswa dapat memahami penggunakan bahasa assembly untuk penggunakan sistem
interupsi

Pada mikrokontroller menyediakan 5 buah sumeber interupsi, 2 buah interupsi eksternal, 2 buah
interupsi timer, dan 1 buah interupsi serial. Agar interupsi dapat dilayani maka instruksi
assembly harus ditempatkan pada alamat vektor berikut, sesuai dengan sumber interupsi yang
akan digunakan.

Source Vector Address


IE0 0003H
TF0 000BH
IE1 0013H
TF1 001BH
RI + TI 0023H

%
- 
(%
- 
 

3<  
<  
<  
- <O  
:
P
<

 
3
3
3


#"

Pada contoh instruksi pemrograman tersebut tampak, apabila tidak ada interupsi maka program
akan menuju ke start dan menjalankan rutinitas-rutinitas secara terus menerus, tetapi apabila
suatu interupsi yang dibangkitkan oleh overflow timer 0 terjadi, maka program yang semula
bersarang pada rutinitas akan melompat pada alamat vektor 0bh (alamat interupsi timer 0) dan
melompat ke subrutine interupsi Timer0Interupt.


 (cc c 
(    "- "3"

/ 


 

Pada percobaan akan dibangkitkan clock untuk jam digital, hanya bagian detik puluhan (display
1) dan detik satuan (display 2) pada 7 segmen
Pada mode ini, dengan kristal 12MHz maka timer akan overflow setiap 65.536 udetik. Pada
percobaan ini, untuk membangkitkan interupsi setiap 50000 udetik maka data yang harus
diisikan pada register TL1 dan TH1 adalah sebagai berikut:
65536 - 50000 = 15536 d or 3CB0h
Maka interupsi TF1 akan segera dibangkitkan setiap 50000 x 1 udetik = 0,05 detik
pada pemrograman ini, RO diimplementasikan sebagai counter software, Register R0 akan
increment setiap Timer 1 overflow. Jika register R7 telah mendeteksi nilai 50 maka port P0.0 (
LED D0 ) akan nyala selama = 0,05 x 20 detik = 1 detik

Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:


1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini:(download file prog111a.asm)
detik equ 30h
detikpuluhan equ 31h
detiksatuan equ 32h
counter20 equ 33h
;
Org 0h
sjmp Start
Org 0bh
Ljmp Interrupt_Timer0
;
Start:
mov detik,#0
call InitTimer
;
Forever:
call ClockDisplay
sjmp Forever ;
;
Interrupt_Timer0:
mov tl0,#0b0h
mov th0,#03ch
djnz Counter20, EndInterrupt
mov Counter20,#20
call DoClock
EndInterrupt:
reti
;
DoClock:
inc detik
mov A,detik
cjne A,#60,Update
mov detik,#0
Update:mov A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
Setb P3.6
Setb P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
;
Setb P3.5 ;
clr P3.6
Setb P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
;========================================
;LOOKUPTABLE
; Decode to Seven Segmen -> g f e d c b a
;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End
6. Simpanlah program yang anda ketik dan beri nama : prog111a.asm
7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
9. Lakukan pengamatan untuk data waktu detik yang ditampilkan apakah sesuai dengan jam
konvensional.

Display Detik (:DD) Jam Konvensional (Detik)


1
2
3
4
5
:
60


 (cc  
(    "- " 3"

/ 


 

Pada percobaan akan dibangkitkan clock untuk jam digital untuk detik dan menit pada 7 segmen
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog112a.asm)

"
 
D%
"
 %
Dc%
"
 
D%


D%

%
D&%


D.%
 

D5%
<
%
- 
(%
-  
J

<
3 :"
 9;
 :
9;
 

<
 
:
3
  
-  
:
<
<

J
3
 :9;(%
 :%9;%
"-> 
9#" 

 : 
9;
   
#" 
3


<
   3
"
 
 :!9"
 
-
!9;59"

 :"
 9;

3


 :!9;5
-
!9
9"

 :
9;
"
3 :!9"
 
 :s9;c
 !s
 :"
 %9!
 :"
 9s
<
 :9

 :(9;c
":(
 :
%9!
 :
9s


<
  3
 : 9;
 "
6


 :!9
%
 :!9H!E 
 : 9!
  .<
  5
  6
"

<
 : 9;
 "
6


 :!9

 :!9H!E 
 : 9!

(  .<
  5
  6
"

<
 : 9;
 "
6


 :!9"
 %
 :!9H!E 
 : 9!
  .<

(  5
  6
"

<
 : 9;
 "
6


 :!9"
 
 :!9H!E 
 : 9!

(  .<

(  5
  6
"



<

3
 : 9;c(
 :9;(%
 :%9;%

(#<#(

 


(#!< 
 
#(


(<  


<
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 
"


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
"
3 :c9;
"
c3 :9;..
"
3"->9"

"->c9"
c


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<7 !s#
<
 "
 
:


)F/
"(
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

 "
6

3
scc(9cccccc(9ccc(9ccc(9cccc(
sccc(9cc(9ccccc(9c(9cc(
<
#"

6. Simpanlah program yang anda ketik dan beri nama : prog112a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
9. Lakukan pengamatan untuk data waktu yang ditampilkan.

Display Detik (:DD) Jam Konvensional (Detik)


00:01
00:02
00:03
00:04
:
01:59


 (cc  
(    " 8 3"

/ 


 

Pada percobaan akan dibangkitkan clock dengan hitungan mundur dari menit 60 detik 60 untuk
detik dan menit pada 7 segmen
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog113a.asm)

"
 
D%
"
 %
Dc%
"
 
D%


D%

%
D&%


D.%
 

D5%
<
%
- 
(%
-  
J

<
3 :"
 9;5
 :
9;.G
 

<
 
:
3
  
-  
:
<
<

J
3
 :9;(%
 :%9;%
"-> 
9#" 

 : 
9;
   
#" 
3


<
   3
"
"
 
 :!9"
 
-
!9;9"

 :"
 9;5

3
"


 :!9;
-
!9
9"

 :
9;5
"
3 :!9"
 
 :s9;c
 !s
 :"
 %9!
 :"
 9s
<
 :9

 :(9;c
":(
 :
%9!
 :
9s


<
  3
 : 9;
 "
6


 :!9
%
 :!9H!E 
 : 9!
  .<
  5
  6
"

<
 : 9;
 "
6


 :!9

 :!9H!E 
 : 9!

(  .<
  5
  6
"

<
 : 9;
 "
6


 :!9"
 %
 :!9H!E 
 : 9!
  .<

(  5
  6
"

<
 : 9;
 "
6


 :!9"
 
 :!9H!E 
 : 9!

(  .<

(  5
  6
"



<

3
 : 9;c(
 :9;(%
 :%9;%

(#<#(

 


(#!< 
 
#(


(<  


<
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 
"


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
"
3 :c9;
"
c3 :9;..
"
3"->9"

"->c9"
c


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<7 !s#
<
 "
 
:


)F/
"(
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

 "
6

3
scc(9cccccc(9ccc(9ccc(9cccc(
sccc(9cc(9ccccc(9c(9cc(
<
#"

10. Simpanlah program yang anda ketik dan beri nama : prog113a.asm
11. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
12. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
13. Lakukan pengamatan untuk data waktu yang ditampilkan.


 (cc  
(    " 8 3"

/ 


 

Pada percobaan akan dibangkitkan clock dengan hitungan mundur dari menit 60 detik 60 untuk
detik dan menit pada 7 segmen
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (download file prog113a.asm)

"
 
D%
"
 %
Dc%
"
 
D%


D%

%
D&%


D.%
 

D5%
<
%
- 
(%
-  
J

<
3 :"
 9;5
 :
9;.G
 

<
 
:
3
  
-  
:
<
<

J
3
 :9;(%
 :%9;%
"-> 
9#" 

 : 
9;
   
#" 
3


<
   3
"
"
 
 :!9"
 
-
!9;9"

 :"
 9;5

3
"


 :!9;
-
!9
9"

 :
9;5
"
3 :!9"
 
 :s9;c
 !s
 :"
 %9!
 :"
 9s
<
 :9

 :(9;c
":(
 :
%9!
 :
9s


<
  3
 : 9;
 "
6


 :!9
%
 :!9H!E 
 : 9!
  .<
  5
  6
"

<
 : 9;
 "
6


 :!9

 :!9H!E 
 : 9!

(  .<
  5
  6
"

<
 : 9;
 "
6


 :!9"
 %
 :!9H!E 
 : 9!
  .<

(  5
  6
"

<
 : 9;
 "
6


 :!9"
 
 :!9H!E 
 : 9!

(  .<

(  5
  6
"



<

3
 : 9;c(
 :9;(%
 :%9;%

(#<#(

 


(#!< 
 
#(


(<  


<
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<( 
"


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
"
3 :c9;
"
c3 :9;..
"
3"->9"

"->c9"
c


<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC
<7 !s#
<
 "
 
:


)F/
"(
<CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC

 "
6

3
scc(9cccccc(9ccc(9ccc(9cccc(
sccc(9cc(9ccccc(9c(9cc(
<
#"

10. Simpanlah program yang anda ketik dan beri nama : prog113a.asm
11. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
12. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
13. Lakukan pengamatan untuk data waktu yang ditampilkan.

#s!!c
#!#7#7#s!  +

'!
1. Mahasiswa memahami rangkaian interface keyboard PC PS/2
2. Mahasiswa memahami bahasa pemrograman assembly pengambilan data keyboard PC
3. Mahasiswa dapat menampilan data keyboard PC ke berbagai macam display antara lain, LCD
Karakter dan 7 Segmen

#
Antarmuka keyboard standard adalah hubungan komunikasi serial. ³Serial´ yang menandakan
bahwa data dikirim satu bit pada suatu waktu tertentu pada satu jalur tunggal. Serial komunikasi
dipilih untuk antara muka keyboard karena hal ini simple dan mudah diterapkan, dan tidak
banyak data per detik yang harus dikirimkan pada antar muka keyboard.
Ada empat jalur yang menghubungkan keyboard dan PC. Dua dari ini adalah power supply dan
ground, yang digunakan untuk memberikan daya ke rangkaian keyboard. Dua sinyal yang lain
adalah sebagai berikut:
1. Data Keyboard: Disinilah jalur bit-bit data dan perintah yang akan dikirimkan ke sistem PC
dari keyboard.
2. Clock Keyboard: Ini merupakan sinyal clock regular, dengan suatu nilai yang berosilasi dari
logika ³1´ ke ³0´ dengan pola yang teratur. Tujuan dari sinyal clock ini adalah untuk
mensinkronisasi keyboard dan sistem, sehingga merekan selalu bekerja secara bersamaan.
Keyboard PC AT yang terkoneksi, hanya menggunakan empat buah kabel, kabel ini ditunjukkan
pada gambar dibawah, untuk 5 pin DIM dan PS/2.
1.KBD Clock
2.KBD Data
3.N/C
4.GND
5 PIN DIN 5. +5V (VCC)
(a)
1. KBD Clock
2. GND
3. KBD Data
4. N/C
6 PIN DIN 5. +5V (VCC)
(b) 6. N/C

Gambar 12.1. Keyboard konektor (a) XT (b) PS/2

Diagram dibawah ini menunjukkan kode scan yang menandai tombol individu. Kode scan
ditunjukkan pada bagian bawah dari tombol. Contoh kode scan untuk tombol ESC adalah 76.
Semua kode scan ditunjukkan dalam Hex.

( (c  
"
( " 

Sebagaimana yang anda lihat, kode scan ditandai dengan kode yang random. Pada beberapa
kasus, cara yang paling mudah untuk menerjemahkan kode scan ke ASCII adalah dengan
menggunakan metode look up table.
Transmisi data, dari keyboard ke sistem, dilakukan dengan frame 11 bit. Bit pertama adalah bit
start ( logika 0 ), diikuti dengan 8 bit data ( LSB first ), satau bit paristas ( paritas ganjil ) dan bit
stop ( logika 1 ). Setiap bit harus dibaca pada sisi turun dari clock.
Gambar 12.3. Sinyal clock dan data

Gambar 12.4 Interface rangkaian keyboard PC PS/2


Gambar 12.5. Rangkaian interface LCD karakter 2x16


 (c c 
 ("  

( " ""
#

Pada percobaan ini data keyboard PC diinterfacekan ke mikrokontroller dengan menggunaan


port P3 bit 2 dan 3. Hasil pengambilan data keyboard selanjutnya ditampilkan pada LED.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper keyboard dua kabel ke rangkaian mikrokontroller bit P3.2 dan bit P3.3.
2. Pasang jumper LED_EN
2. Hubungkan modul keyboard PC PS/2 ke konektor keybaord
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog122a.asm)
-/+0!12c
32(0/! !12ccc
!( *-!12cc
-/+(!12cc
-   4
-05 6'7c,4
 !"-!128
,
8

!! 
&%-059
0*!"-
)(0
!!
  5!"-
0
/)*+
!!
,
,::::::::::::::::::::::::::::::::::::::::::::
, 22 (!*!"-
, 22 (!!52 !32(/2( 25*!(-! !5/+585!"-
,/!-(- !5( 2-!+/4% * -5-!+/*5
,5(*!(2)2+-/22 (!,"-; -5$!+/
,-(*!*! (-+- :/!8(:
,*5-  -55(-0! 5
,% *5!"--!+/*5- /0(0-!-*
,-(-5(!/5!-!((-!((*!(2(5(
,52+ !/! *!((- :c
,:::::::::::::::::::::::::::::::::::::::::::
*!"- 
0*;/0(0-!
0)(!
85"-; -5$!+/
&%-059
0*; 0(0-!
 ! 
0(!/; 0(0-!
! 
,
"-; -5$!+/ 

! 
,

,::::::::::::::::::::::::::::::::::::::::::::::::::::::
, 22 (!(!/; 0(-!
,-/22 (!(-2(5(2( 25*!(!)!*85(/0(0-!5!!( 25
,55 !
,-!((*!(2(5(52+ !4
,::::::::::::::::::::::::::::::::::::::::::::::::::::::
(!/; 0(-! 
 77!!"-
*0<= 7
*  !"-
! 
,
*;/0(-! 
0
&(-059
*8
*; 0(-! 
&-059
-  

*004
&(-059
 )(.*; 0(-!
&-059
&(-059
&-059
&(-059
! 
,
-!" *
-!"c * 38
-)(. 9
-)(.-!"c
! 
,
7!!"- 
 %
 %
#
 %
 %


c


 %
 %




 %
 %>?>
 %
 %
 %c
 %
 %
 %
 %>@c>
 %
 %>A B>
 %
 %>C >
 %
 %>D
7>
 %
 %>'%EF>
 %
 %>&G>
 %
 %>6#>
 %
 %>4H$,I>
 %
 %
 %
 %>J:>
 %
 %
 %
 %
 %>K>
 %
 %>L>
 %
 %
 %
 % 
 %
 %
%
 %
 %

,
!(-

7. Simpanlah program yang anda ketik dan beri nama : prog122a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan pengamatan untuk data keyboard yang ditampilkan.

 (c  
 ("  

( " ""
7 


Pada percobaan ini data keyboard PC diinterfacekan ke mikrokontroller dengan menggunaan


port P3 bit 2 dan 3. Hasil pengambilan data keyboard selanjutnya ditampilkan pada layar LCD
Karakter.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
1. Hubungkan jumper keyboard dua kabel ke rangkaian mikrokontroller bit P3.2 dan bit P3.3.
2. Hubungkan modul keyboard PC PS/2 ke konektor keybaord
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog121a.asm)

-/+0!12c
32(0/! !12ccc
!( *-!12cc
-/+(!12cc
-   4
-05 6'7c,4
  !"-!128
,
8
(+
0( ;$ 
,

!! 
&%-059
0*!"-
)(0
!!
0$ ;2 
0
/)*+
!!
,
,::::::::::::::::::::::::::::::::::::::::::::
, 22 (!*!"-
, 22 (!!52 !32(/2( 25*!(-! !5/+585!"-
,/!-(- !5( 2-!+/4% * -5-!+/*5
,5(*!(2)2+-/22 (!,"-; -5$!+/
,-(*!*! (-+- :/!8(:
,*5-  -55(-0! 5
,% *5!"--!+/*5- /0(0-!-*
,-(-5(!/5!-!((-!((*!(2(5(
,52+ !/! *!((- :c
,:::::::::::::::::::::::::::::::::::::::::::
*!"- 
0*;/0(0-!
0)(!
85"-; -5$!+/
&%-059
0*; 0(0-!
 ! 
0(!/; 0(0-!
! 
,
"-; -5$!+/ 

! 
,
M !;08 
*-+ M-c, 7:J--!//M-cK
*c,:c(2*!080 ! !-/+"
*c8,c:8--!// /  +/ (
0M !;(/ 
,
M !c 
0,:
*0<=-+ ,:J= 7K
*c,c:
(0-+ , 7: 7=c
0M !;- ,
-)(.M !c,:Ic
! 
,
,::::::::::::::::::::::::::::::::::::::::::::::::::::::
, 22 (!(!/; 0(-!
,-/22 (!(-2(5(2( 25*!(!)!*85(/0(0-!5!!( 25
55 !
,-!((*!(2(5(52+ !4
,::::::::::::::::::::::::::::::::::::::::::::::::::::::
(!/; 0(-! 
 77!!"-
*0<= 7
*  !"-
! 
,
$ ;2 
*8
0M !;(/ 
*  !"-
0M !;- 
! 
,
*;/0(-! 
0
&(-059
*8
*; 0(-! 
&-059
-  

*004
&(-059
 )(.*; 0(-!
&-059
&(-059
&-059
&(-059
! 
,
6( ;0- 
*cc, /+"0!
0M !;(/ ,
*cccc,
2(0 (/!    (!3( N
0M !;(/ ,
*ccc, /+"(,02/3302/(533
0M !;(/ 
*ccc, ( "*-! ! (0!*!( 
0M !;(/ 
! 
,
B !;(/ 
04, :4:M !*-!(/ 20 (
*c, /H- ::c
/! 4, ':c:4c
0-!",0-!" *!
04, '::4c
! 
,
B !;-  
/! 4, :4:cM !*-!- 
*c, /H- ::c
/! 4, ':c:4c
0-!",0-!" *!
0+4, '::4c
! 
,
-!" *
-!"c * 38
-)(. 9
-)(.-!"c
! 
,
7!!"- 
 %
 %
#
 %
 %


c


 %
 %




 %
 %>?>
 %
 %
 %c
 %
 %
 %
 %>@c>
 %
 %>A B>
 %
 %>C >
 %
 %>D
7>
 %
 %>'%EF>
 %
 %>&G>
 %
 %>6#>
 %
 %>4H$,I>
 %
 %
 %
 %>J:>
 %
 %
 %
 %
 %>K>
 %
 %>L>
 %
 %
 %
 % 
 %
 %
%
 %
 %

M-c  %>B!0*!*!>,8!!/ 8!-  !52+
!(-

7. Simpanlah program yang anda ketik dan beri nama : prog121a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan pengamatan untuk data keyboard yang ditampilkan.
11. Lakukan modifikasi program tersebut untuk menampilkan data keyboard PC lebih dari satu
karakter ke LCD karakter.


 (c  
 ("  

( " ""
6



Pada percobaan ini data keyboard PC diinterfacekan ke mikrokontroller dengan menggunaan


port P3 bit 2 dan 3. Hasil pengambilan data keyboard selanjutnya ditampilkan pada disply 7
Segmen

Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:


1. Hubungkan jumper keyboard dua kabel ke rangkaian mikrokontroller bit P3.2 dan bit P3.3.
2. Hubungkan modul keyboard PC PS/2 ke konektor keybaord
3. Pasang jumper 7 SegmenEN
4. Hubungkan modul Microcontroller Trainer dengan power supply +5V
5. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
6. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
7. Ketik program berikut ini:
DISKUSIKAN DAN LAKUKAN PEMROGRAMAN SESUAI PENGETAHUAN ANDA

s!sc
#!#7#  # ! 7

'!
1. Mahasiswa memahami rangkaian interface keyboard PC PS/2
2. Mahasiswa memahami bahasa pemrograman assembly pengambilan data keyboard PC
3. Mahasiswa dapat menampilan data keyboard PC ke berbagai macam display antara lain, LCD
Karakter dan 7 Segmen

#

( (c c  7 / 


   
Gambar 13.2. Penamaan sinyal pada printer DB25 Female

Selama operasi printer standart, cara data ditransmisikan melalui jalur parallel port adalah
bervariasi, tetapi pada prinsipnya adalah sebagai berikut:
1. Untuk mengirimkan sebuah byte data, software mengeluarkan byte ke jalur data, selanjutnya
mengeluarkan pulsa STROBE.
2. Disisi lain Printer, menguji jalur BUSY, dan komputer menunggu untuk jalur busy sebelum
mengirimkan byte berikutnya.
3. Pada implemantasi yang lain, jalur ACK digunakan printer untuk menginformasikan PC
bahwa data telah diterima.
4. Jalur PAPER EMPTY adalah jalur untuk menginformasikan ke PC bahwa kertas telah keluar.
5. Printer juga mengirim sinyal SELECTED ke PC untuk mengindikasikan bahwa printer sedang
on line dan siap untuk menerima data
6. Sinyal ERROR dari printer dapat digunakan untuk berbagai macam error yang akan
menyebabkan printer tidak dapat menerima data.
7. AUTOFEED, memberitahukan ke printer untuk secara automatik menyisipkan line feed
setelah carriage return
8. INIT, inisialisasi printer setelah pemberia catu daya
Gambar 13.3. Koneksi interface printer


 (c c
 
(%  
"

 
"   

Pada percobaan ini, dua buah kalimat akan dicetak pada kertas dengan menggunakan sebuah
printer melalui interface ke mikrokontroller.
1. Hubungkan konektor 8 bit ke P2 dan konektor 3 bit ke P3
2. Hubungkan modul printer ke konektor printer DB25 female
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog132a.asm)

busy bit P3.0


strobe bit P3.1
portData equ P2
;
org 0h
start:call printchar; cetak sebuah karakter "A"
quit: smp Quit ; Hang Forever until reset pressed
;
;======================================================
;aubrutin ini digunakan untuk cetak satu karakter
;melalui D0 s/d D7
;sebelum melakukan cetak karakter, sinyal BUa harus
;dideteksi, sampai terdeteksi sinyal dg logika low
;selanutnya kirim sinyal aTROBE dengan pulsa( --__-- )
;======================================================
Printchar:
mov portData,'A'
b busy,$
setb strobe
clr strobe
acall delay
aetb strobe
acall delay
ret
;
delay: mov R7,#2
del1: mov R6,#20
DJNZ R6,$
DJNZ R7,del1
ret
;
end

7. Simpanlah program yang anda ketik dan beri nama : prog132a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan modifikasi program tersebut untuk menampilkan data 3 kalimat ke printer dot
matriks


 (c 
 "(%  "

 
"   

Pada percobaan ini, dua buah kalimat akan dicetak pada kertas dengan menggunakan sebuah
printer melalui interface ke mikrokontroller.
1. Hubungkan konektor 8 bit ke P2 dan konektor 3 bit ke P3
2. Hubungkan modul printer ke konektor printer DB25 female
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog131a.asm)
busy bit P3.0
strobe bit P3.1
portData equ P2
;
org 0h
start: call word_ elcome ; to print ' elcome To '
call enter ; new line feed
call word_Lab ; to print ' Computer Laboratory '
call enter ; new line feed
;
quit: smp Quit ; Hang Forever until reset pressed
;
;======================================================
;aubrutin ini digunakan untuk cetak satu karakter
:melalui D0 s/d D7
;sebelum melakukan cetak karakter, sinyal BUa harus
;dideteksi, sampai terdeteksi sinyal dg logika low
;selanutnya kirim sinyal aTROBE dengan pulsa( --__-- )
;======================================================
Printchar:
mov portData,A
b busy,$
setb strobe
clr strobe
acall delay
aetb strobe
acall delay
ret
;
delay: mov R7,#2
del1: mov R6,#20
DJNZ R6,$
DJNZ R7,del1
ret
;======================================================
;aUbrutine ini digunakan untuk cetak kalimat
;dengan mamanggil subrutine printchar dan look up data
;proses cetak akan berlangsung terus sampai ditemui '$'
;======================================================
word_welcome:
mov DPTR,#Text_welcome
lagi1: clr A
movc A,@A+DPTR
cne A,#'$',Print1
smp Out1
Print1: call Printchar
inc dptr
call delay
smp lagi1
Out1: ret
;
;==========================================
;This subroutine print a text'Computer Laboratorium'
;this subroutine will print character by character till '$'
;character is detected, when this character is detected then
;It's indicated that a text has finished
;==========================================
word_Lab:
mov DPTR,#Text_lab
lagi2: clr A
movc A,@A+DPTR
cne A,#'$',Print2
smp Out2
Print2:call Printchar
inc dptr
call delay
smp lagi2
Out2: ret
Enter:
mov A,#0dh
call printchar
call delay
mov A,#0ah
call printchar
ret
;
Text_welcome:
DB ' elcome To $'
Text_Lab: DB ' Computer Laboratory $'
;
end

7. Simpanlah program yang anda ketik dan beri nama : prog131a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan modifikasi program tersebut untuk menampilkan data 3 kalimat ke printer dot
matriks

#s!!c&
#! #712c,,6

'!
1. Mahasiswa memahami tentang real time clock
2. Mahasiswa memahami rangkaian interface RTC dengan mikrokontroller
3. Mahasiswa memahami pembuatan program pengambilan data RTC

# !!

Real Time Clock merupakan suatu chip (IC) yang memiliki fungsi sebagai penunjuk waktu. RTC
DS 12C887 memiliki register yg dapat menunjukkan detik, menit, jam, tanggal, bulan dan tahun.
RTC ini didesain memiliki 128 lokasi RAM yang terdiri dari 15 byte untuk data waktu serta
kontrol, dan 113 byte sebagai RAM yang dapat digunakan sebagai RAM pada umumnya.
RTC DS 12C887 menggunakan bus yang termultipleks untuk menghemat pin. Timing yang
digunakan untuk mengakses RTC dapat menggunakan intel timing atau motorola timing. RTC
ini juga dilengkapi dengan pin IRQ untuk kemudahan dalam proses.

Operasi dari RTC

Berikut ini gambar pin-pin dari RTC DS 12C887, jumlah total pin-nya sebanyak 13 buah :

Gambar 14.1 Pin RTC DS 12C887

Berikut ini akan ditampilkan blok diagram dari RTC DALLAS 12C887. Terlihat dari blok
diagram tersebut bawhwa RTC terbagi menjadi beberapa bagian utama dengan kontrol maupun
I/O untuk operasinya.

Tabel 14.1. berikut ini menjelaskan fungsi masing-masing pin yang ada :

   7


MOT Motorola / Intel timing
AD0-AD7 Bus DATA / ADDRESS yang termultipleks
CS Chip Select
AS Address Strobe
R/W Write Strobe
DS Data Strobe
RESET Inputan Reset
IRQ Interrupt Request Output
SQW Output Sinyal Kotak
VCC Catu tegangan +5 volt
Gnd Ground
RCLR Hapus RAM

Penjelasan dari masing-masing pin RTC DS12C887 dijelaskan berikut :

1. GND, VCC
Merupakan pin untuk power supply RTC. VCC diberikan input +5volt. Ketika tegangan 5 volt
diberikan dalam batas yang normal, RTC bebas diakses dan data dapat ditulis atau dibaca.
Sedangkan ketika Vcc dibawah 4.25 volt, maka proses baca dan tulis tidak dapat dilakukan.
Akan tetapi, proses pewaktu (timekeeping) tetap dilakukan oleh RTC tanpa dipengaruhi oleh
tegangan input yang rendah. Saat VCC turun dibawah 3 volt, catu daya untuk RAM dan pewaktu
dipindahkan ke internal lithium batery yang terdapat pada RTC. Fungsi pewaktu dari RTC
memiliki akurasi 1 menit per bulan pada suhu 250 C walaupun tanpa adanya catu pada VCC.

2. MOT (Mode Select)


Pin MOT memberikan kebebasan untuk memilih dua tipe bus. Ketika pin ini dihubungkan
dengan VCC, maka motorolla bus timing yang dipilih, sedangkan ketika dihubungkan ke ground
atau dibiarkan (tak dihubungkan) maka intel bus timing yang dipilih. Pin ini memiliki pull down
internal sebesar sekitar 20 k?.

3. SQW (Square Wave Output)


Pin SQW dapat mengeluarkan sinyal kotak, dari satu sampai 13 pembagian yang disediakan oleh
15 buah tingkat pembagi (divider) internal dari RTC. Frekuensi dari SQW dapat dipilih dengan
memprogram register A seperti pada tabel. Sinyal SQW dapat dihidupkan dan dimatikan dengan
mengatur bit SQWE pada register B. Sinyal SQW tidak hidup ketika VCC dibawah 4,25 volt.

4. AD0 ± AD7 (Adrress/Data bus yang ter-multipleks dan bidirect)


Bus yang ter-multiplex menghemat penggunaan pin karena informasi address dan data waktu
menggunakan jalur sinyal yang sama. Alamat muncul pada bagian pertama dari bus cycle dan
dengan pin yang sama pula digunakan untuk data pada bagian kedua dari bus cycle.
Multipleksing antara data dan address tidak memperlambat waktu akses dari RTC karena
perubahan dari address menuju data dilakukan pada saat akses RAM internal pada RTC. Address
harus valid saat terjadi falling edge pada AS/ALE, yang kemudian RTC akan me-latch address
dari AD0 sampai AD6. Data valid yang akan dituliskan ke RTC harus valid dan dijaga stabil
pada saat pin DS dan WR diberi pulsa. Pada proses pembacaan, RTC menghasilkan output 8 bit
data pada saat pin DS dan RD diberi pulsa. Bus akan menjadi high impedance saat pulsa low
diberikan pada pin DS (motorola) atau pulsa high diberikan pada pin RD (intel).

5. AS (Address Strobe Input)


Perubahan pulsa positif pada address strobe berguna untuk melakukan multipleks pada bus.
Perubahan pulsa negatif pada AS akan menyebabkan address ter-latch. Perubahan positif
selanjutnya akan menghapus address walaupun CS tidak diaktifkan. Perintah access seharusnya
dikirimkan secara bersamaan.

6. DS (Data Strobe or Read Input)


Pin DS/RD mempunyai 2 mode operasi tergantung pada tingkat yang diberikan kepada MOT.
Ketika MOT dihubungkan ke VCC, motorola bus timing dipilih dan pada mode ini DS
merupakan pulsa positif saat bagian lanjut dari bus cycle dan disebut sebagai data strobe. Saat
proses pembacaan, DS menunjukkan bahwa RTC memiliki bus yang bidirectional. Pada proses
penulisan, pulsa positif pada DS akan me-latch data yang ditulis. Ketika MOT dihubungkan ke
ground, maka intel bus timing yang dipilih dan pin DS disebut sebagai read (RD). RD
menjelaskan periode ketika RTC memperlakukan bus sebagai pembaca data. Sinyal RD
mempunyai pengertian yang sama seperti sinyal Output Enable (OE) pada memori yang umum.

7. R/W (Read/Write Input)


Pin R/W juga memiliki 2 mode operasi. Ketika pin MOT dihubungkan ke VCC untuk motorola
timing, R/W berada pada level yang menunjukkan apakah berada pada proses baca atau tulis.
Proses baca ditunjukkan dengan level high pada R/W sementara DS juga high. Proses tulis
ditunjukkan saat R/W low dan DS high. Ketika pin MOT dihubungkan ke ground untuk intel
timing, sinyal R/W adalah sinyal active low dinamakan WR. Pada mode ini pin R/W mempunyai
makna yang sama dengan sinyal Write Enable (WE) seperti pada RAM umum.

8. CS (Chip Select Input)


Sinyal chip select harus di hubungkan low untuk dapat mengakses bus cycle. CS harus dijaga
pada posisi aktif saat DS dan AS pada motorola timing atau RD dan WR untuk intel timing. Bus
cycle yang terjadi tanpa mengaktifkan CS akan me-latch address tapi tidak ada akses yang bisa
dilakukan. Saat VCC dibawah 4,25 volt, RTC secara internal menghalangi akses dengan cara
secara internal tidak mengaktifkan input CS. Proses ini akan melindungi baik data RTC maupun
data pada RAM saat tidak ada catu daya.
9. IRQ (Interrupt Request Output)
Pin IRQ adalah keluaran active low dari RTC 12C887 yang digunakan sebagai masukan
interupsi pada prosessor. Keluaran IRQ tetap low selama selama bit status menyebabkan
interupsi terjadi dan bit yang berhubungan yaitu interrupt-enable di-set. Untuk menghapus
interupsi biasanya dilakukan dengan membaca register C. Pin RESET juga menghapus interupsi
yang dilakukan atau yang belum terjadi (pending). Ketika tidak terjadi interupt maka level IRQ
berada pada kondisi high impedance. Beberapa peralatan interupsi dapat dihubungkan dengan
IRQ bus. Bus IRQ adalah keluaran open drain dan memerlukan tambahan resistor pull-up.

10. RESET (Reset Input)


Pin RESET tidak berpengaruh terhadap jam, kalender atau RAM. Pada saat penyalaan RTC, pin
RESET dapat dijaga LOW untuk beberapa saat untuk menstabilkan catu daya. Lamanya waktu
pin RESET diberikan low tergantung dari aplikasi yang digunakan. Akan tetapi jika reset
digunakan saat power up (penyalaan), waktu RESET dijaga low harus melebihi 200 ms untuk
meyakinkan bahwa timer internal dari RTC untuk penyalaan telah cukup. Ketika RESET low
dan VCC diatas 4,25 volt, maka hal-hal yang terjadi adalah sebagai berikut :

a. Periodic Interrupt Enable (PEI) dihapus menjadi nol.


b. Alarm Interrupt Enable (AIE) dihapus menjadi nol.
c. Update Ended Interrupt Flag (UF) dihapus menjadi nol.
d. Interrupt Request Status Flag (IRQF) dihapus menjadi nol.
e. Periodic Interrupt Flag (PF) dihapus menjadi nol.
f. RTC tidak dapat diakses sampai RESET menjadi high.
g. Alarm Interrupt Flag (AF) dihapus menjadi nol.
h. Pin IRQ dalam kondisi high impedance.
i. Square Wave Output Enable (SQWE) dihapus menjadi nol.
j. Update Ended Interrupt Enable (UIE) dihapus menjadi nol.
Pada aplikasi umum, RESET dapat dihubungkan langsung VCC. Koneksi ini akan menjadikan
RTC 12C887 dapat berfungsi saat terjadi kerusakan catu daya tanpa mempengaruhi register
kontrol RTC.

!""
 "

RTC mempunyai RAM internal didalamnya, dalam memori tersebut terbagi menjadi beberapa
register-register yang mempunyai fungsi dalam pengontrolan maupun pengambilan data RTC.
Agar tidak terjadi kesalahan dalam pengontrolan maupun pengambilan data, peta alamat dari
masing-masing register harus jelas.
Address map dari RTC terdiri dari 113 byte RAM yg dapat digunakan oleh pengguna RTC, 11
byte RAM yang berisikan data RTC berupa waktu, kalender dan alarm, dan 4 byte yang
digunakan untuk kontrol dan status. Keseluruhan 128 byte ini dapat ditulis atau dibaca secara
langsung kecuali pada keadaan berikut:
1. Register C dan D adalah read-only.
2. Bit ke-7 dari register A adalah read-only.
3. Bit atas dari byte detik adalah read-only.
( (c&  
! 

= 97
"
"! 

Informasi waktu dan kalender diperoleh dengan membaca byte memori yang sesuai. Waktu,
kalender dan alarm di-set atau diinisialisasi dengan menulis ke byte RAM yang sesuai. Isi dari
kesepuluh data kalender, waktu dan alarm dapat digunakan dalam mode biner atau BCD (Binary-
Coded Decimal). Sebelum mengakses register kalender, waktu dan alarm, SET bit pada register
B harus ditulis dengan level logika yang sesuai agar tidak mengganggu proses update yang
dilakukan oleh RTC. Kesemua data kalender, waktu dan alarm harus menggunakan mode data
yang sma (biner atau BCD), yaitu dengan cara menulis pada register B pada bit DM(Data Mode).
Sekali di inisialisasi maka RTC akan terus menggunakan mode data yang dipilih sebelumnya.
Tabel berikut menunjukkan mode data dari kalender, waktu dan alarm baik dalam mode biner
atau BCD.

Tabel 14.2. Tabel data mode waktu, kalender dan alarm




7  
RTC 12C887A mempunyai 4 buah register kontrol yang dapat diakses setiap saat, walaupun
pada saat RTC melakukan update cycle.



!

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0


UIP DV2 DV1 DV0 RS3 RS2 RS1 RS0

UIP ± Update in progress adalah status bit yang dapat dimonitor, merupakan bit read only dan
tidak dipengaruhi oleh reset. Ketika bit UIP 1, proses update akan segera berlangsung. Ketika
UIP 0, proses update tidak akan terjadi sekurangnya 244?s. Informasi kalender, waktu dan alarm
yang ada pada RAM akan dapat diakses secara penuh ketika bit UIP nol.

DV2, DV1, DV0 ± Ketiga bit ini digunakan untuk menghidupkan atau mematikan osilator dan
me-reset rantai perhitungan. Pola 010 adalah satu-satunya kombinasi yang akan menghidupkan
osilator dan menyebabkan RTC dapat menyimpan waktu. Pola 11x akan menghidupkan osilator
tapi menahan rantai perhitungan dalam kondisi reset.

RS2, RS2, RS1, RS0 ± Keempat bit ini akan memilih frekuensi atau mematikan pulsa kotak pada
pin SQW. Pin SQW dapat berfungsi juga sebagai periodic interrupt. Keempat bit ini dapat
dibaca/tulis dan tidak dipengaruhi oleh RESET. Untuk mengaktifkannya, dapat dilakukan
sebagai berikut :
1. Mengaktifkan interupt dengan bit PIE.
2. Mengaktifkan keluaran SQW dengan bit SQWE.
3. Mengaktifkan keduanya dengan waktu dan frekuensi yang sama.
4. Tidak mengaktifkan keduanya.



s

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0


SET PIE AIE UIE SQWE DM 24/12 DSE

SET ± Ketika bit SET adalah 0, proses update berfungsi normal dengan menambahkan
perhitungan sekali dalam satu detik. Ketika SET ditulis menjadi 1, semua proses update
dihentikan sehingga program dapat menginisialisasi byte waktu dan kalender tanpa adanya
proses update yang terjadi ditengah proses inisialisasi.

PIE ± Periodic Interrupt Enable merupakan bit yang dapat dibaca/tulis yang akan menyebabkan
bit Periodic Interrupt Flag (PF) pada register C mengatur pin IRQ menjadi low. Ketika bit PIE
diset 1, interupt secara periodik dihasilkan dengan mengatur pin IRQ menjadi low dengan
periode tertentu sesuai dengan bit RS3-RS0 (register A). Apabila PIE 0, ini akan menghalangi
pengaturan pin IRQ oleh interupt periodik, tetapi bit PF masih di-set dengan periode tertentu.
PIE tidak dapat dirubah secara internal oleh RTC, tetapi akan dihapus menjadi 0 pada saat
RESET.

UIE ± Update Ended Interrupt merupakan bit yang dapat dibaca/tulis yang akan meng-enable
Update ended Flag (UF) pada register C untuk memasukkan IRQ. Pin RESET yang di ³low´ atau
bit SET yang di ³high´ akan menghapus bit UIE.

SQWE ± Ketika bit Square Wave Enable di-set menjadi 1, gelombang kotak dengan periode
yang sudah ditentukan oleh bit RS3-RS0 akan dikeluarkan pada pin SQW. Ketika SQWE di-set
menjadi 0, maka pin SQW tetap low. Bit SQWE dapat dibaca/tulis dan dapat dihapus oleh
RESET. SQWE di-set menjadi 1 ketika Vcc dihidupkan.

DM ± Bit Data Mode (DM) mengindikasikan apakah informasi waktu dan kalender mempunyai
format biner atau BCD. Bit DM di-set oleh program dengan memberikan format yang sesuai dan
dapat dibaca sesuai keperluan. Bit ini tidak dapat dirubah secara internal atau oleh RESET. µ1¶
pada DM menyatakan data biner sedangkan µ0¶ menyatakan DM mempunyai format BCD
(Binary Coded Decimal).

24/12 ± Bit ini digunakan untuk memilih mode jam, 24 atau 12. µ1¶ menunjukkan mode 24-jam
dan µ0¶ menunjukkan mode 12-jam. Bit ini dapat dibaca/tulis dan tidak dipengaruhi secara
internal atau RESET.
DSE ± Merupakan bit khusus yang digunakan untuk merubah waktu ketika terjadi perubahan
musim (biasanya terjadi pada negara dengan 4 musim). Ketika di-set 1, pada hari minggu
pertama pada bulan april terjadi perubahan jam dari 1:59:59 AM menjadi 3:00:00 AM. Pada hari
minggu terakhir bulan oktober saat waktu menunjukkan 1:59:59 AM berubah menjadi 1:00:00
AM. Hal ini tidak terjadi ketika DSE di-set 0. Bit ini tidak dipengaruhi secara internal atau
RESET.





BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0


IRQF PF AF UF 0 0 0 0

IRQF ± Interrupt Request Flag (IRQF) bit diset menjadi 1 ketika hal berikut terjadi :
PF = PIE = 1
AF = AIE = 1
UF = UIE = 1
Contoh: IRQF = (PF*PIE) + (AF*AIE) + (UF*UIE)
Saat ketika bit IRQF adalah 1, pin IRQ menjadi ³low´. Bit flag PF, AF, dan UF di hapus detelah
register C dibaca oleh program atau ketika pin RESET ³low´.

PF ± Periodic Interrupt Flag adalah bit read-only yang diset menjadi 1 ketika edge dideteksi pada
tap yang dipilih pada rantai pembagian. Bit RS3 ± RS0 menghasilkan frekuensi periodik. PF
diset menjadi 1 tanpa dipengaruhi oleh bit PIE. Ketika PF dan PIE µ1¶ , sinyal IRQ aktif dan akan
mengeset bit IRQF. Bit PF akan dihapus secara pembacaan software pada register C atau
RESET.

AF ± µ1¶ pada bit Alarm Interrupt Flag (AF) mengindikasikan waktu yang dicapai sesuai dengan
waktu alarm. Jika bit AIE juga 1, pin IRQ akan menjadi low dan µ1¶ akan terjadi pada bit IRQF.
RESET atau pembacaan register C akan menghapus AF.

UF ± Bit Update Ended Interrupt Flag akan diset setelah tiap proses update. Ketika bit UIE diset
menjadi 1, µ1¶ pada UF akan menyebabkan bit IRQF menjadi 1 dan akan mengaktifkan pin IRQ.
UF dihapus dengan membaca register C atau RESET.

BIT 3 sampai BIT 0 ± Bit ini tidak dipakai dan selalu bernilai 0.

Register D

BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0


VRT 0 0 0 0 0 0 0

VRT ± Valid RAM Time mengindikasikan kondisi dari baterai yang dihubungkan ke pin VBAT.
Bit ini tidak dapat ditulis dan selalu menjadi 1 ketika dibaca. µ0¶ akan terjadi ketika baterai
internal telah rusak. Bit ini tidak dipengaruhi oleh RESET.

BIT 6 sampai BIT 0 - Bit ini tidak dipakai dan selalu bernilai 0.

 
"

RTC 12C887 melaksanakan proses update sekali dalam satu detik walau tanpa memperhatikan
bit SET pada register B. Ketika bit SET pada register B di-set menjadi 1, maka informasi waktu,
kalender, dan alarm akan berhenti dan tidak akan berubah pada saat terjadi penambahan waktu,
tetapi rantai perhitungan waktu akan tetap terjadi dan disimpan pada buffer internal. Hal ini akan
menjaga akurasi watu dari RTC saat terjadi proses pembacaan dan penulisan. Proses update ini
juga akan membandingkan byte alarm dengan waktu yang terjadi sat itu.
Ada tiga metode untuk mengakses data pada RTC yang akan menghindari akses informasi waktu
yang tidak konsisten. Metode pertama adalah menggunakan update ended interrupt. Jika di
enable, interupt akan terjadi tiap proses update selesai, dimana terdapat waktu 999 ms untuk
membaca data waktu yang valid. Jika interupsi ini digunakan, bit IRQF pada register C harus
dihapus sebelum meninggalkan proses interupsi.
Metode yang kedua adalah dengan menggunakan bit update in progress (UIP) yang terdapat pada
register A yang menyatakan apakah proses update sedang berlangsung. Bit UIP akan
mengeluarkan pulsa tiap satu detik. Setelah bit UIP menjadi high, maka proses update akan
terjadi 244 ?s kemudian dan jika low terbaca pada bit UIP, maka pengguna mempunyai waktu
244 ?s sebelum data waktu/kalender akan berubah. Sehingga, pengguna harus menghindari
proses interupsi yang menyebabkan waktu pembacaan data melebihi 244 ?s.

Gambar 14.3 Hubungan antara Update-Ended dan Periodic Interrupt

Metode yang ketiga adalah mengunakan periodic interrupt untuk menunjukkan apakah proses
update sedang berlangsung. Bit UIP pada register A akan di-set high diantara pengaktifan dari bit
PF pada register C. Periode interupt yang melebihi waktu tBUC akan menyebabkan data yang
valid dapat dicapai pada setiap terjadinya interupsi. Pembacaan harus telah selesai dalam waktu
(tPI/2 + tBUC) untuk memastikan data tidak dibaca saat proses update.
Gambar 14.6 Rangkaian interface RTC12c887


 (c& c 
 (""
 "c,,6"
"#

Pada percobaan ini, data detik RTC diambil dan dikeluarkan ke LED.

( (c& 6  


/

#

1. Hubungkan jumper LED_EN


2. Hubungkan kabel data dan kontrol pada board RTC
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini:(download file prog141a.asm)
Ca bit P3.3
ALE bit P3.2
rite bit P3.1
Read bit P3.0
PortData equ P0
RegisterA equ 10
RegisterB equ 11
;
org 0h
clr Ca ; Aktivkan RTC
call INIT_RTC
start: mov PortData,#00h ; 00h = alamat detik pada RTC
clr ALE ; Penguncian alamat 0-1-0
setb ALE
clr ALE
;
setb rite ; sinyal write = 1
;
setb Read
clr Read ; sinyal read = 0
mov A,PortData ; Baca data dari alamat 00h = detik
setb Read
;
mov P0,A ; simulasi data ke LED = P0
smp start
;
INIT_RTC:
setb Read
mov PortData,#RegisterA ;
clr ALE
setb ALE
clr ALE
;
setb Rite
clr rite
mov PortData,#20h
setb Rite
;
mov PortData,#RegisterB
clr ALE
setb ALE
clr ALE
;
setb Rite
clr Rite
mov PortData,#02h
setb Rite
;
RET
end

7. Simpanlah program yang anda ketik dan beri nama : prog141a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)


 (c&  
 (""
 "
"c,,6"
"
7 
$c5

Pada percobaan ini, data detik dan menit diambil dan ditampilkan pada LCD Karakter 2x16.
Gambar 14.8 Interface LCD Carácter 2x16

1. Hubungkan jumper LCD_EN


2. Hubungkan kabel data dan kontrol pada board RTC ke rangkaian mikrokontroller
3. Hubungkan modul Microcontroller Trainer dengan power supply +5V
4. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
5. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
6. Ketik program berikut ini: (download file prog142a.asm)
Ca bit P3.3
ALE bit P3.2
rite bit P3.1
Read bit P3.0
PortRTC equ P2
RegisterA equ 10
RegisterB equ 11
Puluhan equ 30h
aatuan equ 31h
detik equ 32h
Menit equ 33h
org 0h
call init_LCD
call init_RTC
; call setDetik
; call setMenit
call write_char
start:
call readDetik
call bin2Dec
call write2LCDDetik
;
call readMenit
call bin2Dec
call write2LCDMenit
;
smp start
;
write_char:
mov dptr,#word1 ;DPTR = [ address word1 ]
mov r3,#16 ;R3=16,number character to be display
mov r1,#80h ;R1=80h,address DDRAM start position
acall write_inst
;
write1:clr a ; A = 0
movc a,@a+dptr ; A = [A+ DPTR]
mov r1,A ; R1 = A
inc dptr ; DPTR = DPTR +1
acall write_data;
dnz r3,write1 ; R3 = R3-1,
ret
;
Init_lcd:
mov r1,#00000001b ;Display clear
call write_inst ;
mov r1,#00111000b;Function set,Data 8 bit,2linefont 5x7
call write_inst ;
mov r1,#00001100b ;Display on,cursor off,cursorblink off
call write_inst
mov r1,#00000110b ;Entry mode, aet increment
call write_inst
ret
;
rite_inst:
clr P3.6 ; P3.6 = Ra =0
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
clr P3.7 ; P3.7 =EN = 0
ret
;
rite_data:
setb P3.6 ; P3.6 = Ra =1
mov P0,R1 ; P0 = D7 s/d D0 = R1
setb P3.7 ; P3.7 =EN = 1
call delay ; call delay time
clr p3.7 ; P3.7 =EN = 0
ret
;
delay:mov R0,#0
delay1: mov R7,#0fh
dnz R7,$
dnz R0,delay1
ret
;
ReadDetik:
mov PortRTC,#00h ;00h = alamat detik pada RTC
clr ALE ;Penguncian alamat 0-1-0
setb ALE
clr ALE
setb rite ; sinyal write = 1
;
setb Read
clr Read ; sinyal read = 0
mov A,PortRTC ; Baca data dari alamat 00h = detik
setb Read
ret
;
ReadMenit:
mov PortRTC,#02h ; 00h = alamat detik pada RTC
clr ALE ; Penguncian alamat 0-1-0
setb ALE
clr ALE
setb rite ; sinyal write = 1
;
setb Read
clr Read ; sinyal read = 0
mov A,PortRTC ; Baca data dari alamat 00h = detik
setb Read
ret
;
init_RTC:
clr Ca
setb Read
mov PortRTC,#RegisterA ;
clr ALE
setb ALE
clr ALE
;
setb Rite
clr rite
mov PortRTC,#20h
setb Rite
;
mov PortRTC,#RegisterB
clr ALE
setb ALE
clr ALE
;
setb Rite
clr Rite
mov PortRTC,#06h
setb Rite
RET
;
Bin2Dec:
mov b,#10d
div ab
mov puluhan,a
mov satuan,b
ret
;
rite2LCDDetik:
mov r1,#0c4h
call write_inst
mov a,Puluhan
add a,#30h
mov r1,a
call write_data
;
mov r1,#0c5h
call write_inst
mov a,aatuan
add a,#30h
mov r1,a
call write_data
ret
;
rite2LCDMenit:
mov r1,#0c2h
call write_inst
mov a,Puluhan
add a,#30h
mov r1,a
call write_data
;
mov r1,#0c3h
call write_inst
mov a,aatuan
add a,#30h
mov r1,a
call write_data
ret
;
setMenit:
setb Read
mov PortRTC,#02h;
clr ALE
setb ALE
clr ALE
;
setb Rite
clr rite
mov PortRTC,#21d
setb Rite
ret
;
setDetik:
setb Read
mov PortRTC,#00h;
clr ALE
setb ALE
clr ALE
;
setb Rite
clr rite
mov PortRTC,#00h
setb Rite
ret
word1: DB ' My RTC Test '; here is the data to be look up
end

7. Simpanlah program yang anda ketik dan beri nama : prog142a.asm


8. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
9. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)
10. Lakukan modifikasi pada program tersebut untuk memunculkan data jam, hari, bulan dan
tahun pada LCD Karakter
11. Lakukan modifikasi pada program tersebut untuk menampilkan data detik dan menit pada
rangkaian 7 segmen.

s!sc.
#= A ! 

'!3
1. Mahasiswa memahami prinsip dasar PWM
2. Mahasiswa memahami rangkaian Driver Motor DC
3. Mahasiswa memahami pemrograman assembly untuk pengaturan PWM

7 
 =

Salah satu cara yang paling mudah untuk membangkitkan sebuah tegangnan analog dari sebuah
nilai digital adalah dengan menggunakan pulse-width modulation (PWM). Dalam PWM
gelombang kotak, frekuensi tinggi dibangkitkan sebagai output digital. Untuk contoh, sebuah
port bit secara kontinyu melakukan kegiatan saklar on dan off pada frekuensi yang relatif tinggi.
Selanjutnya, bila sinyal diumpankan pada LPF low pass filter, tegangan pada output filter akan
sama dengan Root Mean Squere ( RMS ) dari sinyal gelombang kotak. Selanjutnya tegangan
RMS dapat divariasi dengan mengubah duty cycle dari sinyal.
DUTY CYCLE menyatakan fraksi waktu sinyal pada keadaan logika high dalam satu siklus.
Satu siklus diawali oleh transisi low to high dari sinyal dan berakhir pada transisi berikutnya.
Selama satu siklus, jika waktu sinyal pada keadaan high sama dengan low maka dikatakan sinyal
mempunyai DUTY CYCLE 50 %. DUTY CYCLE 20 % menyatakan sinyal berada pada logika
1 selama 1/5 dari waktu total

Gambar 15.1. Duty cycle 30 %


Gambar 15.2. Aplikasi PWM pada setting kecepatan motor

= "
    


Pada rangkaian tersebut menunjukkan sebuah DAC yang dibangun dengan metode PWM, yang
digunakan untuk mengendalikan kecepatan motor DC dengan modulasi lebar pulsa. Bit 0 dari P0
mengemudikan sebut saklar transistor sebagaimana yang ditunjukkan pada gambar. Motor
dihidupkan dan dimatikan untuk suatu periode tertentu
Bagian pada saat motor hidup disebut DUTY CYCLE. Pada program ini menggunakan sebuah
byte untuk menyimpan lama waktu motor on, dari sejumlah 256 siklus. Bila duty cycle yang
diberikan adalah 10 % maka program ini menyimpan data waktu ON selama 10 siklus dan OFF
selama 246 siklus dari 256 siklus.
Berikutnya nilai duty cycle disimpan pada RAM internal yang diberi label dCycle. Komplemen
dari duty cycle disimpan pada RAM internal dengan nama dCycleC. Pada perancangan software
ini, Timer 0 diaplikasikan dalam mode 2, yaitu 8 bit timer auto reload, yang akan melakukan
increment nilai register counter setiap siklus, dan bila terjadi overflow maka data yang berada
pada TH0 akan diloadkan ke TL0 yang berfungsi sebagai counter 8 bit.
Bila frekuensi kristal yang digunakan adalah 12 Mhz, sehingga jika nilai reload adalah 0 maka
timer 0 akan over flow setiap 256 udetik; dan jika nilai reload adalah FFh maka timer akan over
flow setiap 1 udetik. Pertama kali program menghidupkan motor dan menempatkan nilai dCycle
ke TH0 sebagai nilai reload. Setelah timer overflow, komplemen dari duty cycle dCycleC akan
ditempatkan ke TH0 sebagai nilai reload dan motor berhenti berputar. Pada pemrograman ini
keadaan motor dapat dilihat pada register yang dapat dialamati bit, yang ditandai sebagai
motorFlag.


 (c. c 


  "
 =

Pada percobaan ini, putaran kecepatan motor kemudikan dengan menggunakan transistor TIP120
melalui metode PWM. PWM dikemudikan dengan menggunakan satu bit dari P0, seperti yang
ditunjukkan pada gambar dibawah.
Gambar 15.3. Diagram alir (a) rutin utama (b) inisialisasi duty cycle dan (c) inisialisasi timer
pada percobaan 15.1

Gambar 15.4. Diagram alir interupsi timer 0 pada percobaan 15.1

1. Hubungkan kabel data dan ke inputan rangkaian driver motor DC


2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (Download File: Prog151a.asm)

Ô 
Ô )
&78 &'
8¢ 

#" 
 
#"9 :*"
$
  9:

 :*"
#"
$
9:

"!Ô ,($  Ô  Ô*:;<
"! Ô$Ô  
$""
"!Ô $Ô

$
9:*"
 *8;
,¢$
*8;
,$*""Ô  Ô
"!*= Ô$> ÔÔ     
 ?*$  "
 ?$   
 *+$" 

$
9 :*"
# "¢ ";$Ô "¢
 &78$=Ô  "
 &'$*&  &78Ô
"!*= Ô$ ÔÔ  Ô*=
 "¢$  Ô "¢%)@A";<

";
&78$"  "
&'$*&  &78Ô
"!*= Ô$ ÔÔ  *=
"¢$  Ô "¢%@A";¢¢

Ô

6. Simpanlah program yang anda ketik dan beri nama : prog151a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)


 (c.  


  "

 "
 = 

!

Pada percobaan ini, ADC digunakan untuk membaca tegangan dari input pembagi tegangan 0-5
Volt, selanjutnya tegangan yang telah diuabah menjadi data digital, digunakan untuk mengatur
PWM pada Motor DC.
1. Hubungkan kabel data dan ke inputan rangkaian driver motor DC
2. Hubungkan modul Microcontroller Trainer dengan power supply +5V
3. Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
4. Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
5. Ketik program berikut ini: (Download File: Prog151a.asm)

Ô 
Ô )
&78 &'
8¢ 

#" 
 
#"9 :*"
$
  :*"
 

"!Ô 

"!Ô 
#"
$

&'



 &'
# &' 
&'(
"! &)
 &'(

$
9:*"
"!Ô ,(
"! Ô

"!Ô 
 *8;
,¢
*8;
,
"!*= Ô
 ?*
 ?
 *+

$
9 :*"
# "¢ ";
 &78
 &'
"!*= Ô
 "¢

";
&78
&'
"!*= Ô
"¢

Ô

6. Simpanlah program yang anda ketik dan beri nama : prog151a.asm


7. Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari
*.asm ke *.hex.
8. Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat
Petunjuk Penggunaan)

Anda mungkin juga menyukai