6131028 Indah K modul2

12
Jurusan Teknik Elektro Fakultas Teknik – Universitas Surabaya Laboratorium Otomasi dan Sistem Embedded Jurusan Teknik Elektro Fakultas Teknik – Universitas Surabaya Kerja Laboratorium Sistem Mikrokontroler 61B044 Modul 2 Akses Interupsi dan ADC AT89S52 Nama : Indah Kusumaningrum NRP : 6131028 KP :- Tanggal Kerja Lab : 23 Maret 2015 Dikumpulkan tanggal : 15 April 2015 Semester Genap Tahun Akademik 2012 – 2013 Dengan ini saya menyatakan bahwa laporan kerja laboratorium ini merupakan hasil tulisan saya sendiri. Dan saya bersedia mendapatkan sanksi sesuai peraturan yang berlaku jika di kemudian hari ternyata laporan ini dinyatakan mempunyai kesamaan dengan laporan kerja laboratorium mahasiswa yang lain. ( Indah K )

Transcript of 6131028 Indah K modul2

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

LLaabboorraattoorriiuummOOttoommaassii ddaann SSiisstteemm EEmmbbeeddddeedd

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

Kerja LaboratoriumSistem Mikrokontroler – 61B044

Modul 2

Akses Interupsi dan ADC AT89S52

Nama : Indah Kusumaningrum

NRP : 6131028

KP : -

Tanggal Kerja Lab : 23 Maret 2015

Dikumpulkan tanggal : 15 April 2015

Semester GenapTahun Akademik 2012 – 2013

Dengan ini saya menyatakan bahwa laporan kerjalaboratorium ini merupakan hasil tulisan saya sendiri.Dan saya bersedia mendapatkan sanksi sesuaiperaturan yang berlaku jika di kemudian hari ternyatalaporan ini dinyatakan mempunyai kesamaan denganlaporan kerja laboratorium mahasiswa yang lain.

( Indah K )

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

LLaabboorraattoorriiuummOOttoommaassii ddaann SSiisstteemm EEmmbbeeddddeedd

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

1. Jam Digital

#include <sfr52.inc>one equ 30htwo equ 31hthree equ 32hfour equ 33hR8 equ 34h

org 000hajmp startorg 03hajmp int0_ubahdetikorg 13hajmp int0_ubahmenitorg 0100h

int0_ubahdetik: mov P2,oneacall delaymov P2,twoacall delaymov P2,threeacall delaymov P2,fouracall delay

djnz R8,int0_ubahdetikmov R8,#01hdjnz R7,int0_ubahdetikmov R7,#04Ahdjnz R6,int0_ubahdetikmov R6,#01hajmp cekdetik

cekdetik: mov A,threecjne A,#11011001b,nambah2detikmov three,#11010000bmov A,fourcjne A,#11100101b,nambah3detikmov four,#11100000breti

nambah2detik: inc threereti

nambah3detik: inc fourreti

int0_ubahmenit: mov P2,oneacall delay

mov P2,twoacall delaymov P2,threeacall delaymov P2,fouracall delay

djnz R8,int0_ubahmenit

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

LLaabboorraattoorriiuummOOttoommaassii ddaann SSiisstteemm EEmmbbeeddddeedd

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

mov R8,#01hdjnz R7,int0_ubahmenitmov R7,#04Ahdjnz R6,int0_ubahmenitmov R6,#01hajmp cekmenit

cekmenit: mov A,onecjne A,#01111001b,nambahmenitmov one,#01110000bmov A,twocjne A,#10110101b,nambah1menitmov two,#10110000breti

nambahmenit: inc onereti

nambah1menit: inc tworeti

start: setb EAsetb EX0setb PX0setb EX1setb PX1

mov R3,#01hmov R4,#0AAhmov R5,#01hmov R6,#01hmov R7,#04Ahmov R8,#01hmov one,#01110000bmov two,#10110000bmov three,#11010000bmov four,#11100000bmov A,#00h

tampil: mov P2,oneacall delaymov P2,twoacall delaymov P2,threeacall delaymov P2,fouracall delay

djnz R5,tampilmov R5,#01hdjnz R4,tampilmov R4,#0AAhdjnz R3,tampilmov R3,#01hajmp cek

cek: mov A,onecjne A,#01111001b,nambah

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

LLaabboorraattoorriiuummOOttoommaassii ddaann SSiisstteemm EEmmbbeeddddeedd

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

mov one,#01110000bmov A,twocjne A,#10110101b,nambah1mov two,#10110000bmov A,threecjne A,#11011001b,nambah2mov three,#11010000bmov A,fourcjne A,#11100101b,nambah3mov four,#11100000bajmp tampil

nambah: inc oneajmp tampil

nambah1: inc twoajmp tampil

