Facebook & Twitter Connect


Guesthackers Community

Guesthackers Community

Minggu, 18 April 2010

sensor ultrasonic

08-Nov-2008
sensor ultrasonic

Sensor ultrasonik adalah sensor yang bekerja berdasarkan prinsip pantulan gelombang suara dan digunakan untuk mendeteksi keberadaan suatu objek tertentu di depannya, frekuensi kerjanya pada daerah diatas gelombang suara dari 40 KHz hingga 400 KHz.

Prinsip kerja Sensor Ultrasonik

Sensor ultrasonik terdiri dari dari dua unit, yaitu unit pemancar dan unit penerima. Struktur unit pemancar dan penerima sangatlah sederhana, sebuah kristal piezoelectric dihubungkan dengan mekanik jangkar dan hanya dihubungkan dengan diafragma penggetar. Tegangan bolak-balik yang memiliki frekuensi kerja 40 KHz – 400 KHz diberikan pada plat logam. Struktur atom dari kristal piezoelectric akan berkontraksi (mengikat), mengembang atau menyusut terhadap polaritas tegangan yang diberikan, dan ini disebut dengan efek piezoelectric. Kontraksi yang terjadi diteruskan ke diafragma penggetar sehingga terjadi gelombang ultrasonik yang dipancarkan ke udara (tempat sekitarnya), dan pantulan gelombang ultrasonik akan terjadi bila ada objek tertentu, dan pantulan gelombang ultrasonik akan diterima kembali oleh oleh unit sensor penerima. Selanjutnya unit sensor penerima akan menyebabkan diafragma penggetar akan bergetar dan efek piezoelectric menghasilkan sebuah tegangan bolak-balik dengan frekuensi yang sama.

Besar amplitudo sinyal elekrik yang dihasilkan unit sensor penerima tergantung dari jauh dekatnya objek yang dideteksi serta kualitas dari sensor pemancar dan sensor penerima. Proses sensing yuang dilakukan pada sensor ini menggunakan metode pantulan untuk menghitung jarak antara sensor dengan obyek sasaran. Jarak antara sensor tersebut dihitung dengan cara mengalikan setengah waktu yang digunakan oleh sinyal ultrasonik dalam perjalanannya dari rangkaian Tx sampai diterima oleh rangkaian Rx, dengan kecepatan rambat dari sinyal ultrasonik tersebut pada media rambat yang digunakannya, yaitu udara.

Waktu di hitung ketika pemencar aktif dan sampai ada input dari rangkaian penerima dan bila pada melebihi batas waktu tertentu rangkaian penerima tidak ada sinyal input maka dianggap tidak ada halangan didepannya

Timer/Counter dan Interupsi

Timer/Counter

Timer berfungsi untuk mengatur waktu kerja yang dibutuhkan AT89S51/52, tersedia dua buah timer yaitu Timer 0 dan Timer 1, masing-masing timer terdiri dari 16 bit counter yang dapat diprogram.

Timer/Counter yang dioperasikan sebagai timer dapat digunakan untuk menghitung waktu dari sebuah kejadian. Nilai timer bertambah tiap machine cyle (12 pulsa clock) sehingga kecepatan bertambahnya ialah 1/12 dari frekwensi osilator. Dengan menggunakan Timer/Counter sebagai counter, maka Kit mikrokontroler akan selalu menghitung munculnya kejadian yang ditandai dengan adanya trigger. User tinggal memeriksa nilai counter pada saat yang ditentukan. Register-register Timer yang tersedia ialah :



TMOD (Timer Mode Register)

Register yang digunakan untuk mengatur timer/counter terdapat pada Timer Mode (TMOD) dan Timer Control (TCON). TMOD tidak dapat diakses secara bit (not bit addressable), beralamat di 89H. Gambar dibawah ini memperlihatkan alamat dan pembagian register TMOD





Gambar 4.1 Register TMOD

Penjelasan dari gambar di atas ialah :



Ø Gate: Timer akan berjalan bila bit ini set dan INT0 (untuk Timer 0) atau INT1 (untuk Timer 1) berkondisi high

Ø C/T: 1 = Counter 0 = Timer

Ø M1 & M0: Untuk memilih mode timer, seperti pada Tabel 4.1:



