DAFTAR PUSTAKA Dr.Sjukri Karim, Dr Peter Kabo, EKG dan Penanggulangan beberapa penyakit jantung untuk dokter umum, Fakultas Kedokteran Unversitas Indonesia, 1996. Hendra Marwazi ST. MT, Anshor Usman Ibrahim ST. MT, Adisman Drs, BE, LAPORAN AKHIR PENELITIAN RISET PEMBINAAN TENAGA KESEHATAN Pengujian Akurasi Gelombang Fisiologi dari Rancang Bangun Simulator Electrocardiograph (ECG) Terhadap Sinyal Input Jenis Gelombang Simulasi Fisiologi Electrocardiograph. Departemen Kesehatan RI POLITEKNIK KESEHATAN JAKARTA II Jurusan Teknik Elektromedik, 2007. Agfianto Eko Putra, BELAJAR MIKROKONTROLLER AT89C51/52/53, Gava Media, 2005. Anisa Nova Yanti, SIMULATOR ECG, Departemen Kesehatan RI POLITEKNIK KESEHATAN JAKARTA II Jurusan Teknik Elektromedik, 2008 Couglin, Rober F., Frederick F. Driscoll, Penguat Operasional dan Rangkaian Terpadu Linear, Erlangga, 1992. Teori OP-AMP, http//abonk.blog.unsoed.ac.id/files/2009/06/02_op-amp.pdf, 12-11-2010. Triwiyanto, DEVELOPMENT BOARD MIKROKONTROLER 89S51, http:// www.mytutorialcafe.com, 18-10-2010. 57
ORG 0000H JMP MULAI ;=============== ;LCD KONSTANTA ;=============== DISPCLR EQU 00000001B ;Perintah u/ menghapus layar LCD FUNCSET EQU 00111000B ;Perintah u/ konfigurasi mode=8bit, 2baris,font=5x7 ENTRMOD EQU 00000110B ;Perintah u/ menggeser posisi kursor ke arah kanan DISPON EQU 00001100B ;Perintah u/ mengaktifkan Display ;========== ;PORT LCD ;========== LCDE BIT P1.1 LCDRS BIT P1.0 PLCD EQU P0 TB_ENT BIT P3.5 TB_UP BIT P3.6 TB_DOWN BIT P3.7 ;======================== PUTR EQU 70H ;============================================================ ============= ;PROGRAM UTAMA ;============================================================ ============= MULAI : MOV P2,#00 ;KOSONGKAN DAC MOV TMOD,#00010000B ;AKTIFKAN TIMER1 MODE1 CALL INITLCD ;INISIALISASI LCD MOV A,#080H ;CETAK DI BARIS ATAS LCD MOV DPTR,#TXT_1 ;PINDAHKAN TXT_1 KE DATAPOINTER ;CETAK TXT_1 MOV A,#0C0H ;CETAK DI BARIS BAWAH LCD MOV DPTR,#TXT_2 ;PINDAHKAN TXT_2 KE DATAPOINTER ;CETAK TXT_2 MOV A,#03 CALL DELAY3 ;PANGGIL DELAY 58
CALL INITLCD ;INISIALISASI LCD MOV A,#080H ;CETAK DI BARIS ATAS LCD MOV DPTR,#TXT_3 ;PINDAHKAN TXT_1 KE DATAPOINTER ;CETAK TXT_1 MOV A,#03 CALL DELAY3 ;PANGGIL DELAY CALL INITLCD MOV A,#080H ;CETAK DI BARIS ATAS LCD MOV DPTR,#TXT_4 ;PINDAHKAN TXT_3 KE DATAPOINTER ;CETAK TXT_3 MOV A,#0C0H ;CETAK DI BARIS BAWAH LCD MOV DPTR,#TXT_5 ;PINDAHKAN TXT_4 KE DATAPOINTER ;CETAK TXT_4 MOV A,#03 CALL DELAY3 ;PANGGIL DELAY CALL INITLCD MOV A,#080H ;CETAK DI BARIS ATAS LCD MOV DPTR,#TXT_6 ;PINDAHKAN TXT_5 KE DATAPOINTER ;CETAK TXT_5 MOV A,#0C0H ;CETAK DI BARIS BAWAH LCD MOV DPTR,#TXT_7 ;PINDAHKAN TXT_6 KE DATAPOINTER ;CETAK TXT_6 MOV A,#03 CALL DELAY3 ;PANGGIL DELAY CALL INITLCD MOV A,#080H ;CETAK DI BARIS ATAS LCD MOV DPTR,#TXT_8 ;PINDAHKAN TXT_7 KE DATAPOINTER ;CETAK TXT_7 MOV A,#0C0H ;CETAK DI BARIS BAWAH LCD MOV DPTR,#TXT_9 ;PINDAHKAN TXT_8 KE DATAPOINTER ;CETAK TXT_8 MOV A,#03 CALL DELAY3 ;PANGGIL DELAY LAGI: CALL INITLCD 59
MOV A,#080H ;CETAK DI BARIS ATAS LCD MOV DPTR,#TXT_1_0 ;PINDAHKAN TXT_9 KE DATAPOINTER ;CETAK TXT_9 S_30: MOV DPTR,#TXT_1_1 ;PINDAHKAN TXT_9 KE DATAPOINTER ;CETAK TXT_1_1 JNB TB_UP,S_60 ;CEK TOMBOL UP,JIKA DI TEKAN LOMPAT KE S_60 JNB TB_ENT,OK_1 ;CEK TOMBOL ENTER,JIKA DI TEKAN LOMPAT KE OK_1 JMP S_30 S_60 : MOV DPTR,#TXT_1_2 JNB TB_UP,S_120 S_60 JNB TB_DOWN,S_30 KE S_30 JNB TB_ENT,OK_2 KE OK_2 JMP S_60 S_120 : MOV DPTR,#TXT_1_3 JNB TB_UP,S_180 S_180 JNB TB_DOWN,S_60 KE S_60 JNB TB_ENT,OK_3 KE OK_3 JMP S_120 S_180 : ;PINDAHKAN TXT_9 KE DATAPOINTER ;CETAK TXT_1_2 ;CEK TOMBOL UP,JIKA DI TEKAN LOMPAT KE ;CEK TOMBOL DOWN,JIKA DI TEKAN LOMPAT ;CEK TOMBOL ENTER,JIKA DI TEKAN LOMPAT ;PINDAHKAN TXT_9 KE DATAPOINTER ;CETAK TXT_1_3 ;CEK TOMBOL UP,JIKA DI TEKAN LOMPAT KE ;CEK TOMBOL DOWN,JIKA DI TEKAN LOMPAT ;CEK TOMBOL ENTER,JIKA DI TEKAN LOMPAT 60
MOV DPTR,#TXT_1_4 JNB TB_DOWN,S_120 KE S_120 JNB TB_ENT,OK_4 KE OK_4 JMP S_180 ;PINDAHKAN TXT_9 KE DATAPOINTER ;CETAK TXT_1_4 ;CEK TOMBOL DOWN,JIKA DI TEKAN LOMPAT ;CEK TOMBOL ENTER,JIKA DI TEKAN LOMPAT ;====================ISI KOEFISIEN ECG================================== OK_1 : CALL PROSES MOV DPTR,#TXT_1_1 ;PINDAHKAN TXT_1_1 KE DATAPOINTER ;CETAK TXT_1_1 CALL PANAH2 MOV R1,#23H ;ISI REGISTER R1 DENGAN 23H MOV R2,#0B5H ;ISI REGISTER R2 DENGAN B5H SJMP SIAP OK_2 : CALL PROSES MOV DPTR,#TXT_1_2 CALL PANAH2 MOV R1,#0A5H MOV R2,#0DAH SJMP SIAP OK_3 : CALL PROSES MOV DPTR,#TXT_1_3 CALL PANAH2 MOV R1,#67H MOV R2,#0EDH SJMP SIAP ;PINDAHKAN TXT_1_2 KE DATAPOINTER ;CETAK TXT_1_2 ;ISI REGISTER R1 DENGAN A5H ;ISI REGISTER R2 DENGAN DAH ;PINDAHKAN TXT_1_3 KE DATAPOINTER ;CETAK TXT_1_3 ;ISI REGISTER R1 DENGAN 67H ;ISI REGISTER R2 DENGAN EDH 61
OK_4 : CALL PROSES MOV DPTR,#TXT_1_4 CALL PANAH2 MOV R1,#0A9H MOV R2,#0F3H SJMP SIAP ;PINDAHKAN TXT_1-4 KE DATAPOINTER ;CETAK TXT_1_4 ;ISI REGISTER R1 DENGAN A9H ;ISI REGISTER R2 DENGAN F3H ;===================KELUARKAN 96 DATA ECG============================ SIAP: MOV R4,#96 ;R4 DIISI DATA MOV DPTR,#TABEL_ECG ;PINDAHKAN DATA ECG KE Data Pointer LUUP : CLR A ;KOSONGKAN AKUMULATOR MOVC A,@A+DPTR ;NAIKAN 1 DATA ECG MOV P2,A ;KELUARKAN DATA ECG DI P.2 ACALL JEDA ;PANGGIL DELAY TIMER INC DPTR ;NAIKAN 1 DATA ECG DJNZ R4,LUUP ;KURANGI 1 DATA DI R4 CALL INTER ;CEK TOMBOL ENTER/STOP SJMP SIAP ;KELUARKAN LAGI DATA ECG ;==================DELAY DENGAN TIMER 1 MODE 1======================= JEDA : MOV TL1,R1 ;ISI TL1 DENGAN DATA DI R1 MOV TH1,R2 ;ISI TH1 DENGAN DATA DI R2 CLR TF1 ;MATIKAN FLAG LIMPAHAN TIMER1 SECARA MANUAL SETB TR1 ;HIDUPKAN TIMER 1 TUNGGU: JNB TF1,TUNGGU ;TUNGGU HINGGA MELIMPAH CLR TR1 ;MATIKAN TIMER 1 ;=========CETAKAN PROSES======================================== SAAT 62
PROSES: CALL INITLCD MOV A,#080H MOV DPTR,#TXT_2_3 CALL PANAH PANAH: MOV A,#0C0H MOV DPTR,#TXT_2_4 ;CETAK DI BARIS ATAS ;PINDAHKAN TXT_2_3 KE DATAPOINTER ;CETAK TXT_2_3 ;CETAK DI BARIS BAWAH (GDA SPASI) ;PINDAHKAN TXT_2_4 KE DATAPOINTER ;CETAK TXT_2_4 PANAH2: MOV A,#0CEH ;CETAK DI BARIS BAWAH (SPASI KE 14) MOV DPTR,#TXT_2_5 ;PINDAHKAN TXT_2_5 KE DATAPOINTER ;CETAK TXT_2_5 ;===================JIKA SELESAI================================ INTER : JNB TB_ENT,STOP LOMPAT KE STOP ;CEK TOMBOL ENTER/STOP,JIKA DI TEKAN STOP: MOV P2,#00 ;KOSONGKAN DAC MOV A,#DISPCLR CALL DELAY2 MOV A,#080H ;CETAK DI BARIS ATAS LCD MOV DPTR,#TXT_2_1 ;PINDAHKAN TXT_2_1 KE DATAPOINTER ;CETAK TXT_2_1 MOV A,#0C0H ;CETAK DI BARIS BAWAH LCD MOV DPTR,#TXT_2_2 ;PINDAHKAN TXT_2_2 KE DATAPOINTER ;CETAK TXT_2_2 MOV A,#04 CALL DELAY3 LJMP MULAI 63
;=================PROSEDUR STRING=========================== CETAK PRINTSTRINGLOOP: CALL LCDDAT ;panggil Subrutin LCDDAT INC DPTR ;Naikkan 1 datapointer LCDSTRING: CLR A ;kosongkan akumulator MOVC A,@A+DPTR ;pindahkan isi datapointer ke akumulator JNZ PRINTSTRINGLOOP ;jika belum kosong kembali ke sub.printstringloop ;=======PROSEDUR KONTROL BYTE OPERASI PADA LCD==================== LCDINS: MOV PLCD,A ;isi akumulator dikeluarkan di port.0 CLR LCDRS ;RS=0,data sebagai perintah SJMP LCDOUT ;lompat ke Subrutin LCDOUT LCDDAT: MOV PLCD,A ;isi akumulator dikeluarkan di port.0 SETB LCDRS ;RS=1, data ditampilkan ke layar LCD LCDOUT: SETB LCDE ;E=1,mengirim data ke LCD CALL DELAY ;panggil delay CLR LCDE ;E=0, berhenti mengirim data ke LCD CALL DELAY ;panggil Delay ;kembali ke program Utama ;=======PROSEDUR INISIALISASI LCD================================= INITLCD: MOV A,#DISPCLR ;Perintah menghapus layar LCD,dimasukan ke akumulator ;panggil subrutin LCDINS CALL DELAY ;panggil delay MOV A,#FUNCSET ;Perintah Function Setting,dimasukan ke akumulator ;panggil subrutin LCDINS CALL DELAY ;Panggil Delay MOV A,#DISPON ;Perintah Mengaktifkan display,dimasukan ke akumulator ;panggil LCDINS CALL DELAY ;Panggil Delay MOV A,#ENTRMOD ;Perintah Geser kursor, dimasukan ke akumulator ;panggil LCDINS CALL DELAY ;Panggl Delay MOV A,#DISPCLR ;Perintah menghapus layar LCD,dimasukan ke akumulator 64
;panggil subrutin LCDINS CALL DELAY2 ;panggil subrutin delay2 ;kembali ke program Utama ;=======PROSEDUR DELAY============================================ DELAY3: MOV PUTR,A ;isi akumulator dimasukan ke alamat 70H MUTERZ: CALL DELAY2 ;Panggil Delay2 DJNZ PUTR,MUTERZ ;JIka isi di 70H belum nol kembali ke sub.muterz ;kembali ke program Utama DELAY2: MOV R5,#94 ;Isi R5 dengan nilai 95 MUTERX: MOV R6,#250 ;Isi R6 dengan nilai 250 CALL DELAY ;panggil delay DJNZ R6,$ ;kurangi 1 nilai R6,jika belum nol ulangi 256x DJNZ R5,MUTERX ;kurangi 1 nilai R5,jika belum kembali ke sub.muterx ;kembali ke program Utama DELAY: MOV R3,#08 ;Isi R3 dengan nilai 8 MUTER: MOV R4,#0240 ;Isi R4 dengan nilai 240 DJNZ R4,$ ;kurangi 1 nilai R4,jika belum nol ulangi 256x sub.muter DJNZ R3,MUTER ;kurangi 1 nilai R3,jika belum nol kembali ke ;kembali ke program Utama ;============ SIAP CETAK KE LCD =================================== TXT_1 : DB ' SIMULASI ',0 TXT_2 : DB ' PEMBANGKIT ',0 TXT_3: DB ' SINYAL JANTUNG ',0 TXT_4 : DB ' IWAN MUSTOFA L ',0 TXT_5 : DB ' 4141011051 ',0 TXT_6 : DB ' FTI ELEKTRO ',0 TXT_7 : DB ' 2010 ',0 TXT_8 : DB ' UNIVERSITAS ',0 TXT_9 : DB ' MERCU BUANA ',0 TXT_1_0 : DB ' SETTING BPM:',0 TXT_1_1 : DB ' 30BPM ',0 TXT_1_2 : DB ' 60BPM ',0 65
TXT_1_3 : DB ' 120BPM ',0 TXT_1_4 : DB ' 180BPM ',0 TXT_2_1 : DB ' S T O P',0 TXT_2_2 : DB 'C O M P L E T E',0 TXT_2_3 : DB ' OUTPUT DATA : ',0 TXT_2_4 : DB '>>',0 TXT_2_5 : DB '<<',0 ;==========LOKUP TABLE DATA ECG=================================== TABEL_ECG: DB 28,28,28,28,28,28,28,28,28,28,28,28 DB 31,35,40,45,46,45,39,32,30,29,28,28 DB 28,28,28,28,24,19,53,87,122,73,22,25 DB 26,27,28,28,28,28,28,28,28,28,28,28 DB 32,36,40,44,48,51,54,60,62,63,61,58 DB 50,41,35,31,29,28,28,28,28,28,28,28 DB 28,28,28,28,28,28,28,28,28,28,28,28 DB 28,28,28,28,28,28,28,28,28,28,28,28 END 66
67