nambah2: inc threeajmp tampil

nambah3: inc fourajmp tampil

delay : mov R0,#02hdelay1: mov R1,#08hdelay2: mov R2,#0Fh

djnz R2,$djnz R1,delay2djnz R0,delay1ret

end

Cara Kerja Program

Program dimulai dengan mengaktifkan register EA, EX1, PX1,EX0,PX0 dengan

memberikan logika 1 pada masing-masing register. EX1 dan PX1 untuk menggunakan

P3.3(push button) sebagai interupt 1 sedangkan EX0 dan PX0 untuk menggunakan

P3.2(push button) sebagai interupt 0. Setelah menjalankan program tersebut,

memberikan nilai pada register-register dan variabel-variabel yang digunakan

menggunakan mov seperti yang ditulis pada program diatas. R3-R8 digunakan untuk

program delay, variabel one, two, three, four sebagai selektor untuk 7segment dimana

one adalah satuan dari detik, two puluhan dari detik, three satuan dari menit dan four

puluhan dari menit. Lalu menampilkan variabel selektor tersebut pada 7 segment pada

subroutine tampil melalui perintah mov P2, satu diikuti dengan pemanggilan delay dan

menampilkan digit berikut nya menggunakan cara ini hingga semua sudah digit

ditampilkan. Setelah semua ditampilkan diberi delay dalam subroutine tampil sehingga

nilai yang sama dari variabel selektor ditampilkan beberapa kali hingga delay selesai

baru dapat menampilkan nilai yang berbeda.

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

LLaabboorraattoorriiuummOOttoommaassii ddaann SSiisstteemm EEmmbbeeddddeedd

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

Setelah dari subroutine tampil, masuk ke subroutine cekdetik yang digunakkan

untuk membatasi satuan detik dan menit maksimal 9, puluhan detik dan menit

maksimal 5. Pembuatan batas tersebut dengan menggunakan perintah cjne A,

#01111001b,nambah dimana A telah dimasukkan nilai dari satu 4 digit pertama adalah

selektornya dan 4 digit terakhir adalah datanya. Jika data dari A tidak sama dengan 9

maka dia akan jump ke subroutine nambah dimana berisi inc satu yaitu menambah nilai

dari variabel satu sebanyak 1. Jika A sama dengan 9 maka akan melanjutkan pada

program dibawahnya yaitu data dari variabel satu dijadikan 0 kembali. Untuk satuan

menit, puluhan detik dan menit menggunakan teknik yang sama. Setelah pengecekan,

program akan jump ke subroutine tampil.

Interupsi 0 akan berjalan jika switch 3 ditekan maka digit detik akan naik secara

terus menerus hingga switch dilepas. Untuk programnya sama dengan program

utamanya namun delay pada subroutine tampilnya dipercepat sehingga seolah-olah

digunakan untuk mengatur detiknya. Untuk Interupsi 1 akan berjalan jika switch 4

ditekan maka digit menit akan naik secara terus menerus hingga switch dilepas. Untuk

programnya sama dengan program utamanya namun delay pada subroutine tampilnya

dipercepat sehingga seolah-olah digunakan untuk mengatur detiknya dan pada

subroutine cek yang digunakan adalah pengecekan pada satuan dan puluhan menit saja

menggunakan perintah cjne. Program utama akan berhenti dieksekusi dan akan

menjalankan interupsi hingga bertemu reti. Ketika bertemu reti, program utama akan

kembali dieksekusi dari program terakhir dimana interupsi muncul.

Prosedur delay berfungsi untuk memberikan jeda waktu dalam menjalankan

perintah yang dilakukan dengan perintah selanjutnya.

2. Emergency STOP prioritas intrupsi

#include <sfr52.inc>org 000hajmp startorg 03hajmp int0_0norg 13hajmp int1_0norg 0100h

int1_0n: mov P2,#0mov R7,#01breti

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

LLaabboorraattoorriiuummOOttoommaassii ddaann SSiisstteemm EEmmbbeeddddeedd

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

int0_0n: cjne R7,#00b,kiri

kanan: mov P2,ARR Aacall delaycjne A,#00000001b,outmov R7,#1breti

kiri: mov P2,ARL Aacall delaycjne A,#10000000b,outmov R7,#0bretiout: reti

start: setb EAsetb EX0clr PX0setb EX1setb PX1mov P2,#0mov A,#00000001bmov R7,#01bajmp $

delay : mov R0,#05hdelay1: mov R1,#0FFhdelay2: mov R2,#00hdjnz R2,$djnz R1,delay2djnz R0,delay1retend

Cara Kerja Program

Pada mulanya, program dimulai dengan memanggil file sfr52.inc dari library

Reads51.

Program diawali dengan mengaktifkan register EA, EX1, PX1,EX0,PX0 dengan

