Audiometer


;=======================================================
; 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

Post a Comment

0 Comments