You are on page 1of 64

1

BAB I
PENDAHULUAN



1.1 TUJUAN
- Praktikan mampu memahami penggunaan input dan output menggunakan
Dinamic C 9.62
- Praktikan mampu membuat program LED-flash (berkedip) dengan
mengakses komponen I/O pada aplikasi Dinamic C 9.62 dengan
pengaturan Flash-Frekuensi sebesar 20Hz

1.2 DASAR TEORI
- Using Dynamic C
Dynamic C combines all the development tools necessary for compiling
programmes and operating, in one User visual interface. The tools include the
following components
Source text editor
C-Compiler including Assembler
Functions library
Debugger
File management
Rabbit-BIOS

The complex process when downloading an application program to the Target
is also supervised by the functions integrated in Dynamic C. After a successful
installation of Dynamic C, extensive documents and Help texts for the Rabbit
2000 and Dynamic C are available. Bear in mind that the software is continuously
being further developed and up-dated. This means that alterations are possible in
the descriptions, operating elements may be added or removed.


2

- Access to I/O Components
When accessing I/O components (peripherals), a differentiation is made
between external and internal access.
The components in the EXERCISE-UNIT are addressed via external I/O
commands. Here, the command line is identified by the term ioe before a transport
command, e.g.
ioe ld (0xE000),A ; Output command
Test the access to the output components for the LED-row and the 7-segment
display by supplementing other code lines in BASIC01.C and work through the
program fragment in single-step.
Access to the LED-row:

ld a, 11111110b ; Load 8-bit accumulator
ioe ld (0xE000),A ; Output command for LED-row: LED "0 lights

Access to the 7-segment displays:

ld a, 11000000b ; Load 8-bit accumulator (segments 7 and 8 "Off")
ioe ld (0xC000),A ; Output command for 7-segment display "Data"
ld a, 11101111b ; Load 8-bit accumulator (digit 4 "On")
ioe ld (0x8000),A ; Output command for 7-segment display Digit
; Digit 4 shows a "0"

Now test the access to the input components, Switch-row and Key-matrix, in
the same way.
Access to the Switch-row:
sr01: ioe ld A,(0xE000 ; Input command for the Switch-row
jp sr01 ; Branch instruction to sr01

Set a Breakpoint at "sr01 and work through the loop in single-step. For each
run-through, change the settings of the switches and observe the result in the
Registers window under accumulator "A.
Access to the Key-matrix:

tf01: ioe ld A,(0x8000) ; Input command for the Key-matrix
jp tf01

3

Set a Breakpoint at "tf01 and work through the loop in single-step while
pressing a key and observe the result in the Registers window under
accumulator "A. The effects are seen only at the right hand bits of the
accumulator.

Dasar Teori Tambahan
Selain CPU dan unit memory, unit input output merupakan komponen
pokok dalam sebuah system mikroprosesor. System mikroprosesor memerlukan
unit I/O untuk menyajikan sebuah pengolahan CPU. Unit I/O bekerja sebagai
penghubung antara CPU dengan alat-alat input seperti keyboard, mouse dan juga
sebagai penghubung dengan alat-alat output seperti monitor, printer dan
sebagainya.
(staff.uny.ac.id/sites/default/files/unit%20IO%sistem%20Mikroprosesor.pdf)

Prinsip kerja LED, LED akan menyala apabila mendapat bias Forward
atau ada arus listrik yang mengalir dari Anoda ke Katoda. Dalam rangkaian
Elektronika pemasangan kaki LED tidak boleh terbalik, karena apabila terbalik
atau mendapat bias Reverse maka LED tidak akan menyala. LED memiliki
karakteristik yang berbeda menurut warna yang dihasilkan. Arus listrik yang
diperbolehkan untuk LED berkisar antara 10 mA - 20 mA dan pada tegangan 1,6
Volt - 3,5 Volt sesuai dengan warna yang dihasilkan. Apabila Arus atau Tegangan
yang mengalir lebih dari ketentuan tersebut, maka LED akan terbakar atau putus.
(http://edukasielektro.blogspot.com/2013/03/light-emitting-diode-led.html)

Light Emmiting Diode, yang disebut dan dikenla dengan nama LED
adalah komponen elektronik semikonduktor yang memancarkan cahaya atau infra
merah ketika diberi tegangan. Akibat dari Electroluminescence, artinya warna
cahaya yang dihasilkan tergantung kepada bahan yang digunakannya.
(teknik-elektro.net/light-emmiting-diode.html)

4

Pada dasarnya LED merupakan komponen elektronika yang terbuat dari
bahan semikonduktor jenis diode yang mampu memancarkan cahaya. LED
merupakan produk temuan lain diode, strukturnya juga sama dengan dioda.
(teknisi-elektro.blogspot.com/2013/01/jenis-led-dan-cara-kerjanya)

LED adalah salah satu jenis dioda, maka LED memiliki dua buah kutub
yaitu anoda dan katoda. Dalam hal ini LED akan menyala bila ada arus listrik
yang mengalir dari anoda menuju katoda. Pemasangan kutub LED tidak boleh
terbalik, LED memiliki karakteristik warna yang berbeda-beda menurut warna
yang dihasilkan.
(www.sentrabelanja.com/article/cara-kerja-lampu-led)





















5

BAB II
PROSEDUR PERCOBAAN



2.1 Alat dan Bahan
Tabel 2.1 Alat dan Bahan
NO Alat dan Bahan Jumlah
1 PC 1 Unit
2 Platform with integrated power module +5V (SO4000-1E) 1 Unit
3 Mains adapter, AC 90...230V 45...65Hz, DC 9V 630mA
(SO4000-1F)
1 Unit
4 Microprocessor training system (SO4000-3SA) 1 Unit
5 Serial interface cable, 9/9-pole (LM9040) 1 Unit
6 Serial interface cable RS323 1 Unit
7 Logic probe LM8101 1 Unit
8 Software Dinamic C 9.62 1 Unit








Gambar 2.1 Peralatan yang digunakan






6

2.2 Prosedur Percobaan
1. Adapter-Unit, Rabbit-Core dan Exercise-Unit dipasangkan pada Work-
Platform Arbeits platform.








Gambar 2.2 rangkaian percobaan

2. Work-Platform Arbeits platform dihubungkan ke PC menggunakan kedua
kabel serial.
3. Work-Platform Arbeitsplattform dihubungkan dengan sumber tegangan
(external power supply)
4. Aplikasi Dinamic C 9.62 di start
5. Data teknikal pada mikroporcessor-core di konfigurasi seperti berikut:

6. Interface COM dipilih melalui menu Options dan dikonfigurasi
Communication Options pada Project Options :

7. Parameter compiler ditentukan melalui menu Options Project Options
Compiler Options
7


Gambar 2.3 Konfigurasi parameter compiler
8. Setelah kabel serial disetting, kemudian dipilih sesuai COMx yang telah
terinstall.
9. Program frame FRAME1.C dibuka kemudian disimpan latihan sesuai
dengan kelompok saat mengikuti praktikum. (contoh: MODUL1_KEL1.C)
10. Program berikut diketikkan pada frame program yang sudah disimpan
sebelumnya.
#asm debug
; -------------- The Assembler main program -----------------
start:
ld A,11111111b
ioe ld 0xE000),A
call wait_long
ld A,00001111b
ioe ld (0xE000),A
call wait_long
call wait_long
call wait_long
call wait_long
jr start
; ------------------------------------------------------------
#endasm
8

11. Setelah selesai diketiketikkan kode program di atas, program dicompile pada
menu compile
12. Program yang sudah di compile dijalankan dengan dipilih menu run
13. Output melalui work-platform dilihat dan di analisa pada MCLS-modular.
14. Rangkaian akhir seperti berikut



























9

BAB III
ANALISA DATA DAN PEMBAHASAN



3.1 Data Hasil Percobaan
Coding :
#asm debug
; -------------- The Assembler main program -----------------
start:
ld A,11111111b
ioe ld (0xE000),A
call wait_long
ld A,01010101b
ioe ld (0xE000),A
call wait_long
call wait_long
call wait_long
call wait_long
jr start
; ------------------------------------------------------------
#endasm

Output :
Tabel 3.1 output
NO LED STATUS 1 STATUS 2
1 0 1 0
2 1 1 1
3 2 1 0
4 3 1 1
5 4 1 0
6 5 1 1
7 6 1 0
8 7 1 1

10

3.2 Analisa Data
#asm debug
; -------------- The Assembler main program -----------------
start:
ld A,11111111b // tanda LED bernilai 0 mati (led 0-7 mati)
ioe ld 0xE000),A // Output baris LED
call wait_long // Delay program 100ms
ld A,01010101b // output LED 0,2,4,6 mati, 1,3,5,7 menyala
ioe ld (0xE000),A // Output baris LED
call wait_long // Delay program 100ms
call wait_long // Delay program 100ms
call wait_long // Delay program 100ms
call wait_long // Delay program 100ms
jr start // memulai program dari awal (looping)
; ------------------------------------------------------------
#endasm


3.3 Pembahasan
Source Code :
#asm debug
; -------------- The Assembler main program -----------------
start:
ld A,11111111b
ioe ld 0xE000),A
call wait_long
ld A,01010101b
ioe ld (0xE000),A
call wait_long
call wait_long
call wait_long
call wait_long
jr start
; ------------------------------------------------------------
#endasm


11

Praktikum ini bertujuan untuk mengetahui flashing LED
berdasarkan perintah yang di inputkan ke mikroprosesor. Mula-mula di
inisialisasi variable A dengan nilai 1 di tiap posisi bit nya dengan perintah
ld A, 11111111b. Kemudian dilakukan inisialisasi baris output LED,
output LED di inisialisasi dengan bilangan hexadesimal karena
mikroprosesor hanya mengenal bilangan hexadecimal, kemudian
dilakukan delay program selama 100ms dengan perintah call wait_long,
delay program ini dilakukan agar program dapat dengan baik masuk ke
kondisi atau perintah program berikutnya.
Kemudian variable A di inisialisasi lagi dengan bilangan
01010101. Disini dapat dilihat ada 2 kondisi variable A, penjelasannya
adalah sebagai berikut :
- Kondisi pertama, saat A = 11111111b, ini perintah agar LED 0-7 pada
posisi bit bernilai 1 akan mati, dan 0 akan menyala
- Kondisi kedua, saat A = 01010101b, LED 0,2,4,6 padam dan 1,3,5,7
menyala.
- Time Flashing (waktu kedip) LED akan tergantung dengan berapa
banyak perintah call wait_long yang di inputkan oleh user.

Inti dari percobaan ini adalah, awalnya pada perintah ld
A,1111111b kita telah menetapkan bahwa LED pada bit bernilai 1 akan
padam dan LED pada bit bernilai sebaliknya 0 (nol)) akan menyala, maka
sebab itu pada output hasil percobaan didapati LED 0,2,4,6 padam karena
bitnya bernilai 1, dan LED 1,3,5,7 menyala karena bitnya bernilai 0.








12

BAB IV
PENUTUP



4.1 Kesimpulan
1. Input perintah ke mikroprosesor menggunakan perintah ioe ld
2. LED yang digunakan pada percobaan memiliki panjang bit sebesar 8 bit
(LED 0-7)
3. Perintah call wait_long digunakan sebagai perintah untuk delay program
selama 100ms.
4. Pada percobaan ini telah di atur ketentuannya, yaitu ketika bit LED
bernilai 1 maka LED padam dan bila bit LED bernilai 0 maka LED
menyala.
5. Time Flashing (kedipan LED) akan semakin cepat bila call wait_long
dikurangi pada source code.














13


BAB I
PENDAHULUAN


1.1 TUJUAN
- Praktikan mampu memahami mode pengalamatan, mengerti bagaimana
penggunaan instruksi conditional jump, dan instruksi logika dan arimatika
- Praktikan mampu membuat dan memahami konsep bilangan hexadecimal
yang ditampilkan pada display 7-segment

1.2 DASAR TEORI
Mode Pengalamatan
Mode pengalamatan merujuk pada bagaimana pemrogram mengalamati
suatu lokasi memori. Setiap mode pengalamatan memberikan fleksibilitas khusus
yang sangat penting. Mode pengalamatan ini meliputi immediate addressing,
direct addressing, dan indirect addressing
1. Immediate Addressing Mode
Cara yang paling sederhana untuk membangkitkan data pada destinasi
dengan cara membuat data menjadi bagian dari op code.
Pada mnemonic digunakan tanda #
Instruksi Data
Op Code Next Byte

Mnemonic Operasi
MOV A, #01h copy data 01h ke Register A
MOV R3, #1Ch copy data 1Ch ke Register R3
MOV DPTR,#ABCDh copy data ABCDh ke Register R3

2. Register Addressing Mode
Nama register (A, DPTR, R0 R7) digunakan sebagai bagian dari op code
mnemonik baik sebagai source atau sebagai destinasi.
14

Mnemonic Operasi
MOV A, R0 copy data pada R0 ke register A
MOV R5, A copy data pada A ke R53. Indirect Addressing
3. Direct Addressing Mode
Penunjukan pengalamatan secara langsung
Mnemonic Operasi
MOV A, 80h copy data dari Port 0 ke register A
MOV A, P0 copy data dari Port 0 ke register A
MOV 80h, A copy data dari register A ke Port 0
MOV P0 , A copy data dari register A ke Port 0
4. Indirect Addresing Mode
Menggunakan register sebagai pencatat atau pemegang
Alamat aktual yang akan digunakan untuk memindahkan data
Register itu sendiri bukan alamat
Menggunakan R0 dan R1 sebagai Pointer data
Menggunakan tanda @
Mnemonic Operasi
MOV A @R0 copy isi data dari alamat yang dicatat
oleh R0 ke register A
MOV @R1, A copy data yang ada di register A ke alamat
yang dicatat oleh R1
MOV @R0,80h copy data dari Port 0 ke alamat yang
tercatat oleh R0

INSTRUKSI LOGIKA DAN ARITMATIKA
Berikut daftar operasi logika dan aritmatika dan keterangannya :

1. Operasi arimetika
Instruksi Keterangan
ADD Add
ADDC Add with carry flag
15

SUBB Subtract
INC Increment
DEC Decrement
MUL Multiply
DIV Divide
CLR Clear
CPL Complement
RL Rotate accumulator left
RLC Rotate accumulator left through carry
RR Rotate accumulator right
RRC Rotate accumulator right through carry

2. Operasi logika
Instruksi Keterangan
ANL AND
ORL OR
XRL Exclusive OR

FLAGS
Name Flag Function
Sign-flag S Copy of the MMSB in target operands for signed
numbers
0 = positive, 1 = negative
Zero-flag Z Z = 1 when target operand is zero, otherwise Z = 0
Overflow-
flag
V V = 1 for an overflow in additions or borrowing in
subtractions, for signed numbers in twos complement,
otherwise V = 0
Carry-flag C V = 1 for an overflow in additions or borrowing in
subtractions, for unsigned numbers, otherwise C = 0
16


DASAR TEORI TAMBAHAN
Subroutine atau procedure adalah suatu blok program terpisah
yang digunakan untuk mengerjakan suatu pekerjaan tertentu. Kegunaan yang
umum dari subroutine adalah menghemat kode program bila terjadi proses yang
sama diulang berkali-kali. Salah satu bentuk subroutine di dalam visual basic
dikenal dengan event dari komponen.
http://happyanindya8.wordpress.com/oop-1/sub-routine-function/
Mode pengalamatan adalah bagaimana cara menunjuk dan mengalamati
suatu lokasi memori pada sebuah alamat di mana operand akan diambil. Mode
pengalamatan diterapkan pada set instruksi, dimana pada umumnya instruksi
terdiri dari opcode (kode operasi) dan alamat. Setiap mode pengalamatan
memberikan fleksibilitas khusus yang sangat penting. Mode pengalamatan ini
meliputi direct addressing, indirect addressing, dan immediate addressing.
(msgt.files.wordpress.com/2010/01/pengalamatan1.doc)
Pada stack berlaku aturan LIFO (Last In First Out), yaitu elemen yang
terakhir masuk akan pertama kali diambil atau dilayani. Salah satu analogi yang
dapat dikemukakan di sini adalah tumpukan piring atau barang lain. Pada saat kita
hendak menumpuk piring-piring tersebut tentulah yang kita lakukan adalah
meletakkan piring pertama pada tempatnya, selsnjutnya meletakkan piring kedua
di atas piring pertama dan demikian seterusnya. Pada saat kita hendak mengambil
satu piring dari tumpukan tersebut, tentu yang diambil adalah piring teratas (yang
terakhir kali ditaruh), bukan yang terbawah (yang pertama kali diletakkan).
(http://khabib.staff.ugm.ac.id/index.php?option=com_content&view=article&id=8
4:tumpukan-a-antrian-stack-a-queue&catid=28:introduction-to-algorithm-and-
programming)
Stack digunakan untuk menuliskan ungkapan menggunakan notasi tertentu
(Notasi Polish). Biasanya ungkapan yang digunakan adalah ungkapan numeris.
17