Tabel 4.1 Mode Operasi Timer /Counter

M1


M0


Mode Operasi

0


0


0


Timer/Counter 13 bit

0


1


1


Timer /Counter 16 bit

1


0


2


Timer/Counter 8 bit auto reload

1


1


3


Split timer mode untuk timer/counter 0

1


1


3


Timer/Counter 1 berhenti



4.1.2 THx dan TLx

THx dan TLx (x adalah nomor Timer).Merupakan Register yang menunjukkan nilai dari timer di mana masing-masing Timer mempunyai dua buah register yaitu:

- THx untuk high byte

- TLx untuk low byte

· TH0 : Timer 0 High Byte terletak pada alamat 8AH

· TL0 : Timer 0 Low Byte terletak pada alamat 8BH

· TH1 : Timer 1 High Byte terletak pada alamat 8CH

· TL1 : Timer 1 Low Byte terletak pada alamat 8DH



Misal register Timer/Counter 0 diisi dengan nilai 814AH dan register Timer/Counter 1 diisi dengan nilai 0CF32H, maka instruksinya sebagai berikut :

MOV TH0,#81H

MOV TL0,#4AH

MOV TH1,#0CFH

MOV TL1,#32H



4.1.3 TCON (Timer Control Register)

Pada register ini, hanya 4 bit saja yaitu TCON.4, TCON.5, TCON.6 dan TCON.7 saja yang mempunyai fungsi berhubungan dengan timer.







Gambar 4.2 Register TCON



Tabel 4.2 menampilkan penjelasan dari Timer control .





Tabel 4.2 Timer Control



Bit


Alamat bit


Simbol


Penjelasan

TCON.7


8FH


TF1


Timer/Counter 1 overflow flag

TCON.6


8EH


TR1


Timer 1 Run Control Bit

TCON.5


8DH


TF0


Timer /Counter 0 overflow flat

TCON.4


9CH


TR0


Timer 0 Run Control Bit

TCON.3


8BH


IE1


External Interrupt 1 Edge flag

TCON.2


8AH


IT1


External interrupt 1 type control bit

TCON.1


89H


IE0


External Interrupt 0 Edge flag

TCON.0


88H


IT0


External interrupt 0 Type control bit



Penjelasan dari gambar dan tabel diatas ialah :



Ø TCON.7 atau TF1: Timer 1 Overflow Flag yang akan set bila timer overflow. Bit ini dapat di-clear oleh software atau oleh devais pada saat program menuju ke alamat yang ditunjuk oleh interrupt vektor.

Ø TCON.6 atau TR1: 1 = Timer 1 aktif, 0 = Timer 1 non aktif

Ø TCON.5 atau TF0: Sama dengan TF1

Ø TCON.4 atau TR0: Sama dengan TR1



Jika Timer/Counter yang diprogram akan digunakan sebagai sumber interrupt, maka IE dan /atau IP juga harus diatur. Misal kedua Timer/Counter digunakan sebagai sumber interrupt dengan prioritas Timer/Counter 1, maka instruksinya :



MOV IP,#80H

MOV IE,#8AH

atau

SETB PT1

SETB ET1

SETB ET0

SETB EA



Mode Timer

Mode Timer terdiri dari:



Mode 0 Timer 13 bit

Pada Mode 0, disediakan terutama untuk menjaga kompatibilitas dengan prosesor 8048. pada Mode 0, register TLx (TL0 atau TL1) hanya digunakan 5 bit terendah saja sedangkan register THx (TH0 atau TH1) tetap selebar 8 bit. TLx akan terus bertambah hingga bernilai 1FH. Overflow akan terjadi jika ada perubahan dari FF1FH ke 0000H. Nilai THx dan TLx dapat diubah oleh user setiap saat dalam program.



Mode 1 Timer 16 bit



Mode 1 pada 89C51 semua bit TLx digunakan, sehingga mode 1 merupakan timer/counter 16 bit. TLx akan bertambah hingga bernilai FFH. Pada saat ada perubahan nilai TLx dari FFh ke 00H, THx akan bertambah 1. Nilai maksimal THx dan TLx ialah FFFFH (THx=FFH dan TLx =FFH). Overflow akan terjadi jika ada perubahan dari FFFFH ke 0000H.