memberikan logika 1 pada masing-masing register. EX1 dan PX1 untuk menggunakan

P3.3(push button) sebagai interupt 1 sedangkan EX0 dan PX0 untuk menggunakan

P3.2(push button) sebagai interupt 0. Namun pada kasus ini, interupt 1 sebagai prioritas

sehingga PX0 yang terhubung pada interupt 0 diberi logika 0 jadi ketika interupt 1

ditekan maka seolah-olah interupt 0 tidak berfungsi.

Pada percobaan ini, program LED berjalan diletakkan pada interupt 0, jadi ketika

run atau interupt 0 ditekan maka program baru dijalankan. Pada program utamanya

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

LLaabboorraattoorriiuummOOttoommaassii ddaann SSiisstteemm EEmmbbeeddddeedd

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

yaitu start: hanya pendeklarasian nilai pada variabel R7 dan accumulator kemudian

ajmp $, dimana program utama hanya mengulang di baris ajmp $ itu saja. Tanpa

penekanan interupt maka program yang dijalankan di baris ajmp $ aja. Ketika interupt 0

ditekan program jump ke subroutine int0_Run yang berisi program LED berjalan.

R7 bernilai 1 dan 0 ketika R7 digunakan untuk menentukan arah jalan LED,

bernilai 1 maka LED sedang berjalan ke kiri sedangkan 0 berarti LED sedang berjalan

ke arah kanan. Ketika interupt 0 ditekan ada pengecekan R7 menggunakan perintah cjne

R7,#0b,mulai(nilai R7 pada saat start adalah 1) yang akan jump ke mulai jika R7

bernilai 1 dan turun ke subroutine mula jika R7 bernilai 0 dimana subroutine mulai

adalah program LED bergeser ke kiri dan mula adalah program LED bergeser ke kiri.

Untuk dapat bergeser ke kiri menggunakan perintah RL A dimana pada awalnya A

bernilai 00000001b ketika di RL maka menjadi 00000010b lalu diikuti perintah

pemanggilan delay dan menampilkan A pada LED. Setelah itu ada pengecekan, apakah

LED yang menyala sudah bergeser ke paling kiri 10000000b. Pada pengecekan ini akan

kembali ke program kiri bila LED belum mencapai paling kiri. Setelah mencapai kiri

maka program akan mengubah R7 menjadi 0 maka led mulai dari kanan (10000000b).

Untuk dapat bergeser ke kanan menggunakan perintah RR A dimana akan masuk ke

subroutine ini ketika A bernilai 10000000b ketika di RR maka menjadi 01000000b lalu

diikuti perintah pemanggilan delay dan menampilkan A pada LED. Setelah itu

pengecekan akan kembali ke program kanan bila LED belum mencapai paling kanan,

dan R7 bernilai 1 bila LED telah bergeser hingga paling kanan.

Prosedur delay berfungsi untuk memberikan jeda waktu dalam menjalankan

perintah yang dilakukan dengan perintah selanjutnya.

3. Termometer Celcius dan Reamur

#include <sfr52.inc>save equ 31hR8 equ 32hR9 equ 33h

org 000hajmp mulaiorg 0100h

mulai: mov R9,#01hmov R8,#0AAhmov R7,#01h

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

LLaabboorraattoorriiuummOOttoommaassii ddaann SSiisstteemm EEmmbbeeddddeedd

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

start: clr P0.0clr P0.1clr P0.2mov A,P3mov save,P3mov B,#4mul ABmov B,#5div ABmov B,#10div ABadd A,#10110000bmov R3,Amov A,Badd A,#01110000bmov R4,Amov A,savemov B,#10div ABadd A,#11100000bmov R5,Amov A,Badd A,#11010000bmov R6,Aajmp tampil

tampil: mov P2,R4acall delaymov P2,R3acall delaymov P2,R6acall delaymov P2,R5acall delaydjnz R9,tampilmov R9,#01hdjnz R8,tampilmov R8,#0AAhdjnz R7,tampilmov R7,#01hajmp start

delay : mov R0,#01hdelay1: mov R1,#0Fhdelay2: mov R2,#09h

djnz R2,$djnz R1,delay2djnz R0,delay1ret

end

TujuanAplikasi Program

Cara Kerja Program

Pada awal program, supaya mengaktifkan penggunaan LM35 menggunakan

deklarasi clr P0.0, clr P0.1, dan clr P0.2. keluaran dari pengukuran suhu pada variabel

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

LLaabboorraattoorriiuummOOttoommaassii ddaann SSiisstteemm EEmmbbeeddddeedd

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

P3 dalam bentuk celcius, hasil pengukuran tersebut disimpan dalam variabel save.

Kemudian untuk mengubah menjadi reamur maka keluaran tersebut disimpan dalam

