Laporan Praktikum Sistem Mikroprosesor

October 19, 2017 | Author: SyahrialLingga | Category: N/A
Share Embed Donate


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

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF