BAB I
PENDAHULUAN
1.3. Kegiatan
Pada tahap awal ini, peserta harus melaksanakan proses penulisan program sederhana
NOTEPAD
Notepad digunakan sebagai editor text, Listing program assembly dalam praktikum
ditulis dan diubah menggunakan notepad. Listing program tersebut disimpan dengan
ASM51 (+MOD51)
ASM51 digunakan sebagai hex assembler. ASM51 akan mengubah listing program
yang sudah dibuat dengan Notepad menjadi file heksadesimal. Hasil proses ini
menghasilkan file dengan format (nama file).HEX adalah file yang di-download ke DT-
51 MinSys. File (nama file).LST adalah file yang berisi alokasi (alamat) memori pada
listing program. File ini juga berisi pesan error dan lokasinya jika terdapat kesalahan
pada listing program. MOD51 berisi semua kode kontrol untuk keluarga MCS-51 antara
DT51L
program/instruksi terlebih dahulu pada sebuah editor. Editor yang umum digunakan
dan dapat ditemui di hampir setiap komputer berbasis windows adalah Notepad.
Program diketik dengan menggunakan Notepad dan disimpan dalam format (nama
Gambar 1.1
Editor Program Notepad
MS-DOS prompt (pada folder yang memuat semua file yang akan di-assembler
tersebut).
Proses assembling yang berhasil ditunjukkan oleh gambar berikut ini. Jika hasil
Gambar 1.2
Proses Kompilasi dengan ASM51
c. Tahap akhir dari pembuatan program adalah proses download ke DT-51 MinSys.
folder yang memuat file HEX tersebut). Proses download yang berhasil akan
Gambar 1.3
DT-51 Program Downloader V2.1 untuk DT-51
1. Menu
File : Open & Download (F9) = untuk membuka file Hex dan men-download file tersebut
2. Toolbar
Open & Download (F9) = untuk membuka file Hex dan men-download file tersebut
4. Auto Detect
Jika dicentang, maka COM port dan Baudrate akan dipilih secara otomatis
Jika tidak dicentang, maka COM port dan Baudrate ditentukan oleh COM Option dan
Baudrate Option
Jika langsung menggunakan COM port, hilangkan centang pada kotak ini
6. Testing Option
Berisi pilihan prosedur testing (keterangan lebih lengkap terdapat pada manual DT-51
7. Download Algorithm
Berisi pilihan metode download (keterangan lebih lengkap terdapat pada manual DT-
Peta memori DT-51 menunjukkan alamat masing-masing bagian komponen seperti yang
Gambar 1-4
Tata Letak DT-51 Minimum System ver 3.3
BAB II
2.3. Kegiatan
Peserta praktikum menulis program I, yang berfungsi untuk mengirim data ke port
Peserta praktikum menulis program II, yang berfungsi untuk menampilkan karakter
Peserta praktikum menulis program III, yang berfungsi untuk menggerakkan motor
stepper
2.4.1. Percobaan 1
Gambar 2.1 .
C AT89C51/AT89S51
Port 0
Port 0 merupakan port dua fungsi yang berada pada pin 32 - 39, pada rancangan
system sederhana port ini digunakan sebagai port I/O serbaguna. Untuk
rancangan yang lebih komplek yang melibatkan memori eksternal jalur ini
Port 1
Port 1 disediakan khusus sebagai port I/O, port ini berada pada pin 1- 8.
Port 2
Port 2 (pin 21- 28) merupakan port dua fungsi yaitu sebagai port I/O serbaguna,
dan sebagai bus alamat byte tinggi untuk rancangan system yang melibatkan
memori eksternal.
Port 3
Port 3 adalah port dua fungsi yang berada pada pin 10 – 17, port ini memiliki
Langkah-langkah percobaan
Hubungkan Port 1 DT-51 MinSys dengan “Port Output DT-51 Trainer Board
Ketikkan program berikut ini, pada editor program, kemudian compile dan
Program I :
$mod51
CSEG
ORG 4000H
LJMP START
ORG 4100H
START:
MOV SP,#30H
SETB P1.0
CLR P1.1
SETB P1.2
CLR P1.3
SETB P1.4
SETB P1.5
SETB P1.6
SETB P1.7
SJMP $
END
Jika tidak ada kesalahan, program tersebut akan menyebabkan Output LED pada
Tugas:
Buat program seperti diatas dengan menggunakan instruksi SETB dan CLR untuk
2.4.2. Percobaan 2
Hubungkan Port 1 DT-51 MinSys dengan “Port Output DT-51 Trainer Board
Ketikkan program berikut ini, pada editor program, kemudian compile dan
Program II :
$MOD51
CSEG
ORG 4000H
AJMP START
ORG 4100H
Tugas:
Buat program seperti diatas dengan menggunakan instruksi MOV untuk mendapatkan
Pendahuluan
Motor Stepper adalah motor yang bergeraknya per langkah, dan geraknya
dikendalikan oleh data digital. Inti motor (rotor) berupa magnet permanen dan stator
terdiri dari empat kumparan yang dihubungkan dengan saklar. Dengan membuka
menutupnya saklar sesuai dengan data pada tabel 4, maka kita dapat memutar inti
motor dengan arah tertentu. Adapun urutan data yang harus diberikan ditunjukkan
pada tabel 4 dibawah ini. Untuk arah putaran kebalikkannya, maka urutan data pada
Gambar 2.2.
Motor Stepper
Tabel 2.2.
Langkah-langkah percobaan
Ketikkan program berikut ini, pada editor program, kemudian compile dan
$mod51
cseg
org 4000h
ljmp mulai
org 4100h
Tugas
Buat program untuk arah putaran motor 360° ke kiri dengan membalik urutan data
motor stepper
BAB III
3.2.3 Kegiatan
yang terhubung dengan port C PPI 8255 dengan switch yang terhubung dengan
port 1 mikrokontroler.
Hubungkan Port 1 DT-51 MinSys dengan “Port Input” DT-51 Trainer Board,
Hubungkan Port C 8255 pada DT-51 MinSys dengan “ Port Output” DT-51
Ketikkan program berikut ini, pada editor program, kemudian compile dan
Program I.
$mod51
CSEG
ORG 4000H
LJMP START
ORG 4100H
START:
MOV SP, #30H
INIT: MOV DPTR, #2003H
MOV A, #80H
MOVX @DPTR, A
3.2.5 Tugas
masing-masing LED sesuai dengan urutan bit. Sebagai contoh switch 1 untuk
3.2.3 Pendahuluan
PPI port merupakan port ekspansi (tambahan) yang terdiri dari tiga port (Port A,
Port B dan Port C). Port A berada pada alamat 2000h, Port B berada pada alamat
2001h, dan Port C berada pada alamat 2002h. Masing-masing port tersebut
Penggunaan PPI Port pada 82C55 tidak sesederhana penggunaan Port 1 pada
89C51. Untuk menggunakan PPI Port harus didahului dengan proses inisialisasi.
Proses inisialisasi dilakukan dengan menggunakan Control Word yang berada pada
alamat 2003h. Control Word menentukan port mana yang aktif dan mode mana
MSB LSB
D7 D6 D5 D4 D3 D2 D1 D0
Simbol Fungsi
D7 Set flag, berlogika ‘1’ untuk mengaktifkan PPI Port
D6 & D5 Mode Select untuk Port A dan C Upper (bit7 – bit4), bernilai ‘00’
untuk mode 0, ‘01’ untuk mode 1, dan ‘10’ atau ‘11’ untuk mode 2.
Praktikum ini hanya menggunakan mode 0 sehingga nilainya selalu
‘00’.
D4 Port A, berlogika ‘1’ untuk input dan berlogika ‘0’ untuk output.
D3 Port C Upper, berlogika ‘1’ untuk input dan berlogika ‘0’ untuk
output.
D2 Mode Select untuk Port B dan C Lower (bit 3 – bit 0), berlogika ‘0’
untuk mode 0 dan berlogika ‘1’ untuk mode 1. Praktikum ini hanya
menggunakan mode 0 sehingga selalu berlogika ‘0’.
D1 Port B, berlogika ‘1’ untuk input dan berlogika ‘0’ untuk output.
D0 Port C Lower, berlogika ‘1’ untuk input dan berlogika ‘0’ untuk
output
Setelah proses inisialisasi dilakukan , PPI Port dapat diakses per byte.
Hubungkan Port A DT-51 MinSys dengan “ Port Output” DT-51 Trainer Board
Ketikkan program berikut ini, compile dan download ke DT-51 MinSys, dan amati
hasilnya.
$mod51
CSEG
ORG 4000H
LJMP START
ORG 4100H
START:
MOV SP,#30H
;inisialisasi PPI
MOV DPTR,#2003H
MOV A,#80H
MOVX @DPTR,A
;port A
MOV DPTR,#2000H
MOV A,#0CFH
MOVX @DPTR,A
SJMP $
END
Ket: Untuk menggunakan Port A sebagai output maka D4 berlogika ‘0’ dan set flag
3.2.5 Tugas
Hubungkan Port C DT-51 MinSys dengan “ Port Input” DT-51 Trainer Board
Ketikkan program berikut ini, compile dan download ke DT-51 MinSys, dan amati
hasilnya.
$mod51
PORTC EQU 2002H
CW EQU 2003H
CSEG
ORG 4000H
LJMP START
ORG 4100H
START:
MOV SP,#30H
;inisialisasi
MOV DPTR,#CW
MOV A,#89H
MOVX @DPTR,A
;port C
LOOP: MOV DPTR,#PORTC
MOVX A,@DPTR
MOV P1,A
SJMP LOOP
END
Jika tidak ada kesalahan, program tersebut akan menampilkan nyala LED pada bit
Ket: Untuk menggunakan Port C sebagai input maka D3 dan D0 berlogika ‘1’ dan
set flag berlogika ‘1’ shg control word bernilai ‘10001001’ atau 89h.
3.3.2. Tugas
Buatlah program untuk menampilkan LED di port 1 dengan toggle switch di port A
BAB IV
4.3 Pendahuluan
LCD yang dipergunakan pada module ini adalah LCD tipe M1632 yaitu sebuah
LCD dot matrix16X2 baris dengan konsumsi daya rendah. Adapun fasilitas yang
dimiliki meliputi :
o Display clear
o Cursor home
o Display ON/OFF
o Cursor ON/OFF
o Cursor Shift
o Display Shift
Tabel 4.1.
Fungsi Terminal
Gambar 4.1.
Rangkaian LCD
program.
$MOD51
$TITLE(TESLCD)
;-----------------------------
;Procedure Address
;-----------------------------
Write EQU 0700H
InitLCD EQU 0740H
CommandLCD EQU 07B0H
WriteLCD EQU 07D0H
ReadLCD EQU 07F0H
ReadAddrLCD EQU 0820H
SetDDRAM EQU 0850H
SetCGRAM EQU 0870H
;-----------------------
;LCD Command
;-----------------------
DisplayClear EQU 01H
CursorHome EQU 02H
ShiftCursorRight EQU 14H
ShiftCursorLeft EQU 10H
ShiftDisplayRight EQU 1CH
ShiftDisplayLeft EQU 18H
DShiftCursorInc EQU 07H
DShiftCursorDec EQU 05H
CSEG
ORG 4000H
LJMP Start
ORG 4100H
LCALL InitLCD
; ----------------------------
; Make New Pattern
; ----------------------------
MOV A,#00H
LCALL SetCGRAM
MOV A,#00011111B
LCALL WriteLCD
MOV A,#00011111B
LCALL WriteLCD
MOV A,#00000100B
LCALL WriteLCD
MOV A,#00000100B
LCALL WriteLCD
MOV A,#00000100B
LCALL WriteLCD
MOV A,#00011111B
LCALL WriteLCD
MOV A,#00011111B
LCALL WriteLCD
MOV A,#00000000B
LCALL WriteLCD
MOV A,#00011111B
LCALL WriteLCD
MOV A,#00011111B
LCALL WriteLCD
MOV A,#00011000B
LCALL WriteLCD
MOV A,#00011111B
LCALL WriteLCD
MOV A,#00011000B
LCALL WriteLCD
MOV A,#00011111B
LCALL WriteLCD
MOV A,#00011111B
LCALL WriteLCD
MOV A,#00000000B
LCALL WriteLCD
; ------------------------
; Display at Line1
; ------------------------
MOV A,#00H
LCALL SetDDRAM
MOV A,#00H
LCALL WriteLCD
MOV A,#' '
LCALL WriteLCD
MOV A,#' '
LCALL WriteLCD
MOV A,#'I'
LCALL WriteLCD
MOV A,#'N'
LCALL WriteLCD
MOV A,#'N'
LCALL WriteLCD
MOV A,#'O'
LCALL WriteLCD
MOV A,#'V'
LCALL WriteLCD
MOV A,#'A'
LCALL WriteLCD
MOV A,#'T'
LCALL WriteLCD
MOV A,#'I'
LCALL WriteLCD
MOV A,#'V'
LCALL WriteLCD
MOV A,#'E'
LCALL WriteLCD
; ------------------------
; Display at Line2
; ------------------------
MOV A,#41H
LCALL SetDDRAM
MOV A,#01H
LCALL WriteLCD
MOV A,#' '
LCALL WriteLCD
MOV A,#'E'
LCALL WriteLCD
MOV A,#'L'
LCALL WriteLCD
MOV A,#'E'
LCALL WriteLCD
MOV A,#'C'
LCALL WriteLCD
MOV A,#'T'
LCALL WriteLCD
MOV A,#'R'
LCALL WriteLCD
MOV A,#'O'
LCALL WriteLCD
MOV A,#'N'
LCALL WriteLCD
MOV A,#'I'
LCALL WriteLCD
MOV A,#'C'
LCALL WriteLCD
MOV A,#'S'
LCALL WriteLCD
; -------------------------------------
; Shift display right and left
; -------------------------------------
MOV R5,#10
EE: MOV R6,#2
BB: MOV A,#ShiftDisplayRight
LCALL CommandLCD
LCALL LDelay
DJNZ R6,BB
MOV R6,#2
CC: MOV A,#ShiftDisplayLeft
LCALL CommandLCD
LCALL LDelay
DJNZ R6,CC
DJNZ R5,EE
AJMP $
END
4.5 Tugas
BAB V
KOMUNIKASI SERIAL
Memahami cara kerja pengiriman dan penerimaan data melalui port serial
5.3. Kegiatan
5.4. Pendahuluan
ATMEL AT89C51 mempunyai On Chip Serial Port yang dapat digunakan untuk
komunikasi data serial secara Full Duplex sehingga Port Serial ini masih dapat
menerima data pada saat proses pengiriman data terjadi. Untuk menampung data yang
diterima atau data yang akan dikirimkan, AT89C51 mempunyai sebuah register yaitu
SBUF yang terletak pada alamat 99H di mana register ini berfungsi sebagai buffer
sehingga pada saat mikrokontroler ini membaca data yang pertama dan data kedua
belum diterima secara penuh, maka data ini tidak akan hilang.
Pada kenyataannya register SBUF terdiri dari dua buah register yang memang
menempati alamat yang sama yaitu 99H. Register tersebut adalah Transmit Buffer
Register yang bersifat write only (hanya dapat ditulis) dan Receive Buffer Register
yang bersifat read only (hanya dapat dibaca). Pada proses penerimaan data dari Port
Serial, data yang masuk ke dalam Port Serial akan ditampung pada Receive Buffer
Register terlebih dahulu dan diteruskan ke jalur bus internal pada saat pembacaan
register SBUF sedangkan pada proses pengiriman data ke Port Serial, data yang
dituliskan dari bus internal akan ditampung pada Transmit Buffer Register terlebih
Gambar 5.1
Port Serial AT89C51 dapat digunakan untuk komunikasi data secara sinkron
maupun asinkron Komunikasi data serial secara sinkron adalah merupakan bentuk
komunikasi data serial yang memerlukan sinyal clock untuk sinkronisasi di mana
sinyal clock tersebut akan tersulut pada setiap bit pengiriman data sedangkan
data pada komunikasi serial AT89C51 dilakukan mulai dari bit yang paling rendah
sinyal clock sebagai sinkronisasi, namun pengiriman data ini harus diawali dengan
start bit dan diakhiri dengan stop bit seperti yang tampak pada gambar 3.2. Sinyal
clock yang merupakan baud rate dari komunikasi data ini dibangkitkan oleh masing-
masing baik penerima maupun pengirim data dengan frekwensi yang sama.
Penerima hanya perlu mendeteksi adanya start bit sebagai awal pengiriman data,
selanjutnya komunikasi data terjadi antar dua buah shift register yang ada pada
pengirim maupun penerima. Setelah 8 bit data diterima, maka penerima akan
menunggu adanya stop bit sebagai tanda bahwa 1 byte data telah terkirim dan
Gambar 5.2
Komunikasi UART
Pada aplikasinya proses komunikasi asinkron ini selalu digunakan untuk mengakses
Receiver/Transmitter) seperti Port Serial PC atau Port Serial mikrokontroler yang lain.
Port Serial AT89C51 mempunyai 4 buah mode operasi yang diatur oleh bit ke 7 dan
Gambar 5.3.
Register SCON
SM2: Serial Port Mode bit 2, bit untuk mengaktifkan komunikasi multiprosesor pada
kondisi set.
REN: Receive Enable, bit untuk mengaktifkan penerimaan data dari Port Serial pada
kondisi set. Bit ini di set dan clear oleh perangkat lunak.
TB8: Transmit bit 8, bit ke 9 yang akan dikirimkan pada mode 2 atau 3. Bit ini di set
RB8: Receive bit 8, bit ke 9 yang diterima pada mode 2 atau 3. Pada Mode 1 bit ini
TI: Transmit Interrupt Flag, bit yang akan set pada akhir pengiriman karakter. Bit ini
RI: Receive Interrupt Flag, bit yang akan set pada akhir penerimaan karakter. Bit ini
Tabel 5.1.
Mode komunikasi
Mode 1 UART 8 bit dengan Baud Rate yang dapat diatur SCON
Pada mode ini komunikasi data dilakukan secara 8 bit data asinkron yang terdiri
10 bit yaitu 1 bit start, 8 bit data dan 1 bit stop. Baud Rate pada mode ini dapat diatur
dengan menggunakan Timer 1. Tidak seperti pada mode 0, pada mode ini yang
digunakan. P3.0 berfungsi sebagai RXD yaitu kaki untuk penerimaan data serial dan P3.1
berfungsi sebagai TXD yaitu kaki untuk pengiriman data serial. Hal ini juga berlaku pada
Pengiriman data dilakukan dengan menuliskan data yang akan dikirim ke Register SBUF.
Data serial akan digeser keluar diawali dengan bit start dan diakhiri dengan bit stop
dimulai dari bit yang berbobot terendah (LSB) hingga bit berbobot tertinggi (MSB). Bit
TI akan set setelah bit stop keluar melalui kaki TXD yang menandakan bahwa proses
pengiriman data telah selesai. Bit ini harus di-clear oleh perangkat lunak setelah
kondisi dari logika high ke logika low pada kaki RXD di mana perubahan kondisi tersebut
adalah merupakan bit start. Selanjutnya data serial akan digeser masuk ke dalam SBUF
dan bit stop ke dalam bit RB8. Bit RI akan set setelah 1 byte data diterima ke dalam
SBUF kecuali bila bit stop = 0 pada komunikasi multiprosesor (SM2 = 1).
dimana K adalah konstanta bernilai 1 bila SMOD = 0 dan bernilai 2 bila SMOD=1
contoh:
SMOD berada pada register PCON bit ke 7. Karena register PCON tidak bisa dialamati
per bit maka untuk menjadikan SMOD menjadi logika ‘1’ dapat dilakukan dengan cara
Hubungkan Port 1 DT-51 MinSys dengan “Port Output” DT-51 Trainer Board
Amati hasilnya.
Program :
$mod51
CSEG
ORG 4000H
LJMP START
;interrupt pengiriman
ORG 4023H
CLR TI
CJNE A, #39H, PLUS
MOV A, #30H
SJMP EXIT
PLUS: INC A
EXIT: RETI
ULANG:MOV SBUF, A
LCALL DELAY
SJMP ULANG
END
Gambar 5.4.
5.6. Tugas
BAB VI
TIMER
6.1. Pendahuluan
Timer 0 dan Timer 1. Clock input dari kedua Timer ini diperoleh dari frequensi X-
TAL yang terpasang dibagi 12. Kedua timer bisa dipakai untuk meng-interrupt
Timer mempunyai beberapa mode yang bisa ditentukan dengan kombinasi bit M0
Tabel 6.1
Mode Timer
Mode M1 M0 Operasi
0 0 0 Timer 13 bit
1 0 1 Timer 16 bit
2 1 0 Timer auto reload 8 bit
3 1 1 TL0 = timer 8 bit yang dikontrol oleh bit timer 0
TH0 = timer 8 bit yang dikontrol oleh bit timer 1
Timer 1 = stop
Pemilihan mode ini bisa dilakukan dengan cara mengisi register TMOD sbb:
Keterangan:
Gate : Bila bit ini berlogika satu, maka Timer akan berjalan bila kaki INT1 berlogika
‘1’/High
C/T : Bit pemilih timer atau counter yaitu ‘1’=counter dan ‘0’=timer
M1 : mode bit 1
M0 : mode bit 0
Sedangkan register yang digunakan untuk mengontrol timer adalah register TCON
Keterangan:
Diketahui :
T=50.10-3 s
Rumus:
T=(65536-THxTLx) * 1 / (F.Osc/12)
50.10-3=(65536-THx.TLx) * 1 / (921600)
50.10-3=(65536-THx.TLx) * 1,085.10-6
50.10-3/1,085.10-6 = (65536-THx.TLx)
46083 = (65536-THx.TLx)
THx.TLx = 19453
THx.TLx = 4BFDH
Hubungkan Port 1 DT-51 MinSys dengan “Port Output DT-51 Trainer Board
program.
Program
$mod51
CSEG
ORG 4000H
LJMP START
ORG 4100H
START: MOV SP,#30H
MOV TMOD,#01
ULANG: MOV R0,#20
LOOP: MOV TH0,#4BH
MOV TL0,#0FDH
SETB TR0
JNB TF0,$
CLR TR0
CLR TF0
CPL P1.0
DJNZ R0,LOOP
CPL P1.7
SJMP ULANG
END
6.4 Tugas
Buat timer 1 detik dengan pewaktu dasar 10ms, dengan cara menghitung ulang