Laporan Praktikum Sistem Mikroprosesor
October 19, 2017 | Author: SyahrialLingga | Category: N/A
Short Description
Sistem Mikroprosesor...
Description
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.
1
-
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
ioe ld
(0xE000),A
; Load 8-bit accumulator ; Output command for LED-row: LED "0“ lights
Access to the 7-segment displays: ld
a, 11000000b
ioe ld ld
(0xC000),A
a, 11101111b
ioe ld
(0x8000),A
; Load 8-bit accumulator (segments 7 and 8 "Off") ; Output command for 7-segment display "Data" ; Load 8-bit accumulator (digit 4 "On") ; 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 jp sr01
; Input command for the Switch-row ; 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
2
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)
3
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)
4
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
1 Unit
(SO4000-1F) 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
5
2.2 Prosedur Percobaan 1. Adapter-Unit, Rabbit-Core dan Exercise-Unit dipasangkan pada WorkPlatform 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
6
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 ioe
A,00001111b ld (0xE000),A
call wait_long call wait_long call wait_long call wait_long jr start ; -----------------------------------------------------------#endasm
7
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
8
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
9
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
// memulai program dari awal (looping)
start
; -----------------------------------------------------------#endasm
3.3 Pembahasan Source Code : #asm debug ; -------------- The Assembler main program
-----------------
start: ld A,11111111b ioe ld 0xE000),A call wait_long ld ioe
A,01010101b ld (0xE000),A
call wait_long call wait_long call wait_long call wait_long jr start ; -----------------------------------------------------------#endasm
10
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.
11
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.
12
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.
13
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 MOV A, P0
copy data dari Port 0 ke register A 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 MOV A
Operasi @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
14
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-
V
V = 1 for an overflow in additions or borrowing in
flag
subtractions, for signed numbers in two’s complement, otherwise V = 0
Carry-flag
C
V = 1 for an overflow in additions or borrowing in subtractions, for unsigned numbers, otherwise C = 0
15
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-andprogramming) Stack digunakan untuk menuliskan ungkapan menggunakan notasi tertentu (Notasi Polish). Biasanya ungkapan yang digunakan adalah ungkapan numeris.
16
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-penjelasandeskripsi-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-sevensegmen.html#.UatBmtjdOKw
17
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
1 unit
(SO4000-1F) 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
18
2.2 PROSEDUR PERCOBAAN
Gambar 2.2 Rangkaian Percobaan 1. Adapter-Unit dipasang, Rabbit-Core dan Exercise-Unit pada WorkPlatform 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
19
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: st1:
ld HL,Code_Table
; Pointer to start of table
ld A,(HL)
; Fetch character code
cp 0xFF
; End recognition ?
jr z,start
; If Yes, back to start
; ............................................................. ioe ioe
ld (0xC000),A
; Data to display
ld A,11101111b
; Digit 4
ld (0x8000),A
; Digit information for display
; ............................................................. call
wait_long
; Wait 100ms
20
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.
21
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
22
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) cp 0xFF
// untuk pengulangan
isi kode tabel
// 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)
23
call
wait_long
// jeda program selama 100 ms
inc
hl
// perintah penjumlahan (+1)
jr st1
// looping st 1
Code_Table:
// nama tabel register HL
ke isi 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
24
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 7Segment
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
25
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.
26
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.
27
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 subroutine - 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).
28
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
=[+AB]*[-CD] =*[+AB][-CD]
Infix
Prefix
A+B +AB A+B–C -+ABC (A+B)*(C–D) *+AB–CD
=*+AB-CD
29
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+ =[62-]*[54+] =[62-][54+]* =62-54+*
Infix 16 / 2 ( 2 + 14 ) * 5 2 + 14 * 5 (6–2)*(5+4)
Postfix 16 2 / 2 14 + 5 * 2 14 5 * + 62–54+*
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)
30
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-queueantrian-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))
31
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
1 unit
(SO4000-1F) 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
32
2.2 PROSEDUR PERCOBAAN
Gambar 2.2 Rangkaian percobaan
1. Adapter-Unit, Rabbit-Core dan Exercise-Unit dipasangkan pada WorkPlatform 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
33
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
ld A,0x07h
; Addresses starting at the left display
X00: digit
34
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
call ;
ld A,(HL)
; Fetch data bit from memory location
ld (byteX),A
; Data byte to byteX
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
35
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.
36
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
37
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 : 38
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
39
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 ;
.................................................................
call ;
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
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
40
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
41
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:
42
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
43
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
44
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
45
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
46
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 : Sumber Detak
Pencacah I
Pencacah II
Pencacah III
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.
47
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
DPTR1
DP0L Byte rendah
82H
DP0H Byte tinggi
83H
Data Pointer 0 16 bit DP1L Byte rendah
84H
DP1H Byte tinggi
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
8CH
Byte TL0
Timer/Counter Control 0 Low Byte
8AH
TH1
Timer/Counter Control 1 High
8DH
Byte
48
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 masingmasing 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-dengantimer.html)
49
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-tujuhsegmen.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.
50
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-dalambahasa.html)
51
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
1 Unit
(SO4000-1F) 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
52
2.2 PROSEDUR PERCOBAAN
Gambar 2.2 Rangkaian Percobaan 1. Adapter-Unit, Rabbit-Core dan Exercise-Unit dipasang pada WorkPlatform 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
53
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:
m01:
call
clr_display
; Clear display
call
show_lines
; Hyphen in display
call
show_time
; Show the time information
; ......................................................... m00:
call
time_10ms
ld A,(ms10) inc
; Time delay 10ms ; 10ms time-variable +1
A
ld (ms10),A cp A,100
; 100*10ms = 1s expired ?
jp nz,m00
; If No, then to m00
; .........................................................
54
ld A,0
; Reset 10ms time-variable
ld (ms10),A ; Count seconds with decimal correction ld A,(sec) inc
A
res
0,D
call
dec_adjust
; Parameter for 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 ------------------
55
;
----------------------------------------------------------------------
; 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
call
ld A,(sec)
; Sekunden
ld (byteX),A
; Data byte to byteX
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
call
ld A,(min)
; Minutes
ld (byteX),A
; Data byte to byteX
write_byte_display
; Write byte to display
ret
56
;
-----------------------------------------------------------------------------
;
-----------------------------------------------------------------------------
; Write hours to display show_hours: ld A,0x07
; Hours starting at digit 7
ld (position),A
call
ld A,(std)
; Hours
ld (byteX),A
; Data byte to byteX
write_byte_display
; Write byte to display
ret ;
----------------------------------------------------------------------
; Software time delay approx. 10ms time_10ms: push
bc
ld b,38 t01:
; 38*250µs
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.
57
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
58
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)
59
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 start :
// Header Memulai Program Assembly // Label Start
call clr_display
// Memanggil perintah untuk menghapus layar
call show_lines
// Memanggil perintah untuk menampilkan garis
m01: call show_time m00:
// Label m01 // Memanggil perintah untuk menampilakan waktu // Label m00
60
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
61
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 ret
// Memanggil perintah byter untuk ditampilkan
// Return from subroutine
62
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
#endasm
adalah 14
// 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.
63
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
64
View more...
Comments