PHONE BOOK TELEPON DENGAN MENGGUNAKAN MIKROKONTROLER AT89C51
TUGAS AKHIR Diajukan Sebagai Salah Satu Syarat Untuk Memperoleh Gelar Sarjana (Strata-1)
Oleh : HERI HERDIANA 4140411-168
JURUSAN TEKNIK ELEKTRO FAKULTAS TEKNOLOGI INDUSTRI UNIVERSITAS MERCUBUANA JAKARTA 2008
i
LEMBAR PENGESAHAN
Nama
:
Heri Herdiana
NIM
:
4140411-168
Peminatan
:
Elektronika
Judul Tugas Akhir
: Phone Book Telepon dengan menggunakan Mikrokontroler AT89C51
Jakarta, 16 Februari 2008
Disetujui dan disahkan oleh : Pembimbing,
(Jaja Kustija, MSc)
Mengetahui, Koordinator Tugas Akhir
(Yudhi Ghunardi ST,MT)
Ketua Jurusan,
(Ir. Budi Yanto Husodo, MSc)
ii
ABSTRAK
Dewasa ini telepon merupakan sarana komunikasi yang sangat vital dalam kehidupan sehari-hari, bagi sebagian masyarakat alat komunikasi ini sudah menjadi suatu kebutuhan. Namun kadang kala kita tidak dapat mengontrol penggunaannya, karena telepon sering kali digunakan oleh orang yang tidak bertanggung jawab. Untuk
mengatasi
masalah
ini,
penulis
membuat
suatu
alat
yang
dapat
mengontrol/membatasi penggunaan telepon. Rangkaian utama alat ini menggunakan rangkaian DTMF. Telepon dengan system dialing tone akan menghasilkan sinyal DTMF saat papan tombol ditekan, sinyal tersebut akan dideteksi oleh rangkaian DTMF untuk kemudian di ubah menjadi kode biner. Sebagai rangkaian kontrol dan pemroses data digunakan mikrokontroler AT89C51. EEPROM digunakan untuk menyimpan memori. Pembuatan tugas akhir ini bertujuan membuat suatu alat berupa phone book untuk dapat menyimpan nomor telepon secara elektronik yang dapat dipasang pada telepon dengan sistem tone dialing.
Alat ini juga berfungsi untuk membatasi
penggunaan telepon.
iii
KATA PENGANTAR
Puji dan syukur penulis panjatkan ke-hadirat Allah SWT yang telah memberikan kekuatan lahir dan batin sehingga akhirnya penulis dapat selesai menyusun laporan tugas akhir. Tugas akhir ini dibuat sebagai salah satu syarat guna memperoleh kelulusan program S-1 Teknik Elektro, Fakultas Teknologi Industri, Universitas Mercubuana. Atas selesainya tugas akhir ini, tidah lupa penulis mengucapkan banyak terima kasih kepada berbagai pihak yang telah banyak membantu, terutama kepada: 1. Kedua orang tua yang telah membimbing, membantu dan memberikan dorongan baik secara moril maupun materil. 2. Jaja Kustija, MSc selaku pembimbing tugas akhir. 3. Ir. Budi Yanto Husodo, MSc selaku Ketua Jurusan Teknik Elektro Universitas Mercubuana. 4. Yudhi Ghunardi, ST,MT selaku koordinator Tugas Akhir Teknik Elektro Universitas Mercubuana. Dengan keterbatasan kemampuan dan waktu yang dimiliki, penulis menyadari bahwa karya tugas akhir ini masih banyak kekurangan, karena itu saran dan keritik yang membangun dari pembaca sangat penulis harapkan.
iv
Akhirnya penulis berharap semoga karya tugas akhir ini dapat memberikan manfaat, khususnya kepada penulis dan umumnya kepada para pembaca.
Jakarta, Februari 2008
Penulis
v
DAFTAR ISI
ABSTRAK .........................................................................................................
i
KATA PENGANTAR ........................................................................................
ii
DAFTAR ISI ......................................................................................................
iv
DAFTAR GAMBAR .......................................................................................... vii DAFTAR TABEL .............................................................................................. viii
BAB I
BAB II
PENDAHULUAN 1.1. Latar Belakang Masalah ............................................................
1
1.2. Perumusan Masalah ...................................................................
2
1.3. Pembatasan Masalah ..................................................................
3
1.4. Tujuan Penulisan ........................................................................
3
1.5. Sistematika Penulisan .................................................................
3
LANDASAN TEORI 2.1. Telepon ………………………………………………………..
5
2.2. Transmitter dan Receiver DTMF ……………………………...
8
2.3. Mikrokontroler AT89C51 ……………………………………..
9
2.3.1. Blok diagram dan konfigurasi pin AT89C51 …………..
10
2.3.2. Organisasi memori ……………………………………..
13
2.3.3. Pewaktuan CPU ………………………………………..
17
vi
2.3.4. Special Function Register (SFR) ………………………
18
2.3.5. Timer/Counter ………………………………………….
19
2.3.6. Program Status Word (PSW) ………………………….
20
2.3.7. Power Control Register (PCON) ………………………
22
2.3.8. Perangkat lunak mikrokontroler AT89C51 ......................
22
2.3.8.1. Mode pengalamatan ..........................................
23
2.3.8.2. Perangkat Instruksi mikrokontroler AT89C51
24
2.4. LCD .........................................................................................
25
2.4.1. Standar LCD HD447780 ................................................
26
2.4.2. Inisialisasi LCD
………………………………………
28
2.4.3. Pengiriman Data/ Instruksi Ke LCD……………….........
29
2.5. EEPROM ……………………………………………………...
30
2.5.1. Akses Data serial EEPROM……………………………...
32
2.5.2. Penulisan Data …………………………………………..
32
2.5.3. Pembacaan data .................................................................
33
BAB III PERANCANGAN 3.1. Tujuan Perancangan ..................................................................
35
3.2. Tahap-tahap perancangan ...........................................................
35
3.3. Diagram Blok .............................................................................
36
3.4. Perancangan Perangkat Keras ....................................................
40
3.4.1. Perancangan sistem minimum AT89C51 ........................
40
3.4.2. Rangkaian DTMF ...........................................................
41
vii
3.4.3. Rangkaian pendeteksi dering ...........................................
43
3.4.4. Rangkaian pendeteksi hook .............................................
44
3.4.5. Rangkaian pemutus line telepon .......................................
45
3.5. Perancangan perangkat lunak ..................................................
46
3.6 Cara Kerja Alat ........................................................................
49
BAB IV PENGUJIAN DAN ANALISA
BAB V
4.1 Pengujian pendeteksi dering .........................................................
50
4.2 Pengujian pendeteksi hook ..........................................................
50
4.3. Pengujian pemutus line ...............................................................
51
KESIMPULAN DAN SARAN 5.1. Kesimpulan ...............................................................................
52
5.2. Saran .........................................................................................
52
DAFTAR PUSTAKA LAMPIRAN A LAMPIRAN B
viii
DAFTAR GAMBAR
Gambar 2.1. Menghubungkan IC MT8888 dengan mikrokontroler Gambar 2.2. Blok diagram AT89C51 Gambar 2.3. Susunan pin AT89C51 Gambar 2.4. Struktur memori mikrokontroler AT89C51 Gambar 2.5. Susunan Memori Program Eksternal Gambar 2.6. Memori data eksternal Gambar 2.7. Menghubungkan AT89C51 dengan RAM eksternal Gambar 2.8. Hubungan ke kristal Gambar 2.9. Urutan inisialisasi untuk koneksi data 8 bit Gambar 2.10. Susunan pin IC 24CXX Gambar 2.11. Menghubungkan 24C64 dengan mikrokontroler Gambar 2.12. Pengalamatan serial EEPROM Gambar 2.13. Penulisan secara byte Gambar 2.14. Penulisan secara page Gambar 2.15. Pembacaan secara Current Read Gambar 2.16. Pembacaan secara Random Read Gambar 2.17. Pembacaan secara Sequential Read Gambar 3.1. Diagram blok rangkaian Gambar 3.2. Rangkaian lengkap system
ix
Gambar 3.3. Rangkaian sistem minimum mikrokontroler AT89C51 Gambar 3.4. Rangkaian DTMF Gambar 3.5. Rangkaian pendeteksi dering Gambar 3.6. Rangkaian pendeteksi hook Gambar 3.7. Rangkaian pemutus line telepon Gambar 3.8. Flowchart
x
DAFTAR TABEL
Tabel 2.1. Kombinasi frekuensi pada sistem DTMF Tabel 2.2. Special function register. Tabel 2.3. Pemilihan bank register. Tabel 2.4. Fungsi pin konektor LCD Tabel 4.1. Hasil pengukuran rangkaian pendeteksi dering Tabel 4.2. Hasil pengukuran rangkaian pendeteksi hook Tabel 4.3. Hasil pengukuran rangkaian switch line
xi
BAB I PENDAHULUAN
1.1. Latar Belakang Masalah Telepon dewasa ini sudah merupakan alat komunikasi yang sangat vital dalam kehidupan masyarakat. Namun sering kali pemakaian telepon tidak terkontrol atau digunakan oleh orang yang tidak bertanggung jawab tanpa sepengetahuan pemilik telepon sehingga biaya yang harus dikeluarkan untuk membayar tagihan rekening telepon cukup besar dan diluar dari biaya yang telah diperkirakan sebelumnya. Salah satu upaya yang dapat dilakukan untuk menghindari atau mengurangi masalah ini yaitu dengan memasang alat pembatas pemakaian telepon. Hal inilah yang melatarbelakangi penulis membuat karya tugas akhir berupa phone book pada telepon rumah sebagai pencatat nomer telepon dan juga berfungsi untuk membatasi nomer tujuan telepon.
Dengan alat ini telepon hanya dapat
digunakan jika nomer yang dituju sudah tercatat dalam list yang terlebih dahulu ditulis pada phone book. Alat yang dibuat ini dapat dipasang secara paralel dengan telepon rumah. Komponen utama yang diguanakan adalah IC MT8888 sebagai detector DTMF dan mikrokontroler AT89C51 yang berfungsi sebagai kontrol utama system. Dengan mengguanakan mikrokontroler, rangkaian yang akan dibuat menjadi lebih sederhana karena mikrokontroler merupakan system minimum mikroprosesor yang sudah
1
menyatu dalam satu chip. Selain itu dengan menggunakan system mikroprosesor maka alat ini akan lebih fleksibel, mudah diintegrasikan dengan system lain untuk pengembangan alat selanjutnya.
1.2. Perumusan Masalah Proses dialing pada system telepon yang digunakan ada dua macam, yaitu dialing dengan pulsa (pulse dialing) dan dialing dengan dengan nada (tone dialing). Sekarang ini system dialing yang lebih umum digunakan pada pesawat telepon adalah system dialing dengan nada (tone dialing). Pada system dialing ini sinyal yang dikirimkan berupa kombinasi dua buah frekuensi, yaitu frekuensi rendah dan frekuensi tinggi yang menghasilkan suatu tone (nada), sehingga system ini disebut juga system DTMF (Dual Tone Multi Frekuensi). Sinyal DTMF yang dibangkitkan oleh pesawat telepon akan diterima oleh detector DTMF dan kemudian diubah menjadi kode biner yang akan diambil oleh mikrokontroler sebagai input data untuk diproses.
Selain itu rangkaian detector
DTMF ini juga dapat membangkitkan sinyal atau nada DTMF dari kode biner yang dikirim oleh mikrokontroler melalui saluran port-portnya ke rangkaian detector DTMF.
2
1.3. Pembatasan Masalah Pembatasan pada tugas akhir ini dimaksudkan untuk menghindari supaya permasalahan yang dibahas tidak menyimpang atau melebar dari topik/tema utama. Adapun pembahasan dan alat yang dibuat pada tugas akhir ini terdiri dari sistim minimum mikrokontroler AT89C51 sebagai rangkaian kontrol utama, rangkaian DTMF, rangkaian pendeteksi dering dan rangkaian pendeteksi hook.
1.4. Tujuan penulisan Tujuan penulisan tugas akhir ini adalah merancang dan membuat alat yang berupa phone book pada telepon rumah yang dapat digunakan untuk menyimpan nomor-nomor telepon dan juga dapat berfungsi sebagai pengontrol pemakaian telepon.
1.5. Sistematika Pembahasan Penulisan karya tugas akhir dibagi menjadi lima bab, antara bahasan bab yang satu dengan yang lainnya saling berkaitan. Adapun pembahasan tulisan ini disusun sebagai berikut : BAB I Berisi pendahuluan yang mencakup latar belakang masalah, perumusan masalah, pembatasan masalah dan sistematika pembahasan buku laporan tugas akhir.
3
BAB II Berisi landasan teori yang terdiri dari teori-teori yang menunjang terhadap pembutan karya tugas akhir. BAB III Berisi perancangan yang mencakup tujuan perancangan, perancangan perangkat keras (hardware) dan perancangan perangkat lunak (software). BAB IV Berisi pengukuran dan analisis yang meliputi metode pengukuran, hasil pengukuran dan analisis data BAB V Berisi kesimpulan dan saran
4
BAB II LANDASAN TEORI
2.1. Telepon. Pengertian telepon secara umum adalah konversi sinyal-sinyal suara menjadi sinyal-sinyal listrik frekuensi audio yang kemudian dipancarkan melalui suatu sistem transmisi listrik yang pada akhirnya dikonversi kembali menjadi sinyal-sinyal tekanan suara pada ujung penerima. Terdapat dua macam type proses dialing, yaitu dialing dengan pulsa dan dialing dengan nada (tone dialing). Tone dialing adalah metode dialing yang lebih modern dan sekarang ini hampir seluruh pesawat telepon yang digunakan di tiap negara menggunakan jenis telepon dengan sistem tone dialing. Pada sistem dialing ini biasanya pesawat telepon telah dilengkapi dengan papan tombol tekan, sinyal yang dikirimkan bukan merupakan arus rata yang terputus-putus, melainkan berupa kombinasi dari dua buah frekuensi, dimana dengan menekan satu digit tombol maka akan dibangkitkan sinyal yang merupakan kombinasi dari dua buah frekuensi yang menghasilkan suatu nada (tone), sehingga sistem ini disebut juga sebagai sestem Dual Tone Multiple Frekuensi (DTMF). Sistem ini terdiri dari dua buah kelompok frekuensi, yaitu kelompok frekuensi tinggi dan frekuensi rendah, seperti yang terlihat pada tabel berikut ini.
5
1209
1336
1477
1633
697
1
2
3
A
770
4
5
6
B
852
7
8
9
C
941
*
0
#
D
Tabel 2.1. Kombinasi frekuensi pada sistem DTMF
Pemanggilan (dial) dengan sistem DTMF standar akan menghasilkan nada (tone) selama tombol ditekan, nada akan dikodekan sebagai digit yang sesuai. Pesawat telepon dengan sistem ini memiliki empat komponen pokok, diantaranya rangkaian pemanggil, switch hook, bel dan hendset yang didalamnya terdapat transmitter dan receiver. Prinsip kerja pesawat telepon secara umum adalah sentral memanggil pesawat dengan memberikan ringing tone, sehingga bel berbunyi, hal ini disebabkan karena adanya loop tertutup dari sentral menuju rangkaian bel. Bilamana hendset diangkat maka arus pada bel akan terputus, sehingga pembicaraan dapat berlangsung. Kondisi sinyal-sinyal pada pesawat telepon: Pada saat melakukan suatu panggilan, kondisi pada saluran telepon yang terjadi adalah sebagi berikut.
6
1.
Kondisi off hook, saat handset diangkat, tegangan ± 48 Vdc akan turun menjadi 6-12 Vdc, karena saluran telepon mendapatkan beban ± 600 O pada saat itu.
2.
Pada saat tone, frekuensi 425 Hz dengan level 6-12 Vdc yang terdengar dan menunjukan bahwa pesawat telepon telah terhubung dengan saluran telepon.
3.
Sinyal DTMF yang terjadi pada saat memutar nomor telepon, sinyal ini berupa gabungan dua buah frekuensi dengan kombinasi sebagaimana dalam tabel 2.1. Saat menerima panggilan, kondisi sinyal yang terjadi pada saluran telepon
adalah: 1.
Sinyal dering, berupa sinyal dengan frekuensi 50 Hz dengan periode yang sama dengan nada panggil sambung dan amplitudo 40 Vrms. Sinyal nada sambung pada telepon pemanggil sebenarnya adalah merupakan duplikasi dari sinyal dering yang terjadi pada telepon yang dipanggil.
2.
Off hook, pada saat ini beban ± 600 O terdeteksi sehingga tegangan pada saluran telepon menjadi turun, sentral saluran telepon yang mendeteksi kondisi ini langsung menghentikan pengiriman sinyal dering maupun sinyal nada sambung dan akan menghubungkan kedua pesawat telepon tersebut melalu saklar-saklar yang ada pada jaringan telepon.
7
2.2. Transmitter dan Receiver DTMF MT8888 merupakan IC DTMF transceiver transmitter (pengirim) dan receiver (penerima)
yang dapat berfungsi sebagai sinyal DTMF.
Berikut adalah
gambar susunan pin dan cara menghubungkan MT8888 dengan mikrokontroler.
1 2 3 4
DTMF OUTPUT
5 6 7 8 9 10
IN+
VDD
IN-
St/GT
GS
ESt
VRef
D3
VSS
D2
OSC1
D1
OSC2
D0
TONE
IRQ/CP
R/W
RD
CS
RS0
20 19 18 17 16 15 14 13 12 11
TO MIKR OKON TROLER
DTMF INPU T
VDD
Gambar 2.1. Menghubungkan IC MT8888 dengan mikrokontroler
8
2.3. Mikrokontroler AT89C51
AT89C51 merupakan mikrokontroller 8-bit yang kompatibel dengan keluarga MCS-51. Fasilitas yang dimiliki mikrokontroler ini diantaranya adalah:
a. Sebuah CPU (Central Processing Unit) 8 bit b. 4 Kbytes Flash EEROM dengan kemampuan sampai 1000 kali tulis-hapus c. 128 x 8-bit internal RAM. d. 32-bit atau jalur Input/Output (empat Port I/O). e. 2 (dua) buah 16-bit Timer / Counter. f. 6 (enam) buah sumber interupsi. g. Serial Communication Interface. h. Kompatibel dengan prosesor MCS-51 buatan Intel Corp. i. Operasi Clock antara 1 sampai 24 MHz. j. Oscilator internal k. Dapat mengalamati 64 Kbyte ruang alamat ROM/EPROM eksternal. l. Dapat mengalamati 64 Kbyte ruang alamat RAM eksternal.
Dengan keistimewaan tersebut diatas, pembuatan alat menggunakan AT 89C51 menjadi lebih sederhana dan tidak memerlukan IC pendukung yang banyak. Sehingga boleh dikatakan mikrokontroler AT89C51 ini memiliki keistimewaan dari segi perangkat keras.
9
2.3.1. Blok diagram dan Konfigurasi pin AT89C51
Blok diagram mikrokontroler AT89C51 diperlihatkan oleh gambar 2.2
berut
:
INTERUPSI EKSTERNAL
KONTROL INTERUPSI
DLL. ON=CHIP FLASH
ON-CHIP RAM
Timer 1 Timer 0
CPU
OSCILATOR KONTROL BUSH
4 PORT I/O
PORT SERIAL
P0 P1 P2 P3 Gambar 2.2. Blok diagram AT89C51
Susunan pin-pin mikrokontroler AT89C51 diperlihatkan pada gambar 2.3, penjelasan dari masing-masing pin adalah sebagai berikut :
10
1.
Port 1 (pin 1-8) Port 1 merupakan port paralel 8 bit dua arah (bidirectional) yang dapat digunakan untuk berbagai keperluan (general purpose).
2.
Reset (pin 9) Pin 9 adalah masukan reset (aktif high). Pulsa transisi dari rendah ke tinggi akan me-reset AT89C51.
Gambar 2.3. Susunan pin AT89C51
3.
Port 3 (pin 10-17) Port 3 adalah port paralel 8 bit dua arah yang mempunyai fungsi pengganti. Fungsi pengganti meliputi TxD (transmit data), RxD (receive data), Int 0
11
(Interupt 0), Int 1 (interupt 1), T0 (timer 0), T1 (timer 1), WR (write), RD (read). 4.
XTAL1 (pin 18) XTAL adalah pena masukan ke rangkaian oscilator internal. Sebuah oscilator kristal atau sumber oscilator luar dapat digunakan.
5.
XTAL2 (pin 19) XTAL2 adalah pin keluaran ke ocsilator internal.
Pin ini dipakai jika
menggunakan oscilator internal. 6.
Vss (pin 20) Vss merupakan pin untuk ground.
7.
Port 2 (pin 21-28) Port 2 adalah port paralel selebar 8 bit dua arah. Port 2 ini mengirimkan byte alamat bagian tinggi (high byte) selama pengambilan instruksi dari memori program eksternal dan selama pengaksesan memori data eksternal.
8.
PSEN (pin 29) PSEN (program store enable) merupakan sinyal pengontrol yang membolehkan program memori eksternal masuk kedalam bus selama proses pemberian atau pengambilan instruksi (fetching)
9.
ALE (pin 9) ALE (addres latch enable) digunakan untuk menahan alamat memori eksternal selama pelaksanaan interuksi.
10.
EA (pin 31)
12
Bila pin ini diberi logika tinggi, mikrokontroler akan mengeksekusi instruksi dari ROM/EPROM internal, sedangkan jika diberi logika rendah maka mikrokontroler akan melaksanakan seluruh intruksi dari program memori eksternal. 11.
Port 0 (pin 32-39) Port 0 merupakan port paralel 8 bit dua arah (bidirectional). Port 0 juga dapat dikonfigurasikan sebagai bus alamat/data bagian rendah (low byite) selama proses pengaksesan memori data dan program eksternal.
12.
Vcc (pin 40) Pin ini dihubungkan ke sumber tegangan DC 5 Volt.
2.3.2. Organisasi Memori Mikrokontroler AT98C51 sama seperti halnya mikrokontroler dari keluarga MCS-51, yaitu memiliki pembagian ruang alamat untuk program dan data. Pemisahan memori program dan memori data membolehkan memori data untuk diakses oleh alamat 8 bit. Walaupun demikian, alamat 16 bit dapat dihasilkan melalui register DPTR (data pointer register)
13
PROGRAM MEMORI
FFFFH
FFFFH
EXT
EXT
MEMORI DATA
FFH internal
EA=0 EXT
EA=1 IN
0000 PSEN
00H
0000H RD
WR
Gambar 2.4. Struktur memori mikrokontroler AT89C51
Memori program hanya dapat dibaca tidak bisa ditulis (karena tersimpan dalam EPROM). Memori program sebesar eksternal.
64 Kbyte dapat dimasukan dalam EPROM
Susunan perangkat keras yang menggunakan EPROM eksternal
diperlihatkan pada gambar 2.5.
14
Memori Program ekternal
AT89C51
P0
INSTR.
P1 P3 ALE EA
A D D R E S
LATCH GND
P2
PSEN
OE
Gambar 2.5. Susunan Memori Program Eksternal
Memori data internal dipetakan seperti pada gambar 2.6. Ruang memorinya dibagi menjadi tiga blok, yaitu sebagai lower 128, upper 128 dan ruang SFR (special function register)
15
FFH
FFH UPPER 80H 7FH
80H
LOWER 00H
Gambar 2.6. Memori data eksternal Mikrokontroler AT89C51 dapat ditambahkan RAM eksternal sebesar 64 Kbyte. Untuk melakukan pembacaan atau penulisan, mikrokontroler akan mengirimkan sinyal RD atau WR.
Gambar 2.7 memperlihatkan hubungan mikrokontroler
AT89C51 untuk mengakses RAM eksternal. Memori Data ekternal
AT89C51
P0
DATA.
P1
ALE EA
LATCH VCC
RD P3
P2
A D D R E S
WR
I/O
WE
OE
16
Gambar 2.7. Menghubungkan AT89C51 dengan RAM eksternal 2.3.3. Pewaktuan CPU Mikrokontroler AT89C51 memiliki oscilator internal (on chip oscillator) yang dapat digunakan sebagai sumber clock bagi CPU. Untuk menggunakan oscilator internal diperlukan sebuah kristal atau resonator keramik antara pin XTAL1 dan pin XTAL2 dan sebuah kapasitor ke ground seperti terlihat pada gambar 2.8.
Gambar 2.8. Hubungan ke kristal
17
2.3.4. Special Function Register (SFR) Mikrokontroler AT89C51 memiliki special function register (SFR) yaitu register-register khusus yang mempunyai fungsi tertentu. Masing-masing register ditunjukan dalam table berikut: Tabel 2.2. Special function register. Simbol
Nama
Alamat
ACC
Akumulator
E0H
B
B register
F0H
PSW
Program Status Word
D0H
DPTR
Data Pointer 16 Bit DPL Byte rendah
82H
DPH Byte tinggi
83H
P0
Port 0
80H
P1
Port 1
90H
P2
Port 2
A0H
P3
Port 3
B0H
IP
Interupt Priority Control
B8H
IE
Interupt Enable Control
A8H
TMOD
Timer/Counter Mode Control
89H
TCON
Timer/Counter Control
88H
TH0
Timer/Counter 0 High Byte
8CH
18
TL0
Timer/Counter 0 Low Byte
8AH
TH1
Timer/Counter 1 High Byte
8DH
TL1
Timer/Counter 1 High Byte
8BH
SCON
Serial Control
98H
SBUF
Serial Data Buffer
99H
PCON
Power Control
87H
2.3.5. Timer/Counter Mikrokontroler AT89C51 mempunyai dua buah timer/counter yang dapat diatur melalui perangkat lunak, yaitu timer/counter 0 dan timer/counter 1. Pengontrolan kerja timer/counter adalah register timer/counter (TCON). Adapun definisi dari bit-bit pada timer/counter adalah sebagai berikut:
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
Simbol
Posisi
Fungsi
TF1
TCON.7
Timer overflow flag. Diset oleh perangkat keras saat timer/counter menghasilkan overflow.
19
TR1
TCON.6
Bit untuk menjalankan timer1. Diset/clear oleh software untuk membuat timer on atau off.
TF0
TCON.5
Timer 0 overflow flag. Diset Oleh perangkat keras.
TR0
TCON.4
Bit untuk menjalankan timer 0. Di-set/clear oleh software untuk membuat timer on atau off.
IE1
TCON.3
Eksternal interrupt 1 edge flag.
IT1
TCON.2
Interupt 1 type control bit. Set/clear oleh software untuk Menspesifikasikan sisi turun/level rendah trigger dari int eksternal.
IE0
TCON.1
Eksternal interrupt 0 edge flag.
IT0
TCON.0
Interupt 0 type control bit.
Pengontrolan pemilihan mode oprasi timer/counter adalah register timer mode (TMOD) yang difinisi bit-bitnya adalah sebagai berikut.
GATE
C/T
M1
M0
GATE
C/T
M1
M0
20
2.3.6. Program status Word (PSW) Program ststus word berisi beberapa bit status yang menunjukan keadaan mikrokontroler. Definisi dari bit-bit PSW adalah sebagai berikut:
CY
AC
F0
RS1
RS0
OV
-
P
Simbol
Posisi
Fungsi
CY
PSW.7
Carry Flag
AC
PSW.6
Auxilary carry flag
F0
PSW.5
Flag 0 untuk kegunaan umum
RS1
PSW.4
Bit pemilih bank register
RS0
PSW.3
Bit pemilih bank register
OV
PSW.2
Overflow flag
-
PSW.1
Flag didefinisikan oleh pemakai
P
PSW.0
Parity flag
RS0 dan RS1 digunakan untuk memilih bank register. Delapan buah register ini merupakan register serbaguna. Pemilihan bank register dapat dilakukan sebagai berikut:
21
Tabel 2.3. Pemilihan bank register. RS1
RS0
Bank
Lokasi Memori
0
0
0
00H-07H
0
1
1
08H-0FH
1
0
2
10H-17H
1
1
3
18H-1FH
2.3.7. Power Control Register (PCON) Power control register tidak dapat dialamati per bit. Bit-bit dalam register PCON adalah sebagai berikut. SMOD
-
-
-
GF1
GF0
PD0
Simbol
Fungsi
SMOD
Bila timer 1 digunakan untuk menghasilkan baudrate
IDL
dan SMOD=1, baud rate akan dikalikan dua ketika port serial akan digunakan dalam mode 1, 2 dan 3. -
tidak dipakai
GF1
Bit flag serbaguna
GF0
Bit flag serbaguna
PD
Bit power down
IDL
Idle mode bit
22
2.3.8. Perangkat lunak mikrokontroler AT89C51 Sebuah mikrokontroler hanya akan bekerja bila diberi program terlebih dahulu. Program tersebut akan memberi tahu mikrokontroler apa yang harus dilakukan. Intruksi-intruksi perangkat lunak berbeda untuk tiap mikrokontroler. Instruksiinstruksi ini hanya bisa dipahami oleh jenis mikrokontroler yang bersangkutan. Sebuah mikrokontroler tidak dapat memahami instruksi-instruksi yang berlakau pada mikrokontroler lain. Bentuk umum instruksi dalam assembler AT89C51 : [label:] mnemonic [operan] [,operan] [,operan];[komentar] Jumlah operan tergantung pada type mnemonik. Label harus diletakan pada awal statement dan berfungsi sebagai tujuan loncat. Mnemonik merupakan bentuk instruksi yang dinyatakan dalam kata-kata singkat. 2.3.8.1. Mode pengalamatan Pada mikrokontroler AT89C51 dekenal beberapa mode pengalamatan, diantaranya: 1.
Mode pengalamatan langsung (direct addressing) Mode pengalamatan langsung memungkinkan data dapat dibaca dari atau ditulis ke lokasi memori. Mode ini hanya dapat digunakan pada internal RAM dan SFR. Contoh: MOV A,5FH
; A ? (5FH)
23
Perintah ini menyebabkan register A dimuati dengan isi memori dengan alamat 5FH. 2.
Mode pengalamatan tidak langsung (indirect addressing) Pengalamatan tidak langsung menggunakan isi lokasi penyimpanan untuk menunjuk ke alamat yang dituju. Alamat yang disimpan dapat berjumlah 8 bit atau 16 bit. Contoh: MOV A,@R1
; A ? (R1)
Perintah ini menyebabkan register A dimuati oleh isi memori yang alamatnya ditunjukan register R1. 3.
Mode pengalamatan register (Register Addressing) Pengalamatan register memungkinkan untuk memindahkan data antar register internal dalam prosessor. Contoh: MOV B,A
; B ? (A)
Perintah ini menyebabkan register B dimuati isi register A. 4.
Mode pengalamatan Immediate Constant Mode pengalamatan immediate dilakukan dengan memberikan nilai (data) kedalam suatu register secara langsung. Untuk melaksanakan hal ini digunakan tanda #. Contoh: MOV A,#0FFH Insruksi ini menyebabkan register A diisi dengan data FFH.
2.3.8.2. Perangkat instruksi mikrokontroler AT89C51
24
Secara umum perangkat instruksi mikrokontroler AT89C51 dapat dibagi kedalam lima kelompok sebagai berikut: 1.
Instruksi Transfer Data Instruksi ini memindahkan data antara register-register, memori-memori, register-memori, antar muka-register dan antar muka-memori.
2.
Instruksi Aritmetik Instruksi ini melaksanakan instruksi aritmetik yang meliputi penjumlahan, pengurangan, penambahan satu (increment), pengurangan satu (decrement), perkalian dan pembagian.
3.
Instruksi Logika dan manipulasi bit Melaksanakan oprasi logika AND, OR, XOR, perbandingan, pergeseran, dan komplemen data.
4.
Instruksi percabangan Instruksi ini merubah urutan normal pelaksanaan suatu program.
Dengan
instruksi ini program yang sedang dilaksanakan akan mencabang kesuatu alamat tertentu. Instruksi percabangan dibedakan atas instruksi percabangan bersyarat dan instruksi percabangan tanpa syarat. 5.
Instruksi Stack, I/O dan Kontrol Instruksi ini mengatur penggunaan stack, membaca/menulis port I/O, serta pengontrolan-pengontrolan.
2.4. LCD
25
LCD (Liquid Cristal Display) tersedia dalam beragam ukuran, mulai dari 1 baris kali 16 karakter sampai 4 baris kali 24 karakter. Setiap karakter terdiri dari 5X8 atau 5X10 titik, sehingga yang ditampilkan bukan hanya angka desimal tetapi juga huruf latin dan lambang lainnya. Salah satu standar LCD yang dapat berkomunikasi dengan prosesor adalah HD44780U. Standar LCD ini cukup pupuler digunakan untuk display pada beragam sistem prosesor, termasuk mikrokontroler
89C51.
Untuk dapat berkomunikasi
dengan modul LCD jenis ini mikrokontroler 89C51 hanya membutuhkan 7 atau 11 pin input/output berapapun ukuran LCD-nya.
2.4.1. Standar LCD HD44780 Tabel 2.4. memperlihatkan fungsi pin pada konektor antara LCD dengan sistem prosesor, kolom pertama adalah nomor pin pada konektor tersebut, kolom kedua adalah simbol atau nama pin tersebut, kolom ketiga adalah level digital untuk mengaktifkannya, yaitu 0 atau low, 1 atu high dan 1? 0 atau peralihan dari high ke low. Kolom ke empat adalah arah komunikasi, yaitu sebagai input, output atau bidirectional (dua arah). Sedangkan kolom kelima adalah keterangan fungsi pin. Tabel 2.4. Fungsi pin konektor LCD 1
2
3
4
5
Pin number
Simbol
Level
I/O
Function
26
1
Vss
-
-
Power supply (GND)
2
Vcc
-
-
Power supply (+5V)
3
Vee
-
-
Contras adjust
4
RS
0/1
I
0 = instruction input 1 = data input
5
R/W
0/1
I
0 = write to LCD modul 1 = read from LCD modul
6
E
1?0
I/O
Enable signal
7
DB0
0/1
I/O
Data bus line 0
8
DB1
0/1
I/O
Data bus line 1
9
DB2
0/1
I/O
Data bus line 2
10
DB3
0/1
I/O
Data bus line 3
11
DB4
0/1
I/O
Data bus line 4
12
DB5
0/1
I/O
Data bus line 5
13
DB6
0/1
I/O
Data bus line 6
14
DB7
0/1
I/O
Data bus line 7
Dari 14 pin tersebut, 8-pin diantaranya digunakan untuk menerima dan mengirimkan data dari dan ke LCD, yaitu DB0-DB7. digunakan untuk kendali oprasi.
Sedangkan 3-pin lainnya
Pin RS digunakan oleh sistem prosesor untuk
memberi tahu LCD apakah informasi biner yang diletakan di DB0-DB7 merupakan
27
instruksi atau data. Jika RS = low berarti informasi biner tersebut adalah instruksi, tetapi jika RS = high berarti informasi tersebut adalah data. Pin R/W digunakan oleh sistem prosesor untuk memberitahu LCD, apakah prosesor ingin mengirim (R/W = low) atau membaca (R/W = high) data dari LCD. Pin E digunakan oleh sistem prosesor untuk memberitahu LCD agar mulai memproses sinyal yang diberikan oleh prosesor, ditandai oleh peralihan kondisi pin E dari high menjadi low. Khusus untuk pin DB7 selain untuk transfer informasi biner, pin ini juga dapat berfungsi untuk memberitahu sistem prosesor bahwa LCD masih sibuk, belum siap menerima instruksi berikutnya. Jika prosesor mengirimkan perintah ‘Get LCD status’ maka setelah itu prosesor harus menunggu kabar dari pin DB7, jika DB7 = low berarti LCD tidah dalam keadaan sibuk, siap menerima perintah atau data berikutnya.
2.4.2. Inisialisasi LCD Saat sistem prosesor baru saja ON, prosesor harus melakukan serangkaian inisialisasi, misalnya timer, sistem interupsi, sistem komunikasi serial dan lain-lain. Termasuk inisialisasi device seperti LCD. Untuk setandar HD44780, berikut ini salah satu urutan inisialisasi yang diperlukan sebelum LCD digunakan.
28
Power On
Wait for more than 15 ms After Vcc rise to 4.5 V
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 1 * * * *
Wait more than 41 ms
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 1 * * * *
Wait more than 100ms
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 1 * * * *
RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 0 0 0 0 1 1 N * * * 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 1 0
Gambar 2.9. Urutan inisialisasi untuk koneksi data 8 bit. Seperti tampak pada gambar 2.9. untuk inisialisasi ada tujuh kali pengiriman data instruksi dari prosesor ke modul LCD. Cara ini dilakukan untuk inisialisasi modul LCD yang dihubungkan dengan prosesor melalui 8-bit data/instruksi dan 3 bit
29
kendali. Antara saat LCD dihidupkan dengan byte pertama yang dikirimkan kepadanya tidak boleh kurang dari 15 ms. 2.4.3. Pengiriman data/instruksi ke LCD Informasi biner yang dikirimkan ke LCD dapat berupa data maupun instruksi. Jika prosesor ingin memberitahu LCD bahwa informasi yang diletakannya di saluran 8-pin data/instruksi adalah instruksi, maka pin RS dibuat low, sedangkan jika pin RS ini dibuat high, berarti informasi biner tersebut adalah data. Setiap pengiriman 1 byte informasi dari prosesor ke modul LCD harus ditandai dengan peralihan kondisi pin E dari high menjadi low. Segera setelah peralihan pin E ini, modul LCD akan memproses informasi biner tersebut. Karena modul LCD memerlukan waktu tertentu untuk memproses kiriman data/instruksi dari prosesor, maka sebelum pengiriman informasi tersebut prosesor harus memastikan kesiapan modul LCD untuk menerima kiriman byte baru. Kecuali saat pengiriman 4 byte pertama saat inisialisasi, kesiapan LCD menerima kiriman informasi biner dapat diketahui dengan pembacaan DB7.
2.5. EEPROM Serial EEPROM type 24XX merupakan memori serial yang menggunakan teknologi I2C (Inter Integrated Circuit), dimana
dengan adanya penggunaan
30
teknologi tersebut, jumlah I/O yang digunakan untuk mengakses memori
makin
sedikit. Hal ini sangat bermanfaat bagi sebuah sistem yang memerlukan banyak I/O. Penggunaan I/O yang semakin sedikit untuk mengakses memori, akan menyediakan lebih banyak I/O yang dapat digunakan untuk keperluan lain.
Gambar 2.10. Susunan pin IC 24CXX
Inter Integrated Circuit (I2C) adalah standar komunikasi serial dua arah menggunakan dua saluran yang didesain khusus untuk pengontrolan IC (Integrated Circuit). Sistem I2C terdiri dari saluran SCL (Serial Clock) dan saluran SDA (Serial Data). SCL merupakan jalur clock dimana sinyal clock akan selalu muncul untuk setiap bit dari pengiriman data, sedangkan SDA merupakan jalur data pada komunikasi I2C.
31
DATA
SDA 24C64
MIKROKONTROLER SCL CLOCK
Gambar 2.11. Menghubungkan 24C64 dengan mikrokontroler
Serial EEPROM berdasarkan pengalamatannya terdiri dari dua jenis, yaitu pengalamatan 8 bit yang digunakan untuk serial EEPROM dengan kapasitas memori sebesar 128 byte hingga 2 Kb dan pengalamatan 16 bit untuk serial EEPROM 4Kb hingga 512 Kb.
Gambar 2.12. Pengalamatan serial EEPROM
32
Pada pengalamatan 16 bit terdapat tiga buah paket
8 bit data yang harus
dikirimkan ke serial EEPROM, yaitu control byte, high byte address dan low byte address, sedangkan pada pengalamatan 8 bit hanya diperlukan dua buah paket 8 bit data yaitu control byte dan byte address saja. Control byte terdiri dari slave address, device select bus bit-bit pengatur alamat dari serial EEPROM dalam satu jalur bus, R/W bit penentu proses penulisan atau pembacaan data dari serial EEPROM. 2.5.1. Akses data Serial EEPROM Pembacaan maupun penulisan data ke dalam serial EEPROM, selalu diawali dengan pengiriman control byte dan address byte. Hanya pada penulisan data akan dilanjutkan dengan pengiriman data 8 bit, sedangkan sebaliknya pada pembacaan akan dilanjutkan dengan pengambilan data 8 bit. Bit R/W pada control byte akan berlogika 1 untuk pembacaan data dan berlogika 0 untuk penulisan data.
2.5.2. Penulisan data Penulisan data pada serial EERROM I2C dapat dilakukan secara byte maupun secara page. Pada penulisan secara byte dilakukan dengan mengirimkan control byte, alamat tujuan dan data sedangkan pada penulisan secara page dilakukan hanya dengan mengirimkan alamat tujuan awal saja yang kemudian dilanjutkan dengan 32 byte data yang akan menempati lokasi secara berurutan mulai dari alamat awal tujuan.
33
Gambar 2.13. Penulisan secara byte
Gambar 2.14. Penulisan secara page
2.5.3. Pembacaan data Pembacaan data dapat dilakukan secara current addess read (pembacaan alamat saat ini) maupun random read (pembacaan secara acak). Pada current addres read, data yang dibaca adalah data pada alamat yang terakhir kali diakses sa itu, sedangkan pada pembacaan secara acak dilakukan dengan mengirimkan control byte dan alamat tujuan terlebih dahulu.
Untuk pembacaan secara sequential, dilakukan dengan
control byte dan dilanjutkan dengan data-data yang berada mulai dari alamat yang terakhir diakses saat itu berturut-turut hingga sinyal stop bit dikeluarkan.
34
Gambar 2.15. Pembacaan secara Current Read
Gambar 2.16. Pembacaan secara Random Read
Gambar 2.17. Pembacaan secara Sequential Read
35
BAB III PERANCANGAN
3.1. Tujuan perancangan Tahap pertama yang harus dilakukan dalam merealisasikan ide untuk membuat suatu alat adalah melakukan perancangan. Tujuan dilakukan perancangan yaitu untuk menentukan spesifikasi alat yang akan dibuat. Hal-hal yang harus diperhatikan dalam melakukan perancangan, antaralain : -
Keterbatasan ilmu pengetahuan yang dikuasai penulis.
-
Ketersediaan komponen yang ada dipasaran.
-
Keterbatasan waktu.
-
Keterbatasan peralatan Dengan memperhatikan hal-hal tersebut diatas maka diharapkan kesulitan
dalam merealisasikan alat dapat dihindari.
3.2. Tahap-tahap perancangan Tahap-tahap yang harus dilakukan dalam melakukan suatu perancangan diantaranya: 1.
Membuat blok diagram sesuai dengan ide yang telah ditetapkan sebelumnya.
2.
Menterjemahkan blok diagram kedalam bentuk rangkaian elektronik.
36
3.
Memilih komponen yang cocok dengan terlebih dahulu mempelajari karakteristiknya serta memastikan bahwa komponen tersebut ada dan mudah diperoleh dipasaran.
4.
Melakukan percobaan pada protoboard.
5.
Membuat PCB (Printed Circuit Board) dan melakukan perakitan komponen.
6.
Mengetes rangkaian pada PCB.
7.
Membuat perangkat lunak (software).
8.
Melakukan pengetesan akhir.
9.
Membuat perangkat mekanik.
3.3. Diagram Blok dan Rangkaian Sistem Bagian utama diagram blok rangkaian ‘Phone book telepon dengan menggunakan mikrokontroler AT89C51’ terdiri dari: -
Blok sistem minimum mikrokontroler AT89C51
-
Rangkaian DTMF
-
Rangkaian pendeteksi dering
-
Rangkaian pendeteksi hook
-
Rangkaian switch line telepon
-
Display (LCD)
-
EEPROM
37
Diagram blok rangkaian diperlihatkan pada gambar berikut ini.
Hand set
Pendeteksi Hook Rangkaian DTMF
Display (LCD) Mikrokontroler AT 89C51
Memori EEPROM
Switch Line telepon
Pendeteksi dering
Line telepon Gambar 3.1. Diagram blok rangkaian Dari diagram blok tersebut diatas dapat dilihat gambaran umum prinsip kerja rangkaian. Mikrokontroler berfungsi sebagai pengontrol sistem yang memproses data input atau mengeluarkan data output dari sistem lain yang terhubung ke port-portnya.
38
Rangkaian DTMF akan mendeteksi sinyal DTMF pada saluran telepon jika ada yang menekan tombol pesawat telepon. Pendeteksi ring berfungsi mendeteksi nada dering apabila ada pesawat telepon lain
yang masuk (melakukan panggilan).
Pendeteksi hook berfungsi untuk mendeteksi posisi gagang telepon, apakah posisinya dalam keadaan deletakan (on hook) atau dalam keadaan diangkat (off hook). Switch line telepon digunakan untuk menyambungkan atau memutuskan saluran telepon. EEPROM digunakan untuk menyimpan nomor telepon. Sebagai tampilan untuk memonitor dapat dilihat pada display berupa LCD. Berikut adalah rangkaian lengkap Phone book telepon dengan menggunakan mikrokontroler AT89C51:
39
1
2
4
3 VCC J1 D0 D1 D2 D3 P1.4 P1.5 P1.6 P1.7
U2 GND
VCC R21 10K
D
SCL SDA GND VCC
B1
JP2 4 3 2 1
2 3 C4 470nF/63Volt
IC1 1 R7 AC + 4 220 AC -
BRIDGE
1 2 3 4 5 6 7 8
HOOK
PHONE VCC R17 1K
R16 1K
C5 33p C6
LD2 LED
C
X2 11,059MHz RST 9
LD1 LED
B
X1 3,579 MHz
RL2A Relay5V VCC
A15/P2.7 A14/P2.6 A13/P3.5 A12/P3.4 A11/P2.3 A10/P2.2 A9/P2.1 A8/P2.0
1 2 3 4 5 6 7 8 9
R4 1K J1
28 EN CON9 27 P2.6 26 RS 25 LD1 24 P2.3 23 SCL 22 SDA 21 BUZZ
VCC P0.7 P0.6 P0.5 P0.4 P0.3 P0.2 P0.1 P0.0 EN GND RS
VCC P1
31 EA/Vpp VCC 30 PROG ALE/PROG 29 PSEN PSEN
VCC GND 5K
RST
D
16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 DSP
AT89S8252
VCC
C
SW1 SW-PB
C7 10uF/5 0V
Q1 TIP42
+12V
C3 100N R3 390
U1 IN+ INGS Vref GND OSC1 OSC2 TONE WR CS
VCC St/GT ESt D3 D2 D1 D0 IRQ RD RS0
20 19 18 17 16 15 14 13 12 11
R10 10K
D2 U5 LM7805CT
D3 D2 D1 D0 IRQDTMF RDDTMF RSDTMF
VCC R13 3K3
3
+5V
Vin
R18
1
10
G N D
R IN G _P T IP _ P
TF1 TRAFO
P3.0/RXD0 P3.1/TXD0 P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
39 P0.0 38 P0.1 37 P0.2 36 P0.3 35 P0.4 34 P0.5 33 P0.6 32 P0.7
D41N4002 JP3 C9 1000uF/50V 1N4002 D5
1 2 3 CON3
2
C2 1uF/60V
R1 100K/1% 1 2 3 4 GND 5 6 7 TONEDTMF8 WRDTMF 9 CSDTMF 10
AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7
LD1 VCC
R2 C1 22K/1% 100nF TONE
P1.0/T2 P1.1/T2EX P1.2/RXD1 P1.3/TXD1 P1.4/INT2 P1.5/INT3 P1.6/INT4 P1.7/INT5
XTAL2 18 XTAL2 XTAL1 19 XTAL1
33p GND
1 2 3 4 5 6 7 8
HOOK 10 RDDTMF11 IRQDTMF 12 RSDTMF13 WRDTMF14 CSDTMF15 Bloking16 Ringon 17
AT24C08
TLP521
U2
1N4002 D3
B
MT8888 D1 IN4001
+12V
1N4002 VCC
R5
R4 10K Bloking
220 R6
SP1 VCC
TR1 828
220 R19 RING
6K8
JP1
B2 1uF 2 3
1 2 3 4 A
R20 10K
C10
TIP
1 AC + 4 AC -
R8
IC2
C828
BUZZER
TONEDTMF R15 1K
Ringon
220
BRIDGE
BUZZ
R9 4K7 TR1 C8 TONE 100N
C11 100uF
TLP521
Title
A
Ring Detektor
LINE TLP
Size
Number
Revision
A4 Date: File: 1
2
3
19-Jan-2007 Sheet of G:\TA2007\PONEBUK\PONEBUK.SCH Drawn By: 4
Gambar 3.2. Rangkaian lengkap sistem
40
3.4. Perancangan perangkat keras (Hardware) Perancangan perangkat keras rangkaian
“Phone book telepon dengan
menggunakan mikrokontroler AT89C51” dapat dibagi menjadi beberapa rangkaian, yaitu: 3.4.1. Perancangan sistem minimum AT89C51 Rangkaian
sistem
minimum
pengolahan/pemroses data.
AT89C51
berfungsi
untuk
melakukan
Rangkaian ini menggunakan komponen utama
mikrokontroler AT89C51. Sebagai
sumber
detak
menggunakan
oscillator
internal
dengan cara
menambahkan resonator kristal 11 MHz diantara kaki-kaki XTAL1 dan XTAL2.
41
SWITCH LINE 1
KONTROL D TM F
1 5 4 3 2 1
HOOK 10 RDDTMF 11 IRQDTMF 12 RSDTMF 13 WRDTMF 14 CSDTMF 15 Bloking 16 Ringon 17
DETEKSI DERING
XTAL2 18 XTAL1 19
1
RST C5 33p C6
9
P1.0/T2 P1.1/T2EX P1.2/RXD1 P1.3/TXD1 P1.4/INT2 P1.5/INT3 P1.6/INT4 P1.7/INT5
AD0/P0.0 AD1/P0.1 AD2/P0.2 AD3/P0.3 AD4/P0.4 AD5/P0.5 AD6/P0.6 AD7/P0.7
P3.0/RXD0 P3.1/TXD0 P3.2/INT0 P3.3/INT1 P3.4/T0 P3.5/T1 P3.6/WR P3.7/RD
A15/P2.7 A14/P2.6 A13/P3.5 A12/P3.4 A11/P2.3 A10/P2.2 A9/P2.1 A8/P2.0
XTAL2 XTAL1
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
28 27 26 25 24 23 22 21
EN P2.6 RS LD1 P2.3 SCL SDA
31 VCC 30 PROG 29 PSEN
1 2 3 4 5 6 7 8 9
1 2 3
1 2
RST AT89C51
X2 11,059MHz
VCC SW1
33p
EA/Vpp ALE/PROG PSEN
39 38 37 36 35 34 33 32
KONTROL LCD
DETEKSI HOOK
1 2 3 4 5 6 7 8
TO LCD
U2 D0 D1 D2 D3 P1.4 P1.5 P1.6 P1.7
4 3 2 1
TO EEPROM
TO DA TA DTMF
VCC
SW-PB
C7 10uF/50V
R10 10K
Gambar 3.3. Rangkaian sistem minimum mikrokontroler AT89C51 Didalam mikrokontroler AT89C51 tedapat berbagai fasilitas seperti yang telah disebutkan pada bab landasan teori sebelumnya, namun dalam rangkaian yang dibuat ini hanya beberapa fasilitas saja yang akan digunakan. Pada rangkaian ini port 0 (P0.0-P0.7) digunakan untuk saluran data yang akan menampilkan display ke LCD. Sebagai saluran kontrolnya (kontrol LCD) digunakan (P2.0-P2.3). Sementara EEPROM dihubungkan melalui P2.1 dan P2.2. Port 1 low byte (P1.0-P1.3) difungsikan sebagai saluran untuk menerima atau mengirimkan data DTMF dari rangkaian DTMF.
42
Port 3 digunakan untuk saluran kontrol DTMF, mendeteksi sinyal yang masuk dari rangkaian pendeteksi dering dan pendeteksi hook, selain itu juga digunakan untuk mengontrol rangkaian pemutus line telepon (switch line).
3.4.2. Rangkaian DTMF Rangkaian DTMF mempunyai fungsi untuk mendeteksi sinyal DTMF yang masuk saat tombol pesawat telepon ditekan. Sinyal yang masuk tersebut kemudian diubah menjadi kode biner yang akan diambil sebagai data input mikrokontroler. Selain itu, rangkaian ini juga dapat mengirim/membangkitkan sinyal DTMF. Pada rangkaian ini saluran data biner (D0-D3) dihubungkan ke mikrokontroler melalui port 1 (P1.0-P1.3)
VCC
TF1 TRAFO LINE TELEPON
C3 100N R3 390
U1 IN+ VCC INSt/GT GS ESt Vref D3 GND D2 OSC1 D1 OSC2 D0 TONE IRQ WR RD CS RS0
20 19 18 17 16 15 14 13 12 11
D3 D2 D1 D0 IRQDTMF RDDTMF RSDTMF
MT8888
R13 3K3 P1.3 P1.2 P1.1 P1.0 P3.2 P3.1 P3.3 P3.5 P3.4
1 2 3 4 1 2 3 4 5
TO M IKROKONTROLER
C2 1uF/60V
R1 100K/1% R2 22K/1% 1 C1 2 100nF TONE 3 4 GND 5 X1 6 3,579 MHz 7 TONEDTMF8 WRDTMF 9 1K R15 CSDTMF 10
Gambar 3.4. Rangkaian DTMF
43
Komponen utama rangkaian DTMF adalah IC MT8888. Sebagai sumber clock (oscillator) menggunakan kristal 3.57 MHz. Kapasitor pada input DTMF berfungsi untuk memblokir tegangan DC dan melewatkan sinyal DTMF. MT8888 mempunyai beberapa register, diantaranya transmit data register yang berfungsi mengirim data DTMF, receive data register untuk menerima nada DTMF, register control yang berfungsi untuk mengatur tata kerja MT8888 dan status register yang berfungsi untuk memantau keadaan/status MT8888. Untuk mengaktifkan register-register tersebut harus terlebih dahulu mengatur saluran kontrol dari register tersebut, yaitu saluran register slect (RS0), read (RD), write (WR) dan chip select (cs). Pada rangkaian ini saluran-saluran kontrol tersebut terhubung ke mikrokontroler melalui pin P3.3 (terhubung ke RS0), P3.5 (terhubung ke CS), P3.4 (terhubung ke WR) dan P3.1 (terhubung ke RD). Berikut adalah fungsi dari saluran kontrol: RS0
WR
RD
0
0
1
Menulis data ke transmit data register
0
1
0
Membaca data dari receive data register
1
0
1
Menulis data ke control register
1
1
0
Membaca data dari status register
FUNGSI
IRQ digunakan untuk memantau data pada IC MT8888. Saat ada sinyal DTMF yang terdeteksi rangkaian DTMF, IRQ akan berlogika 0. Bila tidak ada sinyal DTMF
44
yang terdeteksi, IRQ akan berlogika 1.
Pada rangkaian ini IRQ terhubung ke
mikrokontroler melalui kaki P3.2. 3.4.3. Rangkaian pendeteksi dering Rangkaian pendeteksi dering berfungsi untuk mendeteksi sinyal dering saat ada telepon yang masuk (melakukan panggilan). Bila ada nada dering yang masuk, keluaran dari tegangan sinyal pulsa pada rangkaian pendeteksi dering adalah sebesar 0 Volt dan bila tidak ada sinyal dering maka tegangan keluaran sinyal pulsa dari rangkaian adalah 5 Volt.
Output rangkaian pendeteksi dering dihubungkan ke
mikrokontroler melalui kaki P3.7.
VCC R19 6K8 RING
1uF 2 3 TIP
R20 10K
C10 B2 AC + AC BRIDGE
1 4
R8
IC2
220 TLP521
Ringon C11 100uF
1
TO M IKROKON TROLER P3.7
PESAWAT TELEPON
LINE TELEPON
Gambar 3.5. Rangkaian pendeteksi dering Pada rangkaian diatas, kapasitor C10 berfungsi untuk menahan tegangan DC dari saluran telepon agar tidak masuk ke opto-coupler (TLP521), tetapi kapasitor ini akan melewatkan sinyal dering (AC). Resistor R8 (220 ? ) berfungsi untuk membatasi arus yang masuk ke opto-coupter TLP521. Sementara itu resistor 10K
45
berfungsi untuk membatasi arus yang masuk ke kaki kolektor transistor pada TLP521.
3.4.4. Rangkaian pendeteksi hook Rangkaian pendeteksi hook berfungsi untuk mengetahui
kondisi gagang
pasawat telepon, apakah gagang tersebut dalam posisi diangkat (off hook) atau dalam posisi diletakan (on hook). Output rangkaian dihubungkan ke mikrokontroler melalui kaki P3.0.
VCC R21 10K B1 2 3 C4 470nF/63Volt
AC + AC BRIDGE
1 4
R7
IC1
HOOK
220
1
TO M IKROKON TROLER P3.0
PESAWAT TELEPON
TLP521
LINE TELEPON
Gambar 3.6. Rangkaian pendeteksi hook
Pada rangkaian pendeteksi hook, apabila gagang telepon di angkat maka arus akan mengalir melalui resistor R7 (220 ? ), sehingga pada resistor timbul tegangan yang akan mengaktifkan opto-coupler (TLP 521), hal ini menyebabkan tegangan keluaran rangkaian menjadi 0 Volt (pulsa 0). Sebaliknya jika gagang telepon dalam
46
posisi diletakan arus tidak akan mengalir sehingga opto-coupler tidak aktif dan keluaran rangkaian 5 Volt (pulsa1).
3.4.5. Rangkaian pemutus line telepon Rangkain pemutus line telepon digunakan untuk menyambungkan atau memutuskan rangkaian dengan line telepon.
Rangkaian ini dihubungkan ke
mikrokontroler melelui kaki P3.6.
+12V
RL2A Relay5V VCC D1 IN4001
R5 220
R4 10K
R6 TR1 828
220
P3.6 Bloking
1
TO MI KRO KONTROLER
TIP_P
PESAWAT TELEPON
LINE TELEPON
Gambar 3.7. Rangkaian pemutus line telepon
Untuk dapat mengontrol rangkaian pemutus line telepon, mikrokontroler harus mengirimkan data sinyal pulsa 0 atau 1.
47
Bila mikrokontroler mengirimkan sinyal pulsa 0, maka transistor berada dalam kondisi cut off , tegangan pada kolektor-emiter transistor (Vce) mendekati tegangan VCC sehingga relay akan off. Jika mikrokontroler memberikan sinyal pulsa 1, maka transistor menjadi saturasi, tegangan pada kolektor-emiter transistor (Vce) mendekati 0 sehingga relay akan menjadi on.
3.5.
Perancangan perangkat lunak (software) Perangkat lunak mikrokontroler akan mengontrol kerja dari perangkat keras
rangkaian, sehingga bagian ini sangat menentukan bekerja atau tidaknya sistem secara keseluruhan. Bahasa pemrograman menggunakan bahasa assembler MCS51. Tahap perancangan perangkat lunak (software) diawali dengan membuat algoritma dan flowchart terlebih dahulu, dengan cara ini program yang dibuat akan menjadi terstruktur dan terarah.
48
Mulai
Inisialisasi
B
Check Ring
Ada Ring ?
ya
Aktifkan Relay
Telp Ditutup ?
Tunggu Sampai Telp Ditutup
ya
Matikan Relay
tdk
tdk
Check Hook
tdk
Hook Detect Aktif ?
ya
Masukkan Password
Password OK ?
tdk
ya
Tampilkan Menu
Pilih Menu
A
49
50
A
Pilih Menu 1 ?
ya
Masukan Nama
Masukkan Nomor
B
tdk ya
Pilih Menu 2 ?
ya
Pilih Nomor Tujuan
Dialling
Tunggu Telp Ditutup
tdk
tdk
Pilih Menu 3 ?
Telp Ditutup ? tdk
ya
Reset Memory
Selesai ?
B
tdk
Gambar 3.8. Flowchart
51
3.6. Cara Kerja alat.
Alat dipasang secara paralel dengan line telepon. Ketika power dihidupkan posisi gagang telepon harus dalam keadaan diletakan (on hook) Proses inisialisasi akan dilakukan saat pertama kali alat dihidupkan (power on). Selanjutnya mikrokontroler akan mengecek nada dering. Jika ada nada dering, maka alat siap untuk menerima panggilan. Jika tidak ada nada dering mikrokontroler akan mengecek kondisi gagang telepon. Apabila gagang telepon tidak diangkat mikrikontroler kembali akan memeriksa nada dering. Saat gagang telepon diangkat (off hook) mikrokontroler akan mengecek tombol telepon. Apabila saat itu memasukan nomor telepon yang tidak terdaftar dalam list maka akan diminta untuk memasukan pasword (pasword: 2222) jika pasword sudah benar maka panggilan keluar dapat dilakukan, namun jika pasword salah maka tidak dapa melakukan panggilan keluar. Untuk masuk ke sub menu tekan tombol bintang (*), kemudian masukan pasword (pasword: 1111) jika pasword salah maka tidak dapat masuk ke sub menu. Dalam sub menu terdapat beberapa pilihan, untuk memasukan list telepon baru tekan 1, untuk melihat
list telepon/menghapus list telepon tekan 2 sedangkan untuk
mereset list telepon tekan 3.
52
BAB IV
53
PENGUJIAN DAN ANALISA
4.1. Pengujian pendeteksi dering. Pengujian dilakukan dengan cara menghubungkan input rangkaian pendeteksi dering ke saluran line telepon, kemudian tegangan keluaran rangkaian diukur menggunakan voltmeter. Pengukuran dilakukan saat ada nada dering dan saat tidak ada nada dering. Berikut ini adalah hasil pengukuran. Kondisi pengukuran
Vo (tegangan keluaran)
Tidak ada nada dering
4,3 volt
Ada nada dering
0,2 volt
Tabel 4.1. Hasil pengukuran rangkaian pendeteksi dering
4.2. Pengukuran pendeteksi hook Pengujian dilakukan dengan cara menghubungkan input rangkaian pendeteksi dering ke saluran line telepon, kemudian tegangan keluaran rangkaian diukur menggunakan voltmeter. Ukur tegangan keluaran saat gagang telepon diletakan (on hook) dan saat gagang telepon diangkat (off hook).
54
Berikut ini adalah hasil pengukuran.
Kondisi pengukuran
Vo (tegangan keluaran)
Gagang telepon diletakan
4,2 Volt
Gagang telepon diangkat
0,4 Volt
Tabel 4.2. Hasil pengukuran rangkaian pendeteksi hook
4.3. Pengujian Pemutus line (switch line) Pengujian dilakukan dengan cara mengukur tegangan pada relay sebagai switch telepon. Pengukuran dilakukan ketika input rangkaian diberi logika 0 dan logika 1 oleh mikrokontroler. Berikut ini adalah hasil pengukuran. Kondisi Pengukuran
Vrelay (tegangan relay)
Diberi logika 0
0,1 Volt
Diberi logika 1
4,4 Volt
Tabel 4.3. Hasil pengukuran rangkaian switch line
BAB V
55
KESIMPULAN DAN SARAN
5.1. Kesimpulan. -
Alat phone book telepon dapat menyimpan list telepon sampai 100 nomor. Semakin besar kapasitas memori yang digunakan, semakin banyak jumlah nomor telepon yang dapat disimpan.
-
Alat hanya dapat digunakan apabila sudah mengetahui/memasukan password terlebih dahulu.
-
Alat dapat dipasang secara paralel dengan telepon yang menggunakan sistem dial tone.
5.2. Saran. Untuk pengembangan lebih lanjut pada alat dapat ditambahkan aplikasi SMS, pembatas pulsa atau pembatas waktu pemanggilan.
DAFTAR PUSTAKA
56
Agianto Eko Putra, 2002, Belajar
Mikrokontroler AT89C51/52/55 (Teori dan
aplikasi), Gava Media, Yogyakarta
Suhata ST, 2005, Aplikasi Mikrokontroler sebagai pengendali peralatan elektronik via line telepon, PT Elex Media Komputindo, Jakarta
Malvino, Barmawi, Prinsip-prinsip elektronika, Erlangga, Jakarta
Atmel, Flash Mikrokontroler: Architektural Overview, Atmel Inc. (http://www. Atmel.com), USA
Atmel, AT89 Series Hardware Descripsion, Atmel Inc. (http://www. Atmel.com), USA
57
LAMPIRAN A LIST PROGRAM
;========PHONEBOOK FINAL PROGRAM=========================
58
$mod51 ;===========HARDWARE CONFIGURATION======================= ;LCD , data => P0 rs bit P2.5 rw bit P2.6 en bit P2.7 run_led bit P2.4 ;output, program running indicator ;I2C, 2464 serial EEPROM sda bit P2.2 scl bit P2.1 ;Phone interface ring bit P3.7 ;input,0=ring relay bit P3.6 ;output,0=supply line ,1=phoneline hook bit P3.0 ;input,0=offhook ;MT8888 dtmf_port equ p1 irq bit P3.2 ; wrdtmf bit P3.4 ;active low cs bit P3.5 rs0dtmf bit P3.3 rddtmf bit P3.1 ;==============BUFFERS==================================== ; BIT ADDRESSED : tone_detect equ 00h ;1=dtmf key tone detected pw_ok equ 01h ;1=password OK first_time equ 02h ;1=first time cursor_inc equ 03h ;1=cursor increased ; BYTE : dtmf_buff equ 30h ;ASCII 0-9,*,# itc_buff equ 31h ;data buffer to be sent/rcv via I2C itc_addrl equ 32h ;Address low byte itc_addrh equ 33h ;Address high byte ; tap_ctr equ 34h prev_key equ 35h general1 equ 36h limit ;CONSTANTS ;Menu Password password1 password2 password3
equ
4fh
equ equ equ
31h 31h 31h
59
password4 equ 31h ; ;Dial Password password21 equ 32h password22 equ 32h password23 equ 32h password24 equ 32h ;************** BASE PAGE ****************** org 0000h jmp init ; ;************** INISIALISASI *************** init: mov sp,#5fh ;init.stack pointer setb relay ;main network line call delay_1s call init_mt8888 clr rw call init_lcd ; main: call switch_to_telkom main_loop: jb hook,main_loop jnb ring,is_it_ring jmp main_dial ; is_it_ring: call delay_500ms mov b,#0c0h recheck_ring: jnb ring,ring_procedure call delay_5ms djnz b,recheck_ring jmp main_loop ; ;******************************************* ring_procedure: mov dptr,#msg7 ;db' Incoming Call ... ',0ffh; call line1 ; call delay_2s mov b,#40 ring_loop: call delay_100ms jnb ring,ring_procedure jnb hook,incall_progress djnz b,ring_loop call clr_scr jmp main_loop
60
; incall_progress: call delay_1s jnb hook,$ call delay_1s call clr_scr jmp main_loop ; ;******************************************* main_dial: call switch_to_supply ; mov dptr,#msg0 ;db' Press (*) ',0ffh; call line1 mov dptr,#msg1 ;db' to enter MENU ',0ffh; call line2 ; main_dial_loop: jb hook,main_dial_exit call dtmf_chk jnb tone_detect,main_dial_loop mov a,dtmf_buff cjne a,#'*',direct_dial jmp menu ; main_dial_exit: call clr_scr jmp main ; ;******************************************* direct_dial: call clr_scr mov dptr,#msg8 ;db' OK (#) ',0ffh call line2 ; mov a,#80h call iwr ; call reset_buffer mov b,#16 mov r0,#general1 show_dial_num: mov a,dtmf_buff mov @r0,a inc r0 djnz b,diallength_ok jmp compare_entry ; diallength_ok: call dwr
61
; direct_dial_loop: jb hook,direct_dial_exit call dtmf_chk jnb tone_detect,direct_dial_loop mov a,dtmf_buff cjne a,#'#',show_dial_num ; compare_entry: mov dptr,#msg15 ;db' Please wait call line2 ; mov itc_addrh,#00h mov itc_addrl,#10h compare_entry2: mov b,#16 mov r0,#general1 clr pw_ok ; cmpr_nxt_digit: call itc_byte_rd mov a,@r0 cjne a,itc_buff,pcmpr_not_same pcmpr_nxt_dgt2: inc r0 call inc_itc_addr djnz b,cmpr_nxt_digit jnb pw_ok,dial_approved jmp pcmpr_nxt_entry ; pcmpr_not_same: setb pw_ok jmp pcmpr_nxt_dgt2 ; pcmpr_nxt_entry: mov b,#16 cne_loop: call inc_itc_addr djnz b,cne_loop mov a,itc_addrh cjne a,#20h,compare_entry2 ; call password_2 jb pw_ok,dial_approved jnb hook,$ call clr_scr jmp main ; dial_approved:mov dptr,#msg9 ;db' Dialing ... ',0ffh call line2 call dial
',0ffh;
62
call clr_scr jmp main_loop ; direct_dial_exit: call clr_scr jmp main ; ;******************************************* menu: call password jb pw_ok,menu_ok jnb hook,$ jmp main ; menu_ok: mov dptr,#msg5 ;db'1.Add New 3.Reset ',0ffh; call line1 mov dptr,#msg6 ;db'2.Call/Erase ',0ffh; call line2 ; menu_loop: jb hook,menu_exit call dtmf_chk jnb tone_detect,menu_loop mov a,dtmf_buff chk_menu1: cjne a,#'1',chk_menu2 call menu1 jmp menu_ok ; chk_menu2: cjne a,#'2',chk_menu3 call menu2 jmp menu_ok ; chk_menu3: cjne a,#'3',menu_exit call menu3 jmp menu_ok ; menu_exit: call clr_scr jmp main ; ;*********** Menu1 ADD NEW**************** menu1: call clr_scr mov dptr,#msg10 ;db' Name: ',0ffh call line1 ; setb first_time clr cursor_inc
63
mov a,#0c0h call iwr call blink ; call reset_buffer ; mov prev_key,#0ffh mov r0,#general1 ;character buffer mov r1,#16 ;maximum char length mov r2,#0c0h ;cursor pointer time_reload: mov r3,#0c0h ;timeout value (x10ms) ; mov tap_ctr,#00h ; menu1_loop: jb hook,menu1_exit call dtmf_chk jb tone_detect,get_tap_key call delay_10ms djnz r3,menu1_loop mov a,tap_ctr jz time_reload inc r2 mov a,r2 call iwr setb cursor_inc inc r0 djnz r1,time_reload call stopblink call delay_2s jmp edit_number ; menu1_exit: call stopblink ret ; get_tap_key: mov a,dtmf_buff cjne a,prev_key,new_key jmp get_table1 ; new_key: mov prev_key,a jbc first_time,get_table1 jbc cursor_inc,name_not16 inc r2 mov a,r2
64
call iwr inc r0 name_ok:
name_not16: get_table1:
get_table2:
get_table3:
get_table4:
get_table5:
get_table6:
get_table7:
get_table8:
get_table9:
djnz r1,name_not16 call stopblink call delay_2s jmp edit_number ; mov tap_ctr,#00h ; mov a,dtmf_buff cjne a,#'1',get_table2 mov dptr,#char_1 jmp get_char ; cjne a,#'2',get_table3 mov dptr,#char_2 jmp get_char ; cjne a,#'3',get_table4 mov dptr,#char_3 jmp get_char ; cjne a,#'4',get_table5 mov dptr,#char_4 jmp get_char ; cjne a,#'5',get_table6 mov dptr,#char_5 jmp get_char ; cjne a,#'6',get_table7 mov dptr,#char_6 jmp get_char ; cjne a,#'7',get_table8 mov dptr,#char_7 jmp get_char ; cjne a,#'8',get_table9 mov dptr,#char_8 jmp get_char ; cjne a,#'9',get_table0
65
mov dptr,#char_9 jmp get_char ; get_table0: cjne a,#'0',chk_char_ok mov dptr,#char_0 jmp get_char ; chk_char_ok: cjne a,#'#',chk_name_bs jmp name_ok ; chk_name_bs: inc r1 cjne r1,#17,name_bs_cont mov r1,#16 name_bs_cont: mov @r0,#0ffh dec r0 cjne r0,#general1-1,name_bs_cont2 mov r0,#general1 name_bs_cont2: dec r2 cjne r2,#0bfh,name_bs_cont3 mov r2,#0c0h name_bs_cont3: setb first_time mov tap_ctr,#00h mov a,r2 call iwr mov a,#' ' call dwr mov a,r2 call iwr jmp menu1_loop ; get_char: mov a,tap_ctr movc a,@a+dptr cjne a,#0ffh,get_char_cont mov tap_ctr,#00h jmp get_char ; get_char_cont: inc tap_ctr mov @r0,a call dwr mov a,r2 call iwr mov r3,#0c0h ;time reload jmp menu1_loop
66
; ;************************* edit_number: call clr_scr mov dptr,#msg11 ;db' Phone Number: ',0ffh call line1 ; mov a,#0c0h call iwr ;call blink ; mov r0,#general1+16 ;character buffer mov r1,#16 ;maximum char length mov r2,#0c0h ;cursor pointer ; edit_num_loop: jb hook,edit_num_exit call dtmf_chk jnb tone_detect,edit_num_loop mov a,dtmf_buff cjne a,#'#',chk_num_bs ;call stopblink call save_entry jmp edit_num_exit ; chk_num_bs: cjne a,#'*',valid_num inc r1 cjne r1,#17,num_bs_cont mov r1,#16 num_bs_cont: mov @r0,#0ffh dec r0 cjne r0,#general1+15,num_bs_cont2 mov r0,#general1+16 num_bs_cont2: dec r2 cjne r2,#0bfh,num_bs_cont3 mov r2,#0c0h num_bs_cont3: mov a,r2 call iwr mov a,#' ' call dwr mov a,r2 call iwr jmp edit_num_loop ; edit_num_exit: ;call stopblink
67
call delay_2s ret ; valid_num: mov a,dtmf_buff call dwr mov @r0,dtmf_buff inc r0 inc r2 djnz r1,edit_num_loop call save_entry jmp edit_num_exit ; char_1: db' .,?!"*#1',0ffh char_2: db'ABCabc2',0ffh char_3: db'DEFdef3',0ffh char_4: db'GHIghi4',0ffh char_5: db'JKLjkl5',0ffh char_6: db'MNOmno6',0ffh char_7: db'PQRSpqrs7',0ffh char_8: db'TUVtuv8',0ffh char_9: db'WXYZwxyz9',0ffh char_0: db'+-=%&()0',0ffh ;******************************************* reset_buffer: mov r0,#general1 mov b,#32 rst_buff_loop: mov @r0,#0ffh inc r0 djnz b,rst_buff_loop ret ; ;********** Menu2 CALL/ERASE************** menu2: call clr_scr mov dptr,#msg18 ;db' Dial(0) Erase(5) ',0ffh call line1 mov dptr,#msg19 ;db' Next(*) Prev(#) ',0ffh call line2 ; call delay_2s call clr_scr mov dptr,#msg15 ;db' Please wait ',0ffh; call line1 ; search_beginning: mov itc_addrh,#00h
68
mov itc_addrl,#00h chk_dial_entry: call itc_byte_rd mov a,itc_buff cjne a,#0ffh,dsp_entry mov b,#32 find_next_entry: call inc_itc_addr djnz b,find_next_entry mov a,itc_addrh cjne a,#20h,chk_dial_entry mov dptr,#msg17 ;db' Data Empty call line2 call delay_2s ret ; dsp_entry: call clr_scr mov a,#80h call iwr mov b,#16 dsp_name_loop: call itc_byte_rd mov a,itc_buff cjne a,#0ffh,dsp_name_ok mov a,#20h dsp_name_ok: call dwr call inc_itc_addr djnz b,dsp_name_loop ; mov a,#0c0h call iwr call reset_buffer mov r0,#general1 mov b,#16 dsp_num_loop: call itc_byte_rd mov a,itc_buff mov @r0,a inc r0 cjne a,#0ffh,dsp_num_ok mov a,#20h dsp_num_ok: call dwr call inc_itc_addr djnz b,dsp_num_loop ; menu2_loop: jb hook,menu2_exit call dtmf_chk
',0ffh
69
jnb tone_detect,menu2_loop mov a,dtmf_buff ; chk_next_dial: cjne a,#'*',chk_prev_dial chk_next_dial2: mov a,itc_addrh cjne a,#20h,next_entry_ok mov itc_addrh,#00h mov itc_addrl,#00h next_entry_ok: call itc_byte_rd mov a,itc_buff cjne a,#0ffh,dsp_entry mov dptr,#msg15 ;db' Please wait ',0ffh; call line1 mov dptr,#msg20 ;db' ',0ffh; call line2 ; mov b,#32 nxt_dial_loop: call inc_itc_addr djnz b,nxt_dial_loop jmp chk_next_dial2 ; chk_prev_dial:cjne a,#'#',chk_start_dial mov b,#64 prev_dial_loop: call dec_itc_addr djnz b,prev_dial_loop call itc_byte_rd mov a,itc_buff cjne a,#0ffh,dsp_entryt mov dptr,#msg15 ;db' Please wait ',0ffh; call line1 mov dptr,#msg20 ;db' ',0ffh; call line2 mov b,#32 jmp prev_dial_loop ; dsp_entryt: jmp dsp_entry chk_start_dial: cjne a,#'0',chk_erase jmp dialing ; menu2_exit: ret ; chk_erase: cjne a,#'5',menu2_loop
70
mov b,#32 pre_erase: call dec_itc_addr djnz b,pre_erase mov b,#32 erase_loop: mov itc_buff,#0ffh call itc_byte_wr call inc_itc_addr djnz b,erase_loop jmp search_beginning ; dialing: mov dptr,#msg9 ;db' Dialing ... call line2 ; call dial ret ; ;******************************************* dial: call switch_to_telkom call delay_1s ; mov a,#0c0h ; call iwr ; mov b,#16 mov r0,#general1 dialing_loop: mov a,@r0 cjne a,#0ffh,dial_valid jmp skip_dial ; dial_valid: ; push acc ; call dwr ; pop acc anl a,#0fh jnz dial_valid2 mov a,#0ah dial_valid2: mov dtmf_buff,a call dtmf_data_wr jb irq,$ call dtmf_reg_rd jnb irq,$ call delay_100ms call delay_100ms skip_dial: inc r0 djnz b,dialing_loop
',0ffh
71
; dialing_loop2: jnb hook,$ ret ; ;*************** Menu3 RESET*************** menu3: call clr_scr mov dptr,#msg12 ;db' Are You Sure ? ',0ffh call line1 mov dptr,#msg13 ;db' Yes(#) No(*) ',0ffh call line2 ; menu3_loop: jb hook,menu3_exit call dtmf_chk jnb tone_detect,menu3_loop mov a,dtmf_buff cjne a,#'#',chk_rst_cancel ; call clr_scr mov dptr,#msg15 ;db' Please wait ',0ffh; call line1 ; mov itc_addrl,#00h mov itc_addrh,#00h ; reset_loop: mov itc_buff,#0ffh call itc_byte_wr call inc_itc_addr mov a,itc_addrh cjne a,#20h,reset_loop ; mov dptr,#msg14 ;db' Done ',0ffh; call line1 call delay_1s menu3_exit: call clr_scr ret ; chk_rst_cancel: cjne a,#'*',menu3_loop jmp menu3_exit ; ;******************************************* password: clr pw_ok call clr_scr mov dptr,#msg2 ;db' Password: ',0ffh
72
call line1 ; mov a,#8dh call iwr ; mov b,#4 mov r0,#general1 pw_loop: jb hook,pw_exit call dtmf_chk jnb tone_detect,pw_loop mov @r0,dtmf_buff inc r0 mov a,#'*' call dwr djnz b,pw_loop ; mov r0,#general1 cjne @r0,#password1,invalid_pw inc r0 cjne @r0,#password2,invalid_pw inc r0 cjne @r0,#password3,invalid_pw inc r0 cjne @r0,#password4,invalid_pw setb pw_ok ; mov dptr,#msg3 ;db' Password OK ',0ffh; call line2 pw_exit: call delay_1s call clr_scr ret ; invalid_pw: clr pw_ok mov dptr,#msg4 ;db' Invalid Password ! ',0ffh; call line2 call delay_1s call clr_scr ret ; ;******************************************* password_2: clr pw_ok call clr_scr mov dptr,#msg2 ;db' Password: ',0ffh
73
call line1 ; mov a,#8dh call iwr ; mov b,#4 mov r0,#general1+20 pw2_loop: jb hook,pw2_exit call dtmf_chk jnb tone_detect,pw2_loop mov @r0,dtmf_buff inc r0 mov a,#'*' call dwr djnz b,pw2_loop ; mov r0,#general1+20 cjne @r0,#password21,invalid_pw2 inc r0 cjne @r0,#password22,invalid_pw2 inc r0 cjne @r0,#password23,invalid_pw2 inc r0 cjne @r0,#password24,invalid_pw2 setb pw_ok ; mov dptr,#msg3 ;db' Password OK ',0ffh; call line2 pw2_exit: call delay_1s call clr_scr ret ; invalid_pw2: clr pw_ok mov dptr,#msg4 ;db' Invalid Password ! ',0ffh; call line2 call delay_1s call clr_scr ret ; ;******************************************* switch_to_telkom: setb relay call delay_30ms call dtmf_reg_rd
74
call delay_1s ret ; ;******************************************* switch_to_supply: clr relay call delay_30ms call dtmf_reg_rd call delay_1s ret ; ;******************************************* dtmf_chk: clr tone_detect jnb irq,get_key ret ; get_key: call dtmf_reg_rd jnb irq,$ call dtmf_data_rd setb tone_detect ret ; ;******************************************* init_mt8888: call dtmf_reg_rd mov dtmf_buff,#0 call dtmf_reg_wr call delay_5ms call dtmf_reg_wr call delay_5ms mov dtmf_buff,#8 call dtmf_reg_wr call delay_5ms mov dtmf_buff,#0 call dtmf_reg_wr call delay_5ms call dtmf_reg_rd mov dtmf_buff,#0dh call dtmf_reg_wr call delay_5ms mov dtmf_buff,#0 call dtmf_reg_wr call delay_5ms mov dtmf_buff,#0ffh ret
75
;================================================== dtmf_reg_rd: setb rs0dtmf clr cs setb wrdtmf clr rddtmf nop nop mov dtmf_buff,dtmf_port setb rddtmf setb cs ret ;================================================== dtmf_reg_wr: setb rs0dtmf clr cs setb rddtmf mov dtmf_port,dtmf_buff clr wrdtmf nop nop setb wrdtmf setb cs mov dtmf_port,#0ffh ret ;================================================== dtmf_data_rd: clr rs0dtmf clr cs setb wrdtmf clr rddtmf nop nop mov a,dtmf_port anl a,#0fh setb rddtmf setb cs setb rs0dtmf inc a inc a inc a movc a,@a+PC mov dtmf_buff,a
76
ret DataDTMF: db'D','1','2','3','4','5','6','7','8','9','0','*','#','A','B','C' ;================================================== dtmf_data_wr: push acc clr rs0dtmf clr cs setb rddtmf mov a,dtmf_buff anl a,#0fh mov dtmf_port,a clr wrdtmf nop nop setb wrdtmf setb cs setb rs0dtmf mov dtmf_port,#0ffh pop acc ret ;================================================== save_entry: mov itc_addrl,#00h mov itc_addrh,#00h chk_entry: call itc_byte_rd mov a,itc_buff cjne a,#0ffh,entry_not_empty mov r0,#general1 mov b,#32 save_entry_loop: mov itc_buff,@r0 call itc_byte_wr call inc_itc_addr inc r0 djnz b,save_entry_loop ret ; entry_not_empty: mov b,#32 next_entry: call inc_itc_addr djnz b,next_entry mov a,itc_addrh cjne a,#20h,chk_entry ; mov dptr,#msg16 ;db' Memory Full ',0ffh
77
call line2 call delay_2s ret ;************************************************ ; Rutin line1 s/d line4 ; Menentukan posisi DDRAM pada awal masing2 baris ; pd LCD. Lalu menampilkan charakter2 pd baris tsb ; menggunakan rutin line. ; Isi DPTR tdk diubah, diteruskan ke rutin line. ;************************************************ line1: push acc mov acc,#80h call iwr call line pop acc ret ; line2: push acc mov acc,#0c0h call iwr call line pop acc ret ; ;************************************************ ; Line routine ; Menampilkan satu baris charakter pada LCD ; Input : dptr ; Destroys: Acc ;************************************************ line: clr a movc a,@a+dptr cjne a,#0ffh,go_on ret ; go_on: call dwr inc dptr jmp line ; ;************************************************ ; Charakter Area ;************************************************ msg0: db' Press (*) ',0ffh;
78
msg1: db' to enter MENU ',0ffh; msg2: db' Password: ',0ffh; msg3: db' Password OK ',0ffh; msg4: db' Invalid Password ! ',0ffh; msg5: db'1.Add New 3.Reset ',0ffh; msg6: db'2.Call/Erase ',0ffh; msg7: db' Incoming Call ... ',0ffh; msg8: db' OK (#) ',0ffh; msg9: db' Dialing ... ',0ffh; msg10: db' Name: ',0ffh; msg11: db' Phone Number: ',0ffh; msg12: db' Are You Sure ? ',0ffh; msg13: db' Yes(#) No(*) ',0ffh; msg14: db' Done ',0ffh; msg15: db' Please wait ',0ffh; msg16: db' Memory Full ',0ffh; msg17: db' Data Empty ',0ffh; msg18: db' Dial(0) Erase(5) ',0ffh; msg19: db' Next(*) Prev(#) ',0ffh; msg20: db' ',0ffh; ;****************************************************** ; OPERASI * OPERASI LCD ; INPUT = ACC ;****************************************************** dwr: mov p0,a ;kirim data di a ke p0 setb rs ;rs = 1 setb en ;en = 1 clr en ;en = 0 call delay_1ms ;tunggu 1ms ret ; iwr_1: mov p0,a ;kirim data di a ke p0 clr rs ;rs = 0 setb en ;en = 1 clr en ;en = 0 call delay_10ms ;tunggu 10ms ret ; iwr: mov p0,a ;kirim data di a ke p0 clr rs ;rs = 0 setb en ;en = 1 clr en ;en = 0 call delay_1ms ;tunggu 1ms
79
ret ; ;****************************************************** clr_scr: push acc mov a,#01h ; clear display call iwr_1 pop acc ret ; ;****************************************************** blink: push acc mov a,#0dh ;blink char call iwr pop acc ret ; ;****************************************************** stopblink: push acc mov a,#0ch ; call iwr pop acc ret ; ;********* INISIALISASI LCD ************************** init_lcd: push acc call delay_30ms clr a mov a,#30h ;interface is 8*bit long call iwr_1 call iwr_1 call iwr_1 mov a,#38h ;display off call iwr_1 mov a,#08h ;display off call iwr_1 mov a,#01h call iwr_1 mov a,#06h ;inc call iwr_1 mov a,#0ch ;on call iwr_1 pop acc ret
80
; ; ***************I2C Data Transfer Area ; ***************Rutin Increase I2C Address*************** inc_itc_addr: push acc mov a,itc_addrl add a,#01h jc addr_cry mov itc_addrl,a inc_addr_exit: pop acc ret ; addr_cry: mov itc_addrl,a inc itc_addrh jmp inc_addr_exit ; ;********** Rutin Decrease I2C Address******************* dec_itc_addr: push acc dec itc_addrl mov a,itc_addrl cjne a,#0ffh,dec_addr_exit dec itc_addrh mov a,itc_addrh cjne a,#0ffh,dec_addr_exit mov itc_addrh,#1fh dec_addr_exit: pop acc ret ; ;***************************************************** ; Rutin itc Byte Write ; menyimpan data pada komponen itc 24C256 (14 bit addr) ; Input : itc_buff, chip_sel, itc_addrh, itc_addrl ;***************************************************** itc_byte_wr: push acc push b call start_cond ;Sending start condition ; mov a,#10100000b mov b,a ;save control byte in b call itcsend ;Sending Control Byte ack00: call ack_rcv jc ack00 ; mov a,itc_addrh ;
81
call itcsend ;Sending address high byte ack01: call ack_rcv jc ack01 ; mov a,itc_addrl ; call itcsend ;Sending address low byte ack02: call ack_rcv jc ack02 ; mov a,itc_buff ; call itcsend ;Sending data ack03: call ack_rcv jc ack03 ; call stop_cond ;Sending stop condition ; ack_polling: call start_cond ;Sending start condition mov a,b ;copy control byte to a call itcsend ;Sending Control Byte call ack_rcv jc ack_polling ; pop b pop acc ret ;***************************************************** ; Rutin itc Byte Read ; Membaca data pada komponen itc 24C256 (14 bit addr) ; Input : itc_addrh, itc_addrl ; Output: itc_buff ;***************************************************** itc_byte_rd: push acc push b call start_cond ;Sending Start Condition ; mov a,itc_addrh mov a,#10100000b ; mov b,a ;save control byte in b call itcsend ;Sending Control Byte ack04: call ack_rcv jc ack04 ;
82
mov a,itc_addrh ; anl a,#7fh ;7th bit masked with 0 call itcsend ;Sending address high byte ack05: call ack_rcv jc ack05 ; mov a,itc_addrl ; call itcsend ;Sending address low byte ack06: call ack_rcv jc ack06 ; call start_cond ;Sending second start cond. mov a,b ;copy control byte to a orl a,#01h ;read call itcsend ;Sending second control byte ack07: call ack_rcv jc ack07 ; call itcrcv ;Receiving data byte from device call nack_rcv ;Sending No Ack condition call stop_cond ;Sending stop condition pop b pop acc ret ;****************************************************** ; Mengirimkan data 8 bit ke itc Bus ; input : Acc ;****************************************************** itcsend: push b mov b,#8 itcsendloop: rlc a mov sda,c nop setb scl call delay_10mcl clr scl call delay_10mcl djnz b,itcsendloop setb sda pop b ret ; ;******************************************************
83
; Menerima data 8 bit dari itc Bus ; output: itc_buff ;****************************************************** itcrcv: push b push acc mov b,#8 itcrcvloop: setb scl call delay_10mcl mov c,sda rlc a clr scl call delay_10mcl djnz b,itcrcvloop mov itc_buff,a pop acc pop b ret ; ;****************************************************** start_cond: setb sda ;1 nop ;1 setb scl ;1 call delay_10mcl ;2 clr sda ;1 call delay_10mcl ;2 clr scl ;1 ret ;2, total = 11 M ; ;****************************************************** ack_rcv: setb scl ;1 call delay_10mcl ;2 mov c,sda ;1 call delay_10mcl ;2 clr scl ;1 ret ;2, total = 9 M ; ;****************************************************** nack_rcv: setb scl ;1 call delay_10mcl ;2 clr scl ;1 ret ;2, total = 6 M ; ;******************************************************
84
ack_send:
clr sda
;1
nop ;1 setb scl ;1 call delay_10mcl ;2 clr scl ;1 ret ;2 total = 8 M ; ;****************************************************** stop_cond: clr sda ;1 nop ;1 setb scl ;1 call delay_10mcl ;2 setb sda ;1 ret ;2 total = 8 M ; ;****************************************************** delay_10mcl: nop nop nop nop nop ret ; ;****************************************************** ; DELAY AREA ;****************************************************** delay_1ms: mov r6,#250 loop1: nop djnz r6,loop1 ret ; delay_500us: mov r6,#250 djnz r6,$ ret ; delay_5ms: mov r5,#10 loop2: mov r6,#250 djnz r6,$ djnz r5,loop2 ret ; delay_10ms: mov r5,#20
;
;
85
loop3: loop4:
mov r6,#250 djnz r6,loop4 djnz r5,loop3 ret ; delay_30ms: mov r5,#60 loop10: mov r6,#250 loop11: djnz r6,loop11 djnz r5,loop10 ret ; delay_100ms: mov r5,#200 loop12: mov r6,#250 loop13: djnz r6,loop13 djnz r5,loop12 ret ; delay_500ms: mov r5,#4 loop15: mov r6,#250 loop16: mov r7,#250 loop17: djnz r7,loop17 djnz r6,loop16 djnz r5,loop15 ret ; delay_1s: call delay_500ms call delay_500ms ret ; delay_2s: call delay_1s call delay_1s ret ; end
;
;
86