Gambar 4.3 Timer/Counter Mode 1









Misalnya Timer/Counter 0 digunakan sebagai timer dalam mode 2 dengan external control dan Timer/Counter 1 digunakan sebagai counter dalam mode 1 dengan internal control, maka instruksinya :



MOV TMOD,#5AH



Sedangkan untuk menjalankan kedua timer, instruksinya :



MOV TCON, #50H

atau

SETB TR0

SETB TR1



Mode 2 Timer 16 bit di 89S52

Mode 2 ialah timer/counter 16 bit yang dapat beroperasi sebagai timer atau event counter. Timer 2 mempunyai 3 mode yaitu capture, auto-reload dan baud rate generator. Timer 2 terdiri dari 2 buah register 8 bit yaitu TH2 dan TL2. Berikut table Mode 2 pada 89S52.



Tabel 4.3 Timer Mode 2 89S52

RCLK+TCLK


CP/RL2


TR2


MODE

0


0


1


16 bit auto reload

0


1


1


18 bit capture

1


x


1


Baud Rate Generator

x


x


0


Off



Pada mode capture, 2 pilihan dipilih oleh bit EXEN2 di T2CON. Jika EXEN2=0, Timer 2 menjadi 16 bit timer atau counter dimana tergantung dari overflow set bit TF2 di T2CON. Bit ini dapat digunakan untuk membuat sebuah interupsi.





Gambar 4.4 Mode Capture





Timer 2 dapat diprogram untuk menghitung naik/mundur ketika dikonfigurasikan sebagai mode 16 bit auto-reload. Fitur ini dipanggil oleh bit DCEN (Down Counter Enable) yang berada di SFR T2MOD.

Gambar 4.5 Timer 2 Mode Auto reload (DCEN=0)



Timer 2 sebagai baud rate generator dengan menset TCLK dan/atau RCLK di T2CON. Sbeagai catatan, baud rate untuk mengirim dan menerima dapat berbeda jika Timer 2 digunakan untuk mengirim atau memancarkan dan Timer 1 digunakan untuk fungsi lainnya. Menset RCLK dan /atau TCLK membantu Timer 2 berada pada mode baud rate generator



Gambar 4.6 Mode baud rate generator

Mode 3

Pada Mode 3 di 89C51, Timer/Counter 0 akan menjadi 2 timer/counter 8 bit, sedangkan Timer/Counter 1 akan berhenti. TL0 akan menjadi timer/counter 8 bit yang dikendalikan oleh bit control Timer/Counter 0 (meliputi GATE, C/T’, TR0, INT0, dan TF0). TH0 akan menjadi timer 8 bit (bukan counter) yang dikendalikan oleh bit control timer/counter 1 (meliputi TR1 dan TF1).Timer /Counter 1 masih dapat dioperasikan dalam mode selain mode 3.





Penerapan Timer/Counter

Timer bekerja memerlukan sumber detak dengan menghubungkan pin T0 (P3.4) sebagai input detak. Jika digunakan sumber detak internal, input detak berasal dari osilator yang telah dibagi 12. Untuk pengaturan Timer dengan software maka bit penentu keaktifan ialah Rtx sedangkan kondisi dari Bit Gate harus berlogika 0. Pengaturan Timer dengan hadware, penentu keaktifan ialah INTx sedangkan kondisi Bit Gate dan TRx harus berlogika 1.

Timer ini sering digunakan untuk mengatur baud rate dari port serial. Dengan mengubah bit SMOD yang terletak pada register PCON menjadi set (kondisi awal pada saat sistem reset adalah clear) maka baud rate pada Mode 1, 2 dan 3 akan berubah menjadi dua kali lipat.



Contoh program berikut ialah penggunaan fasilitas Timer pada mikrokontroler . Untuk menggunakan Timer/Counter 0 sebagai timer mode 1, maka GATE, C/T dan M1 untuk Timer 0 pada TMOD berlogika 0 dan M0 berlogika 1 sehingga TMOD bernilai 01H. Sedangkan untuk menjalankan Timer 0, maka TR0 (TCON.4) berlogika 1 sehingga TCON bernilai 10H. Pada contoh dibawah ini Timer 0 diberi nilai awal 2CH untuk TH0 dan 00H untuk TL0 sehingga Timer 0 akan selalu dimulai dari nilai 2C00H. Karena frekwensi timer tinggi, maka digunakan faktor pengali 10H yang berada pada R0.

Langkah-langkah :

· Hubungkan Port 1 DT-51 dengan “PORT OUTPUT” DT-51 Trainer Board

· Hubungkan “CONTROL” DT-51 dengan “CONTROL“ DT-51 Trainer Board

· Buat program berikut :



Program timer untuk Led berkedip (timer.asm)

$MOD51

CSEG

ORG 4000H

LJMP START

ORG 400BH

COUNT: INC R0

CJNE R0,#10H,OUT1

SETB P1.5

LOOP: MOV R6,#0FFH

DJNZ R6,$

DJNZ R7,LOOP

CLR P1.5

MOV R0,#00H

OUT1: MOV TH0,#2CH

MOV TL0,#00H

RET1

;inisialisasi

ORG 4200H

START: MOV SP,#30H

MOV R0,#00H

MOV TMOD,#01H

MOV TH0,#2CH

MOV TL0,#00H

MOV TCON,#10H

MOV P1,#00H

MOV IE,#82H

SJMP $

END



Jika program dijalankan, akan menampilkan nyala LED Bit 5 berkedip dimana baru akan dinyalakan atau dipadamkan setelah interupsi oleh Timer 0 sebanyak 16 x. Perhatikan pada saat interupsi, program akan melompat ke alamat vector 000BH tetapi oleh DT51 akan langsung dipindah ke alamat 400BH.



Contoh berikut menggunakan Timer/Counter 0 Counter Mode 2, langkah-langkahnya :

* Hubungkan Port 1 DT-51 dengan Port output DT-51 trainer board menggunakan kabel tipe Y.
* Hubungkan Control DT-51 dengan Control DT-51 Trainer board (sebagai sumber tegangan dan koneksi T0) menggunakan kabel tipe X
* Hubungkan IS3 MinSys dengan T0 pada DT-51 Trainer board
* Hubungkan DT-51 dengan PC menggunakan kabel serial
* Ketik program berikut :



Program Counter Mode 2 (mode2.asm)

$MOD51

CSEG

ORG 4000H

LJMP START

ORG 400BH

MOV P1, #00H

SETB P1.5

PUSH 5

PUSH 6

PUSH 7

MOV R7,#0FH

LUPA: MOV R6,#0FFH

LUPB: MOV R5,#0FFH

DJNZ R5,$

DJNZ R6,LUPB

DJNZ R7,LUPA

POP 7

POP 6

POP 5

RETI

ORG 4100H

DELAY:MOV R7,#04H

LUP1: MOV R6,#0FFH

LUP2: MOV R5,#0FFH

DJNZ R5,$

DJNZ R6,LUP2

DJNZ R7,LUP1

RET

;inisialisasi

START: MOV SP,#30H

MOV TMOD,#06H

MOV TH0,#0FAH

MOV TL0,#0F6H

SETB TR0

CLR TF0

MOV IE,#82H

;Program Utama

LOOP1: MOV P1,#00110011B

ACALL DELAY

MOV P1,#11001100B

ACALL DELAY

SJMP LOOP1

END



Program akan menampilkan nyala LED bergantian antara data 00110011b dengan 11001100b. Pada saat terjadi interupsi, maka LED bit 5 akan menyala sejenak. Untuk menggunakan Timer/Counter 0 sebagai counter mode 2, maka GATE dan M0 untuk Timer 0 pada TMOD berlogika 0 dan C/T dan M1 berlogika 1, sehingga TMOD bernilai 00000110b atau 06H. Untuk menjalankan counter 0, maka TR0(TCON.4) berlogika 1, sehingga TCON bernilai 0010000b atau 10H. Perintah CLR TF0 digunakan untuk memberikan interrupt flag sebelum interupsi diaktifkan. Untuk mengaktifkan interrupt counter 0, maka EA (IE.7) dan ET0(IE.1) berlogika 1, sehingga IE bernilai 10000010b atau 82H. Pada contoh program diatas, counter 0 diberi nilai awal F6H untuk TL0, sehingga membutuhkan 10 x penekakan keypad IS3 untuk menghasilkan interupsi pertama. Dan sebagai nilai reload pada TH0 diberi nilai FAH, sehingga hanya membutuhkan 6 x penekanan keypad IS3.



