de
KITS
Application Note
AN24 - How 2 Use de KITS Phone Interface with
DT-51 MinSys ver 3.0
oleh: Tim IE & Stevy Suwarno (Universitas Kristen Petra)
A
pplication note ini menjelaskan tentang penggunaan de KITS Phone Interface. AN ini dibuat agar pengguna dapat mengerti bagaimana menggunakan produk ini, bahkan oleh pengguna awam sekalipun. Sebagai mikrokontroler, AN ini menggunakan DT-51 MinSys ver 3.0. tetapi tidak menutup kemungkinan jika ada pengguna yang menggunakan mikrokontroler lain.Modul-modul yang digunakan adalah: - DT-51 MinSys Ver 3.0
- de KITS Phone Interface
M
ENGHUBUNGKAN de KITS PHONE INTERFACE DENGAN DT-51 MINSYS1. Hubungkan Data pada de KITS Phone Interface dengan DATA & CS pada DT-51 MinSys ver 3.0 dengan menggunakan kabel pita.
2. Hubungkan Control pada de KITS Phone Interface dengan Control pada DT-51 MinSys ver 3.0 dengan menggunakan kabel pita.
3. Hubungkan Port 1 pada de KITS Phone Interface dengan Port C & Port 1 pada DT-51 MinSys ver 3.0 dengan menggunakan kabel pita.
Hubungan ketiga kabel terdapat pada gambar 1.
Catatan:
- Jika de KITS Phone Interface dihubungkan dengan DT-51 MinSys ver 3.0, maka tidak diperlukan sumber tegangan eksternal karena sudah mendapat tegangan dari hubungan Port Control de KITS Phone Interface dengan Port Control DT-51 MinSys ver 3.0 (Gambar 1).
- Jika de KITS Phone Interface tidak dihubungkan dengan DT-51 MinSys ver 3.0, maka dibutuhkan sumber tegangan eksternal (Gambar 2).
Gambar 2. Letak konektor untuk sumber tegangan eksternal pada de KITS Phone Interface Perhatikan!
Polaritas tegangan pada de KITS Phone Interface tidak boleh terbalik karena dapat menimbulkan kerusakan pada de KITS Phone Interface.
M
ENGHUBUNGKAN LCD DENGAN DT-51 MINSYS (YANG JUGA TERHUBUNG KE de KITS PHONE INTERFACE)LCD bersifat opsional. Jika dibutuhkan penggunaan LCD bersamaan dengan de KITS Phone Interface dalam satu DT-51 MinSys, maka LCD tidak bisa langsung dihubungkan dengan Port LCD pada DT-51 MinSys. Oleh karena itu dibutuhkan driver DLCDPPI.ASM agar bisa menggunakan LCD melalui Port PPI. Hubungannya adalah sebagai berikut:
Pin LCD
PORT LCD DT-51 MINSYS PORTA&PORTB DT-51 MINSYS Perhatikan!
Pin LCD tidak selalu sama. Lihatlah Manual PI.TXT untuk melihat alokasi pin-pin LCD. +5 V
GND
1
M
ODE de KITS PHONE INTERFACEDe KITS Phone Interface memiliki 2 mode yang bisa diatur melalui jumper (posisi jumper terdapat pada gambar 3).
Mode 1:
- Jumper mode tidak terhubung.
- De KITS Phone Interface bekerja dengan bantuan pesawat telepon untuk melakukan off hook. - Mode ini cocok untuk aplikasi antara lain: pengaman telepon dan anti interlokal.
- Untuk melakukan pulse dialing, jumper harus berada pada mode 1. Mode 2:
- Jumper mode terhubung.
- De KITS Phone Interface dapat bekerja dengan atau tanpa pesawat telepon untuk melakukan off hook. - Mode ini cocok untuk aplikasi antara lain: home automation dan home security.
- Mode ini sifatnya lebih general dibandingkan dengan mode 1.
Gambar 3. Letak jumper mode pada de KITS Phone Interface
M
EMPROGRAM de KITS PHONE INTERFACESecara garis besar, urutan untuk memprogram de KITS Phone Interface melalui DT-51 Minimum System ver 3.0 adalah seperti flowchart pada gambar 4.
Gambar 4. Flowchart pemrograman de KITS Phone Interface
P
ENJELASAN SINGKAT- Inisialisasi de KITS Phone Interface
Awal program diletakkan pada address 4000h. Interupt diletakkan pada address 400Bh.
File PHONEINT.ASM dan DLCDPPI.ASM (jika membutuhkan tampilan LCD) dimasukkan agar rutin-rutin yang tersedia dapat digunakan.
Pada AN ini akan ditambahkan file DSPLYLCD.ASM yang berisi data-data tampilan LCD dan nomor yang akan dipanggil.
- Menentukan Stack Pointer(SP)
Untuk menentukan posisi stack pointer. - Reset MT8888
Rutin ini harus dijalankan setelah de KITS Phone Interface diberi sumber tegangan dan sebelum rutin-rutin yang lain dijalankan. Untuk keterangan lebih lanjut terdapat di datasheet MT8888 pada file MT8888.pdf.
- Inisialisasi LCD
Untuk mengaktifkan LCD serta menginisialisasi hubungan LCD dengan DT-51 MinSys. - Inisialisasi MT8888
Rutin ini biasanya dijalankan setelah rutin Reset8888 dijalankan dan sebelum rutin-rutin yang lain dijalankan, tetapi bisa juga dijalankan kapan saja jika diinginkan perubahan mode / konfigurasi MT8888. - Program Utama
Bagian ini diisi dengan proses yang diinginkan.
CONTOH LISTING PROGRAM
CONTOH PROG1.ASM: $MOD51 $TITLE(PROG1.ASM) ;MODE1 ;---;Fungsi:Pulse Dialing |
;Rutin: Reset8888, Init8888 | ; CekDialTone,DPDialing |
;---;Program ini akan menunggu gagang dari pesawat telepon diangkat. Setelah mendengar dial tone, maka ;program ini secara otomatis akan menghubungi nomor yang dituju dengan pulse dialing.
CSEG ORG 4000H LJMP Start ORG 400BH LJMP ISR_Tim0 ORG 4100H $INCLUDE(PHONEINT.ASM) $INCLUDE(DLCDPPI.ASM) $INCLUDE(DSPLYLCD.ASM) ;---;MAIN PROGRAM
;---Start: MOV SP,#40H ;Menetapkan stack pointer pada 40h LCALL Reset8888 ;Reset MT8888
LCALL InitLCD ;Inisialisasi LCD MOV Mode,#DTMF1
LCALL Init8888 ;Inisialisasi MT8888
SETB P1.1 ;Set line condition
W4OffHook: JNB P1.1,$ ;Menunggu off hook W4DialTone: ACALL CekDialTone ;Cek dial tone
JNB DTFlag,W4DialTone ;Cek dial tone flag
LCALL DDialtone ;Menampilkan “READY” pada LCD
LCALL LDelay ;Long Delay
LCALL LDelay ;Long Delay
LCALL LDelay ;Long Delay
LCALL HapusLCD ;Menghapus LCD
LCALL DHP ;Menampilkan nomor telepon pada LCD MOV DPTR,#HP ;Isi DPTR dengan #phone
LCALL DPDialing ;Melakukan DP Dialing AJMP $ ;Berhenti END CONTOH PROG1b.ASM: $MOD51 $TITLE(PROG1b.ASM) ;MODE1 ;---;Fungsi:DTMF Dialing |
;Rutin: Reset8888, Init8888 | ; CekDialTone, DTMFDialing |
; WriteDTMF, ReadStat |
;---;Program ini akan menunggu gagang dari pesawat telepon diangkat. Setelah mendengar dial tone, maka ;program ini secara otomatis akan menghubungi nomor yang dituju dengan DTMF dialing.
CSEG ORG 4000H LJMP Start ORG 400BH LJMP ISR_Tim0 ORG 4100H $INCLUDE(PHONEINT.ASM) $INCLUDE(DLCDPPI.ASM) $INCLUDE(DSPLYLCD.ASM) ;---; MAIN PROGRAM
;---Start: MOV SP,#40H ;Menetapkan stack pointer pada 40h LCALL Reset8888 ;Reset MT8888
LCALL InitLCD ;Inisialisasi LCD MOV Mode,#DTMF1
LCALL Init8888 ;Inisialisasi MT8888
SETB P1.1 ;Memasukkan bit 1 pada port 1.1 W4OffHook: JNB P1.1,$ ;Menunggu off hook
W4DialTone: ACALL CekDialTone ;Cek dial tone
JNB DTFlag,W4DialTone ;Menunggu hingga ada dial tone LCALL HapusLCD ;Menghapus layer LCD
LCALL DHP ;Menampilakan #HP pada LCD
MOV DPTR,#HP ;Memasukkan #HP pada data pointer LCALL DTMFDialing ;Melakukan DTMF Dialing
AJMP $ ;Berhenti END CONTOH PROG2.ASM: $MOD51 $TITLE(PROG2.ASM) ;MODE1 ;---;Fungsi:Deteksi dial tone | ;Rutin: Reset8888, Init8888 |
; CekDialTone |
;---;Program ini akan menunggu gagang dari pesawat telepon diangkat. Setelah gagang dari pesawat telepon ;diangkat, maka program ini akan mengecek dial tone. Jika terdengar dial tone, maka akan ditampilkan ;”READY” pada LCD. Jika tidak terdengar dial tone, maka akan ditampilkan “NO DIAL TONE” pada LCD.
CSEG ORG 4000H LJMP Start ORG 400BH LJMP ISR_Tim0 ORG 4100H $INCLUDE(PHONEINT.ASM) $INCLUDE(DLCDPPI.ASM) $INCLUDE(DSPLYLCD.ASM)
;---;Print Hexadecimal (2 digit) ;---PH1: CJNE A,#0AH,$+3 JC LTA ADD A,#37H LCALL WriteLCD RET
LTA: ADD A,#30H
LCALL WriteLCD RET
PrintHex: PUSH ACC PUSH ACC SWAP A ANL A,#0FH ACALL PH1 POP ACC ANL A,#0FH ACALL PH1 POP ACC RET ;---;MAIN PROGRAM
;---Start: MOV SP,#40H ;Menetapkan stack pointer pada 40h LCALL Reset8888 ;Reset MT8888
LCALL InitLCD ;Inisialisasi LCD MOV Mode,#DTMF1
LCALL Init8888 ;Inisialisasi MT8888
SETB P1.1 ;Memasukkan bit 1 pada port 1.1 W4OffHook: JNB P1.1,$ ;Menunggu off hook
LCALL LDelay ;Long Delay
LCALL LDelay ;Long Delay
LCALL LDelay ;Long Delay
Ulang: ACALL CekDialTone ;Cek dial tone Chk1: JNB DTFlag,Chk2 ;Cek dial tone flag
LCALL HapusLCD ;Menghapus layar LCD
LCALL DDialtone ;Menampilkan “READY” pada LCD AJMP W4OnHook
Chk2: LCALL HapusLCD ;Menghapus layar LCD
LCALL Dnodialtone ;Menampilkan “NO DIAL TONE” pada layar LCD W4OnHook: JB P1.1,Ulang ;Menunggu on hook
AJMP W4OffHook END CONTOH PROG3.ASM: $MOD51 $TITLE(PROG3.ASM) ;MODE2 ;---;Fungsi:Pick up Otomatis dengan timer | ;Rutin: Reset8888, Init8888,ROOH,RingDet2 |
;---;Program ini akan pertama-tama akan mendeteksi kondisi line telepon apakah on hook atau off hook setelah ;itu apakah ada ring atau tidak. Jika ada ring, maka program akan menunggu sampai ring yang ke R7 ;sebelum telepon akan di”angkat” secara otomatis. Jika sampai batas waktu yang ditentukan irng belum ;mencapai R7, maka program akan kembali ke awal.
CSEG ORG 4000H LJMP Start ORG 400BH LJMP ISR_Tim0 ORG 4100H $INCLUDE(PHONEINT.ASM) $INCLUDE(DLCDPPI.ASM) $INCLUDE(DSPLYLCD.ASM) ;---; MAIN PROGRAM
;---Start: MOV SP,#40H ;Menetapkan stack pointer pada 40h MOV IE,#00H
LCALL Reset8888 ;Reset MT8888 LCALL InitLCD ;Inisialisasi LCD MOV Mode,#DTMF1
LCALL Init8888 ;Inisialisasi MT8888 Ulang: LCALL HapusLCD ;Menghapus layar LCD
ACALL ROOH ;Cek off hook atau ring JB Ring,DisplayRing ;Cek ring flag
DisplayOH: LCALL DOnhook ;Menampilkan “ON HOOK” pada LCD
LCALL Ldelay ;Long Delay
AJMP Ulang
DisplayRing: LCALL DRingExist ;Menampilkan “RING EXIST” pada LCD MOV R7,#2 ;Memasukkan angka 2 pada register7 ACALL RingDet2 ;Cek ada ring atau tidak dengan limit 3 menit JNB RingExist,Ulang2 ;Cek ring exist flag
SETB P1.2 ;Pick up phone
LCALL HapusLCD ;Menghapus layar LCD
LCALL DOffhook ;Menampilkan ‘OFF HOOK” pada layar LCD
LCALL LDelay ;Long Delay
AJMP $ ;Berhenti
Ulang2: LCALL LDelay ;Long Delay
AJMP Ulang END
CONTOH PROG3b.ASM: $MOD51 $TITLE(PROG3b.ASM) ;MODE2 ;---;Fungsi:Pick up Otomatis | ;Rutin: Reset8888, Init8888 |
; ROOH, RingDet1 |
;---;Program ini akan pertama-tama akan mendeteksi kondisi line telepon apakah on hook atau off hook setelah ;itu apakah ada ring atau tidak. Jika ada ring, maka program akan menunggu sampai ring yang ke R7 ;sebelum telepon akan di”angkat” secara otomatis.
CSEG ORG 4000H LJMP Start ORG 400BH LJMP ISR_Tim0 ORG 4100H $INCLUDE(PHONEINT.ASM) $INCLUDE(DLCDPPI.ASM) $INCLUDE(DSPLYLCD.ASM) ;---; MAIN PROGRAM
;---Start: MOV SP,#40H ;Menetapkan stack pointer pada 40h MOV IE,#00H
LCALL Reset8888 ;Reset MT8888 LCALL InitLCD ;Inisialisasi LCD MOV Mode,#DTMF1
LCALL Init8888 ;Inisialisasi MT8888
MOV R7,#2 ;Memasukkan nilai 2 pada register 7 Ulang: LCALL HapusLCD ;Menghapus layar LCD
ACALL ROOH ;Cek off hook atau ring JB Ring,DisplayRing ;Cek ring flag
DisplayOH: LCALL DOnhook ;Menampilkan “ON HOOK” pada LCD
LCALL LDelay ;Long Delay
AJMP Ulang
DisplayRing: LCALL DRingExist ;Menampilkan “RING EXIST” pada LCD ACALL RingDet1 ;Menunggu ring hingga R7 kali
JNB RingExist,Ulang2 ;Cek ring exist flag
SETB P1.2 ;Pick up phone
LCALL HapusLCD ;Menghapus layar LCD
LCALL DOffhook ;Menampilkan “OFF HOOK” pada LCD
LCALL LDelay ;Long Delay
AJMP $ ;Berhenti
Ulang2: LCALL LDelay ;Long Delay
AJMP Ulang END
CONTOH PROG4.ASM: $MOD51
$TITLE(PROG4.ASM) ;MODE1
;---;Fungsi:Cek Call Progress | ;Rutin: Reset8888, Init8888 | ; CekDialTone, DTMFDialing |
; CekCP |
;---;Program ini akan menunggu gagang dari pesawat telepon diangkat. Setalah itu program mendeteksi ;apakah ada dial tone atau tidak. Jika ada dial tone, akan dilakukan DTMF dialing. Terakhir Pengcekan call ;progress. Jika terdengar busy tone, maka akan ditampilkan “BUSY” pada LCD. Jika terdengar ring back, ;maka akan ditampilkan “RING BACK” pada LCD. Jika tidak terdengar keduanya, maka akan ditampilkan ;“FAIL” pada LCD CSEG ORG 4000H LJMP Start ORG 400BH LJMP ISR_Tim0 ORG 4100H $INCLUDE(PHONEINT.ASM) $INCLUDE(DLCDPPI.ASM) $INCLUDE(DSPLYLCD.ASM)
;---;Print Hexadecimal (2 digit) ;---PH1: CJNE A,#0AH,$+3 JC LTA ADD A,#37H LCALL WriteLCD RET
LTA: ADD A,#30H
LCALL WriteLCD RET
PrintHex: PUSH ACC PUSH ACC SWAP A ANL A,#0FH ACALL PH1 POP ACC ANL A,#0FH ACALL PH1 POP ACC RET ;---;MAIN PROGRAM
;---Start: MOV SP,#40H ;Menetapkan stack pointer pada 40h LCALL Reset8888 ;Reset MT8888
LCALL InitLCD ;Inisialisasi LCD MOV Mode,#DTMF1
SETB P1.1 ;Memasukkan bit 1 pada port 1.1 W4OffHook: JNB P1.1,$ ;Menunggu off hook
Wait4DTExist: ACALL CekDialTone ;Cek dial tone JNB DTFlag,Wait4DTExist ;Cek dial tone flag
LCALL DHP ;Menampilkan #HP pada LCD
MOV DPTR,#HP ;Memasukkan #HP pada data pointer LCALL DTMFDialing ;Melakukan DTMF dialing
Ulang: ACALL CekCP ;Cek call progress
Chk1: JNB BusyFlag,Chk2 ;Cek busy flag
LCALL HapusLCD ;Menghapus layar LCD
LCALL DBusytone ;Menampilkan “BUSY” pada LCD AJMP W4OnHook
Chk2: JNB RBFlag,Chk3 ;Cek ring back flag LCALL HapusLCD ;Menghapus layar LCD
LCALL DRingback ;Menampilkan “RING BACK” pada LCD AJMP W4OnHook
Chk3: LCALL HapusLCD ;Menghapus layar LCD
LCALL DFail ;Menampilkan “FAIL” pada LCD
W4OnHook: JB P1.1,$ ;Menunggu on hook
LCALL HapusLCD ;Menghapus layar LCD AJMP W4OffHook END CONTOH PROG5.ASM: $MOD51 $TITLE(PROG5.ASM) ;MODE1 ;---;Fungsi:Tampilan dial pulse | ;Rutin: Reset8888, Init8888 |
; GetDPNumber |
;---;Program ini akan menunggu gagang dari pesawat telepon diangkat. Setalah itu program mendeteksi ;apakah ada tombol dari pesawat telpon yang ditekan. Jika ada, maka akan ditampilkan angka yang sesuai ;dengan pulse dial yang ditekan pada LCD.
CSEG ORG 4000H LJMP Start ORG 400BH LJMP ISR_Tim0 ORG 4100H $INCLUDE(PHONEINT.ASM) $INCLUDE(DLCDPPI.ASM) ;---;MAIN PROGRAM
;---Start: MOV SP,#40H ;Menetapkan stack pointer pada 40h LCALL Reset8888 ;Reset MT8888
LCALL InitLCD ;Inisialisasi LCD MOV Mode,#DTMF1
SETB P1.1 ;Memasukkan bit 1 pada port 1.1 W4OffHook: JNB P1.1,$ ;Menunggu off hook
ambil: LCALL GetDPNumber ;Mengecek angka yang ditekan pada pesawat telepon EO_DP: CJNE A,#0AH,Print19 ;apakah angka 0 yang ditekan?
MOV A,#'0' ;Mengisi ‘0’ pada acc AJMP Print
Print19: ADD A,#30H ;Menambah 30h pada acc
Print: LCALL WriteLCD ;Menampilkan angka yang ditekan pada pesawat telepon AJMP ambil AJMP $ ;Berhenti END CONTOH PROG5b.ASM: $MOD51 $TITLE(PROG5b.ASM) ;MODE1 ;---;Fungsi:Tampilan DTMF signal | ;Rutin: Reset8888, Init8888 |
; ReadDTMF |
;---;Program ini akan menunggu gagang dari pesawat telepon diangkat. Setalah itu program mendeteksi ;apakah ada tombol dari pesawat telpon yang ditekan. Jika ada, maka akan ditampilkan angka yang sesuai ;dengan DTMF signal yang ditekan pada LCD.
CSEG ORG 4000H LJMP Start ORG 400BH LJMP ISR_Tim0 ORG 4100H $INCLUDE(PHONEINT.ASM) $INCLUDE(DLCDPPI.ASM) ;---; MAIN PROGRAM
;---Start: MOV SP,#40H ;Menetapkan stack pointer pada 40h MOV IE,#00H
LCALL Reset8888 ;Reset MT8888 LCALL InitLCD ;Inisialisasi LCD MOV Mode,#DTMF1
LCALL Init8888 ;Inisialisasi MT8888
SETB P3.2 ;Set interupt
SETB P1.1 ;Set line condition
W4OffHook: JNB P1.1,$ ;Menunggu off hook MOV A,#'A' ;Memasukkan ‘A’ pada acc LCALL WriteLCD ;Menampilkan pada layar LCD ;Pooling INT0 Pin
W4IRQ: JB P3.2,ChkHook ;Cek interupt AJMP GetDTMF
ChkHook: JB P1.1,W4IRQ ;Cek line condition
MOV A,#'T' ;Memasukkan ‘T’ pada acc LCALL WriteLCD ;Menampilkan pada layar LCD AJMP W4OffHook
GetDTMF: LCALL ReadStat ;Membaca status dari register MT8888
LCALL ReadDTMF ;Membaca hasil decode DTMF signal berupa DTMF digit ANL A,#0FH ;Menggunakan fungsi AND antara 0FH dengan acc CJNE A,#0CH,ChkDTMF ;Apakah yang ditekan ‘#’?
MOV A,#'#' ;Memasukkan ‘#’ pada acc LCALL WriteLCD ;Menampilkan pada layar LCD AJMP W4IRQ
ChkDTMF: CJNE A,#0AH,CDTMF19 ;Apakah yang ditekan ‘0’?
DTMF0: MOV A,#'0' ;Memasukkan ‘0’ pada acc
LCALL WriteLCD ;Menampilkan pada layar LCD AJMP W4IRQ
CDTMF19: CJNE A,#0BH,DTMF19 ;Apakah yang ditekan ‘*’?
DTMF11: MOV A,#'*' ;Memasukkan ‘*’ pada acc
LCALL WriteLCD ;Menampilkan pada layar LCD AJMP W4IRQ
DTMF19: ADD A,#30H ;Menambah 30h pada acc
LCALL WriteLCD ;Menampilkan pada layar LCD AJMP W4IRQ
END
Program Telepon Otomatis
Program ini akan membantu pemakai yang ingin mencoba program yang lebih kompleks lagi. Pada program telepon otomatis ini phone interface secara automatis akan menganalisa kondisi line telepon, setelah itu mengecek dial tone, menghubungi nomor telepon yang ditunjuk data pointer dan menganalisa call progress, terakhir kembali ke awal. Program ini juga dapat menganalisa dering pada saat phone interface dihubungi dari telepon luar.
Cara kerja program ini:
¾ Pertama-tama akan menganalisa kondisi line telepon, jika gagang dari pesawat telepon masih diletakkan, program akan mendeteksi apakah ada dering atau tidak. Jika tidak ada maka program akan kembali mendeteksi kondisi line telepon.
¾ Jika ada dering akan menunggu telepon diangkat. Setelah batas waktu yang ditentukan, hubungan telepon akan diputuskan secara otomatis dan kembali ke program awal.
¾ Pada saat pengecekan kondisi line telepon, jika gagang dari pesawat telepon diangkat, program akan menganalisa dial tone, dengan hasil:
Jika terdengar dial tone, maka akan ditampilkan “READY” pada LCD. Jika tidak terdengar, maka akan ditampilkan “NO DIAL TONE” pada LCD.
¾ Setelah pengecekan dial tone, program akan menampilkan nomor telepon yang akan dihubungi. Kemudian nomor tersebut akan dihubungi dengan DTMF dialing. Selanjutnya program akan mengecek call progress sebagai berikut:
Jika terdengar busytone, maka akan ditampilkan “BUSY” pada LCD. Jika terdengar ringback, maka akan ditampilkan “RING BACK” pada LCD. Jika tidak keduanya, maka akan ditampilkan “FAIL” pada LCD.
¾ Setelah penerima mengangkat telepon dari seberang, percakapan dapat berlangsung selama waktu yang ditentukan, setelah itu hubungan akan terputus, program akan menunggu telepon diletakkan dan kembali ke awal pogram.
LISTING PROGRAM BESAR.ASM
$MOD51
$TITLE(BESAR.ASM) ;MODE1
;Program ini akan melakukan pengecekan line condition,
;jika ada telepon masuk maka akan diterima secara otomatis bila
;sampai ring kedua belum diterima. Jika tidak, menunggu telpon diangkat. ;Melakukan pengecekan dial tone, pulse dialing, cek call progress. ;Bila telpon belum ditutup sampai batas waktu yang ditentukan, hubungan ;akan diputus, kembali ke langkah awal.
CSEG ORG 4000H LJMP Start ORG 400BH LJMP ISR_Tim0 ORG 4100H $INCLUDE(PHONEINT.ASM) $INCLUDE(DLCDPPI.ASM) $INCLUDE(DSPLYLCD.ASM)
;---;Print Hexadecimal (2 digit) ;---PH1: CJNE A,#0AH,$+3 JC LTA ADD A,#37H LCALL WriteLCD RET
LTA: ADD A,#30H
LCALL WriteLCD RET
PrintHex: PUSH ACC PUSH ACC SWAP A ANL A,#0FH ACALL PH1 POP ACC ANL A,#0FH ACALL PH1 POP ACC RET ;---; MAIN PROGRAM
;---Start: MOV SP,#40H ;Menetapkan stack pointer pada 40h LCALL Reset8888 ;Reset MT8888
LCALL InitLCD ;Inisialisasi LCD MOV Mode,#DTMF1
LCALL Init8888 ;Inisialisasi MT8888
SETB P1.1 ;Set line condition
W4OnHook: JB P1.1,Terangkat ;Check Line Condition AJMP Taruh
Terangkat: LCALL HapusLCD ;Membersihkan layar LCD LCALL DOffhook ;Display “OFF HOOK” pada LCD
LCALL LDelay ;Long Delay
Taruh: LCALL HapusLCD ;Membersihkan layar LCD LCALL DOnhook ;Display “ON HOOK” pada LCD
LCALL LDelay ;Long Delay
LCALL LDelay ;Long Delay
LCALL LDelay ;Long Delay
Cekring: JNB P1.0,Yring ;Check Ring or not AJMP Nring
Yring: LCALL HapusLCD ;Membersihkan layar LCD
LCALL Dringexist ;Display “RING EXIST” pada LCD
JNB P1.1,$ ;Menunggu off hook
Lanjut: LCALL HapusLCD ;Membersihkan layar LCD LCALL DOffhook ;Display “OFF HOOK” pada LCD Timerstart: PUSH 05H ;tunggu tutup atau waktu habis
PUSH 06H PUSH 07H MOV R5,#90 LDel2S2: MOV R6,#200 LDel2S1: MOV R7,#250 kurang: DJNZ R7,test AJMP berikut
test: JNB P1.1,tutup ;Bila ditutup, langsung kembali ke awal AJMP kurang berikut: DJNZ R6,LDel2S1 DJNZ R5,LDel2S2 tutup: POP 07H POP 06H POP 05H CLR P1.2 ;Hang up phone AJMP W4OnHook
Nring: LCALL HapusLCD ;Membersihkan layar LCD LCALL DNoring ;Display “NO RING” pada LCD
LCALL LDelay ;Long Delay
JNB P1.1,Cekring ;Cek gagang telepon sudah diletakkan LCALL HapusLCD ;Membersihkan layar LCD
LCALL DOffhook ;Display “OFF HOOK” pada LCD
LCALL LDelay ;Long Delay
LCALL LDelay ;Long Delay
LCALL LDelay ;Long Delay
ACALL CekDialTone ;Cek Dial Tone
JB DTFlag,Ada ;Mengecek dialtoneflag LCALL HapusLCD ;Membersihkan layar LCD
LCALL DNodialtone ;Display “NO DIAL TONE” pada LCD
LCALL LDelay ;Long Delay
AJMP W4OnHook
Ada: LCALL HapusLCD ;Membersihkan layar LCD
LCALL DDialtone ;Display “READY” pada LCD
LCALL Ldelay ;Long Delay
LCALL LDelay ;Long Delay
LCALL LDelay ;Long Delay
LCALL HapusLCD ;Membersihkan layar LCD
LCALL DHP ;Display #HP pada LCD
MOV DPTR,#HP ;Mengisi data pointer dengan #HP LCALL DTMFDialing ;DTMF Call
ACALL CekCP ;Cek Call Progress
JNB P1.1,kembali ;Cek gagang telepon sudah diletakkan Chk1: JNB BusyFlag,Chk2 ;Mengecek busyflag
LCALL HapusLCD ;Membersihkan layar LCD LCALL DBusytone ;Display “BUSY” pada LCD
LCALL Delay2S ;Delay 2 detik kembali: AJMP W4OnHook
Chk2: JNB RBFlag,Chk3 ;Mengecek ringbackflag LCALL HapusLCD ;Membersihkan layar LCD LCALL DRingback ;Display “RING BACK” pada LCD
LCALL LDelay ;Long Delay
AJMP Timerstart
Chk3: LCALL HapusLCD ;Membersihkan layar LCD LCALL DFail ;Display “FAIL” pada LCD LCALL Delay2S ;Delay 2 detik
AJMP W4OnHook END
TROUBLE SHOOTING
Berikut ini adalah beberapa permasalahan-permasalahan umum seputar penggunaan de KITS Phone Interface dan cara mengatasinya.
1. de KITS Phone Interface tidak aktif.
- Periksa apakah de KITS Phone Interface sudah mendapat supply tegangan yang sesuai.
- Periksa polaritas tegangan pada de KITS Phone Interface kemungkinan ada terbalik antara kutub positif-negatif.
2. Rutin-rutin yang disediakan tidak bisa digunakan ketika program dijalankan.
- Periksa apakah file PHONEINT.ASM pada program sudah dimasukkan (lihat contoh program). - Periksa apakah Reset8888 dan Init8888 sudah dipanggil di awal program.
3. Program tiba-tiba hang setelah dijalankan.
- Cek dulu apakah anda telah menetapkan nilai stack pointer. 4. LCD tidak mau menyala sama sekali.
- Periksa apakah LCD sudah mendapat supply tegangan dan polaritas tegangan tidak terbalik.(lihat keterangan pada bab 4)
- Periksa apakah contrast dari LCD sudah diatur. 5. LCD tidak mau bereaksi ketika program sudah didownload.
- Periksa apakah file DLCDPPI.ASM pada program sudah dimasukkan (lihat contoh program). 6. Tulisan pada LCD kacau ketika program dijalankan.
- Periksa hubungan LCD dengan PORTA&PORTB pada DT-51 MinSys. (lihat keterangan pada bab 4).
7. Contoh program Pulse Dialing tidak dapat dijalankan.