Sebagai contoh ungkapan (A + B)*(C D) apabila ditulis dengan menggunakan
notasi Polish menjadi * + A B C D.
http://kuliahinformatika.wordpress.com/2010/02/06/stack-queue-penjelasan-
deskripsi-fungsi-dasar-pemodelan-dan-penerapan-stack/
Seven Segment adalah suatu segmen-segmen yang digunakan
menampilkan angka. Seven segment ini tersusun atas 7 batang led yang disusun
membentuk angka 8 dengan menggunakan huruf a s/d g yang disebut dot matrix.
Setiap segmen ini terdiri dari 1 atau 2 Light Emitting Diode ( LED ). Seven
Segment merupakan gabungan dari 7 buah LED (Light Emitting Diode) yang
dirangkaikan membentuk suatu tampilan angka
http://it-kopl4k.blogspot.com/2012/12/pengertian-seven-
segmen.html#.UatBmtjdOKw


















18




BAB II
PROSEDUR PERCOBAAN



2.1 Alat dan Bahan
Tabel 2.1 Alat dan Bahan
No Alat dan Bahan Jumlah
1 PC 1 unit
2 Platform with integrated power module +5V (SO4000-1E) 1 unit
3 Mains adapter, AC 90...230V 45...65Hz, DC 9V 630mA
(SO4000-1F)
1 unit
4 Microprocessor training system (SO4000-3SA) 1 unit
5 interface cable, 9/9-pole (LM9040) 1 unit
6 interface cable RS323 1 unit
7 Logic probe LM8101 1 unit
8 Software Dinamic C 9.62 1 unit


Gambar 2.1 Peralatan yang digunakan



19





2.2 PROSEDUR PERCOBAAN

Gambar 2.2 Rangkaian Percobaan
1. Adapter-Unit dipasang, Rabbit-Core dan Exercise-Unit pada Work-
Platform Arbeitsplattform.
2. Dihubungkan dengan Work-Platform Arbeitsplattform ke PC
menggunakan kedua kabel serial.
3. Diubungkan Work-Platform Arbeitsplattform dengan sumber tegangan
(external power supply)
4. Start Aplikasi Dinamic C 9.62
5. Dipilih data teknikal pada mikroporcessor-core seperti berikut:

6. Dipilih interface COM melalui menu Options dan konfigurasi
Communication Options pada Project Options :

7. Parameter ditentukan compiler melalui menu Options Project Options
Compiler Options
20


Gambar 2.3 Konfigurasi Parameter Compiler
8. Setelah kabel serial disetting, dipilih sesuai COMx yang telah terinstall.
9. Program dibuka frame FRAME1.C kemudian disimpan latihan sesuai
dengan kelompok saat mengikuti praktikum. (contoh: MODUL1_KEL1.C)
10. Program di ketikkan berikut pada frame program yang sudah disimpan
sebelumnya.

#asm debug
; ------------------------ The Assembler main program -----------
----
; Main program
start:
ld HL,Code_Table ; Pointer to start of table
st1: ld A,(HL) ; Fetch character code
cp 0xFF ; End recognition ?
jr z,start ; If Yes, back to start
; .............................................................
ioe ld (0xC000),A ; Data to display
ld A,11101111b ; Digit 4
ioe ld (0x8000),A ; Digit information for display
; .............................................................
call wait_long ; Wait 100ms
21

inc hl ; Pointer +1
jr st1 ; Continue with next character
; ----------------------------------------------------------------
; ..............................................................
; Table of character codes for the 7-segment display
Code_Table:
db 11000000b ; 0
db 11111001b ; 1
db 10100100b ; 2
db 10110000b ; 3
db 10011001b ; 4
db 10010010b ; 5
db 10000010b ; 6
db 11111000b ; 7
db 10000000b ; 8
db 10010000b ; 9
db 10001000b ; A
db 10000011b ; b
db 10100111b ; c
db 10100001b ; d
db 10000110b ; E
db 10001110b ; F
db 11111111b ; End identification
; ----------------------------------------------------------------
#endasm
11. Setelah selesai diketik kode program di atas, compile program pada menu
compile
12. Program dijalankan yang sudah di compile dengan memilih menu run
13. Dilihat dan analisa output melalui work-platform pada MCLS-modular.










22

BAB III
ANALISA DATA DAN PEMBAHASAN



3.1 Data Hasil Percobaan
#asm debug
start:
ld HL,Code_Table
st1: ld A,(HL)
cp 0xFF
jr z,start

ioe ld (0xC000),A
ld A,11101111b
ioe ld (0x8000),A

call wait_long
inc hl
jr st1

Code_Table:
db 11000000b
db 11111001b
db 10100100b
db 10110000b
db 10011001b
db 10010010b
db 10000010b
db 11111000b
db 10000000b
db 10010000b
db 10001000b
db 10000011b
db 10100111b
db 10100001b
db 10000110b
db 10001110b
db 11111111b
#endasm

23

Tabel 3.1 Tabel hasil percobaan
No Code Binary Code Hexa Decimal
1 db 11000000b 0
2 db 11111001b 1
3 db 10100100b 2
4 db 10110000b 3
5 db 10011001b 4
6 db 10010010b 5
7 db 10000010b 6
8 db 11111000b 7
9 db 10000000b 8
10 db 10010000b 9
11 db 10001000b A
12 db 10000011b B
13 db 10100111b C
14 db 10100001b D
15 db 10000110b E
16 db 10001110b F
17 db 11111111b -



3.2 Analisa Data
#asm debug // Awal baris program
start: // label start
ld HL,Code_Table // isi register HL dengan kode tabel
st1:ld A,(HL) // untuk pengulangan isi kode tabel
cp 0xFF // compare dan konversi binary ke hexa decimal
jr z,start // looping untuk start
ioe ld (0xC000),A // input output eksternal variable A (perintah
yang dikirimkan ke seven segment)
ld A,11101111b // perintah yang menentukan seven segment mana yang
akan menyala
ioe ld (0x8000),A // perintah agar seven segment dapat membentuk suatu
karakter ( angka atau huruf)
24

call wait_long // jeda program selama 100 ms
inc hl // perintah penjumlahan (+1) ke isi register HL
jr st1 // looping st 1
Code_Table: // nama tabel register HL
db 11000000b // untuk menampilkan 0
db 11111001b // untuk menampilkan 1
db 10100100b // untuk menampilkan 2
db 10110000b // untuk menampilkan 3
db 10011001b // untuk menampilkan 4
db 10010010b // untuk menampilkan 5
db 10000010b // untuk menampilkan 6
db 11111000b // untuk menampilkan 7
db 10000000b // untuk menampilkan 8
db 10010000b // untuk menampilkan 9
db 10001000b // untuk menampilkan A
db 10000011b // untuk menampilkan B
db 10100111b // untuk menampilkan C
db 10100001b // untuk menampilkan D
db 10000110b // untuk menampilkan E
db 10001110b // untuk menampilkan F
db 11111111b // untuk mematikan semua lampu
#endasm // akhir dari program


3.3 Pembahasan
#asm debug
start:
ld HL,Code_Table
st1: ld A,(HL)
cp 0xFF
jr z,start

ioe ld (0xC000),A
ld A,11101111b
ioe ld (0x8000),A

call wait_long
inc hl
jr st1

Code_Table:
db 11000000b
db 11111001b
25

db 10100100b
db 10110000b
db 10011001b
db 10010010b
db 10000010b
db 11111000b
db 10000000b
db 10010000b
db 10001000b
db 10000011b
db 10100111b
db 10100001b
db 10000110b
db 10001110b
db 11111111b
#endasm

Pada percobaan ini bertujuan agar kita mengetahui bagaimana cara kerja
seven segmen pada sistem mikroprosesor. Program di mulai dengan memasukkan
code _tabel ke register HL (ld A, (HL) agar tabel dapat dibaca dan di looping
perbarisnya kemudian code_tabel di konversikan ke bilangan hexa decimal (cp
0xFF) . Kemudian di lakukan looping untuk st1 tadi (jr z, start) semua hal ini
adalah untuk membuat tabel yang nantinya isi tabel tersebut akan diisi, isi tabel ini
nantinya akan menentukan bentuk angka di 7-segment.
Kemudian di ketik 3 hal berikut :
Ioe ld (0xc000), A : berfungsi untuk memanggil fungsi variable A untuk 7-
Segment
ld A, 11101111 : berfungsi untuk menentukan berapa buah 7-segment yang
menyala (dalam kasus ini hanya 1 yang menyala pada
seven segment ke 4 dari kiri yang bernilai 0)
iod ld (0x8000),A : berfungsi agar tampilan seven segment yang di hasilkan
variable A dapat berubah bentuk dari angka KC angka lain
ke bentuk huruf
3 hal di atas sangat berpengaruh pada output yang di hasilkan 7-segment nantiya,
setelah dilakukan jeda program selama 100ms dengan perintah call wait_long, lalu
register HL dilakukan increament (penambahan +1). Saat proses looping
berlangsung dengan perintah inc hl, kemudian di looping untuk s+1 dengan
26

perintah jr s+1 yang artinya program akan berlanjut ke kode table jika semua
benar kemudian di lakukan pengisian data untuk tabel bernama code_table tadi
dengan perintah db (spasi) bilangan biner 8 bit yang berbeda yang bila di jadikan
keluaran ke 7-segment dalam sistem hexadecimal menjadi 0-9 dan A-F, kemudian
program di akhiri dengan mengetik #endasm.



























27

BAB IV
PENUTUP


4.1 Kesimpulan
1. Output yang di hasilkan 7-segment sistem bilangan hexadecimal
2. Agar 7-segment dapat membentuk dan berubah-ubah bentuk dari angka
atau huruf digunakan perintah ioe ld (0x8000),A
3. Kecepatan kedip (flashing) dari 7-segment atau cepat rambatnya
perpindahan satu bentuk angka ke bentuk lain tergantung call wait-long
yang di ketik.
4. Jr st 1 adalah looping yang apabila benar program akan terus berlanjut dan
apabila salah akan melakukan pengulangan kembali.
5. Id A ,11101111b berfungsi untuk menentukan beberapa 7-segment yang
nyala.

















28

BAB I
PENDAHULUAN



1.1 TUJUAN
- Praktikan mampu mengerti dan memahami penggunaan pengalamatan
memori pada sistem mikroprosessor
- Praktikan mampu memahami penggunaan stack function dan teknik sub-
routine
- Praktikan dapat membuat program mode pengalamatan memori yang
ditampilkan pada 7-segment

1.2 DASAR TEORI
Sub-routine Techniques
Konsep subrutin secara global digambarkan seperti berikut ini.








Gambar 1.1 Diagram konsep Sub-routine

Beberapa hal yang terkait dengan subrutin adalah :
Diawali dengan instruksi yang berlabel sebagai alamat masuk atau alamat
yang dipanggil.
Instruksi pertamannya harus membuat temporary storage (untuk
mengamankan kondisi mutakhir), terutama bila subrutin dapat dipanggil
oleh interupt (dapat diinterupsi).
29

Ditengahnya memberikan suatu hasil.
Diakhirir dengan instruksi RETURN untuk kemlabi ke program utama
(main program)

Stack Function
Stack Addressing
Merupakan metode pengalamatan yang alamat efektifnya (alamat yang
dituju) ditentukan oleh isi stack pointer (SP), jadi alamat yang dituju =
(SP) atau isi SP.
Ini berarti, isi SP harus ditentukan terlebih dulu, dan perlu hati-hati dalam
menentukan isi SP dikarenakan SP banyak digunakan oleh mikroprosesor
untuk mengatur operasi-operasinya.

Operasi Stack
1. create
2. empty
3. full
4. push
5. pop

NOTASI PEMANFAATAN STACK
NOTASI INFIX PREFIX
Cara penulisan ungkapan yaitu dengan menggunakan notasi infix, yang
artinya operator ditulis diantara 2 operator. Seorang ahli matematika bernama Jan
Lukasiewiccz mengembangkan suatu cara penulisan ungkapan numeris yang
disebut prefix, yang artinya operator ditulis sebelum kedua operand yang akan
disajikan. Contoh :
Proses konversi dari infix ke prefix :
A B C D
= [ + A B ] * [ - C D ]
= * [ + A B ] [ - C D ]
= * + A B - C D
Infix Prefix
A + B + A B
A + B C - + A B C
( A + B ) * ( C D ) * + A B C D

30

NOTASI INFIX POSTFIX
Cara penulisan ungkapan yaitu dengan menggunakan notasi postfix, yang
artinya operator ditulis sesudah operand. Contoh :
Proses konversi dari infix ke postfix :
= ( 6 - 2 ) * ( 5 +
= [ 6 2 - ] * [ 5 4 + ]
= [ 6 2 - ] [ 5 4 + ] *
= 6 2 - 5 4 + *


DASAR TEORI TAMBAHAN
Metode pengalamatan merupakan aspek dari intruksi bidang arsitektur
pada central Proccessing Unit (CPU) atau pada mikroprosessor. Metode
pengalamatan ini menentukan bagaimana bahasa mesin dapat mengetahui letak
proses datanya pada isi memory guna mengetahui proses berjalannya program
secara optimal.
(theyoan.blogspot.com/2012/11/metode-pengalamatan.html)

Stack merupakan istilah dari susunan beberapa data dalam bahasa
pemrograman, stack juga merupakan kumpulan data, dimana data yang diletakkan
diatas data yang lain. Dengan demikian stack adalah struktur data yang
menggunakan konsep LIFO (last In First Out).
(molimood.blogspot.com/2013/02/stack-algoritma-dan-struktur-data.html)

Stack adalah struktur data yang bersifat Last In First out (LIFO). Struktur
dari stack yang dapat kita lihat sehari-hari adalah stack of coin, stack of book dan
computer stack. Terdapat 2 operasi yang dapat dikerjakan dalam stack, yaitu push
dan pop. Push merupakan penambahan data ke tumpukan (stack), sedangkan pop
adalah pengambilan data yang menempati posisi teratas dari stack.
(www.docstoc.com)


Infix Postfix
16 / 2 16 2 /
( 2 + 14 ) * 5 2 14 + 5 *
2 + 14 * 5 2 14 5 * +
( 6 2 ) * ( 5 + 4 ) 6 2 5 4 + *

31

Stack memiliki system kerja Last In First Out, yang artinya yang erakhir
masuk akan dikeluarkan pada bagian awal, aplikasi di kehidupan sehari-hari
contohnya adalah tumpukan beberapa buku tulis, buku yang terakhit ditumpuk
akan pertama kali di ambil oleh user. Elemen stack dapat ditambahkan dengan
cara menambahkan data ke tumpukan stack paling atas.
(tutorialpemrograman.wordpress.com/2009/02/15/stack-tumpukan-dan-queue-
antrian-dalam-bahasa-java.html)

Stack merupakan sebuah koleksi objek yang menggunakan prinsip LIFO,
yaitu data yang terakhir ditumpuk akan dikeluarkan pertama kali dari tumpukan
tersebut.
(id.wikipedia.org/wiki/stack_(struktur_data))




















32

BAB II
PROSEDUR PERCOBAAN



2.1 ALAT PERALATAN
Tabel 2.1 Alat dan Bahan
NO Alat dan Bahan Jumlah
1 PC 1 unit
2 Platform with integrated power module +5V (SO4000-1E) 1 unit
3 Mains adapter, AC 90...230V 45...65Hz, DC 9V 630mA
(SO4000-1F)
1 unit
4 Microprocessor training system (SO4000-3SA) 1 unit
5 Serial interface cable, 9/9-pole (LM9040) 1 unit
6 Serial interface cable RS323 1 unit
7 Logic probe LM8101 1 unit
8 Software Dinamic C 9.62 1 unit








Gambar 2.1 Peralatan yang digunakan






33

2.2 PROSEDUR PERCOBAAN







Gambar 2.2 Rangkaian percobaan

1. Adapter-Unit, Rabbit-Core dan Exercise-Unit dipasangkan pada Work-
Platform Arbeitsplattform.
2. Work-Platform Arbeitsplattform dihubungkan ke PC menggunakan kedua
kabel serial.
3. Work-Platform Arbeitsplattform dihubungkan dengan sumber tegangan
(external power supply)
4. Aplikasi Dinamic C 9.62 di start
5. Data teknikal dipilih pada mikroporcessor-core seperti berikut:

6. Interface COM dipilih melalui menu Options dan dikonfigurasi
Communication Options pada Project Options :

7. Parameter compiler ditentukan melalui menu Options Project Options
Compiler Options
34


Gambar 2.3 Konfigurasi Parameter Compiler
8. Setelah kabel serial disetting, pilih sesuai COMx yang telah terinstall.
9. Program frame FRAME1.C dibuka kemudian disimpan latihan sesuai dengan
kelompok saat mengikuti praktikum. (contoh: MODUL1_KEL1.C)
10. Program berikut diketikkan pada frame program yang sudah disimpan
sebelumnya.
#asm debug
; ------------------------ The Assembler main program --------------
; Main program
; ...................................................................
; Defining the constants
limit_l: equ 0x1000 ; Lower address limit
limit_u: equ 0x101F ; Upper address limit
adr_matrix: equ 0x8000 ; Gate address of the key-matrix
code_key1: equ 0x81 ; Code for key 1
code_key3: equ 0x83 ; Code for key 3
; ...................................................................
; -------------------------------------------------------------------
start:
call clr_display ; Clear the display
ld HL,limit_l ; Pointer to start of addressed area
X00:
ld A,0x07h ; Addresses starting at the left display
digit
35

ld (position),A
ld A,L ; LT address to wordX
ld (wordX),A
ld A,H ; HT address to wordX+1
ld (wordX+1),A
call write_word_display ; Write Word to display
; .................................................................
ld A,1 ; Write data bit starting at digit 1
ld (position),A
ld A,(HL) ; Fetch data bit from memory location
ld (byteX),A ; Data byte to byteX
call write_byte_display ; Write byte to display
; .................................................................
x03:
call wait_long ; Wait
ioe ld A,(adr_matrix) ; Read key-code
cp 0x8eh ; Key 1 for address +1 pressed ?
jp z,x01 ; If Yes, then to x01
cp 0x8ch ; Key 3 for address -1 pressed ?
jp z,x02 ; If Yes, then to x02
jp x03

x01: inc HL ; Pointer +1
call control_UL ; Check, upper limit reached ?
call sound_out ; Short 2kHz tone
jp X00 ; Program loop

x02: dec HL ; Pointer -1
call control_LL ; Check, lower limit reached ?
call sound_out ; Short 2kHz tone
jp X00
; -------------------------------------------------------------------
; -------------------------------------------------------------------
; Sub-routine for checking the upper limit
control_UL:
ex DE,HL
scf ; Clear Carry-flag
ccf
ld HL,limit_u+1
sbc HL,DE ; Upper limit exceeded ?
jr nz,c_end1 ; If No, then to end of SR
ld DE,limit_u ; If Yes, then pointer to upper limit
c_end1:
ex DE,HL
36

ret
; ------------------------------------------------------------------
; ------------------------------------------------------------------
; Sub-routine for checking the lower limit
control_LL:
ex DE,HL
scf ; Clear Carry-flag
ccf
ld HL,limit_l-1
sbc HL,DE ; Lower limit exceeded ?
jr nz,c_end2 ; If No, then to end of SR
ld DE,limit_l ; If Yes, then pointer to lower limit
c_end2:
ex DE,HL
ret
; -------------------------------------------------------------------
#endasm
11. Setelah kode program di atas selesai diketikan, program di compile pada menu
compile
12. Program yang sudah di compile dijalankan dengan memilih menu run
13. Dilihat dan dianalisa output melalui work-platform pada MCLS-modular.
















37

BAB III
ANALISA DAN PEMBAHASAN


3.1 Data Hasil Percobaan
Coding :
#asm debug
; ------------------------ The Assembler main program --------------
; Main program
; ...................................................................
; Defining the constants
limit_l: equ 0x1000
limit_u: equ 0x101F
adr_matrix: equ 0x8000
code_key1: equ 0x81
code_key3: equ 0x83
; ...................................................................
; -------------------------------------------------------------------
start:
call clr_display
ld HL,limit_l
ld A,0x07h
ld (position),A
ld A,L
ld (wordX),A
ld A,H
ld (wordX+1),A
call write_word_display
; .................................................................
ld A,1
ld (position),A
ld A,(HL)
ld (byteX),A
call write_byte_display
; .................................................................
x03:
call wait_long
ioe ld A,(adr_matrix)
cp 0x8eh
jp z,x01
cp 0x8ch
jp z,x02
38

jp x03

x01: inc HL
call control_UL
call sound_out
jp X00

x02: dec HL
call control_LL
call sound_out
jp X00
; -------------------------------------------------------------------
; -------------------------------------------------------------------
; Sub-routine for checking the upper limit
control_UL:
ex DE,HL
scf
ccf
ld HL,limit_u+1
sbc HL,DE
jr nz,c_end1
ld DE,limit_u
c_end1:
ex DE,HL
ret
; ------------------------------------------------------------------
; ------------------------------------------------------------------
; Sub-routine for checking the lower limit
control_LL:
ex DE,HL
scf
ccf
ld HL,limit_l-1
sbc HL,DE
jr nz,c_end2
ld DE,limit_l
c_end2:
ex DE,HL
ret
; -------------------------------------------------------------------
#endasm


Output :
39

Tabel 3.1 Output Hasil Percobaan
NO ADDRESS ISI
1 1000 14
2 1001 FD
3 1002 E4
4 1003 3F
5 1004 EB
6 1005 FD
7 1006 E4
8 1007 28
9 1008 B7
10 1009 ED
11 100A 52
12 100B 7L
13 100C B5
14 100D 20
15 100E 21
16 100F 21
17 1010 01
18 1011 00
19 1012 C0
20 1013 55
21 1014 10
22 1015 00
23 1016 FD
24 1017 E4
25 1018 4C
26 1019 EB
27 101A FD
28 101B EA
29 101C 4E
30 101D 44
31 101E 4D
32 101F 45
40

3.2 Analisa Data
#asm debug // mulai program (mode debug)
limit_l: equ 0x1000 // Batas alamat bawah
limit_u: equ 0x101F // batas alamat atas
adr_matrix: equ 0x8000 // alamat gate matrix
code_key1: equ 0x81 // kode key1
code_key3: equ 0x83 //kode key3
; -------------------------------------------------------------------
start:
call clr_display // bersihkan layar
ld HL,limit_l // pointer mulai menunjuk area alamat
X00:
ld A,0x07h //digit alamat di mulai dari kiri
ld (position),A //pindah isi A ke parameter position
ld A,L //pindah isi L ke A
ld (wordX),A //pindah isi A ke parameter wordX
ld A,H //pindah isi H ke A
ld (wordX+1),A //pindah isi A ke wordX lalu di +1
call write_word_display //panggil fungsi untuk menuliskan word ke
display
; .................................................................
ld A,1 //tulis data string mulai dari bit 1
ld (position),A //pindah A ke parameter position
ld A,(HL) //fetch data bit dari lokasi memori
ld (byteX),A //pindah isi A ke parameter byteX
call write_byte_display //panggil fungsi write byte
; .................................................................
x03: //label x03
call wait_long //delay 100ms
ioe ld A,(adr_matrix) //baca kunci keycode dari matrix
cp 0x8eh //key1 untuk +1
jp z,x01 //jika ditekan +1 maka lompat ke x01
cp 0x8ch //key3 untuk kondisi -1
jp z,x02 //jika -1 maka lompat ke x02
jp x03 // lompat ke x03

x01: inc HL //label x01, increment HL
call control_UL //fungsi batas atas
call sound_out //fungsi sound 8bit
jp X00 // Program loop

x02: dec HL //label x02, decrement HL
call control_LL //cek apakah tercapai batas paling bawah
41

call sound_out //fungsi sound 8bit
jp X00 //jump ke x00
; -------------------------------------------------------------------
; -------------------------------------------------------------------
; Sub-routine for checking the upper limit
control_UL:
ex DE,HL
scf // Clear Carry-flag
ccf
ld HL,limit_u+1
sbc HL,DE //cek apaka tercapai batas atas
jr nz,c_end1 //jika belum maka end
ld DE,limit_u //jika sudah lompat ke DE
c_end1:
ex DE,HL
ret
; ------------------------------------------------------------------
; ------------------------------------------------------------------
; Sub-routine for checking the lower limit
control_LL:
ex DE,HL
scf //clear carry flag
ccf
ld HL,limit_l-1
sbc HL,DE //cek apakah tercapai batas terbawah
jr nz,c_end2 //jika belum, lompat ke end
ld DE,limit_l //jika sudah maka pointer ke lower limit
c_end2:
ex DE,HL
ret
; -------------------------------------------------------------------
#endasm


3.3 Pembahasan
#asm debug
; ------------------------ The Assembler main program -----------
; Main program
;
..................................................................
; Defining the constants
limit_l: equ 0x1000
limit_u: equ 0x101F
42

adr_matrix: equ 0x8000
code_key1: equ 0x81
code_key3: equ 0x83
; ................................................................
; ---------------------------------------------------------------
start:
call clr_display
ld HL,limit_l
ld A,0x07h
ld (position),A
ld A,L
ld (wordX),A
ld A,H
ld (wordX+1),A
call write_word_display
;................................................................
ld A,1
ld (position),A
ld A,(HL)
ld (byteX),A
call write_byte_display
;...............................................................
x03:
call wait_long
ioe ld A,(adr_matrix)
cp 0x8eh
jp z,x01
cp 0x8ch
jp z,x02
jp x03

x01: inc HL
call control_UL
call sound_out
jp X00

x02: dec HL
call control_LL
call sound_out
jp X00
;-----------------------------------------------------------------
--
; Sub-routine for checking the upper limit
control_UL:
43

ex DE,HL
scf
ccf
ld HL,limit_u+1
sbc HL,DE
jr nz,c_end1
ld DE,limit_u
c_end1:
ex DE,HL
ret
; ----------------------------------------------------------------
; ----------------------------------------------------------------
; Sub-routine for checking the lower limit
control_LL:
ex DE,HL
scf
ccf
ld HL,limit_l-1
sbc HL,DE
jr nz,c_end2
ld DE,limit_l
c_end2:
ex DE,HL
ret
; ----------------------------------------------------------------
#endasm
Coding di atas merupakan source code dari program untuk
menampilkan alamat dan isi dari suatu lokasi memori. Pada outputnya,
alamat memory ditampilkan dalam bentuk bilangan biner dan
heksadesimal, sedangkam isinya 2 digit hexadecimal.
Mula-mula di seklarasikan terlebih dahulu batas atas, batas bawah,
alamat matrix dan key code, natas atas dan batas bawah (upper & lower
limit) merupakan batas bilangan yang muncul pada posisi terbawah dan
yang paling atas (upper limit). Ada beberapa label yang dibuat dalam
program ini, di antaranya adalah :
X00 : label yang menhandle posisi memory (isi) dari parameter
position.
X01 dan x02 : label yang menghandle penambahan (increment) serta
pengurangan (decrement) terhadap register HL, kedua label ini juga
44

menghandle control batas atas dan bawah serta suara beep pada saat
user memindahkan alamat memori.
X03 : label yang menghandle alamat berbasis matrix serta terlibat
dalam input ke mikroprosesor, didalam label ini juga ada proses jump
register dan compare variable.
Control UL (Upper Limit) ; label yang menghandle batasan atas dari
isi lokasi memori.
Control LL (Lower Limit) : label yang menghandle batasan bawah
dari isi lokasi memori.

Inti dari program di atas adalah bagaimana caranya mengetahui
informasi lokasi memory dalam output 7 segment di perangkat
mikroprosessor, untuk proses penampil ini ada beberapa fungsi yang
digunakan, yaitu :
Call write_word-display : akan menampilkan huruf pada 7 segment














45

BAB IV
PENUTUP


4.1 Kesimpulan
1. Sebelum menampilkan isi lokasi memori, sebelumnya harus ditentukan
dahulu batas teratas dan terbawah alamat memori yang akan ditampilkan.
2. Komponen label untuk menampilkan output di seven segment pada
percobaan ini adalah x00, x01, x02 dan x03
3. Fungsi pemanggilan yang digunakan pada percobaan ini adalah :
Call write_word_display : tampilkan huruf
Call write_byte_display : tampilkan bit angka
Call sound_out : mengeluarkan bunyi beep per alamat
4. Agar program tidak melewati keadaan limit_UL dan limit_LL digunakan
fungsi control_Ul dan control_LL
5. Control_LL dan control_UL merupakan sub routine dalam program
6. Pada proses sub routine, flag pada register terlibat yaitu pada ssc dan ccf
7. Register yang digunakan pada percobaan ini adalah HL dan DE
8. Register HL terlibat dalam proses increment dan decrement langsung







46

BAB I
PENDAHULUAN



1.1 TUJUAN
- Praktikan mampu memahami komponen penyusun sistem minimum untuk
jam digital yang ditampilkan pada tampilan 7-segment
- Praktikan mampu mengerti bagaimana cara kerja jam digital 7-segment
dengan penambahan waktu delay sebesar 10ms

1.2 DASAR TEORI

Seven Segment Display
Seven Segment adalah tujuh segmen-segmen yang digunakan menampilkan
angka. Seven segment merupakan display visual yang umum digunakan
dalam dunia digital. Seven segment sering dijumpai pada jam digital, penujuk
antrian, diplay angka digital dan termometer digital.

Gambar 1.1 Seven Segment Display


47

jenis-jenis Seven Segment:
1. Common Anoda
Semua anoda dari LED dalam seven segmen disatukan secara parallel dan
semua itu dihubungkan ke VCC, dan kemudian LED dihubungkan melalui
tahanan pembatas arus keluar dari penggerak LED. Karena dihubungkan
ke VCC, maka COMMON ANODA ini berada pada kondisi AKTIF LOW
(led akan menyala/aktif bila diberi logika 0).
2. Common Katoda
Merupakan kebalikan dari common Anoda. Disini semua katoda disatukan
secara parallel dan dihubungkan ke GROUND. Karena seluruh katoda
dihubungkan ke GROUND, makan COOMON KATODA ini berada pada
kondisi AKTIF HIGH (led akan menyala/aktif bila diberi logika 1)

Diagram Blok dan Prinsip Kerja Rangkaian
Diagram blok sederhana dan prinsip kerja jam digital ini adalah sebagai berikut :


Diagram Blok sistem jam digital
Gambar 1.2 Diagram block system jam digital
1. Sumber detak merupakan suatu pembangkit pulsa yang menghasilkan detak 1
getaran per detik ( 1 Hz ).
2. Pencacah I dan pencacah II akan mencacah dari 00 (0000 0000) hingga 59
(0101 1001) yang kemudian akan digunakan pada penunjuk detik dan menit.
Sedangkan pencacah III merupakan pencacah dari 00 (0000 0000) hingga 23
(0010 0011) yang digunakan pada penunjuk jam.
3. Dari hasil sistem perencanaan di atas dapat dilihat bahwa pada dasarnya
pencacah I dan pencacah II merupakan jenis pencacah yang sama, pada
pengaplikasiannya digunakan pencacah 10 (decade counter) yaitu IC 7490,
sehingga bilangan dipecah menjadi dua yaitu penunjukan satuan dan puluhan.
Pencacah
I
Pencacah
II
Pencacah
III
Sumber
Detak
48

Special function register
Register khusus (SFR Special Function Register) adalah satu daerah dalam IC
keluarga MCS51 yang dipakai untuk mengatur perilaku MCS51 dalam hal-hal
khusus, misalnya tempat untuk berhubungan dengan port pararel P1 atau P3, dan
sarana input/output lainnya, tapi tidak umum dipakai untuk menyimpan data
seperti layaknya memori data.
Keterangan pada peta SFR di atas dapat dilihat pada tabel berikut ini :
Tabel 1.1 Keterangan Peta SFR
Simbol Nama Alamat
ACC Akumulator E0H
B B register F0H
PSW Program Status Word D0H
SP Stack Pointer 81H
DPTR0 Data Pointer 0 16 bit
DP0L Byte rendah
DP0H Byte tinggi

82H
83H
DPTR1 Data Pointer 0 16 bit
DP1L Byte rendah
DP1H Byte tinggi

84H
85H
P0 Port 0 80H
P1 Port 1 90H
P2 Port 2 A0H
P3 Port 3 B0H
IP Interrupt Priority Control B8H
IE Interrupt Enable Control A8H
TMOD Timer/Counter Mode Control 89H
TCON Timer/Counter Control 88H
TH0 Timer/Counter Control 0 High
Byte
8CH
TL0 Timer/Counter Control 0 Low Byte 8AH
TH1 Timer/Counter Control 1 High
Byte
8DH
49

TL1 Timer/Counter Control 1 Low Byte 8BH
SCON Serial Control 98H
SBUF Serial Data Buffer 99H
PCON Power Control 87H
WDTRST Watchdog Timer Reset A6H
AUXR Auxiliary Register 8EH


DASAR TEORI TAMBAHAN

Layar tujuh segmen (bahasa Inggris: Seven-segment display (SSD)) adalah
salah satu perangkat layar untuk menampilkan sistem angka desimal yang
merupakan alternatif dari layar dot-matrix. Layar tujuh segmen ini seringkali
digunakan pada jam digital, meteran elektronik, dan perangkat elektronik lainnya
yang menampilkan informasi numerik. Ide mengenai layar tujuh segmen ini sudah
cukup tua. Pada tahun 1910 misalnya, sudah ada layar tujuh segmen yang
diterangi oleh lampu pijar yang digunakan pada panel sinyal kamar ketel suatu
pembangkit listrik.
(Warren O. Rogers, Power Plant Signalling System, Power and the Engineer, Vol.
32, No. 5 (Feb. 1, 1910); pages 204-206.)

Register TL0, TL1, TH0, TH1 adalah register timer / counter masing-
masing sebesar 8 bit (1 byte) yang secara berurutan menempati alamat 0x8A,
0x8B, 0x8C, 0x8D pada SRF. TH0 dan TL0 secara bersama-sama membentuk
register time 0 / counter 0 16 bit (1byte) atas dan TL0 untuk 8 bit (1byte) bawah.
TH1 dan TL1 secara bersama-sama membentuk Register timer / counter 1 16 bit,
TH1 untuk 8 bit (1 byte) atas dan TL1 untuk 8 bit (1 byte) bawah.
Register TH0-TL0 dan TH1-TL1 menentukan jumlah pencacahan pulsa dari awal
sampe akhir. Reegister ini dapat dibaca utuk mengetahui isi pencacahan.
(http://doc2men.blogspot.com/2012/12/register-yang-berhubungan-dengan-
timer.html)

50

Jenis-jenis Seven Segment :
1. Common Anoda
Semua anoda dari LED dalam seven segmen disatukan secara parallel dan semua
itu dihubungkan ke VCC, dan kemudian LED dihubungkan melalui tahanan
pembatas arus keluar dari penggerak LED. Karena dihubungkan ke VCC, maka
COMMON ANODA ini berada pada kondisi AKTIF LOW (led akan
menyala/aktif bila diberi logika 0).
2. Common Katoda
Merupakan kebalikan dari Common Anoda. Disini semua katoda disatukan secara
parallel dan dihubungkan ke GROUND. Karena seluruh katoda dihubungkan ke
GROUND, maka COMMON KATODA ini berada pada kondisi AKTIF HIGH
(led akan menyala/aktif bila diberi logika 1).
(http://sinelectronic.blogspot.com/2012/02/seven-segment-adalah-tujuh-
segmen.html)

RTC adalah jenis pewaktu yang bekerja berdasarkan waktu yang
sebenarnya atau dengan kata lain berdasarkan waktu yang ada pada jam kita. Agar
dapat berfungsi, pewaktu ini membutuhkan dua parameter utama yang harus
ditentukan, yaitu pada saat mulai (start) dan pada saat berhenti (stop).
DS1307 merupakan salah satu tipe IC RTC yang dapat bekerja dalam daya
listrik rendah. Di dalamnya berisi waktu jam dan kalender dalam format BCD.
Waktu jam dan kalender memberikan informasi detik, menit, jam, hari, tanggal,
bulan, dan tahun. Untuk bagian jam dapat berformat 24 jam atau 12 jam.
Pendeteksi sumber listrik juga disediakan untuk mendeteksi kegagalan sumber
listrik dan langsung mengalihkannya ke sumber baterai.
(Lamp Switch Centralization Based On Microcontroller AVR ATMega 8535,
Library IT TELKOM Bandung)

Prinsip kerja seven segmen ialah input biner pada switch dikonversikan
masuk ke dalam decoder, baru kemudian decoder mengkonversi bilangan biner
tersebut menjadi decimal, yang nantinya akan ditampilkan pada seven segment.

51

Seven segment dapat menampilkan angka-angka desimal dan beberapa
karakter tertentu melalui kombinasi aktif atau tidaknya LED penyusunan dalam
seven segment. Untuk memudahkan penggunaan seven segment, umumnya
digunakan sebuah decoder( mengubah/ mengkoversi input bilangan biner menjadi
decimal) atau seven segment driver yang akan mengatur aktif tidaknya led-led
dalam seven segment sesuai dengan nilai biner yang diberikan.
Dekoder BCD ke seven segment digunakan untuk menerima masukan
BCD 4-bit dan memberikan keluaran yang melewatkan arus melalui segmen
untuk menampilkan angka desimal. Jenis dekoder BCD ke seven segment ada dua
macam yaitu dekoder yang berfungsi untuk menyalakan seven segment mode
common anoda dan dekoder yang berfungsi untuk menyalakan seven segment
mode common katoda.
(http://ilmubawang.blogspot.com/2011/04/download-artikel-ini-dalam-
bahasa.html)


















52

BAB II
PROSEDUR PERCOBAAN


2.1 ALAT PERALATAN
Tabel 2.1 Alat dan bahan
No. Alat dan Bahan Jumlah
1 PC 1 Unit
2 Platform with integrated power module +5V (SO4000-1E) 1 Unit
3 Mains adapter, AC 90...230V 45...65Hz, DC 9V 630mA
(SO4000-1F)
1 Unit
4 Microprocessor training system (SO4000-3SA) 1 Unit
5 Serial interface cable, 9/9-pole (LM9040) 1 Unit
6 Serial interface cable RS323 1 Unit
7 Logic probe LM8101 1 Unit
8 Software Dinamic C 9.62 1 Unit

Gambar 2.1 Peralatan yang digunakan








53


2.2 PROSEDUR PERCOBAAN

Gambar 2.2 Rangkaian Percobaan
1. Adapter-Unit, Rabbit-Core dan Exercise-Unit dipasang pada Work-
Platform Arbeitsplattform.
2. Work-Platform dihubungkan Arbeitsplattform ke PC menggunakan kedua
kabel serial.
3. Work-Platform Arbeitsplattform dihubungkan dengan sumber tegangan
(external power supply)
4. Aplikasi Dinamic C 9.62 dimulai
5. Pilih data teknikal pada mikroporcessor-core seperti berikut:

6. Interface COM dipilih melalui menu Options dan dikonfigurasi
Communication Options pada Project Options :

7. Parameter compiler ditentukan melalui menu Options Project Options
Compiler Options
54


Gambar 2.3 Konfigurasi Parameter Compiler
8. Setelah kabel serial disetting, pilih sesuai COMx yang telah terinstall.
9. Program frame FRAME1.C di kemudian simpan latihan sesuai dengan
kelompok saat mengikuti praktikum. (contoh: MODUL1_KEL1.C)
10. Program berikut diketikkan pada frame program yang sudah disimpan
sebelumnya.
#asm debug
; ------------------------ The Assembler main program -----------
-------
; Main program
; ----------------------------------------------------------------
-------
start:
call clr_display ; Clear display
call show_lines ; Hyphen in display
m01: call show_time ; Show the time information
; .........................................................
m00: call time_10ms ; Time delay 10ms
ld A,(ms10) ; 10ms time-variable +1
inc A
ld (ms10),A
cp A,100 ; 100*10ms = 1s expired ?
jp nz,m00 ; If No, then to m00
; .........................................................
55

ld A,0 ; Reset 10ms time-variable
ld (ms10),A
; Count seconds with decimal correction
ld A,(sec)
inc A
res 0,D ; Parameter for dec_adjust
call dec_adjust
ld (sec),A
; .........................................................
cp A,0x60h ; Full 60s ?
jp nz,m01 ; If No, continue at m01
; .........................................................
ld A,0 ; Reset seconds
ld (sec),A
; .........................................................
; Count minutes with decimal correction
ld A,(min)
inc A
res 0,D
call dec_adjust
ld (min),A
; .........................................................
cp a,0x60h ; 1 hour complete ?
jp nz,m01 ; If No, continue at m01
; .........................................................
ld A,0 ; Reset minutes
ld (min),A
; .........................................................
; Count hours with decimal correction
ld A,(std)
inc A
res 0,D
call dec_adjust
ld (std),A
; .........................................................
cp A,0x24h ; 24 hours complete ?
jp nz,m01 ; If No, continue at m01
; .........................................................
ld A,0 ; Reset hours
ld (std),A
; .........................................................
jp m01
; --------------------- End of Assembler-Main program ------------
-------
56

; ----------------------------------------------------------------
-------
; Display the hyphens
show_lines:
ld A,10111111b ; Hyphen segment active
ioe ld (0xc000h),A ; Data to display latch
ld A,11011011b ; Select digits 5 and 2
ioe ld (0x8000h),A ; Drive to the digits
ret
; ----------------------------------------------------------------
-------
; ----------------------------------------------------------------
-------
; Show complete time
show_time:
call show_sec ; Display the seconds
call show_min ; Display the minutes
call show_hours ; Display the hours
ret
; ----------------------------------------------------------------
-------
; ----------------------------------------------------------------
-------
; Write seconds to display
show_sec:
ld A,0x01 ; Seconds starting at digit 1
ld (position),A
ld A,(sec) ; Sekunden
ld (byteX),A ; Data byte to byteX
call write_byte_display ; Write byte to display
ret
; ----------------------------------------------------------------
--------------
; ----------------------------------------------------------------
--------------
; Write minutes to display
show_min:
ld A,0x04 ; Minutes starting at digit 4
ld (position),A
ld A,(min) ; Minutes
ld (byteX),A ; Data byte to byteX
call write_byte_display ; Write byte to display
ret
57

; ----------------------------------------------------------------
--------------
; ----------------------------------------------------------------
--------------
; Write hours to display
show_hours:
ld A,0x07 ; Hours starting at digit 7
ld (position),A
ld A,(std) ; Hours
ld (byteX),A ; Data byte to byteX
call write_byte_display ; Write byte to display
ret
; ----------------------------------------------------------------
-------
; Software time delay approx. 10ms
time_10ms:
push bc
ld b,38 ; 38*250s
t01: call time_250us
djnz t01
pop bc
ret
; ----------------------------------------------------------------
-------
;
.................................................................
......
; Defining the time-variables
ms10: db 00
sec: db 50h ; with pre-assignment
min: db 58h ; with pre-assignment
std: db 23h ; with pre-assignment
; ----------------------------------------------------------------
-------
#endasm
11. Setelah selesai diketikkan kode program di atas, program di compile pada
menu compile
12. Program yang sudah di compile dijalankan dengan memilih menu run
13. Dilihat dan dianalisa output melalui work-platform pada MCLS-modular.


58

BAB III
ANALISA DATA DAN PEMBAHASAN


3.1 DATA HASIL PERCOBAAN
#asm debug
start :
call clr_display
call show_lines

m01:
call show_time
m00:
call time_10ms
ld A, (ms10)
inc A
ld (ms10) ,A
cp A,100
jp nz,m00

ld A,0
ld (ms10) ,A

ld A, (sec)
inc A
res 0,D
call dec_adjust
ld (sec) ,A

cp A,0x60h
jp nz,m01

ld A,0
ld (sec) ,A

ld A,(min)
inc A
res 0,D
call dec_adjust
ld (min) ,A

cp a,0x60h
59

jp nz,m01

ld A,0
ld (min) ,A

ld A, (std)
inc A
res 0,D
call dec_adjust
ld (std) ,A

cp A, 0x24h
jp nz, m01

ld A,0
ld (std),A
jp m01

show_lines :

ld A,10111111b
ioe ld (0xc000h) ,A
ld A,11011011b
ioe ld (0x8000h) ,A
ret

show_time :
call show_sec
call show_min
call show_hours
ret

show_sec :
ld A,0x01
ld (position) ,A
ld A, (sec)
ld (byteX) ,A
call write_byte_display
ret

show_min :
ld A,0x04
ld (position) ,A
ld A, (min)
60

ld (byteX) ,A
call write_byte_display
ret

show_hours :
ld A,0x07
ld (position) ,A
ld A, (std)
ld (byteX) ,A
call write_byte_display
ret

time_10ms :
push bc
ld b,38

t01 :
call time_250us
djnz t01
pop bc
ret

ms10: db 00
sec: db 50h
min: db 58h
std: db 23h

#endasm
Output : 23-58-50

3.2 ANALISA DATA
#asm debug // Header Memulai Program Assembly

start : // Label Start
call clr_display // Memanggil perintah untuk menghapus layar
call show_lines // Memanggil perintah untuk menampilkan garis

m01: // Label m01
call show_time // Memanggil perintah untuk menampilakan waktu

m00: // Label m00
61

call time_10ms // Memanggil perintah untuk waktu delay 10ms
ld A, (ms10) // Mengisi register A dengan Parameter ms10
inc A // Menambahkan nilai register A
ld (ms10) ,A // Mengisi parameter ms10 dengan register A
cp A,100 // Membandingkan nilai 100 dengan register A
(100x10ms = 1s)
jp nz,m00 // Proses perulangan jika nilai m00 sama dengan null

ld A,0 // Mengisi register A dengan 0
ld (ms10) ,A // Mengisi reegister ms10 dengan register A

ld A, (sec) // Mengisi register A dengan parameter sec
inc A // Menambahkan nilai register A
res 0,D // Mereset nilai register D menjadi 0
call dec_adjust // memanggil perintah decimal adjust
ld (sec) ,A // Mengisi parameter sec dengan register A

cp A,0x60h // Membandingkan register A dengan nilai 0x60h
jp nz,m01 // Proses perulangan jika nilai m01 sama dengan null

ld A,0 // Memasukan nilai 0 ke dalam register A
ld (sec) ,A // Memasukan register A kedalam parameter sec

ld A, (min) // Mengisi register A dengan parameter min
inc A // Menambahkan nilai register A
res 0,D // Mereset nilai register D menjadi 0
call dec_adjust // memanggil perintah decimal adjust
ld (min) ,A // Mengisi parameter min dengan register A

cp A,0x60h // Membandingkan register A dengan nilai 60 hexa
jp nz,m01 // Proses perulangan jika nilai m01 sama dengan null

ld A,0 // Memasukan nilai 0 ke dalam register A
ld (min) ,A // Memasukan register A kedalam parameter min

ld A, (std) // Mengisi register A dengan parameter std
inc A // Menambahkan nilai register A
res 0,D // Mereset nilai register D menjadi 0
call dec_adjust // Memanggil perintah decimal adjust
ld (std) ,A // Mengisi parameter std dengan register A

cp A,0x24h // Membandingkan register A dengan nilai 24 hexa
jp nz,m01 // Proses perulangan jika nilai m01 sama dengan null

62

ld A,0 // Memasukan nilai 0 ke dalam register A
ld (std) ,A // Memasukan register A kedalam parameter std
jp m01 // Lompat ke label m01

show_lines : // Label Show_lines
ld A,10111111b // Memasukan nilai biner 10111111 kedalam register A
ioe ld (0xc000h) ,A // Perintah untuk menampilkan data pada seven
segment.
ld A,11011011b // Memasukan nilai biner 11011011 kedalam register A
ioe ld (0x8000h) ,A // Menempatkan data pada seven segment sesuai dengan
data biner yang di input
ret // Return from subroutine

show_time : // Label Show_time
call show_sec // Memanggil perintah untuk menampilkan detik
call show_min // Memanggil perintah untuk menampilkan minute
call show_hours // Memanggil perintah untuk menampilkan jam
ret // Return from subroutine

show_sec : // Label Show_sec
ld A,0x01 // Mengisi register A dengan nilai 0x01
ld (position) ,A // Mengisi parameter position dengan nilai
register A
ld A, (sec) // Mengisi register A dengan parameter sec
ld (byteX) ,A // Mengisi parameter byteX dengan register A
call write_byte_display // Memanggil perintah byter untuk ditampilkan
ret // Return from subroutine

show_min : // Label Show_min
ld A,0x01 // Mengisi register A dengan nilai 0x04
ld (position) ,A // Mengisi parameter position dengan nilai register A
ld A, (min) // Mengisi register A dengan parameter min
ld (byteX) ,A // Mengisi parameter byteX dengan register A
call write_byte_display // Memanggil perintah byter untuk ditampilkan
ret // Return from subroutine

show_hours : // Label Show_hours
ld A,0x01 // Mengisi register A dengan nilai 0x07
ld (position) ,A // Mengisi parameter position dengan nilai register A
ld A, (std) // Mengisi register A dengan parameter std
ld (byteX) ,A // Mengisi parameter byteX dengan register A
call write_byte_display // Memanggil perintah byter untuk ditampilkan
ret // Return from subroutine

63

time_10ms : // Label time_10ms
push bc // Masukan register bs pada stack
ld b,38 // Mengisi register B dengan 38

t01 : // Label t01
call time_250us // Memanggil perintah 250us
djnz t01 // Lompat ke label t01
pop bc // Mengeluarkan register BC dengan stack
ret // Return From Subroutine

ms10: db 00 // Mendefinisikan nilai awal ms10 adalah 00
sec: db 50h // Mendefinisikan nilai awal sec adalah 50
min: db 58h // Mendefinisikan nilai awal min adalah 45
std: db 23h // Mendenifisikan nilai awal std adalah 14
#endasm // Perintah prinsip program

3.3 PEMBAHASAN
Clock program with software delay adalah suatu program waktu (timer)
berbasis real time clock. Delay disini bermaksud adalah waktu jeda sebesar 10 ms
yang akan diulang selama 100 x untuk mendapatkan nilai sec.
Program ini ditampilkan oleh seven segment common anoda , yang
mana jika masukan low rangkaian pada seven segment terdapat 3 bagian yang
dipisahkan oleh garis, yaitu bagian std, min, sec. Bagian-bagian ini nantinya
ditampilkan pada seven segment yang akan mengalami proses perulangan sesuai
dengan nilai yang di berikan.
Kerena program ini merupakan real time clock jadi waktu / penentuan nilai
pada std, min, sec dapat ditentukan mulai dari mana. Hal ini dilakukan sama
seperti mensetting jam digital.

64

BAB IV
PENUTUP


4.1 Kesimpulan
1. Pada percobaan praktikum ini, fungsi dari coding itu yaitu menampilkan
waktu jam pada LED yang mana tujuannya untuk proses pembuatan jam
digital.
2. Waktu permulaan jam pada LED diatur dengan ms10 : db 00, sec : db 50,
min : db 58h, std : db 23h yang mana akan tampil angka 23-58-50.
3. Sec : db 50 waktu permulaan jalan detik pada LED, min : db 58h waktu
permulaan jalan menit pada LED, std : db 23h waktu permulaan jalan jam
pada LED.
4. Pada praktikum ini hitungan waktu delay adalah sebesar 10 ms. Maka
setiap 100x perulangan nilainya sama dengan 1 s (detik)
5. Praktikum ini menggunakan seven segment common anoda, yang mana
jika diberikan masukan 0 maka rangkaian menjadi aktif.
6. Fungsi nz pada program adalah untuk memberikan sebuah variable varian
yang telah diisi sebuah nilai jika value bernilai Null.
7. Program ini merupakan program real time clock jadi kita sebelumnya
dapat mendefinisikan std, min, sec sebelumn timer dijalankan.
8. Untuk memproses menampilkan min, sec atau std pada seven segment.
Biasanya di tentukan posisinya dengan cara memberikan nilai pada
register A sebelum register A di copy ke parameter position

You might also like