Penerapan lainnya, misal jika kita ingin membuat bunyi dengan frekwensi 1Hz, periodanya ialah T=1/f, perioda yang dihasilkan ialah 1 detik. Dengan demikian perioda port tinggi ialah 0.5 detik dan perioda port rendah ialah 0.5 detik.



Gambar 4.7 Rangkaian driver speaker



Assumsikan bahwa frekwensi detak 12 MHz, maka tundaan maksimum yang dicapai ialah 65535 x 1 uS =0.065 detik. Untuk itu timer digunakan sebagai penghasil tundaan selama 0.01 detik (10.000 x 1 uS). Dengan pembagi 50 akan didapat tundaan 0.01 detik x 50 =0.5 detik. Nilai untuk TH0 dan TL0 ialah :



65535 -10.000=55535D=D8EFH



Nilai untuk TH0 ialah D8H dan untuk TL0 ialah EFH. Berikut contoh program penghasil bunyi di speaker:



Listing Program 6. Penghasil bunyi di speaker (bunyi.asm)

$MOD51

ORG 00H ; MENGGUNAKAN ALAMAT AWAL MIKRO





MULAI: SETB P1.0

ACALL TUNDA

CLR P1.0

ACALL TUNDA

SJMP MULAI

TUNDA: MOV R0,#0

LAGI: MOV TMOD, #01

MOV TH0, #0D8H

MOV TL0, #0EFH

SETB TR0

ULANG: NOP

JBC TF0, HITUNG

SJMP ULANG

HITUNG: INC R0

CJNE R0, #100, LAGI

RET



END



Interupsi



Program yang sedang dijalankan oleh mikrokontroler AT89S51/52 dapat dihentikan untuk sementara yang dikenal dengan instilah interupsi. Jika AT89S51/52 mendapat permintaan interupsi maka program counter (PC) akan diisi alamat dari vector interupsi, kemudian AT89S51/52 melaksanakan rutin pelayanan interupsi mulai dari alamat tersebut setelah selesai maka AT89S51/52 akan kembali ke pelaksanaan program utama yang ditinggalkan. Mikrokontroler AT89S51/52 menyediakan 6 sumber interupsi yaitu 2 buah interupsi eksternal (INT 0 dan INT 1), 3 buah interupsi timer (Timer 0, Timer 1, dan Timer 2), dan sebuah interupsi port serial.

Interupsi ialah suatu sela yang terjadi pada saat program sedang berjalan. Mirip halnya dengan interupsi yang terjadi pada saat rapat yang sedang berlangsung. Interupsi berguna jika terdapat suatu rutin yang dijalankan hanya pada waktu tertentu yang bersifat asinkron.



Berikut Interrupt Enable pada MCS-51:



Tabel 4.4 Interrupt Enable

Bit


Alamat bit


Simbol


Penjelasan

IE.7


0AFH


EA


Enable All

-


-


-


Reserved

-


-


-


Reserved

IE.4


0ACH


ES


Serial Interrupt Enable Bit

IE.3


0ABH


ET1


Timer/Counter 1 Enable bit

IE.2


0AAH


EX1


External Interrupt 1 enable Bit

IE.1


0A9H


ET0


Timer /Counter 0 Enable Bit

IE.0


0A8H


EX0


External Interrupt 0 Enable Bit





Jika terjadi interupsi, maka interrupt flag akan bernilai 1 pada bit yang menunjukkan sumber interrupt. Jika CPU menemukan adanya interrupt pada saat sampling, proses selanjutnya ialah CPU akan menjalankan instruksi LCALL yang akan menyimpan Program Counter (PC) ke stack dengan urutan 8 bit terendah terlebih dahulu. Jika sumber interupsi berasal dari Timer/Counter atau External interrupt, interrupt flag yang bersangkutan akan dibersihkan.