accumulator dan kemudian dikalikan 4/5 dengan perintah sebagai berikut mul AB

dimana B diberi nilai 4 sehinga A dikalikan B, kemudian div AB dimana B diubah

nilainya menjadi 5, sehingga A dibagi B. Melalui program ini A sudah menjadi suhu

reamur. Untuk menampilkan pada 7 segmen A dibagi 10 yang dimasukkan dalam

variabel B, misalnya A adalah 24 ketika dibagi B maka A akan bernilai 2 dan B bernilai

4. Dari hasil tersebut dapat disimpulkan bahwa A adalah bilangan puluhan reamurnya

dan B adalah bilangan satuan reamurnya. Kemudian nilai dari A dimasukkan ke R3 dan

di add kan dengan selektor untuk digit ke 3 seven segmen. Nilai dari B dimasukkan ke

A kemudian di add kan dengan selektor untuk digit ke 4 seven segmen dan dimasukkan

dalam R4. Kemudian untuk celciusnya, memasukkan nilai dari variabel save ke

accumulator. Untuk menampilkan pada 7 segmen A dibagi dengan 10 yang dimasukkan

dalam variabel B, misalnya A adalah 24 ketika dibagi B maka A akan bernilai 2 dan B

bernilai 4. Dari hasil tersebut dapat disimpulkan bahwa A adalah bilangan puluhan

celciusnya dan B adalah bilangan satuan celciusnya. Kemudian nilai dari A dimasukkan

ke R5 dan di add kan dengan selektor untuk digit ke 1 seven segmen. Nilai dari B

dimasukkan ke A kemudian di add kan dengan selektor untuk digit ke 2 seven segmen

dan dimasukkan dalam R6. Kemudian jump ke subroutine tampil untuk menampilkan

nilai suhu tersebut pada 7 segment pada subroutine tampil melalui perintah mov P2,R3

diikuti dengan pemanggilan delay dan menampilkan digit berikut nya menggunakan

cara ini hingga semua sudah digit ditampilkan. Setelah semua ditampilkan diberi delay

dalam subroutine tampil sehingga nilai yang sama dari variabel selektor ditampilkan

beberapa kali hingga delay selesai baru dapat menampilkan nilai yang berbeda.

Kemudian kembali jump ke subroutine start.

Prosedur delay berfungsi untuk memberikan jeda waktu dalam menjalankan

perintah yang dilakukan dengan perintah selanjutnya.

4. Voltmeter Digital

#include <sfr52.inc>R8 equ 32hR9 equ 33h

org 000hajmp mulai

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

LLaabboorraattoorriiuummOOttoommaassii ddaann SSiisstteemm EEmmbbeeddddeedd

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

org 0100h

mulai: mov R3,#01hmov R4,#0AAhmov R5,#01h

start: setb P0.0clr P0.1clr P0.2mov A,P3mov B,#35div ABadd A,#01110000b

tampil: djnz R5,tampilmov R5,#01hdjnz R4,tampilmov R4,#0AAhdjnz R3,tampilmov R3,#01hmov P2,Aacall delayajmp start

delay : mov R0,#01hdelay1: mov R1,#0Fhdelay2: mov R2,#00h

djnz R2,$djnz R1,delay2djnz R0,delay1ret

end

Cara Kerja Program

Pada awal program, supaya mengaktifkan potensiometer menggunakan deklarasi

setb P0.0, clr P0.1, dan clr P0.2. Keluaran dari pengukuran potensio disimpan pada

variabel P3. Memasukkan nilai P3 pada accumulator dan membagi A dengan 35 karena

hasil pengukuran tegangan menggunakan voltmeter max adalah 4 sehingga nilai dari

potensio dibagi 4 sehingga kurang lebih 35. Memasukkan B dengan nilai 35 dan div

AB. Setelah itu menambahkan A dengan selektor supaya dapat ditampilkan pada 7

segment

Lalu jump ke subroutine tampil untuk menampilkan nilai suhu tersebut pada 7

segment pada subroutine tampil melalui perintah mov P2,R3. Setelah semua

ditampilkan lalu kembali jump ke subroutine start.

Prosedur delay berfungsi untuk memberikan jeda waktu dalam menjalankan

perintah yang dilakukan dengan perintah selanjutnya.

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

LLaabboorraattoorriiuummOOttoommaassii ddaann SSiisstteemm EEmmbbeeddddeedd

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

Gambar 1.1 Jam Digital berjalan Gambar 1.2 Emergency Stop

Gambar 1.3Thermometer Gambar 1.4 Voltmeter Digital

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya

LLaabboorraattoorriiuummOOttoommaassii ddaann SSiisstteemm EEmmbbeeddddeedd

Jurusan Teknik ElektroFakultas Teknik – Universitas Surabaya