PEMROGRAMAN MIKROPROSESOR
DIKLAT MIKROPROSESOR Z80
PUSAT PENGEMBANGAN PEMBERDAYAAN PENDIDIK DAN TENAGA PENDIDIK
BIDANG MESIN DAN TEKNIK INDUSTRI
2016
1
DAFTAR ISI
DAFTAR ISI ..................................................................................................................................................... 1
LEMBAR KERJA PEMROGRAMAN MIKROPROSESOR Z80 ............................................................................. 4
Menggunakan Software Z80 SIMULATOR IDE .............................................................................................. 4
1. Mengisi Memori ................................................................................................................................ 4
Deskripsi: ............................................................................................................................................... 4
Program : ............................................................................................................................................... 4
Langkah‐langkah Percobaan: ................................................................................................................ 4
2. Mengisi Memori dari Port Input ....................................................................................................... 6
Deskripsi : .............................................................................................................................................. 6
Program : ............................................................................................................................................... 6
Langkah‐langkah Percobaan: ................................................................................................................ 6
3. Sistem Interupsi Mode 1 ................................................................................................................... 8
DESKRIPSI: ............................................................................................................................................. 8
PROGRAM: ............................................................................................................................................ 8
Langkah‐langkah Percobaan: ................................................................................................................ 8
4.Program Penjumlahan ......................................................................................................................... 10
Deskripsi Program ............................................................................................................................... 10
Program : ............................................................................................................................................. 10
Lembar Pengamatan : ......................................................................................................................... 10
Hasil Dari Operasi Program tersebut : ................................................................................................ 10
5.Program Perkalian menghitung luas persegi panjang ......................................................................... 10
Deskripsi .............................................................................................................................................. 10
Hasil Dari Operasi Program tersebut dapat diamati pada memori editor atau watch variabel : ....... 12
6.Program Pembagian ............................................................................................................................. 12
Deskripsi Program ............................................................................................................................... 12
Hasil Program : .................................................................................................................................... 15
7.Program Percabangan dan Looping ..................................................................................................... 15
Deskripsi : ............................................................................................................................................ 15
2
Hasil Pengamatan ............................................................................................................................... 16
8.Program Pembangkit Bilangan Acak .................................................................................................... 16
Deskripsi : ............................................................................................................................................ 16
PROGRAM ........................................................................................................................................... 16
Hasil Program ...................................................................................................................................... 17
9.Program Delay 1 detik menggunakan Loop ......................................................................................... 17
Deskripsi .............................................................................................................................................. 17
Program ............................................................................................................................................... 17
Hasil Pengamatan ............................................................................................................................... 17
10.Program Flasing Led Pada Port 1 ....................................................................................................... 17
Deskripsi: ............................................................................................................................................. 17
PROGRAM ........................................................................................................................................... 18
HASIL ................................................................................................................................................... 18
11.Program Running LED dengan Instruksi RLC ...................................................................................... 19
Deskripsi : ............................................................................................................................................ 19
Program ............................................................................................................................................... 19
HASIL ................................................................................................................................................... 19
12.Program Pengubah BCD ke Biner ....................................................................................................... 20
Deskripsi : ............................................................................................................................................ 20
Program ............................................................................................................................................... 20
Hasil ..................................................................................................................................................... 21
13.Program Pengubah Biner ke BCD ....................................................................................................... 21
Deskripsi .............................................................................................................................................. 21
Program ............................................................................................................................................... 21
Hasil ..................................................................................................................................................... 22
LATIHAN .................................................................................................................................................. 22
3
LEMBAR KERJA PEMROGRAMAN MIKROPROSESOR Z80
Menggunakan Software Z80 SIMULATOR IDE
1. Mengisi Memori
Deskripsi:
Program mengisi memori bertujuan untuk mendemonstrasikan Instruksi yang berfungsi untuk mengisi
memori pada RAM. Pada program dibawah ini akan mengisi memori mulai dari alamat 0F01 dengan nilai
dari accumulator.
Program :
LD A,09H ; mengisi nilai awal pada register A dengan nilai 9
LD BC,0F01H ; mengisi nilai awal pada register pasangan BC
L1: LD (BC),A ; mengisi nilai A ke alamat lokasi memori yang ditunjuk oleh register BC.
INC BC ;naikkan nilai BC, BC =BC+1
DEC A ;turunkan A
JP NZ,L1 ;ulangi sampai nilai A menjadi 0
LD (BC),A ; isikan nilai 00H ke lokasi memori ) 0F01H
HALT ;hentikan CPU
.END
Langkah‐langkah Percobaan:
1. Buatlah program diatas pada jendela Assembler.
2. Setelah selesai “ klik tombol Assemble And Load”
3. Lakukan sampai error =0
4. Jalankan simulator dengan Rate = Step by Step
5. Tekan tombol step.
6. Amati Register yang berubah dari masing‐masing instruksi dan isikan seperti pada tabel
dibawah ini.
No Instruksi Nilai Register yang berubah
LD A,09H ; Contoh Akumulator nilainya menjadi 9
LD BC,0F01H ; ………………………………………………………………………………………………
L1: LD (BC),A ; ………………………………………………………………………………………………
INC BC ; ………………………………………………………………………………………………
DEC A ; ………………………………………………………………………………………………
JP NZ,L1 ; ………………………………………………………………………………………………
LD (BC),A ; ………………………………………………………………………………………………
4
HALT ; ………………………………………………………………………………………………
.END ………………………………………………………………………………………………
Berapakah nilai yang ada pada alamat memori berikut ini:
Alamat Memori Nilai
0f01h ……………………………….
0f02h ……………………………….
0f03h ……………………………….
0f04h ……………………………….
0f05h ……………………………….
0f06h ……………………………….
0f07h ……………………………….
0f08h ……………………………….
0f09h ……………………………….
Buatlah Kesimpulan Saudara dari hasil percobaan tersebut
5
2. Mengisi Memori dari Port Input
Deskripsi :
Program mengisi memori dari port input bertujuan untuk mendemonstrasikan Instruksi yang berfungsi
untuk mengisi memori pada RAM tertentu dari Port 01. Pada program dibawah ini akan mengisi memori
mulai dari alamat 0FF00H s.d 0FF00H dengan nilai dari Port input.
Program :
L2: IN A,(01H) ; mengambil nilai dari port 01 yang digunakan untuk mengisi memori
LD D,0FFH ;Nilai awal yang digunakan untuk counter pada register D
LD BC,0FF00H ; nilai awal untuk pointer register pasangan BC
L1: LD (BC),A ; Mengisikan nilai memori A ke lokasi memori yang dialamati oleh register BC
INC BC ;menaikan pointer BC
DEC D ;mengurangi kounter D
JP NZ,L1 ; Ulangi sampai nilai D=0
LD (BC),A ;Isi lokasi memori terakhir
JP L2 ; ulangi
.END
Langkah‐langkah Percobaan:
1. Buatlah program diatas pada jendela Assembler.
2. Setelah selesai “ klik tombol Assemble And Load”
3. Lakukan sampai error =0
4. Jalankan simulator dengan Rate = Step by Step
5. Tekan tombol step.
6. Amati Register yang berubah dari masing‐masing instruksi dan isikan seperti pada tabel
dibawah ini.
No Instruksi Nilai Register yang berubah
L2: IN A,(01H) ; Contoh Akumulator nilainya menjadi 9
LD D,0FFH ; ………………………………………………………………………………………………
LD BC,0FF00H ; ………………………………………………………………………………………………
L1: LD (BC),A ; ………………………………………………………………………………………………
INC BC ………………………………………………………………………………………………
DEC D ………………………………………………………………………………………………
JP NZ,L1 ; ………………………………………………………………………………………………
LD (BC),A ; ………………………………………………………………………………………………
JP L2 ; ………………………………………………………………………………………………
.END
6
Berapakah nilai yang ada pada alamat memori berikut ini:
Alamat Memori Nilai
0ff00h s.d 0ffffh ……………………………….
Buatlah Kesimpulan Saudara dari hasil percobaan tersebut
7
3. Sistem Interupsi Mode 1
DESKRIPSI:
Program ini mendemonstrasikan cara memprogram menggunakkan system interupsi yang berasal dari
port input. Sub routin untuk interupsi diletakan pada alamat 0038H. Program Utama Mengirimkan 5
byte data ke Port Out 02H dan setelah selesai berhenti dan menunggu interrupt.
PROGRAM:
JP 0100H ;Lompat ke program utama
.ORG 0038H ; routin interrupt
IN A,(01H) ;ambil data dari port 01H
OUT (02H),A ;balikan kembali nilai teb ke port 02H
EI ;aktifkan interrupts
RETI ;kembali dari interupt
Langkah‐langkah Percobaan:
1. Buatlah program diatas pada jendela Assembler.
2. Setelah selesai “ klik tombol Assemble And Load”
3. Lakukan sampai error =0
4. Jalankan simulator dengan Rate = Step by Step
8
5. Tekan tombol step.
6. Amati Register yang berubah dari masing‐masing instruksi dan isikan seperti pada tabel
dibawah ini.
N Instruksi Nilai Register yang berubah
o
JP 0100H Contoh Akumulator nilainya
.ORG 0038H menjadi 9
IN A,(01H) ………………………………………………
OUT (02H),A ………………………………………………
EI ………………………………………………
RETI ………………………………………………
.ORG 0100H ………………………………………………
JR L1 ………………………………………………
L2: .DB 0AH ;data byte 1 ………………………………………………
.DB 0BH ;data byte 2 ………………………………………………
.DB 0CH ;data byte 3 ………………………………………………
.DB 0DH ;data byte 4 ………………………………………………
.DB 0EH ;data byte 5 ………………………………………………
L1: LD D,05H ………………………………………………
LD BC,L2 ………………………………………………
L3: LD A,(BC) ………………………………………………
OUT (02H),A ………………………………………………
INC BC ………………………………………………
DEC D ; ………………………………………………
JP NZ,L3 ………………………………………………
IM 1 ………………………………………………
EI ………………………………………………
L4: JP L4 ………………………………………………
………………………………………………
.END
………………………………………………
Berapakah nilai yang ada pada alamat memori berikut ini:
PORT Nilai
02H ……………………………….
Buatlah Kesimpulan Saudara dari hasil percobaan tersebut
9
4.Program Penjumlahan
Deskripsi Program
Program ini menjumlahkan angka 2 dan angka 3 dan hasilnya disimpan pada alamat 0fefh
Program :
; a = 2 + 3
a: .EQU 0FEFFH
LD IX,0FF00H
LD SP,0FEFFH
LD A,02H
LD L,03H
ADD A,L
LD (IX‐01H),A
HALT
Lembar Pengamatan :
Langkah Instruksi Isi Register yang berubah
LD IX,0FF00H
LD SP,0FEFFH
LD A,02H
LD L,03H
ADD A,L
LD (IX‐01H),A
HALT
Hasil Dari Operasi Program tersebut :
Register/memori Nilai
0FEFFh
5.Program Perkalian menghitung luas persegi panjang
Deskripsi
Program ini mendemonstrasikan perkalian 16 bit yang diaplikasikan dalam menghitung luas segitiga.
Dengan panjang, lebar dan luas disimpan pada alamat memori dibawah ini yang masing masing
membutuhkan dua byte Data.
panjang: .EQU 0FEFEH
lebar: .EQU 0FEFCH
10
luas: .EQU 0FEFAH
LD IX,0FF00H
LD SP,0FEFAH
; a = 300
LD HL,012CH
LD (IX‐02H),L
LD (IX‐01H),H
; b = 3
LD HL,0003H
LD (IX‐04H),L
LD (IX‐03H),H
; c = a * b
LD L,(IX‐02H)
LD H,(IX‐01H)
LD E,(IX‐04H)
LD D,(IX‐03H)
CALL M001
LD (IX‐06H),L
LD (IX‐05H),H
; Akhir Program
HALT
; Routine program
M001: PUSH BC
LD B,H
LD C,L
LD HL,0000H
LD A,10H
M003: DEC D
INC D
JR NZ,M002
CP 09H
JR C,M002
SUB 08H
PUSH AF
LD D,E
LD E,H
LD H,L
LD L,00H
POP AF
JR M003
M002: ADD HL,HL
RL E
11
RL D
JR NC,M004
ADD HL,BC
M004: DEC A
JR NZ,M003
POP BC
RET
; End of listing
.END
Jalankan simulasi dengan mode Rate normal atau Fast!
Hasil Dari Operasi Program tersebut dapat diamati pada memori editor atau watch variabel
:
Register/memori Nilai Hex DESIMAL
0FEFFh
0FEFEh
0FEFD
0FEFCh
0FEFBh
0FEFAh
6.Program Pembagian
Deskripsi Program
Program ini mendemonstrasikan pembagian 16 bit bilangan decimal dengan Variabel c= a/b disimpan
pada alamat memori dibawah ini yang masing masing membutuhkan dua byte Data.
a: .EQU 0FEFEH
b: .EQU 0FEFCH
c: .EQU 0FEFAH
12
LD IX,0FF00H
LD SP,0FEFAH
; a = 210
LD HL,00D2H
LD (IX‐02H),L
LD (IX‐01H),H
; b = 3
LD HL,0003H
LD (IX‐04H),L
LD (IX‐03H),H
; c = a / b
LD L,(IX‐02H)
LD H,(IX‐01H)
LD E,(IX‐04H)
LD D,(IX‐03H)
CALL D001
LD (IX‐06H),L
LD (IX‐05H),H
; akhir program
HALT
; Routin Pembagian
D001: LD A,D
XOR H
LD A,H
PUSH AF
BIT 7,H
JR Z,D002
XOR A
SUB L
LD L,A
LD A,00H
SBC A,H
LD H,A
D002: BIT 7,D
JR Z,D003
XOR A
SUB E
LD E,A
LD A,00H
SBC A,D
LD D,A
D003: CALL D004
13
POP AF
JP P,D005
PUSH AF
XOR A
SUB L
LD L,A
LD A,00H
SBC A,H
LD H,A
POP AF
D005: OR A
RET P
XOR A
SUB E
LD E,A
LD A,00H
SBC A,D
LD D,A
RET
D004: PUSH BC
LD B,D
LD C,E
EX DE,HL
LD HL,0000H
LD A,10H
D009: ADD HL,HL
SLA E
RL D
JR NC,D006
INC L
OR A
D006: SBC HL,BC
JR NC,D007
ADD HL,BC
JR D008
D007: INC E
D008: DEC A
JR NZ,D009
EX DE,HL
POP BC
RET
; End of listing
14
.END
Hasil Program :
Hasil Dari Operasi Program tersebut dapat diamati pada memori editor atau watch variabel :
7.Program Percabangan dan Looping
Deskripsi :
Disajikan program percabangan dengan menggunakan instruksi pembanding JR. Ada yang menggunakan
penghitung mundur, penghitung maju dan ada juga yang menggunakan DJNZ
1. Program 1 looping menggunakan Instruksi DJNZ
LD A,55H
LD HL,1900H
LD B,20H
LOOP LD (HL),A
INC HL
DJNZ LOOP
HALT
2. Program Percabangan dengan Instruksi JR dan loop dengan hitung mundur
LD BC,0180H
15
LD HL,1880H
LOOP LD (HL),0AAH
INC HL
DEC BC
JR NZ,LOOP
HALT
3. Percabangan dengan Instruksi JR dan loop dengan hitung maju
LD DE,1A00H
LD HL,1B00H
LOOP LD A,(HL)
LD (DE),A
CP 0FFH
JR A,EXIT
INC DE
JR LOOP
EXIT RST
HALT
Hasil Pengamatan
Dari Hasil Pengamatan Simulasi, Jelaskan perinsip dari masing‐masing program tersebut, berapakali
loopingnya, dan hasilnya seperti apa?
8.Program Pembangkit Bilangan Acak
Deskripsi :
Program sederhana untuk menghasilkan bilangan acak/ random. Hasil dari Program ini akan ditampilkan
pada alamat 0ff00h. Instruksi utama untuk pembangkit bilangan acak ini adalah menggunakan instruksi
XOR.
PROGRAM
ld hl,(0ff00h)
ld a,r
ld d,a
ld e,(hl)
add hl,de
16
add a,l
xor h
ld (0ff00h),hl
halt
Hasil Program
Jalankan Program sebanyak minimal 10x dan tuliskan hasilnya………………………………………………………..
…………………………………………………………………………………………………………………………………………………………
9.Program Delay 1 detik menggunakan Loop
Deskripsi
Program dibawah ini akan menghasilkan delay selama ~1 detik jika menggunakan frekuensi Clock 4MHz.
Untuk menghasilkan delay yang lebih panjang dapat mengganti isi register BC yang lebih besar atau
dengan menmbuat loop yang memanggil program delay ini. 1 clock =0,25uS. Gunakan breakpoint
manager untuk mensimulasikan program ini. Pasang break point pada baris ketiga (NOP)
Program
LD BC,115
CALL DELAY
NOP
END
DELAY: NOP
DEC BC ;40ck(6inst)=10uS
LD A,B
OR C
RET Z
JR DELAY
HALT
END
Hasil Pengamatan
Berapa Jumlah Instruksi :
Berapa Jumlah Clock :
Berapa delay yang dihasilkan
10.Program Flasing Led Pada Port 1
Deskripsi:
Program ini mendemonstrasikan cara membuat lampu pada Port1 bit 0 menyala dan padam selang 1
detik
17
PROGRAM
START:
LD BC,0E007h
LD A,01h
OUT (01),A
LD BC,15 ;~1 detik second delay
CALL DELAY
LD BC,0E007h
LD A,00h
OUT (01),A
LD BC,15 ;~1 detik
CALL DELAY
JP START
HASIL
Amati dan Laporkan hasil nya menggunakan peripheral Device!
18
11.Program Running LED dengan Instruksi RLC
Deskripsi :
Program ini merupakan pengembangan dari program Flasihing Led. Dengan tambahan Instruksi RLC
maka LED tersebut dapat berotasi.
Program
LD D,01h
START:
LD A,D
OUT (01),A
Ld D,A
RLC D
LD BC,1 ;~1 detik second delay
CALL DELAY
JP START
DELAY:
NOP
DEC BC
LD A,B
OR C
RET Z
JR DELAY
END
DELAY:
NOP
DEC BC
LD A,B
OR C
RET Z
JR DELAY
END
HASIL
Amati dan Laporkan hasil nya menggunakan peripheral Device!
19
12.Program Pengubah BCD ke Biner
Deskripsi :
Program ini berguna untuk mengkonversi bilangan BCD menjadi Biner. Aplikasi yang dapat dijumpai
pada saat menekan tombol bilangan pada keypad yang hanya memasukan bilangan BCD sedangkan yang
diolah secara aritmatika atau logika dalam prosesor adalah bilangan biner atau integer yang angkanya
menjadi satu kesatuan.
Program
;KONVERSI 10 DIGIT BCD KE BINER
;INPUT DATA BCD DI RAM 1A04 S.D 1A08H
;OUTPUT DATA BINER DI RAM 1A00H‐1A03
ORG 1800h
LD C,32 ;LOOP KONV =32
DBLP:
LD B,5 ;PENGHITUNG BYTE BCD
XOR A ;NOLKAN CARRY FLAG
LD HL,1A08H;HL MENUNJUK BYTE KIRI
COR0 LD A,(HL) ;TRANSFER DATA KE REG A
RRA ;ROTASI KE KANAN
PUSH AF ;SIMPAN CARRY FLAG
BIT 7,A ;TES BIT 7
JR Z,COR1 ;SALAH JIKA BIT 7=0
SUB 30H ;KURANGKAN DARI 30H JIKA BIT 7 =1
COR1 BIT 3,A ; TEST BIT 3
JR Z,COR2
SUB 3
COR2 LD (HL),A ;SIMPAN DIMEMORY
DEC HL ; BYTE BERIKUTNYA
POP AF ; BETULKAN CARRY FLAG
DJNZ COR0 ; LOOP
;ROTASIKAN BINER KE KANAN
LD B,4
SHR4 RR (HL)
DEC HL
DJNZ SHR4
DEC C
JR NZ,DBLP
RET
20
Hasil
Pada memori editor hasilnya dapat dilihat
Data INPUT BCD :…………………………………
DATA OUTPUT BINARY :……………………….
13.Program Pengubah Biner ke BCD
Deskripsi
Program ini adalah mengkonversi bilangan biner menjadi bilangan BCD. Aplikasinya adalah untuk
menampilkan data biner yang diambil dari input seperti ADC pada Display baik LCD maupun 7 segmen.
Dari satu data biner dapat ditampilkan menjadi beberapa karakter.
Program
START: LD SP,STACK ;initialize stack pointer
LD HL,BINBYT ;point HL index to where binary number is stored
LD A,(HL) ;transfer byte
LD HL,OUTBUF ;point HL index to output‐buffer memory
CALL BINBCD
HALT
BINBCD:
LD B,100 ;load 100 into register B (power of ten holding register)
CALL BCD ;call conversion for BCD3
LD B,10 ;load 10 into register B
CALL BCD ;call conversion for BCD2
LD (HL),A ;store BCD1
RET
BCD:
LD (HL),0FFH ;load buffer with ‐1
STORE: INC (HL) ;clear buffer first and increment for each subtraction
SUB B ;subtract power of ten from binary number
JR NC,STORE ;if number is larger than power of ten, go back and add 1 to buffer
ADD A,B ;if no, add power of ten to get back remainder
INC HL ;go to next buffer location
RET
.ORG 0100H
BINBYT .DB 234 ;example binary number to be converted into a BCD number
OUTBUF ;output‐buffer memory location
21
STACK .EQU 0FFFFH ;definition of stack pointer initialization address
.END
Hasil
Pada memori editor hasilnya dapat dilihat
Data INPUT BINER :…………………………………
DATA OUTPUT BCD :……………………………….
LATIHAN
1. Buatlah Program Pengurangan pada bilangan 16 bit!
2. Buatlah Program Port I/O menggunakan Port 1 untuk menjalankan motor stepper
3. Buatlah Program Mendeteksi sensor pada Port 0 bit 1. Jika berlogika 1 Led yang ada pada port1
berjalan ke kiri bila dimasukan logika 0 lampu semua menyala?
4. Bagaimana Format Bilangan Pecahan pada mikroprosesor
5. Buatlah Delay kira‐kira 5 detik menggunakan Looping.
6. Buatlah Program untuk mengambil data ADC 8 bit dari Port 0 dan ditampilkan pada Port 1 untuk
angka ratusan, port2 untuk angka puluhan dan port1 untuk angka satuan!
22