Pastikan juga user mengamankan nilai register dengan menggunakan PSW, ACC, B, R0-R7 dan DPTR. Selain itu, register yang di-PUSH pertama harus di-POP terakhir. Selain itu, gunakan RETI agar fungsi kembali ke alamat semula.



Contoh program berikut merupakan Penggunaan INT0 dengan interrupt enable.

Langkah-langkahnya :

* Hubungkan port 1 dt-51 dengan “PORT OUTPUT” DT-51 trainer board menggunakan kabel Tipe Y
* Hubungkan “Control” DT-51” MinSys dengan “Control “DT-51 trainer board
* Hubungkan “IS1” dengan “INT0” pad DT-51 trainer board
* Hubungkan DT-51 MinSys dengan PC menggunakan kabel serial

Buat proram berikut :



Program Interrupt Enable (ie.asm)

$MOD51

CSEG

ORG 4000H

LJMP START

ORG 4003H

RL A

MOV P1,A

MOV R7,#04H

LOOPA: MOC R6, #0FFH

LOOPB: MOV R5,#0FFH

DJNZ R5,$

DJNZ R6,LOOPB

DJNZ R7,LOOPA

RETI

ORG 4200H

;inisialisasi

START: MOV SP,#30H

MOV TCON,#01H

MOV P1,#01H

MOV IE,#81H

SJMP $

END



Program diatas akan menampilkan nyala LED dari Bit 0 dan bergeser ke kiri setiap ada penekanan keypad “IS1”. Untuk mengunakan INT0 dengan falling edge trigger maka INT0 (TCON.0) berlogika 1, sehingga TCON bernilai 00000001b(01H). Untuk mengaktifkan interrupt, maka EX0 (IE.0) dan EA(IE.7) berlogika 1 sehingga IE bernilai 10000001b (81H), terlihat juga bahwa pada saat interupsi program melompat ke alamat vector 0003H yang oleh DT-51 langsung dipindah ke alamat 4003H. Fungsi DJNZ digunakan untuk mengurangi satu dan lompat jika hasilnya bukan nol.



Contoh penggunaan interupsi lainnya, program berikut akan menggunakan INT0 dan INT1 dengan Interrupt Priority.

Langkah-langkahnya :

1. Hubungkan Port 1 DT-51 dengan Port Ouput DT-51 Trainer board menggunakan kabel tipe Y
2. Hubungkan Control DT-51 MinSys dengan Control DT-51 Trainer board menggunakan kabel tipe X
3. Hubungkan IS1 dengan INT0 dan IS2 dengan INT1 pada DT-51 trainer board
4. Hubungkan DT-51 MinSys dengan PC menggunakan kabel serial
5. Ketik program berikut :



Program INT0 dan INT1 (inprio.asm)

$MOD51

CSEG

ORG 4000H

LJMP START

ORG 4003H

LJMP INTER0

ORG 4013H

LJMP INTER1

ORG 4100H

INTER0: MOV P1,#0H

SETB P1.0

LCALL LDELAY

CLR P1.0

RETI

INTER1: MOV P1,#0H

SETB P1.7

LCALL DELAY

CLR P1.7

RETI

ORG 4200H

LDELAY: PUSH 7

PUSH 6

PUSH 5

MOV R7, #24H

LUPA: MOV R6, #0FFH

LUPB: MOV R5, #0FFH

DJNZ R5, $

DJNZ R6, LUPB

DJNZ R7, LUPA

POP 5

POP 6

POP 7

RET



SDELAY: PUSH 7

PUSH 6

PUSH 5

MOV R7, #04H

LUP1: MOV R6, #0FFH

LUP2: MOV R5, #0FFH

DJNZ R5, $

DJNZ R6, LUP2

DJNZ R7, LUP1

POP 5

POP 6

POP 7

RET



;inisialisasi

START: MOV SP,#30H

MOV TCON, #05H

MOV IP, #04H

MOV IE, #85H

;Program Utama

LOOP1: MOV P1,#01010101B

ACALL SDELAY

MOV P1, #10101010B

ACALL SDELAY

SJMP LOOP1

END



