;=======================================================
; AUDIOMETER BERBASIS MIKROKONTROLER 89S51
;
;=======================================================
;Audiometer merupakan instrument yang digunakan untuk diagnosa ambang pendengaran manusia
;dengan mememberikan beberapa frekuensi audio tertentu dan tingkat intensitas tertentu pula
;Sinyal dibangkitkan dari generator sinus dan dipilih dengan menggunakan multiplexer 4051
;Amplitudo atau intensitas bunyi dapat diatur melalui DAC. Dengan mengumpankan sinyal audio
;ke Tegangan Reverensi dari DAC, sehingga output dapat diatur dengan ketelitian Vref/255
;=============================================================
; Prosedure Audiometri
;1. Headphone dipasang pada pasien yang akan didiagnosa ambang pendengarannya
;2. Pasien memegang tombol saklar yang harus ditekan bila mendengar suara dari audiometer
;3. Pada saat awal audiometer mengeluarkan sinyal dengan frekuensi paling rendah,125 Hz
; dengan amplitudo paling rendah 10 dB pada saat ini bila pasien tidak mendengarkan maka
; audiometer akan meningkatkan amplitudo ketingkat yang lebih tinggi secara automatik
;4. Bila pada amplitudo yang paling tinggi pasien tidak mendengar, maka audiometer akan
; menaikkan ke frekuensi yang lebih tinggi yaitu 250 Hz dengan amplitudo yang paling
; rendah
;5. Bila pasien mendengan maka pasien harus menekan tombol
;6. Bila ada penekanan tombol maka audiometer akan menaikkan ke tingkat frekuensi yang
; lebih tinggi lagi
;===============================================================
; Prosedur Program Audiometer berbasis Mikrokontroler 89s51
;1. Tampilan awal akan memunculkan form isian Nama pasien dan Tanggal sekarang pada layar
; LCD Character, yang dapat diinputkan melalui keyboard
;2. Setelah data-data diisikan maka sistem akan menunggu penekanan tombol Enter keyboard
; bila tombol enter ditekan maka sistem akan mulai mengerjakan prosedure audiometri
;3. Melalui multiplexer 4051 maka dipilih frekuensi yang paling rendah, 125 Hz dan dengan
; mengeluarkan data pada DAC maka akan dikeluarkan sinyal dengan frekuensi dan amplitudo
; tertentu.
;4. Melalui sistem interupsi timer 0, dengan mode 16 bit maka sinyal yang dioutputkan
; tersebut dapat diatur agar menaikkan amplitudo untuk setiap 10 detik:
; 0.05 x 200 = 10 detik bila pasien tidak menekan tombol, bila 10 amplitudo pasien
; tetap tidak mendengarkan bunyi maka secara automatik frekuensi dinaikkan ke tingkat
; yang lebih tinggi dan kembali pada amplitudo yang paling rendah
;5. Dengan memanfaatkan sistem interupsi eksternal 0, maka kita dapat melakukan interupsi
; agar dapat dilayani sistem bila pasien mulai mendengarkan suara
;6. Bila pasien mendengar maka akan menekan tombol sehingga akan terjadi proses penyimpanan
; data dB dan Frekuensi pada saat tersebut
;7. Bila proses telah selesai maka sistem akan membuka kembali data-data yang pernah
; tersimpan untuk dilakukan proses penyimpanan data
;================================================================
; POKOK-POKOK BAHASAN LISTING PROGRAM
;1. Interfacing Keyboard dengan Mikrokontroler
;2. Interfacing Printer dengan Mikrokontroler
;3. Interfacing LCD Character dengan Mikrokontroler
;4. Penerapan sistem interupsi timer dan interupsi eksternal
;5. Penerapan instruksi mov @R0,DataADC proses penyimpanan dan buka data pada RAM internal
;===================================================================
; KEMUNGKINAN MODIFIKASI
;1. Menggunakan generator sinus dari single IC agar dapat dibangkitkan frekuensi dan
; amplitudo yang lebih banyak atau bervariasi untuk mempertajam diagnosa
;2. Bila memungkinkan dapat menggunakan RAM Eksternal untuk proses penyimpanan data pasien
; yang lebih lengkap, selain nama dan tanggal(Alamat, Jenis Kelamin, Usia,Kanan atau Kiri).
;3. Modifikasi output ambang pendengaran pada tampilan LCD Graphic
;R0 = digunakan untuk Transfer data Frequency
;R1 = dugunakan untuk Transfer data Decibel
;R2 = Counter Down pada Convert Data DB dan Frequency
MUX equ P0 ;
DAC_Prnt equ P2 ;
tombol bit P3.2 ; INT0 = interupsi dari tombol pasien
DataFreq equ 30h
DataDb equ 31h
Count200 equ 32h
CounterDFreq equ 36h
CounterDDB equ 37h
;40h s/d 4fh untuk penyimpanan data Frequency
;50h s/d 5fh untuk penyimpanan data Decibel
;
org 00h
sjmp Start
org 03h ; alamat interupsi eksternal 0
ljmp Xternal_Interupsi_0; lompat ke rutin interupsi eksternal INT0
reti
org 0bh ; alamat interupsi timer 0
ljmp Timer_Interupsi_0 ; lompat ke rutin interupsi timer 0 TF0
org 13h
reti
org 23h
reti
;
Start: call init_DataF_DB
call Init_Interupsi_Xternal_Timer; Panggil Inisialisasi interupsi
Setb TR0
;
mov DataFreq,#0
mov CounterDFreq,#40h
mov CounterDDB,#50h
;
Clr A
mov DPTR,#DataDecibel
Movc A,@A+DPTR
Mov DataDB,A
;
;Perhatian!! bahwa program akan bersarang pada dua instruksi dibawah ini
;Tanda tanya besar. Kapan DataFreq atau DataDb berubah ?
;DataFreq atau decibel akan berubah bila bila kita memberikan interupsi
;yang dilakukan secara eksternal dengan memberikan nol pada INT0
;atau secara automatik interupsi dibangkitkan melalui Timer 0
;Dan rutin utama ini berjalan setelah menunggu tombol enter
;
Forever:
mov MUX,DataFreq ; Port yang terkoneksi ke Multiplexer 4051
mov DAC_Prnt,DataDb ; Port yang terkoneksi ke DAC
sjmp Forever ; Program akan terus menerus bersarang pada rutin ini
;
Xternal_Interupsi_0:
jnb P3.2,$
call Simpan_DataDBdanDataFreq
Mov Count200,#20 ;Bila terjadi interupsi Xternal, Counter Down Timer di Reset
call Inc_Freq ;Memanggil subrutin increment Frequency
reti
;
Inc_DB_Fr_Xternal:
Clr A
inc DPTR ;Increment ROM Address Data Decibel
movc A,@A+DPTR ;Memanggil data yang ada di ROM
cjne A,#'S',SendDb ;Deteksi apakah DB dalam batas akhir dengan Karakter 'S'
call inc_Freq ;Bila Ya maka akan memanggil subrutine Increment Frequency
SendDb: mov DataDB,A
ret
;
Inc_Freq:inc DataFreq ;Increment dataFreq terjadi bila DataDb telah mencapai batas
mov A,DataFreq ;maks
cjne A,#7,GO_Inc ;Mendeteksi apakah pemilihan frekuensi sudah batas maks
Clr TR0 ;Kalau Ya Sistem akan dimatikan
Clr EA ;Matikan Seluruh Interupsi, Timer dan Eksternal interupsi
acall PrintAll
quit: sjmp quit
GO_Inc: clr A ;Bila Frequency belum maksimal maka Reset Data Decibel
mov DPTR,#DataDecibel ;ke kondisi paling rendah
movc A,@A+DPTR
mov DataDB,A
ret
;
Timer_Interupsi_0: ;Interupsi ini akan terjadi setiap 0.05s dan harus diisi ulang
mov tl0,#0afh ;dengan data 3CAFh ke TL0 dan TH0 agar menghasilkan interupsi
mov th0,#03ch ;pada TF0 setiap 0.05 detik. Dari mana data ini ?
djnz Count200,EndIntr ;Counter down = 200 x 0.05s = 10 detik
mov Count200,#20 ;Bila interupsi eksternal tidak terjadi, maka DataDB atau
call Inc_DB_Fr_Xternal ;dan DataFreq akan di increment setiap 10 detik
EndIntr:
reti
;
Init_interupsi_XTernal_Timer:
mov R0,#40h
mov R1,#50h
mov Count200,#200 ; Inisialisasi untuk counter down 10 detik
mov tl0,#0afh
mov th0,#03ch
mov TMOD,#00000001b ; mode 1 timer 0 16 bit
setb ET0 ; Enable timer 0 interupsi
;
Setb IT0 ;Pengaktivan transisi negatif INterupsi Xternal 0
Setb EX0 ;Pengaktivan interupsi eksternal 0
Setb EA ; Master Enable All Interupsi
Setb PX0 ; Prioritas Utama Interupsi ada pada Eksternal Interupsi
ret
;
Simpan_DataDBdanDataFreq:
mov R0,CounterDFreq
mov R1,CounterDDB
mov @R0,DataFreq ; data akan disimpan pada alamat awal isi dari R0
mov @R1,DataDb ; data akan disimpan pada alamat awal isi dari R1
inc CounterDFreq ; increment Address RAM untuk Frequency
inc CounterDDB ;increment Address RAM untuk Frequency
ret
;
end
0 Comments
Informasi Pilihan Identitas:
Google/Blogger : Khusus yang punya Account Blogger.
Lainnya : Jika tidak punya account blogger namun punya alamat Blog atau Website.
Anonim : Jika tidak ingin mempublikasikan profile anda (tidak disarankan).