Tutorial sains praktis dan kecerdasan buatan  

Home

About Me Rangkaian Elektronik Tutorial Download Produk Informasi

 

 

 

 

Interrupt Handling in AT89C51

 

Prosedur interupsi pada mikrokontroler merupakan program yang akan dijalankan terlebih dahulu meskipun mikrokontroler sedang menjalankan program utama (dengan kata lain prosedur interupsi merupakan prosedur sela). Ketika interupsi terjadi, maka program utama dihentikan, kemudian mikrokontroler menjalankan prosedur interupsi hingga selesai, setelah prosedur interupsi selesai dieksekusi maka mikrokontroler akan kembali menjalankan program utama.

 

Terdapat lima jenis sumber interupsi dalam mikrokontroler AT89C51, yaitu dua buah interupsi ekternal (INT0 dan INT1), dua buah interupsi counter/timer (T0 dan T1) serta interupsi komunikasi serial.

 

Interupsi Eksternal

Interupsi ini diaktifkan secara level atau transisi rendah, tergantung pada kondisi bit IT0 dan IT1 pada register TCON. Sedangkan secara umum, interupsi eksternal dikendalikan melalui IE0 dan IE1 pada register TCON. Supaya interupsi ini dikenali, maka vektor alamat interupsi harus dideklarasikan pada awal program. Berikut ini adalah contoh program untuk menangani interupsi eksternal 0 (alamat vektor 03h) untuk menghitung maju dan mundur (tergantung level tegangan pada P0.0). Hasil cacahan dikeluarkan leat P1 dan P2. Interupsi terjadi ketika terjadi perubahan level dari tinggi ke rendah (TCON.0 di set). Inisialisasi register dilakukan setelah label mulai, sedangkan program utama (mengeluarkan data cacahan ke P1 (byte rendah) dan P2 (byte tinggi)) disajikan di bawah label ulang

 

$mod51

;TCON.0 set/clear adlh falling/low level

;IE.7 set/clear adlh enable/disable semua interrupt

;IE.0 =INT0 set/clear adlh enable/disable eksternal 0 interrupt

            org 00h

            jmp mulai

            org 03h

            jmp hitung

 

mulai:    setb TCON.0

            setb IE.0

            setb IE.7

            mov a, #00h

            mov r0, #0f8h

           

ulang:    mov p1, a

            mov p2, r0

            jmp ulang

 

hitung:   jb P0.0, maju

            subb a, #01h

            jc kurang1

            jmp keluar

 

maju:    add a, #01h

            jc nambah1

            jmp keluar

 

kurang1:cjne r0, #0f0h, kurang

            jmp reset

kurang: dec r0

            jmp keluar

 

nambah1: cjne r0, #0ffh, nambah

             jmp reset

nambah:            inc r0

             jmp keluar

 

reset:    mov a, #00h

            mov r0, #0f8h

 

keluar:  reti

 

end

 

Interupsi Counter/Timer

 

Yang dibahas di halaman ini adalah interupsi timer 0 (alamat vektor adalah 0bh) untuk menghitung naik isi register R6 dan ditampilkan melalui P1.Timer yang diaktifkan memiliki kapasitas 16bit (mode 1), dengan kristal 11,0592 MHz, maka diperoleh penambahan isi register R6 setiap 1 detik. Inisialisasi register (TMOD, TCON dan IE) dilakukan setelah label mulai, sedangkan program utama dieksekusi setelah label ulang

 

$mod51

            org 00h

            jmp mulai

            org 0bh

            ajmp hitung

mulai:

            mov p1, #00h

            mov a, #00h

            mov r6, #00h

            mov tmod, #81h

            mov tcon, #00h

            mov ie, #00h

            setb ie.7

            setb ie.1

            setb tr0

ulang:    mov a, r6

            mov p1, a

            lcall tunda

            jmp ulang

 

;prosedur interupsi

hitung:cjne r5, #00h , maju

            mov r5, #14

maju: dec r5

            cjne r5, #00, exit

            cjne r6, #100, maju2

            mov r6, #00

maju2:  inc r6

exit:      reti

 

;prosedur tunda

tunda:  

            mov  r1, #255

kurang:            

            dec r1

            cjne r1, #00h, kurang

            ret

end

 

 

 

Interupsi Komunikasi Serial

 

- Pengiriman Data (transmit)

 

Ketika kita akan mengirimkan data secara serial menggunakan AT89c51, maka beberapa hal yang harus dipersiapkan adalah:

1. Menentukan mode komunikasi serialnya.

2. Menentukan kecepatan pengiriman data (baud rate)

 

Mode komunikasi ditentukan dengan mengisi register SCON sesuai dengan tabel pada data sheet-nya. Pada contoh berikut, mode komunikasinya adalah mode 1 (pengiriman data 8 bit dengan satu bit start dan satu bit stop), sehingga SCON dimuati data 40h, untuk menentukan baud rate, kita dapat mengaturnya menggunakan timer 1 dengan mode timer yang dapat direload (mode 2), sehingga kita isi dengan 20h. Serta mengisi register TH1 dengan nilai sebesar 0cch untuk menghasilkan baud rate sebesar 600,9 (kristal yang digunakan adalah 12 MHz).  Jangan lupa untuk menset bit ES, pada register IE serta (untuk mengaktifkan timer) bit TR1 dari register TCON juga harus diset.Contoh program sederhana untuk pengiriman data dapat dilihat di bawah ini:

 

;program untuk mengirim isi data pada r7

$mod51

            org 00h
            jmp setting

setting:
            mov p0, #00
            mov p1, #00
            mov r7, #00
            mov tmod, #20h
            mov scon, #40h
            mov th1, #0cch
            setb tr1
            setb es
mulai:  

            call delay
            cjne r7, #100, nambah
            mov r7, #00
            jmp terus
nambah:

            inc r7
terus:

            mov a, r7
            mov sbuf, a
            jnb ti, $
            clr ti
            sjmp mulai

delay: ;mode pengurangan 5x255
            mov r0, #250
loop1:

            mov r1, #255
loop: 

            dec r1
            cjne r1,#00, loop
            dec r0
            cjne r0, #00, loop1
ret
end

 

- Penerimaan Data (receive)

 

Untuk menerima data dari rangkaian yang memiliki program seperti di atas, maka beberapa hal yang harus diperhatikan adalah:

1. Mode komunikasi serialnya harus sama.

2. Kecepatan penerimaan data (baud rate)-nya juga harus sama.

 

Sehingga untuk membuat programnya, maka register-register yang berperan harus diisi dengan bilangan yang sama, kecuali SCON, maka bir REN harus diset, sehingga SCON diisi dengan 50h. Untuk mendeteksi adanya kiriman data melalui interupsi, maka vektor interupsi komunikasi serial harus dideklarasikan yaitu org 23h, serta bit ES, dan EA pada register IE harus diset. Untuk mengaktifkan timer maka bit TR1 dari register TCON juga harus diset. Program sederhana untuk menerima kiriman data dari program di atas adalah seperti di bawah ini. (data yang diterima akan ditampilkan pada P1)

 

$mod51

              org 00h
              jmp setting
              org 23h
              jmp terima

setting:
              mov tmod, #20h
              mov scon, #50h
              mov th1, #0cch
              setb EA
              setb ES
              setb tr1

ulang:
              mov p1, a
              jmp ulang


terima:    mov a, sbuf
              clr ri
              reti
end

 

 

 

 

Home

About Me Rangkaian Elektronik Tutorial Download Produk Informasi

Contact Webmaster 

© 2008 Wakhyu Dwiono