Progam akan menampilkan nyala LED yang bergantian. Setiap kali ada penekanan keypad IS1, hanya LED bit 0 yang akan menyala. Setiap kali ada penekanan keypad IS2, hanya led bit 7 yang akan menyala. Untuk menggunakan INT0 dan INT1 dengan falling edge trigger (transisi dari high ke low), maka IT1(TCON.2) dan IT0 (TCON.0) berlogika 1, sehingga TCON bernilai 00000101b atau 05H. Untuk memindah INT1 ke tingkat prioritas lebih tinggi, maka PX1 (IP.2) berlogika 1 sehingga IP bernilai 00000100b atau 04H.

Untuk mengaktifkan INT0 dan INT1, maka EX0(IE.0), EX1(IE.2), dan EA (IE.7) berlogika 1, sehingga IE bernilai 10000101b atau 85H. Rutin interrupt pada alamat vector 4003H dan 4013H dipindah ke alamat lain dengan perintah LJMP. Hal ini dilakukan agar rutin dapat lebih panjang tanpa khawatir menerjang alamat vector berikutnya. Perhatikan bahwa penekanan keypad IS2 dapat menginterupsi rutin penekanan keypad IS1, tetapi tidak sebaliknya. Hal ini dikarenakan INT1 berada pada tingkat prioritas lebih tinggi. Perhatikan juga bahwa SDELAY menggunakan alamat yang sama dengan LDELAY. Untuk menghindari kekacauan nilai, maka diperlukan PUSH dan POP.





LATIHAN :

1. Jelaskan cara kerja timer/counter di AT89C51 dan AT89S52

2. Buat tampilan animasi menggunakan 7 segment trainer board, sebagai contoh berikut akan menampilkan angka ‘7’ dan ‘5’ di 7 segment trainer board



$MOD51

PORTC EQU 2002H

CW EQU 2003H

CSEG

ORG 4000H

LJMP START
DELAY: MOV R6,#0FH

LUP: MOV R7,#0FFH

DJNZ R7,$

DJNZ R6,LUP

RET

START: MOV SP,#30H

MOV DPTR,#CW

MOV A,#80H;konfigurasi Port A,B dan C

MOVX @DPTR,A

LOOP:

;menampilkan angka 5 di 7 segment 1

MOV DPTR,#PORTC

MOV A,#80H

MOV @DPTR,A

MOV P1,#6DH

LCALL DELAY

;menampilkan angka 7 di segment 2

MOV A,#40H

MOV @DPTR,A

MOV P1,#07H

LCALL DELAY

SJMP LOOP

END



Jika tidak ada kesalahan, program akan menampilkan angka 7 pada segment 2 dan angka 5 pada segment 1 secara serentak tanpa berkedip. Pada program tersebut, D01 terhubung dengan Port C bit ke 6 (PC.6) dan D02 terhubung dengan Port C bit ke 7 (PC.7). Untuk menampilkan angka 7 pada segment 2, maka D02 berlogika 0 dan D01 berlogika 1, jadi data 7 segment yang dikirim bernilai 00000111b atau 07H.

Untuk menampilkan angka 5 pada segment 1, maka D02 bernilai 1 dan D01 berlogika 0, maka data yang dikirim ke port 1 bernilai 01101101b atau 6DH.









3. Jelaskan fungsi interupsi dan efeknya bagi program yang sedang berjalan

4. Buatlah program untuk menampilkan led di port 1 dengan CO1 yang dihubungkan ke T1 pada DT-51 trainer board dan jumper Pulse Generator pada 1KHz, dengan syarat:

1. Semua led dimulai dari keadaan padam
2. Gunakan Timer/Counter 0 sebagai Timer mode 1
3. Setiap timer 0 berjalan selama 1 detik, register counter 1 ditampilkan ke LED secara bergantian.
4. Sebelum keluar dari Interrupt Service Routine Timer 0, kembalikan semua register kedua Timer/Counter menjadi 0000H lagi.
5. Ulangi lagi latihan tersebut dengan jumper “Pulse Generator” pada 10KHz.

5. Buat program jika P1.1 diberi logika 1, maka Port A akan menampilkan nyala lampu Running LED ke arah kiri, sedangkan jika p1.2 yang diberi logika 1, maka port B akan menampilkan nyala lampu Running LED ke arah kanan.

