Membuat Penundaan Terhadap Suatu Proses

Proses penundaan sangat berguna untuk aplikasi-aplikasi mikrokontroler, sebagai contoh untuk lama aktivasi nyala lampu dsb. Penundaan (delaying) dapat dilakukan dengan cara menghentikan kerja dari mikrokontroler dalam artian memaksa mikrokontroler untuk tidak melakukan kerja.
5.1 Program Membuat LED Aktif Berkelap-kelip
Program ini akan membuat LED yang terhubung pada P2 akan aktif secara berkelap-kelip dengan penundaan waktu tertentu.
Program 4
org 0000h
Main:
mov p2, #0ffh
acall Delay
mov p2, #0
acall Delay
sjmp Main
Delay:
mov r0, #10
Loop:
djnz r2, Loop
djnz r1, Loop
djnz r0, Loop
ret
Untuk mengatur penundaan dapat dilakukan dengan mengubah nilai variable pada r0 (register 0), semakin besar nilai yang dimasukkan maka interval penundaan akan semakin lama. Dengan nilai variable maksimum yang dapat diinputkan adalah 255.
5.2 Program Membuat LED Bergeser Ke Kiri dan Ke Kanan
Program ini akan membuat LED yang terhubung pada P2 akan bergeser ke kiri dan ke kanan dengan penundaan waktu sehingga dapat terlihat pola pergeserannya.
Program 5
org 0000h
Main:
mov a, #11111110b
LoopMain: acall Delay
mov p2, a
rl a
sjmp LoopMain
Delay:
mov r0, #10
Loop:
djnz r2, Loop
djnz r1, Loop
djnz r0, Loop
ret
Program diatas akan membuat tampilan LED bergeser ke kiri secara perbit. Untuk membuat arah pergeseran berubah kearah kanan maka dapat dilakukan dengan cara merubah syntax rl (rotate left) menjadi rr (rotate right).
5.3 Membuat Pewaktuan (Timing) Terhadap Suatu Proses
Mikrokontroler AT89S51 mendukung pewaktuan yang presisi. Pewaktuan tersebut dibangkitkan oleh osilator eksternal yang dapat dikendalikan / diatur dengan mudah yang bernama TIMER. AT89S51 memiliki dua perangkat Timer yaitu Timer-0 dan Timer-1 yang masing-masing dapat bekerja sendiri sesuai mode aktivasi yang dipilih, dimana modenya terdiri dari mode 0, mode 1, dan mode 2.
5.3.1 Program Membuat LED Berkelap-kelip dengan Timer 0 Mode 1
Berikut adalah program untuk LED menyala berkelap-kelip dengan fungsi pewaktuan memanfaatkan Timer 0 mode 1 pada mikrokontroler.
Program 6
org 0000h
cacah equ -50000
Main:
mov tmod, #00000001b
LoopMain: acall Delay1Sec
mov p2, #0ffh
acall Delay1Sec
mov p2, #00h
sjmp LoopMain
Delay1Sec:
mov r0, #20
LoopDelay:
mov th0, #high(cacah)
mov tl0, #low(cacah)
setb tr0
jnb tf0, $
clr tr0
clr tf0
djnz r0, LoopDelay
ret
Dengan mode 1, maka cacahan akan dimasukan masing-masing ke register TH0 dan TL0, nilai variable r0 berfungsi untuk faktor pengali nilai cacahan, semakin besar nilai yang diinputkan (maksimal 255) maka interval penundaan akan semakin lama. Nilai -50000 (maksimal 65536) dipilih karena mode 1 adalah 16 bit ruang timer yang bersifat pencacah biner naik. Subprogram “Delay1Sec” di atas akan memberikan waktu tunda 1 Detik pada Xtal = 12 MHz.

sumber : http://depokinstruments.com/2008/03/27/21-membuat-penundaan-terhadap-suatu-proses/#more-64

Komentar

Postingan Populer