jbptitbpp gdl jonggurans 30386 1 laporan k

Upload: avellinopriyogo

Post on 28-Feb-2018

226 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 Jbptitbpp Gdl Jonggurans 30386 1 Laporan k

    1/6

    Laporan Modul 2, EL3006

    Timer/Counter dan Interrupt

    Jongguran Sondang DN (132 05 110)/ Kelompok 48/ Jumat, 14 Maret 2008

    Asisten: Virgilius

    Abstrak pada praktikum kali ini, praktikan

    diharapkan mampu membuat program menggunakan

    timer pada mikrokontroler 8051 dalam berbagai variasi

    mode timer dan jenis timer seta mampu membuat

    program dengan memanfaatkan fasilitas interupsi yangtersedia pada mikrokontroler.

    Pada praktikum kali ini kami menggunakan DT-51

    MinSys yang merupakan sebuah sistem minimum

    berbasis mikrokontroler 89C51 dan DT-51 Trainer

    Board yang merupakan board pendukung yang

    digunakan untuk memberikan masukan dan melihat

    respon keluaran dari program yang kita download ke

    dalam DT-51 MinSys.

    I. Data Percobaan

    A. Alat dan Komponen yang Digunakan1.

    DT-51 MinSys2. DT-51 Trainer Board3. Komputer4. Power supply5. Kabel serial DB-9 pin6.

    Kabel tipe-x dan tipe-y7. Kabel untuk power DT-51 MinSys

    B. Isi Data Percobaan

    Gambar 1 DT-51 MinSys

    Keterangan gambar DT-51 MinSys1. Mikrokontroler AT89C512. EEPROM3. Programmable Peripheral Interface (PPI)4. Memori eksternal sebesar 8 MB5. Port 1, Port A, Port B, dan Port C6.

    Port Control7.

    Kristal sebagai clock generator yang memilikifrekuensi 11,0592 MHz. Maka periode osilatornyaadalah 0,090422453 s

    8. Port kabel serial PC

    Pemrograman mikrokontroler ini menggunakan bahaassembly. Pada percobaan, digunakan beragam instruklompatan, logika, dan aritmatika, di antaranya

    Tabel 1Set instruksi Assembly yang digunakanMnemonik Fungsi OperasiMOV Pemindahan data antar lokasi dalam RAM internal at

    lokasi-lokasi SFR tanpa melalui akumulator

    MOVX Membaca RAM eksternal

    SJMP Mengodekan alamat tujuan sebagai sebuah offset relatif

    LJMP Mengodekan alamat tujuan sebagai konstanta 16-bpanjang instruksinya 3 bit

    SETB Mengeset nilai bit dengan nilai 1

    CLR Mengeset nilai bit dengan nilai 0

    JB Meloncat jika nilai bitnya sama dengan 1

    JNB Meloncat jika nilai bitnya tidak sama dengan 1

    JC Meloncat jika ada nilai bit carry di PSW

    JNC Meloncat jika tidak ada nilai bit carry di PSW

    CJNE Meloncat jika dua nilai yang dibandingkan tidak sama

    ACALL Memanggil program sub rutin dalam daerah memo

    program 2 kb yang setaraRET Mengakhiri program sub rutin

    DJNZ Mengurangi isi di register dan loncat jika tidak samdengan 0

    RETI Mengakhiri sub rutin program layanan interupsi

    PUSH Menambah stack pointer

    POP Mengurangi stack pointer

    RL Memutar register ke kiri 1 bit

    RR Memutar register ke kanan 1 bit

    INC Menaikkan suatu nilai (1 byte) pada register

    DEC Menurunkan suatu nilai (1 byte) pada register

    Langkah-langkah yang kami lakukan dalam percobaan adalah mengetikkan listing program dalam ekstensi *.asmeng-assemble listing program ke dalam bentuk *.hex, d

    men-download-nya ke dalam DT-51 MinSys menggunakkabel serial.

    Percobaan-percobaan yang kami lakukan antara lain

    1. Percobaan I : Timer/Counter 0 sebagai Timer Mo

    0/1

    2. Percobaan II : Timer/Counter 0 sebagai CountMode 2 (8-bit AutoReload)

    3. Percobaan III : Penggunaan INT0 dengan Interru

    Enable

    4. Percobaan IV : Penggunaan INT0 dan INT1 deng

    Interrupt Priority

    II. Analisis Hasil Percobaan

    1. Percobaan I : Timer/Counter 0 sebagai Timer Mo

    0/1

    $MOD51ORG 4000H

    LJMP STARTORG 4100H

    1 2 3

    4

    5

    6

    78

  • 7/25/2019 Jbptitbpp Gdl Jonggurans 30386 1 Laporan k

    2/6

    START: MOV R0,#00HMOV R1,#00HMOV SP,#30HMOV P1,#0FFHCLR P1.4MOV TMOD,#01HMOV TH0,0D8HMOV TL0,#0EFHSETB TR0MOV A,#0FFH

    CHECK: JNB TF0,CHECKLCALL RELOAD

    LJMP PENGALI1

    PENGALI1: INC R0

    CJNE R0,#32H,CHECKMOV R0,#00HLJMP LED

    LED: CJNE A,#00H,NYALALJMP MATI

    MATI: CLR P1.4MOV A,#0FFHLJMP CHECK

    NYALA: SETB P1.4MOV A,#00HLJMP CHECK

    RELOAD: CLR TR0MOV TH0,#0D8HMOV TL0,#0EFHCLR TF0

    SETB TR0RETEND

    $mod51 adalah file header perintah yangdigunakan pada DT-51 MinSys. CSEG merupakanperintah untuk menentukan program memory space.Instruksi LJMP memerintahkan lompat ke sub programSTART. Kita memindahkan stack pointer ke alamat30h. Stack pointer dipindahkan ke alamat 30h karenaalamat-alamat sebenarnya masih dipakai. Stack pointerberada pada alamat 81h.

    Pada sub program start kita melakukan prosespemindahan data immediate ke register R0 dan R1.Kemudian kita juga melakukan pemindahan dataimmediate #0FFh ke port satu. Perintah ini akanmembuat seluruh bit pada port satu mendapat hargalogika satu. Pada baris selanjutnya terdapat perintahCLR yang berfungsi membuat logika port 1.4 menjadinol. Pada baris selanjutnya terdapat perintah MOVyang akan memasukkan harga data immediate ke dalamregister TMOD. Harga yang dimasukkan ini akanberfungsi menentukan mode timer yang digunakan.

    Jika kita memasukkan nilai #01h sebagaimana dalamprogram, maka kita akan membuat mode timer yangberfungsi menjadi mode 01. Hal ini dapat dilihat dalampenjelasan mode TMOD dan tabelnya seperti berikut

    Langkah selanjutnya kami memindahkan nilai direct byke register TH0 dan memindahkan immediate data ke regisTL0. Kemudian dengan perintah SETB kami mengaktifkan bTR0. Setelah itu kami memindahkan nilai immediate FF accumulator A.

    Setelah itu program akan memasuki subrutin CHEC

    Pada subrutin CHECK didapatkan instruksi JNB. Instruksi menyatakan bahwa program akan melompat ke subruCHECK jika harga TF0 sama dengan nol. Jika harga TFadalah satu, maka program akan melanjutkan ke instrukLCALL. Instruksi LCALL (Long Subroutine Call) ini akmemanggil subrutin RELOAD. Setelah memanggil subruRELOAD, maka program akan langsung melompat subrutin PENGALI1.

    Pada subrutin RELOAD, pertama-tama nilai register TRakan diset menjadi nol. Kemudian instruksi MOV akmemindahkan nilai immediate DBh ke register TH0 dan niimmediate EFh ke register TL0. Setelah melakukan ini, maprogram pun akan mengeset nilai TF0 ke nilai nol dan TR0

    nilai satu. Setelah ini program akan kembali ke instruksi LJMuntuk langsung memasuki subrutin PENGALI1.Pada subrutin PENGALI1, program dilanjutkan deng

    instruksi INC yang menaikkan (increment) register RSetelah itu program dilanjutkan dengan instruksi CJNE yamenyatakan bahwa program akan melompat ke subruCHECK kembali apabila nilai R0 tidak sama dengan 32Selama nilai register ini belum mencapai 32h, maka prograakan terus berputar di sini. Setelah nilai register sama deng32h, maka program akan dilanjutkan dengan mengeset niregister R0 ke nilai nol kembali dan setelah itu program pakan melompat ke subrutin LED.

    Pada subrutin LED terdapat instruksi CJNE yamenginstruksikan program untuk membandingkan har

    kedua data, yaitu harga accumulator dan data immediate 00Jika keduanya memiliki harga yang berbeda, maka prograakan melompat ke subrutin NYALA. Jika harga paaccumulator adalah nol, maka program akan langsumelompat ke subrutin MATI.

    Karena pada awalnya nilai accumulator telah dismenjadi satu, maka program pun akan melompat ke subrutNYALA. Pada subrutin NYALA, harga port output yang teldihubungkan dengan port satu bit keempat diberi instrukSETB. Dengan instruksi ini, maka port output pun akmenyala. Setelah instruksi SETB yang mengeset port outpbit keempat, maka program dilanjutkan dengan instruksi MOyang memindahkan data immediate 00h ke accumulator

  • 7/25/2019 Jbptitbpp Gdl Jonggurans 30386 1 Laporan k

    3/6

    Setelah itu program akan memanggil subrutin CHECK(kembali ke CHECK).

    Kembali ke subrutin CHECK, maka program akanmelalui alur yang sama dengan sebelumnya. Tetapiprogram pun akan sampai ke subrutin MATI karenapada saat program ada di subrutin NYALA, nilaiaccumulator A telah diset ke nilai nol.

    Pada subrutin MATI, port output bit keempat pundiset ke nilai nol. Sehingga pada saat ini LED pun akanpadam. Setelah itu nilai accumulator pun akan diset

    menjadi nilai satu. Setelah ini program pun akanmelanjutkan ke subrutin CHECK dan begituseterusnya.

    Untuk program modifikasinya, kami membuatantara empat bit LSB dengan empat bit MSB berkedipsecara bergantian dengan waktu periode kedip LEDberkisar pada x detik. Dimana x didefinisikan sebagaiberikut

    X = (modulus 9 dari no grup) + 1Karena nomor grup kami adalah 48. Maka

    modulus-9 nya adalah tiga. Sehingga x adalah 4 detik.Jika pada program sebelumnya, port output yang

    berkedip hanyalah bit empat saja, maka kini port outputyang aktif adalah 8 buah. Untuk itu maka kamimelakukan inisialisasi harga port output dahulu padasubrutin START. Karena keempat bit output menyalabergantian, maka nilai awal yang harus dimasukkanharuslah berkelompok empat empat dengan nilai yangberbeda. Kemudian karena pada program sebelumnyadelay yang dihasilkan adalah satu detik, maka untukprogram kali ini kami hanya perlu membuat delaytersebut dikali dengan empat. Hal ini membuat batasnilai R0 yang di-increment diubah menjadi 4 kali 32h,yaitu B2h.

    Sehingga program modifikasinya adalah

    $MOD51

    ORG 4000HLJMP START

    START: MOV R0,#00HMOV R1,#00HMOV SP,#30HMOV P1,#0FFHSETB P1.0SETB P1.1

    SETB P1.2SETB P1.3CLR P1.4CLR P1.5CLR P1.6CLR P1.7MOV TMOD,#01HMOV TH0,0D8HMOV TL0,#0EFH

    SETB TR0MOV A,#0FFH

    CHECK: JNB TF0,CHECKLCALL RELOADLJMP PENGALI1

    PENGALI1: INC R0CJNE R0,#0B2H,CHECKMOV R0,#00HLJMP LED

    LED: CJNE A,#00H,NYALALJMP MATI

    MATI: SETB P1.0SETB P1.1SETB P1.2SETB P1.3CLR P1.4CLR P1.5CLR P1.6CLR P1.7MOV A,#0FFHLJMP CHECK

    NYALA: CLR P1.0CLR P1.1

    CLR P1.2CLR P1.3SETB P1.4

    SETB P1.5SETB P1.6SETB P1.7MOV A,#00HLJMP CHECK

    RELOAD: CLR TR0MOV TH0,#0D8HMOV TL0,#0EFHCLR TF0SETB TR0RETEND

    2. Percobaan II : Timer/Counter 0 sebagai Count

    Mode 2 (8-bit AutoReload)

    $MOD51CSEGORG 4000HLJMP START

    START: MOV P1,#00HMOV TMOD,#06HMOV TH0,#0FBHMOV TL0,#0FBHCLR TF0MOV A,#00H

    SETB TR0

    LED1: MOV A,TL0SUBB A,#0FBHJB TF0,LED2MOV P1,ALJMP LED1

    LED2: MOV P1,#0FFHACALL DELAYLJMP START

    DELAY: MOV R7,#04HLUP1: MOV R6,#0FFHLUP2: MOV R5,#0FFH

    DJNZ R5,$DJNZ R6,LUP2DJNZ R7,LUP1

    RETEND

    Pada percobaan ini kami menggunakan port 1 sebagoutput. Kami juga memasang kabel penghubung antara Idengan T0.

  • 7/25/2019 Jbptitbpp Gdl Jonggurans 30386 1 Laporan k

    4/6

    Yang dikerjakan dengan listing program di ataspertama-tama adalah memindahkan memori aktif kealamat 4000H yang merupakan alamat pada EEPROM.Hal ini dilakukan dengan menuliskan perintah CSEG.Tujuannya adalah untuk menjaga apabila terjadi halyang tidak diinginkan maka perintah masih tersimpanpada EEPROM dan tidak hilang. Kemudian programakan melanjutkan ke subrutin START dengan perintahLJMP.

    Di subrutin START pertama-tama kita akanmemindahkan nilai immediate 00h ke port P1.Sehingga pada saat ini port 1 yang terhubung ke outputakan bernilai nol untuk semua bit. Selanjutnya kitamelanjutkan ke instruksi MOV yang memindahkannilai immediate 06h ke register TMOD. Hal inidilakukan untuk mengeset mode timer yang akandigunakan. Dengan memasukkan nilai heksadesimalsebesar 06h, maka yang diset adalah bit C/~T(0) dan bitM1(0). Hal ini berarti bahwa fungsi yang dijalankanadalah counter, yaitu timer yang bersangkutan akan di-increment setiap transisi dari 1 ke 0 pada pin TX.

    Instruksi selanjutnya menyatakan pemidahan dataimmediate FBh ke TH0 dan TL0. Setelah itu program

    akan mengeset nilai TF0 menjadi nol dengan instruksiCLEAR dilanjutkan pemindahan data immediate 00hke accumulator A. Kemudian TR0 pun akan diset kenilai satu.

    Kemudian program akan melanjutkan ke subrutinLED1. Pada subrutin LED1 ini kita memindahkanharga TL0 ke accumulator A. Kemudian kamimengurangi immediate data FBh dari accumulator.Setelah itu instruksi JB akan membuat programmelompat ke subrutin LED2 apabila TF0 memiliki nilaisatu. Kemudian nilai accumulator dipindahkan ke portsatu. Instruksi terakhir dalam subrutin ini adalah LJMPLED1 yang mengindikasikan bahwa program akan

    melompat kembali ke subrutin LED1.Pada subrutin LED2, nilai immediate FFh akan

    dipindahkan ke port satu. Kemudian program pun akanmemanggil subrutin DELAY. Setelah kembali, makaprogram akan melompat kembali ke subrutin START.

    Sementara di subrutin DELAY, pertama-tamanilai immediate 04h akan dipindahkan ke register R7.Program akan melanjutkan ke subrutin LUP1 denganinstruksi yang memindahkan nilai FFh ke register R6dan pada subrutin LUP2 yang memindahkan nilai FFhke register R5. Setelah itu program akan melanjutkanke instruksi DJNZ yang akan mengurangi register R5dan akan jump ke awal selama nilai register tidak sama

    dengan nol. Di bawahnya terdapat instruksi yang sama unturegister R6 dan R7. Selama register R6 tidak nol, maregister tersebut akan dikurangi dan program akan melompke subrutin LUP2. Hal yang sama dilakukan untuk register RProgram akan melompat ke subrutin LUP1 selama nilaintidak sama dengan nol.

    Kami juga memodifikasi listing program tersebsehingga momen LED menyala semua sejenak setelha tombditekan sejumlah x kali dengan x didefinisikan dengan

    X = (modulus 9 dari no grup) + 1

    Untuk itu kami membuat program sebagai berikut

    $MOD51

    CSEGORG 4000HLJMP START

    START: MOV P1,#00HMOV TMOD,#06HMOV TH0,#0FBHMOV TL0,#0FBHCLR TF0MOV A,#00HSETB TR0

    LED1: MOV A,TL0SUBB A,#0FBHJB TF0,LED2MOV P1,ALJMP LED1

    LED2: MOV P1,#0FFH

    ACALL DELAYLJMP START

    DELAY: MOV R7,#0FFHLUP1: MOV R6,#0FFHLUP2: MOV R5,#0FFH

    DJNZ R5,$DJNZ R6,LUP2DJNZ R7,LUP1RETEND

    Pada program modifikasi di atas, kami mengganti nipada port A di subrutin DISPLAY dengan 1816 yamerupakan representasi heksadesimal dari 4810. Kami jumengganti switch input yang harus aktif pada bagian instrukJB dengan switch input bit ke nol.

    3. Percobaan III : Penggunaan INT0 dengan Interru

    Enable

    $MOD51CSEGORG 4000HLJMP STARTORG 4003HRL AMOV P1,AMOV R7,#04H

    LUPA: MOV R6,#FFHLUPB: MOV R5,#0FFH

    DJNZ R5,$DJNZ R6,LUPBDJNZ R7,LUPARETI

    ORG 4200H

    START: MOV SP,#30HMOV TCON,#01HMOV A,#01H

  • 7/25/2019 Jbptitbpp Gdl Jonggurans 30386 1 Laporan k

    5/6

    MOV P1,#01HMOV IE,#81HSJMP STARTEND

    Pada percobaan kali ini kami menggunakan port 1pada DT-51 MinSys sebagai port output danmenghubungkan IS1 dengan INT0.

    Program kali dimulai dengan memindahkanmemori aktif ke alamat 4000H yang merupakan alamatpada EEPROM. Hal ini dilakukan dengan menuliskan

    perintah CSEG. Kemudian program akan melompat kesubrutin START. Kemudian program melanjutkanmerotasi accumulator ke kiri. Setelah itu program akanmemindahkan accumulator ke port satu danmemindahkan data immediate 04h ke register R7.

    Pada subrutin START nilai 30h akan dipindahkanke stack pointer dan nilai 01h akan dipakai untukmenentukan TCON. Pada keadaan ini bit pada registerTCON yang aktif adalah bit IT(x). Jika bit inidiaktifkan maka interupsi eksternal akan terjadi saatterjadi transisi dari nilai 1 ke nilai 0. Mode ini disebutjuga dengan falling edge trigger.

    Setelah menentukan mode pada register TCON,sekarang program beralih memindahkan nilai 01h keaccumulator dan ke port satu. Instruksi MOV dibawahnya pun menyatakan pemindahan data immediate81h ke register IE. Hal ini akan menentukan bit manadalam register yang akan aktif. Jika nilai 81hdimasukkan, maka interrupt pun akan aktif.

    Kemudian untuk program modifikasi, kamidiminta untuk membuat LED bit 0, bit 1, bit 6, dan bit 7agar menyala. Ketika terjadi interrupt, maka bit ke 2,bit 3, bit 4, dan bit 5 yang akan menyala. Dan setelahinterrupt selesai, maka LED pun akan kembali kekondisi awal. Listing program yang baru adalah sebagaiberikut

    $MOD51CSEGORG 4000HLJMP START

    ORG 4033HMOV A,#3CHMOV P1,AMOV R7,#04H

    LUPA: MOV R6,#5FHLUPB: MOV R5,#FFH

    DJNZ R5,$DJNZ R6,LUPBDJNZ R7,LUPARETI

    ORG 4200H

    START: MOV SP,#30HMOV TCON,#01HMOV A,#0C3H

    MOV P1,#0C3HMOV IE,#81HSJMP STARTEND

    4. Percobaan IV : Penggunaan INT0 dan INT1 denga

    Interrupt Priority

    $MOD51CSEGORG 4000HLJMP START

    ORG 4003HLJMP INTER0

    ORG 4013HLJMP INTER1

    ORG 4100H

    INTER0: MOV P1,#0HSETB P1.0LCALL LDELAYCLR P1.0RETI

    INTER1: MOV P1,#0HSETB P1.7

    LCALL LDELAYMOV P1.7RETI

    ORG 4200H

    LDELAY: PUSH 7PUSH 6PUSH 5MOV R7,#24H

    LUPA: MOV R6,#0FFH

    LUPB: MOV R5,#0FFHDJNZ R5,$DJNZ R6,LUPBDJNZ R7,LUPAPOP 5POP 6POP 7RET

    SDELAY: PUSH 7PUSH 6PUSH 5

    MOV R7,#24HLUP1: MOV R6,#0FFHLUP2: MOV R5,#0FFH

    DJNZ R5,$DJNZ R6,LUP2DJNZ R7,LUP1POP 5

    POP 6POP 7RET

    START: MOV SP,#30HMOV TCON,#05HMOV IP,#04HMOV IE,#85H

    LOOP1: MOV P1,#01010101BACALL SDELAYMOV P1,#10101010BACALL SDELAYSJMP LOOP1

    END

  • 7/25/2019 Jbptitbpp Gdl Jonggurans 30386 1 Laporan k

    6/6

    Percobaan ini menggabungkan dua buah

    percobaan sebelumnya sehingga port PPI digunakansebagai input dan output. Diatur pula alamat kedua portyang digunakan (Port A dan Port B).

    Program kali inipun menggunakan delay dengancara membuat loop-loop pada sub rutin DELAY1,LUP2, dan LUP1. Lamanya delay dapat dihitungdengan cara menghitung jumlah siklus lalu dikalikandengan lamanya satu siklus mesin, yaitu 12 periode

    osilator. Karena frekuensi kristal 11,0595 MHz makasatu siklus mesin 12 x 1/f = 0,09042 s.

    $MOD51CSEGORG 4000HLJMP START

    ORG 4003HLJMP INTER0

    ORG 4013HLJMP INTER1

    ORG 4100H

    INTER0: MOV P1,#0HMOV P1,#99HLCALL LDELAYMOV P1,#66HRETI

    INTER1: MOV P1,#0HMOV P1,#0AAHLCALL LDELAYMOV P1,#55HRETI

    ORG 4200H

    LDELAY: PUSH 7PUSH 6PUSH 5

    MOV R7,#24H

    LUPA: MOV R6,#0FFH

    LUPB: MOV R5,#0FFHDJNZ R5,$DJNZ R6,LUPBDJNZ R7,LUPA

    POP 5POP 6POP 7RET

    SDELAY: PUSH 7PUSH 6PUSH 5

    MOV R7,#24HLUP1: MOV R6,#0FFHLUP2: MOV R5,#0FFH

    DJNZ R5,$DJNZ R6,LUP2DJNZ R7,LUP1

    POP 5POP 6POP 7RET

    START: MOV SP,#30HMOV TCON,#05HMOV IP,#01HMOV IE,#85H

    LOOP1: MOV P1,#11111111BACALL SDELAYMOV P1,#00000000BACALL SDELAYSJMP LOOP1

    END

    III.Kesimpulan

    1.

    DT-51 MinSys dapat digunakan untuk membuat progra

    yang memanfaatkan kontrol timer dan counter.2. Register yang dapat digunakan untuk menentukan mo

    timer dan kontrol timer antara lain TMOD, TCON, Tdan TL.

    3.

    Register TMOD dan TCON merupakan register 8 bRegister TMOD tidak dapat diakses per bit, sedangkTCON dapat diakses per bit.

    4. Timer/Counter memiliki berbagai mode yang dapdigunakan sesuai kebutuhan, di antaranya mode 0, 1, d2.

    5.

    Register-register yang dapat digunakan untuk kontrcounter antara lain IE dan IP.

    Daftar Pustaka[1] Modul Percobaan 1 Praktikum Sistem Mikrokontroler da

    Lab[2] Putra, Agfianto Eko. 2003.Belajar Mikrokontroler

    AT89C51/52/55 (Teori dan Aplikasi). Yogyakarta :Penerbit Gaya Media.