6. Buat program untuk menampilkan LED di port B dengan toggle switch di port C untuk kondisi :

a. Jika toggle switch “bit 2” berlogika “1”, maka semua LED akan padam

b. Jika toggle switch “Bit 2” berlogika ‘0’, program akan memeriksa kondisi toggle switch “Bit 5”

c. Jika toggle switch “Bit 2” berlogika ‘0’ dan toggle switch “Bit 5” berlogika ‘0’, led “Bit 2” menyala.

d. Jika toggle switch “Bit 2” berlogika ‘0’ dan toggle switch “Bit 5” berlogika ‘1’, LED “Bit 5” menyala.

Tag printah membuat robot sederhana

$MOD51

ORG 00H
;inisialisasi awal
BEGIN: MOV P3,#00H ;Port2 0x00 (motor stop)
MOV P1,#03H ;Port0.0 dan Port0.1 logika 1 (rendah aktif)
;bisa juga MOV P1,#00000011B (dalam biner)
ACALL TUNDA_1S ;tunda dulu
ROTASI:SJMP MAIN
TESTDRIVE: ACALL MAJU ;robot maju 3 detik
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL MUNDUR ;robot mundur 3 detik
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL B_KANAN ;robot belok kanan 3 detik
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL B_KIRI ;robot belok kiri 3 detik
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL ROTASI ;robot rotasi 3 detik
ACALL TUNDA_1S
ACALL TUNDA_1S
ACALL TUNDA_1S
MOV P3,#00H ;test drive selesai
ACALL TUNDA_1S ;diam 1 detik (siap" neh)

MAIN: ACALL MAJU ;default robot maju
ACALL TUNDA ;tunda 100ms
JNB P1.0,S_KIRI ;cek sensor kiri
JNB P1.1,S_KANAN ;cek sensor kanan
SJMP MAIN ;looping terus menerus

S_KIRI: JNB P1.1,S_DUA ;cek dlu kanan jg tersentuh atau tdk?
ACALL B_KANAN ;sensor kiri tersentuh belok kanan
ACALL TUNDA_1S
SJMP MAIN

S_KANAN: ACALL B_KIRI ;sensor kanan tersentuh belok kiri
ACALL TUNDA_1S
SJMP MAIN

S_DUA: ACALL MUNDUR ;sensor kiri n kanan tersentuh robot mundur
ACALL TUNDA_1S
ACALL ROTASI ;setelah mundur robot rotasi
ACALL TUNDA_1S
ACALL TUNDA_1S
SJMP MAIN ;ke program utama
S_DEPAN:ACALL K_DEPAN;SENSOR DEPAN TERSENTUH HIDUPKAN KIPAS
ACALL TUNDA_1S
ACALL TUNDA_1S
SJMP MAIN
MAJU: MOV P3,#0011 ;konfigurainya coba" aja
RET
MUNDUR: MOV P3,#1010
RET
B_KANAN: MOV P3,#1011
RET
B_KIRI: MOV P3,#0100
K_DEPAN: MOV P2,#1111
RET

;-----------------------------------
; TUNDA
;-----------------------------------
TUNDA_1S: ACALL TUNDA_05S ; tunda selama 1 S
ACALL TUNDA_05S
RET

TUNDA_05S: MOV A,#100 ; tunda selama 0,5 S
TUNDA_LOOP: LCALL TUNDA_MODE
DJNZ ACC,TUNDA_LOOP
RET

TUNDA: MOV A,#20 ; tunda selama 100 mS
TUNDAX: LCALL TUNDA_MODE
DJNZ ACC,TUNDAX
RET

TUNDA_MODE: PUSH TMOD ; tunda selama 5 mS
MOV TMOD,#21H
MOV TH0,#0EDH
MOV TL0,#0FFH
SETB TR0
TUNDA_5MS: JBC TF0,TUNDA_OK
SJMP TUNDA_5MS
TUNDA_OK: CLR TR0
POP TMOD
RET

END

My online



Slider

Follow on facebook or twiter

Blog ini dibuat oleh Guesthackers

Bagikan ini |

Puisi Indonesia

Sindikasi news.okezone.com

Pemberitahuan Facebook Peoople Hack Saputra

Yahoo blog