76460173-WaroengSMS

177
PERANCANGAN DAN PEMBUATAN PERANGKAT WARUNG SMS DENGAN MENGGUNAKAN IBM PC Oleh : Nama : Ihyauddin NIM : 02.41020.0019 Program : S1 (Strata Satu) Jurusan : Sistem Komputer SEKOLAH TINGGI MANAJEMEN INFORMATIKA & TEKNIK KOMPUTER SURABAYA 2006

Transcript of 76460173-WaroengSMS

Page 1: 76460173-WaroengSMS

PERANCANGAN DAN PEMBUATAN PERANGKAT WARUNG SMS

DENGAN MENGGUNAKAN IBM PC

Oleh :

Nama : Ihyauddin

NIM : 02.41020.0019

Program : S1 (Strata Satu)

Jurusan : Sistem Komputer

SEKOLAH TINGGI

MANAJEMEN INFORMATIKA & TEKNIK KOMPUTER

SURABAYA

2006

Page 2: 76460173-WaroengSMS

PERANCANGAN DAN PEMBUATAN PERANGKAT WARUNG SMS

DENGAN MENGGUNAKAN IBM PC

SKRIPSI

Diajukan sebagai salah satu syarat untuk menyelesaikan

Program Sarjana Komputer

Oleh :

Nama : Ihyauddin

NIM : 02.41020.0019

Program : S1 (Strata Satu)

Jurusan : Sistem Komputer

SEKOLAH TINGGI

MANAJEMEN INFORMATIKA & TEKNIK KOMPUTER

SURABAYA

2006

Page 3: 76460173-WaroengSMS

PERANCANGAN DAN PEMBUATAN PERANGKAT WARUNG SMS

DENGAN MENGGUNAKAN IBM PC

Disusun Oleh :

Nama : Ihyauddin

NIM : 02.41020.0019

Surabaya, Agustus 2006

Telah diperiksa, diuji dan disetujui :

Pembimbing I Pembimbing II

Tjio Hok Hoo, ST, M.Sc. Harianto, S.Kom. NIDN. 0707106901 NIDN. 0722087701

Mengetahui :

Wakil Ketua Bidang Akademik

Drs. Antok Supriyanto, M.MT NIDN. 0726106201

SEKOLAH TINGGI MANAJEMEN INFORMATIKA & TEKNIK KOMPUTER SURABAYA

Page 4: 76460173-WaroengSMS

ABSTRAKSI

SMS (Short Message Service) merupakan sarana komunikasi yang

mudah, murah dan efektif. Jika selama ini pengiriman atau penerimaan SMS

hanya bisa dilakukan secara pribadi oleh pemilik handphone, maka dalam Tugas

Akhir ini bertujuan untuk membuat seperangkat alat pengirim atau penerima SMS

yang dapat digunakan oleh umum. Sehingga dengan perangkat tersebut dapat

memberikan sarana komunikasi bagi masyarakat yang berada di daerah yang

hanya dijangkau oleh operator selular.

Dengan membuat editor teks elektronik yang berbasis Mikrokontroler,

penulisan atau pembacaan SMS akan lebih mudah dilakukan. SMS yang telah

diketik akan dikirim ke komputer untuk diubah menjadi format PDU (Protocol

Data Unit) kemudian melalui sebuah handphone sebagai SMS Gateway, akan

dikirimkan dengan menggunakan perintah AT Command. Program billing

komputer akan menyimpan laporan hasil transaksi yang dapat diberikan pada

pengguna.

Perangkat ini telah dapat mengirim dan menampilkan SMS yang diterima

sesuai dengan permintaan pengguna.

iv

Page 5: 76460173-WaroengSMS

KATA PENGANTAR

Puji syukur kehadirat Allah SWT atas rahmat dan hidayah-Nya penulis

dapat menyelesaikan Tugas Akhir ini. Dalam Tugas Akhir ini penulis

mengerjakan pembuatan seperangkat alat pengirim dan pembaca SMS yang dapat

digunakan oleh masyarakat dan program komputer yang dapat menampilkan

tagihan pengiriman SMS.

Penulis mengucapkan terima kasih kepada :

1) Kedua orang tua dan adik-adik penulis yang telah memberikan

semangat dan doanya dalam pengerjaan Tugas Akhir ini.

2) Bapak Tjio Hok Hoo, ST, M.Sc. selaku Dosen Pembimbing I yang

telah memberikan bimbingan dan arahan selama penulis

mengerjakan Tugas Akhir ini.

3) Bapak Harianto, S.Kom. selaku Pembimbing II yang telah

memberikan bimbingan dalam pengerjaan dan penulisan Tugas

Akhir ini.

4) Rekan-rekan asisten Laboratorium Sistem Komputer yang telah

memberikan bantuannya.

5) Rekan-rekan mahasiswa Sistem Komputer angkatan 2002 yang

telah memberikan motivasi dan dukungannya hingga

terselesaikannya Tugas Akhir ini.

Penulis

v

Page 6: 76460173-WaroengSMS

DAFTAR ISI

ABSTRAKSI iv

KATA PENGANTAR v

DAFTAR ISI vi

DAFTAR TABEL ix

DAFTAR GAMBAR xi

DAFTAR ISTILAH DAN SINGKATAN xiv

DAFTAR LAMPIRAN xvi

BAB I PENDAHULUAN 1

1.1 Latar Belakang masalah 1

1.2 Perumusan Masalah 2

1.3 Pembatasan Masalah 2

1.4 Tujuan 3

1.5 Kontribusi 3

1.6 Sistematika Penulisan 4

BAB II LANDASAN TEORI 7

2.1 Short Message Service 7

2.1.1 Mode Teks 8

2.1.2 Mode PDU 9

2.2 SIEMENS AT Command 25

2.3 Komunikasi Serial RS232 26

2.4 Mikrokontroler MCS-51 29

2.4.1 Fungsi-fungsi Kaki (Pin) 31

vi

Page 7: 76460173-WaroengSMS

vii

2.4.2 Spesifikasi Masing-masing Port 32

2.4.3 Timer/Counter 35

2.4.4 Interupsi 38

2.4.5 Port Serial 41

2.4.6 Reset 44

2.5 Octal Data Latch 46

2.6 RAM (Random Access Memory) 48

2.7 CMOS Analog Multiplexer/Demultiplexer 49

2.8 RS232 TransmitterReceiver 50

2.9 Keyboard 51

2.10 LCD (Liquid Crystal Display) 53

2.11 1 Of 8 Decoder 56

BAB III METODE PENELITIAN 58

3.1 Perancangan Perangkat Keras 59

3.1.1 Minimum System AT89S52 60

3.1.2 RAM 6116 (2 kByte) 65

3.1.3 LCD 4x16 69

3.1.4 MAX232 RS232 Transmitter/Receiver 72

3.1.5 4051 Multiplekser/Demultiplekser 74

3.1.6 Keyboard 77

3.1.7 Format Data yang Dikirimkan oleh Sistem 84

3.2 Perancangan Perangkat Lunak 86

3.2.1 Terminal Selector 86

3.2.2 Terminal 87

Page 8: 76460173-WaroengSMS

viii

3.2.3 Komputer 88

BAB IV PENGUJIAN SISTEM 102

4.1 Pengujian Keyboard 102

4.1.1 Tujuan 102

4.1.2 Alat yang Digunakan 102

4.1.3 Prosedur Pengujian 102

4.1.4 Hasil dari Pengujian 104

4.2 Pengujian Pengiriman Data 107

4.2.1 Tujuan 107

4.2.2 Alat yang Digunakan 107

4.2.3 Prosedur Pengujian 107

4.2.4 Hasil dari Pengujian 110

4.3 Pengujian Program Billing 120

4.3.1 Tujuan 120

4.3.2 Alat yang Digunakan 120

4.3.3 Prosedur Pengujian 120

4.3.4 Hasil dari Pengujian 120

BAB V PENUTUP 123

5.1 Kesimpulan 123

5.2 Saran 124

DAFTAR PUSTAKA 125

LAMPIRAN 128

Page 9: 76460173-WaroengSMS

DAFTAR TABEL

Halaman

Tabel 2.1 PDU SMSC dengan National Code 11

Tabel 2.2 PDU SMSC dengan International Code 12

Tabel 2.3 PDU Type 12

Tabel 2.4 Rumus jangka waktu validasi SMS 16

Tabel 2.5 Skema 7 bit 17

Tabel 2.6 Skema 7 bit kata MOEHI 17

Tabel 2.7 Konversi 7 bit ke 8 bit 18

Tabel 2.8 PDU Type 21

Tabel 2.9 Konversi 8 bit ke 7 bit 25

Tabel 2.10 Beberapa perintah AT Command 26

Tabel 2.11 Keterangan pinout DB25 28

Tabel 2.12 Keterangan pinout DB9 29

Tabel 2.13 Fungsi–fungsi khusus kaki–kaki port 3 35

Tabel 2.14 Susunan bit dalam register TCON 36

Tabel 2.15 Susunan bit dalam register TMOD 37

Tabel 2.16 Mode Operasi Timer/Counter 38

Tabel 2.17 Susunan bit dalam register IE 39

Tabel 2.18 Alamat ISR 40

Tabel 2.19 Susunan bit dalam register IP 40

Tabel 2.20 Susunan bit dalam register SCON 42

Tabel 2.21 Mode port serial 42

ix

Page 10: 76460173-WaroengSMS

x

Tabel 2.22 Susunan bit dalam register PCON 43

Tabel 2.23 Isi Register setelah reset 44

Tabel 2.24 Octal Data Latch Truth table 48

Tabel 2.25 Tabel Kebenaran Mux/Demux 4051 50

Tabel 2.26 Tabel kebenaran pengoperasian LCD 55

Tabel 2.27 Tabel Instruksi-instruksi dalam pengoperasian LCD 56

Tabel 2.28 Tabel kebenaran 74LS138 57

Tabel 3.1 Susunan bit dalam register SCON 64

Tabel 3.2 Susunan bit dalam register PCON 64

Tabel 3.3 Pengalamatan RAM dan LCD 68

Tabel 3.4 Kombinasi A, B, C sebagai pemilih sistem 76

Tabel 4.1 Hasil pengujian keyboard 104

Tabel 4.2 Hasil pengiriman data 111

Tabel 4.3 Uji coba penerimaan data SMS dari Terminal pada Komputer 118

Tabel 4.4 Pengiriman SMS ke beberapa nomor handphone 119

Tabel 4.5 Uji coba penerimaan data SMS dari Komputer pada Terminal 119

Page 11: 76460173-WaroengSMS

DAFTAR GAMBAR

Halaman

Gambar 2.1 Skema cara kerja SMS 8

Gambar 2.2 Skema format SMS PDU Pengirim 9

Gambar 2.3 Skema format SMS PDU Penerima 19

Gambar 2.4 Arah komunikasi serial 27

Gambar 2.5 Pinout konektor jarum DB25 28 Gambar 2.6 Pinout konektor jarum DB9 28

Gambar 2.7 Pembagian bit dalam 1 frame 29

Gambar 2.8 Pin out Microcontroller ATMEL 89S52 30

Gambar 2.9 Skema rangkaian reset 44

Gambar 2.10 Aliran arus dan perubahan tegangan pada reset otomatis 45

Gambar 2.11 Rangkaian ekivalen saat saklar S1 ditekan 46

Gambar 2.12 Pin-out 74LS573 dan 74373 47

Gambar 2.13 Pinout RAM 6116 49

Gambar 2.14 Pinout 4051 49

Gambar 2.15 Pinout ICL232 51

Gambar 2.16 Rangkaian fungsional ICL232 51

Gambar 2.17 Scan code tombol keyboard 52

Gambar 2.18 Konektor PS2 (Keyboard) model lubang 52

Gambar 2.19 Sinyal komunikasi data serial dari keyboard 53

Gambar 2.20 Karakter-karakter pada LCD 54

Gambar 2.21 Karakteristik pewaktuan proses menulis pada LCD 55

xi

Page 12: 76460173-WaroengSMS

xii

Gambar 2.22 Pin out 74LS138 57

Gambar 3.1 Blok diagram sistem secara keseluruhan 58

Gambar 3.2 Blok diagram sistem Terminal Selector 59

Gambar 3.3 Blok diagram sistem Terminal 60

Gambar 3.4 Minimum system Mikrokontroler AT89S52 pada Terminal Selector 60

Gambar 3.5 Minimum system Mikrokontroler AT89S52 pada Terminal 61

Gambar 3.6 Rangkaian kabel downloader pada port LPT1 63

Gambar 3.7 Software ISP-Flash Progammer ver3.0a 63

Gambar 3.8 Konektor downloader pada Mikrokontroler AT89S52 64

Gambar 3.9 Rangkaian RAM pada Terminal Selector 66

Gambar 3.10 Rangkaian RAM pada Terminal 67

Gambar 3.11 Rangkaian konektor LCD 70

Gambar 3.12 Rangkaian MAX232 Terminal Selector 73

Gambar 3.13 Rangkaian MAX232 Terminal 74

Gambar 3.14 Rangkaian Multiplekser 4051 75

Gambar 3.15 Rangkaian Demultiplekser 4051 75

Gambar 3.16 Konektor PS2 (jarum) keyboard pada mikrokontroler 77

Gambar 3.17 Format data pengiriman SMS dari Terminal ke komputer 85 Gambar 3.18 Format data penerimaaan SMS 85 Gambar 3.19 Format data pengiriman SMS dari Terminal Selector

ke Terminal 86 Gambar 3.20 Diagram alir perangkat lunak pada Terminal Selector 87

Gambar 3.21 Diagram alir perangkat lunak pada Terminal 88

Gambar 3.22 Diagram alir perangkat lunak pada komputer 89

Page 13: 76460173-WaroengSMS

xiii

Gambar 3.23 Tampilan form utama 91

Gambar 3.24 Tampilan form inbox 100

Gambar 3.25 Tampilan form outbox 101

Gambar 4.1 Sinyal data tombol A 105

Gambar 4.2 Sinyal data tombol S 105

Gambar 4.3 Sinyal data tombol D 106

Gambar 4.4 Sinyal data tombol F 106

Gambar 4.5 Sinyal data tombol G 106

Gambar 4.6 Sinyal data 0xF0 yang dikirim oleh Terminal 112

Gambar 4.7 Sinyal data 0xF0 yang diterima oleh Terminal Selector 112

Gambar 4.8 Data 0xF0 yang diterima oleh komputer 112

Gambar 4.9 Sinyal data 0xF1 yang dikirim oleh Terminal 113

Gambar 4.10 Sinyal data 0xF1 yang diterima oleh Terminal Selector 113

Gambar 4.11 Data 0xF1 yang diterima oleh komputer 114

Gambar 4.12 Sinyal data 0xF2 yang dikirim oleh Terminal 114

Gambar 4.13 Sinyal data 0xF2 yang diterima oleh Terminal Selector 115

Gambar 4.14 Data 0xF2 yang diterima oleh komputer 115

Gambar 4.15 Sinyal data 0xAE yang dikirim oleh Terminal 116

Gambar 4.16 Sinyal data 0xAE yang diterima oleh Terminal Selector 116

Gambar 4.17 Data 0xAE yang diterima oleh komputer 116

Gambar 4.18 Data kalimat ’ABCDEFGHIJKLMNOP’ yang diterima oleh komputer 117

Gambar 4.19 Program Billing menerima data dari Terminal Selector 121

Gambar 4.20 Program Billing menyimpan SMS yang dikirim 122

Gambar 4.21 Program Billing menyimpan SMS baru 122

Page 14: 76460173-WaroengSMS

DAFTAR ISTILAH DAN SINGKATAN

Active High : bernilai 1 jika dalam kondisi aktif.

Active Low : bernilai 0 jika dalam kondisi aktif.

AT Command : Attention Command, sekumpulan perintah yang

digunakan komputer untuk mengakses modem handphone.

Baudrate : kecepatan transmisi data

Bit : Binary Digit. Data dengan bilangan basis 2, yaitu 0 atau 1.

Bps : Bit per second. Satuan baudrate

Byte : Sejumlah data 8 bit

EIA : Electronics Industries Association

GPRS : General Packet Radio Service

GSM : Global System for Mobile Communications

HEX (Heksadesimal) : Format bilangan basis 16

LCD : Liquid Crystal Display

LSB : Least Significant Bit. Bit ke-0 dalam 1 byte

MMS : Multimedia Message Service

MSB : Most Significant Bit. Bit ke-7 dalam 1 byte

PC : Personal Computer

PDU Decodec : Proses perubahan format PDU menjadi format teks.

PDU Encodec : Proses perubahan format teks menjadi format PDU.

PDU : Protocol Data Unit

RAM : Random Access Memory

Receiver : Peralatan yang menerima data

xiv

Page 15: 76460173-WaroengSMS

xv

SMS : Short Message Service

SMSC : Short Message Service Center

Transmitter : Peralatan yang mengirimkan data

TTL : Transistor-transistor Logic

UART : Universal Asynchronous Receiver/Transmitter

USB : Universal Serial Bus

Page 16: 76460173-WaroengSMS

DAFTAR LAMPIRAN

Lampiran 1 : Rangkaian Skematik Terminal 128

Lampiran 2 : Rangkaian Skematik Terminal Selector 129

Lampiran 3 : Listing Program Terminal 130

Lampiran 4 : Listing Program Terminal Selector 140

Lampiran 5 : Listing Program Billing Komputer 143

Lampiran 6 : Petunjuk Penggunaan Alat 159

Lampiran 7 : Biodata Penulis 161

xvi

Page 17: 76460173-WaroengSMS

BAB I

PENDAHULUAN

1.1 Latar Belakang Masalah

Peralatan komunikasi nirkabel Mobile Phone atau di Indonesia lebih

dikenal dengan Hand Phone (HP) yang fleksibel untuk dibawa kemana-mana dan

memiliki berbagai fasilitas yang ada didalamnya untuk memudahkan manusia

dalam berkomunikasi. Short Message Service (SMS) merupakan salah satu fitur

dari Global System for Mobile Communications (GSM), yang dikembangkan dan

distandardisasi oleh The European Telecommunications Standards Institute

(ETSI). Meskipun telah banyak pula fitur-fitur dari GSM seperti Enhanced

Message Service (EMS), Multimedia Messaging Service (MMS) dan General

Packet Radio Service (GPRS), keberadaan jasa dan industri yang menggunakan

SMS sebagai fasilitas populer yang terdapat pada HP, menjadikan sarana pilihan

yang murah, cepat dan mudah untuk berkomunikasi.

Jangkauan yang lebih luas yang diberikan oleh masing-masing operator

selular HP dibandingkan dengan telepon biasa, seperti di beberapa daerah

pedesaan dan pegunungan yang belum terjangkau oleh jaringan telepon, dapat

memudahkan masyarakat yang berada di daerah tersebut untuk menggunakan alat

komunikasi. Selama ini HP hanya digunakan oleh masing-masing orang dengan

keadaan ekonomi yang cukup. Untuk orang dengan keadaan ekonomi menengah

kebawah, HP dianggap sebagai barang mewah. Sehingga mereka hampir tidak

pernah melakukan komunikasi menggunakan fasilitas SMS. Bahkan orang yang

1

Page 18: 76460173-WaroengSMS

2

sudah memiliki HP, tidak dapat melakukan pengiriman SMS karena tidak

memiliki pulsa yang cukup.

Sehingga dengan membuat tempat penyedia layanan pengiriman atau

penerimaan SMS, dapat menjadikan masyarakat lebih mudah dalam mengirim

SMS walaupun belum memiliki HP atau tidak memiliki pulsa yang cukup.

1.2 Perumusan Masalah

Berdasarkan latar belakang masalah diatas, didapatkan rumusan masalah

sebagai berikut :

1. Bagaimana merancang dan membuat perangkat pengirim dan penerima SMS

yang dapat digunakan oleh umum ?

2. Bagaimana merancang dan membuat perangkat untuk mengetik SMS dengan

menggunakan mikrokontroler ?

3. Bagaimana merancang dan membuat program aplikasi tagihan (billing) dari

pengiriman SMS dengan menggunakan IBM PC ?

1.3 Pembatasan Masalah

Batasan masalah dari pembuatan perangkat ini adalah sebagai berikut :

1. Komputer yang digunakan harus memiliki minimal 2 buah port serial (COM1

dan COM2) dan sebuah port paralel (LPT1) atau sebuah port USB untuk

koneksi printer.

2. Perangkat ini hanya menyediakan tiga terminal terpisah untuk mengetik dan

mengirim atau membaca SMS.

Page 19: 76460173-WaroengSMS

3

3. Dalam sekali pengiriman SMS dari Terminal, hanya dapat mengirimkan

maksimal 608 karakter dengan biaya pengiriman SMS sesuai dengan jumlah

SMS yang dikirim. Sejumlah SMS berisi sebanyak karakter yang disesuaikan

dengan jenis HP yang digunakan sebagai SMS Gateway.

4. SMS yang telah diterima akan disimpan pada PC. Jika user ingin membaca

SMS yang telah dipesan, operator akan menampilkan SMS tersebut pada satu

terminal yang kosong.

5. Status pengiriman SMS diberikan pada nota pembayaran, sesaat setelah user

mengirim SMS.

1.4 Tujuan

Tujuan dari perancangan dan pembuatan perangkat ini adalah sebagai

berikut :

1. Membuat perangkat pengirim dan penerima SMS yang dapat digunakan untuk

umum.

2. Membuat perangkat warung SMS yang dapat dijadikan sebagai bentuk usaha

dalam rumah tangga.

3. Membuat perangkat komunikasi yang berada di daerah yang belum terjangkau

oleh jaringan telepon tetapi bisa dijangkau oleh operator selular.

1.5 Kontribusi

Dari beberapa penelitian sebelumnya, pengiriman SMS dengan

menggunakan AT Command hanya digunakan untuk mengirim dan menerima

SMS dengan isi SMS tertentu. Dalam penelitian ini SMS yang dikirim atau

Page 20: 76460173-WaroengSMS

4

diterima memiliki isi dan panjang SMS yang bervariasi sesuai kebutuhan

pengguna.

Kita ketahui bahwa SMS merupakan fitur handphone yang paling sering

digunakan. Tetapi sarana komunikasi tersebut hanya dapat digunakan oleh

masing-masing pemilik handphone dan memiliki pulsa yang cukup. Dalam Tugas

Akhir ini dibuat perangkat pengirim dan penerima SMS yang dapat digunakan

oleh umum. Sehingga meskipun seseorang tidak memiliki handphone atau tidak

memiliki pulsa, mereka dapat menggunakan perangkat ini untuk berkirim SMS.

Dari tiga buah editor teks elektronik berbasis mikrokontroler (tiga buah

Terminal) yang terhubung pada komputer, masing-masing Terminal tersebut

berfungsi untuk mengetik dan mengirim SMS atau menampilkan SMS yang telah

diterima. Pengguna yang telah mengirim SMS akan diberikan laporan pengiriman

dan membayar sesuai dengan jumlah SMS yang telah dikirimkan.

Perangkat ini dapat berfungsi sebagai suatu bentuk usaha yang dapat

dikelola oleh siapapun seperti hal-nya perangkat WARTEL TELKOM yang sudah

ada.

1.6 Sistematika Penulisan

Sistematika penulisan buku Tugas Akhir ini terdiri dari lima bab, dimana

dalam tiap bab terdapat beberapa sub-bab. Ringkasan uraian dari tiap bab tersebut

adalah sebagai berikut :

Page 21: 76460173-WaroengSMS

5

Bab I Pendahuluan

Pada bab ini menjelaskan tentang latar belakang masalah, perumusan

masalah, pembatasan masalah, tujuan dan sistematika penulisan buku

Tugas Akhir.

Bab II Landasan Teori

Pada bab ini menjelaskan tentang beberapa teori tentang komponen dan

sistem transmisi yang digunakan dalam pengerjaan Tugas Akhir ini.

Diantaranya adalah ATCommand, Komunikasi Serial RS232,

Mikrokontroler MCS-51, Octal Data Latch, RAM, Keyboard, LCD,

RS232 Transmitter/Receiver, CMOS Analog

Multiplexers/Demultiplexers, 1 of 8 Decoder.

Bab III Metode Penelitian

Bab ini berisi tentang penjelasan penulis dalam merancang dan

membuat perangkat keras dan perangkat lunak. Dalam Bab ini juga

menjelaskan tentang cara kerja dari perangkat keras, seperti sistem pada

Terminal dan Terminal Selector, format data yang digunakan dalam

pengiriman data antar sistem, dan pembuatan perangkat lunak pada

komputer.

Bab IV Pengujian Sistem

Bab ini berisi tentang pengujian terhadap perangkat keras dan perangkat

lunak dari sistem Terminal, Terminal Selector dan komputer yang telah

dilakukan oleh penulis. Pengujian tersebut meliputi pengujian keyboard,

pengiriman data dan pengujian program Billing.

Page 22: 76460173-WaroengSMS

6

Bab V Penutup

Pada bab ini menjelaskan tentang kesimpulan dari Tugas Akhir yang

telah dikerjakan dan saran-saran yang diberikan oleh penulis.

Page 23: 76460173-WaroengSMS

BAB II

LANDASAN TEORI

2.1 Short Message Service

SMS adalah salah satu layanan nirkabel yang dapat diterima secara

umum yang mampu mengirimkan pesan-pesan dalam bentuk karakter antara

peralatan komunikasi bergerak dan sistem luar. SMS merupakan salah satu fitur

dari GSM yang dikembangkan dan distandardisasi oleh ETSI. Pada saat kita

mengirim pesan SMS dari HP, maka pesan SMS tersebut tidak langsung dikirim

ke HP tujuan, akan tetapi terlebih dahulu dikirim ke SMS Center (SMSC) dengan

prinsip store and forward, setelah itu dikirim ke HP tujuan.

Melalui keberadaan SMSC, kita dapat mengetahui status dari SMS yang

dikirim, apakah telah sampai atau gagal diterima oleh HP tujuan. Apabila HP

tujuan dalam keadaan aktif dan menerima SMS yang dikirim, ia akan mengirim

kembali pesan konfirmasi ke SMSC yang menyatakan bahwa SMS telah diterima.

Kemudian SMSC mengirimkan status tersebut kepada si pengirim. Tetapi jika HP

tujuan dalan keadaan mati atau diluar jangkauan, SMS yang dikirimkan akan

disimpan pada SMSC sampai periode validitas terpenuhi. Jika periode validitas

terlewati, maka SMS akan dihapus dari SMSC dan tidak dikirimkan ke HP tujuan.

(Gunawan, 2005 : 18)

7

Page 24: 76460173-WaroengSMS

8

Gambar 2.1 Skema cara kerja SMS

Menurut Gunawan (2003 : 21) dalam pengiriman dan penerimaan pesan

SMS terdapat 2 mode, yaitu mode Teks dan mode Protocol Data Unit (PDU).

2.1.1 Mode Teks

Mode teks adalah format pesan dalam bentuk teks asli atau tidak

dilakukan konversi dari pesan yang ditulis pada saat akan dikirim, sehingga mode

ini merupakan cara termudah dalam mengirim SMS. Sesungguhnya mode teks ini

adalah hasil pengkodean dari mode PDU.

Jika menggunakan mode ini teks yang dikirim dapat mencapai 160 (7 bit

default alphabet) atau 140 (8 bit) karakter. Kelemahan dari mode ini, kita tidak

dapat menyisipkan gambar dan nada dering kedalam pesan yang akan dikirim

serta terbatasnya tipe enkoding. (Gunawan, 2003 : 21)

Di Indonesia, pengiriman SMS dari HP ke SMSC maupun sebaliknya

tidak menggunakan mode ini, tetapi mengunakan mode PDU.

Page 25: 76460173-WaroengSMS

9

2.1.2 Mode PDU

Mode PDU adalah format pesan SMS dalam heksadesimal oktet dan

semi-desimal oktet dengan panjang mencapai 160 (7 bit default alphabet) atau 140

(8 bit) karakter. Kelebihan menggunakan mode PDU adalah kita dapat melakukan

enkoding sendiri yang tentunya harus didukung oleh hardware (HP) dan operator

GSM. Beberapa tipe enkoding yang umum digunakan adalah ”PCCP437”,

”PCDN”, ”8859-1”, ”IRA”, ”HEX” dan ”GSM”. Pada beberapa jenis HP hanya

didukung oleh tipe enkoding tertentu. Untuk mengetahuinya dapat melalui

perintah AT+CSCS pada AT Command.

A. PDU SMS Pengirim (SMS Submit PDU/Mobile Originated (MO))

SMS PDU pengirim adalah pesan yang dikirim dari HP ke terminal yang

kemudian dikirimkan ke SMSC. Pada prinsipnya apabila kita mengirim pesan ke

nomor tujuan, pesan itu akan melalui SMSC.

Pesan akan dikirim oleh terminal masih dalam bentuk teks, sedangkan

dalam pengiriman ke SMSC harus dalam bentuk PDU. Untuk itu sebelum dikirim,

terminal atau HP akan melakukan perubahan dari format teks menjadi format

PDU, proses ini sering disebut encodec. Adapun skema dari format PDU pengirim

telah diatur dan ditetapkan oleh ETSI sebagai berikut : (Tim Penelitian, 2005 : 13)

SCA PDU Type MR DA PID DCS VP UDL UD

Gambar 2.2 Skema format SMS PDU Pengirim

Page 26: 76460173-WaroengSMS

10

A.1 Service Center Address (SCA)

SCA adalah informasi dari alamat (nomor) SMSC. SCA memiliki 3

komponen utama yaitu length, type of number, dan service center number.

1. Length

Berupa jumlah pasangan heksadesimal SMSC dalam bilangan

heksadesimal.

2. Type of Number

Apabila SMSC dalam bentuk kode nasional (National code), maka sub-

header-nya 81 atau dalam bentuk kode internasional (International code), maka

sub-header-nya 91.

3. Service center number

Berupa nomor SMSC dalam pasangan heksadesimal yang dibalik-

balik. Jika tertinggal satu angka heksa yang tidak memiliki pasangan, maka angka

tersebut akan dipasangkan dengan F di depannya. (Khang, 2003 : 9)

Sebagai contoh untuk nomor SMSC dari Excelcom dapat ditulis dalam 2

cara, yaitu :

- Menggunakan National Code

Nomor SMSC = 0818445009, maka akan diubah menjadi :

• 06 karena memiliki 6 pasang heksadesimal yaitu 5 pasang nomor SMSC dan

1 pasang untuk National Code.

• 81 (National Code)

Page 27: 76460173-WaroengSMS

11

• 80 – 81 – 44 – 05 – 90 (nomor SMSC yang dibolak-balik)

Sehingga apabila digabungkan menjadi 06818081440590

- Menggunakan International code

Nomor SMSC = 62818445009, maka diubah menjadi :

• 07 karena memiliki 7 pasang heksadesimal yaitu 6 pasang nomor SMSC dan

1 pasang untuk International Code.

• 91 (International Code)

• 26 – 18 – 48 – 54 – 00 – F9 (Nomor SMSC yang dibalik-balik, dimana F

merupakan panambahan karena satu angka tidak memiliki pasangan

heksadesimal).

Sehingga apabila digabungkan menjadi 07912618485400F9

Berikut ini adalah Kode PDU SMSC untuk beberapa operator selular

yang ada di Indonesia :

Tabel 2.1 PDU SMSC dengan National Code

No. Operator Selular Nomor SMSC Kode PDU 1. Telkomsel 081100000 068180110000F0 2. Indosat Mentari 0816124 0581806121F4 3. Excelcom 0818445009 06818081440590 4. Indosat IM3 0855000000 06818055000000

Page 28: 76460173-WaroengSMS

12

Tabel 2.2 PDU SMSC dengan International Code

No. Operator Selular Nomor SMSC Kode PDU 1. Telkomsel 6281100000 06912618010000 2. Indosat Mentari 62816124 059126181642 3. Excelcom 62818445009 07912618485400F9 4. Indosat IM3 62855000000 07912658050000F0

A.2 PDU Type

Nilai default dari PDU type untuk SMS pengirim adalah 11 heksadesimal

atau 00010001 biner. Jika ingin mendapatkan status dari pengiriman SMS, nilai

PDU Type adalah 31 heksadesimal atau 00110001 biner. Pengaturan bit-bit

tersebut sesuai dengan Tabel 2.3.

Tabel 2.3 PDU Type

Bit ke 7 6 5 4 3 2 1 0

Nama RP UDHI SRR VPF VPF RD MTI MTI

Nilai 0 0 1 1 0 0 0 1

Keterangan :

Reply Path (RP) : Parameter yang menunjukkan bahwa terdapat alur

jawaban.

User Data Header Indicator (UDHI) : Bit ini bernilai 1 jika data pengirim

dimulai dengan suatu judul/tema.

Status Report Request (SRR) : Bit ini bernilai 1 jika laporan status

pengiriman diminta.

Validity Period Format (VPF) : Format dari batas waktu pengiriman jika

pesan gagal diterima. Kombinasi 2 bit VPF adalah sebagai berikut :

Page 29: 76460173-WaroengSMS

13

0 0 → Jika pesan tidak disimpan di SMSC.

0 1 → Format Enhanced (7 oktet).

1 0 → Format Relatif (1 oktet).

1 1 → Format Absolut (7 oktet).

Reject Duplicates (RD) : Parameter yang menandakan ya atau tidaknya

Service Center akan menerima suatu pengiriman pesan SMS untuk suatu pesan

yang masih disimpan dalam Service Center tersebut. Ia mempunyai MR dan DA

yang sama sebagai pesan dikirimkan dari nomor pengirim yang sama.

Message Type Indicator (MTI) : Bit ini bernilai 0 untuk menunjukkan

bahwa PDU ini adalah SMS Pengirim. (Tim Penelitian, 2005 : 14)

A.3 Message Reference (MR)

Message Reference adalah acuan dari pengaturan pesan SMS. Untuk

membiarkan pengaturan pesan SMS dilakukan sendiri oleh HP tujuan, maka nilai

yang diberikan adalah 00.

A.4 Destination Address (DA)

Destination Address adalah alamat (nomor) tujuan yang terdiri atas

Length, Type Number, Destination Number.

1. Length

Berupa jumlah bilangan desimal nomor tujuan dalam bilangan

heksadesimal.

Page 30: 76460173-WaroengSMS

14

2. Type of Number

Apabila nomor tujuan dalam bentuk kode nasional, maka sub-header-nya

81 atau dalam bentuk kode internasional, maka sub-header-nya 91.

3. Destination number

Berupa nomor tujuan dalam pasangan heksadesimal yang dibolak-balik.

Jika tertinggal satu angka heksa yang tidak memiliki pasangan, maka angka

tersebut akan dipasangkan dengan F di depannya. (Khang, 2003 : 11)

Sebagai contoh untuk nomor tujuan 08563033808 dapat ditulis dalam 2

cara, yaitu :

- Menggunakan National Code

Nomor tujuan = 08563033808, maka akan diubah menjadi :

• 0B karena memiliki 11 angka pada nomor tujuan, sehingga 11 desimal = 0B

heksadesimal.

• 81 (National Code)

• 80 – 65 – 03 – 33 – 08 – F8 (Nomor tujuan yang dibolak-balik, dimana F

merupakan panambahan karena satu angka tidak memiliki pasangan

heksadesimal).

Sehingga apabila digabungkan menjadi 0B818065033308F8

- Menggunakan International code

Nomor tujuan = 628563033808, maka diubah menjadi :

• 0C karena memiliki 12 angka pada nomor tujuan, sehingga 12 desimal = 0C

heksadesimal.

Page 31: 76460173-WaroengSMS

15

• 91 (International Code)

• 26 – 58 – 36 – 30 – 83 – 80 (Nomor tujuan yang dibolak-balik).

Sehingga apabila digabungkan menjadi 0C91625836308380

A.5 Protocol Identifier (PID)

Protocol Identifier adalah tipe atau format dari cara pengiriman pesan

yang biasanya diatur dari HP pengirim. Misalnya tipe Standard Text, Fax, E-mail,

Telex, X400, dan lain-lain. Nilai default dari PID adalah 00 (Standard Text). Jika

dikirim sebagai Telex, nilai PID-nya 01 dan jika dikirim sebagai Fax, nilai PID-

nya 02. (Tim Penelitian, 2005 : 15)

A.6 Data Coding Scheme (DCS)

Data Coding Scheme adalah rencana dari pengkodean data untuk

menentukan kelas dari pesan tersebut apakah berupa SMS teks standar, Flash

SMS, atau Blinking SMS. Jika yang digunakan adalah skema 7 bit, maka DCS

bernilai 00. Jika yang digunakan adalah skema 8 bit, maka DCS bernilai angka

heksadesimal lebih dari nol. Di Indonesia HP yang digunakan sebagai SMS

Gateway menggunakan skema 7 bit. (Tim Penelitian, 2005 : 15)

A.7 Validity Period (VP)

Validity Period adalah lama waktu pesan SMS disimpan di SMSC

apabila pesan tersebut gagal diterima oleh HP penerima. Rumus untuk

menghitung jangka waktu validasi SMS terdapat pada Tabel 2.4

Page 32: 76460173-WaroengSMS

16

Tabel 2.4 Rumus jangka waktu validasi SMS

Integer (INT) Jangka Waktu Validasi SMS 0 – 143 (INT + 1) * 5 menit (berarti : 5 menit s.d. 12 jam) 144 – 167 12 jam + ((INT – 143) * 30 menit) 168 – 196 (INT – 166) * 1 hari 197 - 255 (INT – 192) * 1 minggu

Agar SMS kita pasti terkirim sampai ke HP penerima, sebaiknya kita

memberikan batasan waktu maksimal. Sehingga VP bernilai FF. (Khang, 2003 :

13)

A.8 User Data Length (UDL)

User Data Length adalah panjang pesan SMS yang akan dikirim dengan

bentuk teks standar dalam angka heksadesimal. Sebagai contoh pesan yang

dikirim adalah MOEHI, yang memiliki 5 karakter. Sehingga UDL bernilai 05.

A.9 User Data (UD)

User Data adalah isi pesan yang akan dikirim dalam format

heksadesimal. Pengkodean dari nilai teks standar menjadi heksadesimal dilakukan

dengan bantuan Default Alphabet yang dibakukan oleh ETSI GSM 03.38. Untuk

HP atau SMS gateway berskema enkoding 7 bit, berarti kita telah mengetikkan

suatu huruf dari keypad, berarti kita telah membuat 7 angka 1 atau 0 berurutan.

Skema 7 bit tersebut dibuat dalam Tabel 2.5 (Tim Penelitian, 2005 : 16)

(Gunawan, 2003 : 25)

Page 33: 76460173-WaroengSMS

17

Tabel 2.5 Skema 7 bit

b7 0 0 0 0 1 1 1 1 b6 0 0 1 1 0 0 1 1

b5 0 1 0 1 0 1 0 1 b4 b3 b2 b1 0 0 0 0 @ ∆ SP 0 - P ¨ p 0 0 0 1 ! 1 A Q a q 0 0 1 0 $ Ф “ 2 B R b r 0 0 1 1 Г # 3 C S c s 0 1 0 0 Λ 4 D T d t 0 1 0 1 Ω % 5 E U e u 0 1 1 0 ∏ & 6 F V f v 0 1 1 1 Ψ ‘ 7 G W g w 1 0 0 0 Σ ( 8 H X h x 1 0 0 1 Ө ) 9 I Y i y 1 0 1 0 LF Ξ * : J Z j z 1 0 1 1 + ; K Ä k ä 1 1 0 0 , < L l ö 1 1 0 1 CR - = M ü m 1 1 1 0 Β . > N n ü 1 1 1 1 / ? O o

Sebagai contoh pesan yang dikirim adalah MOEHI.

Terdapat dua langkah yang harus dilakukan untuk mengkonversi isi

SMS, yaitu :

1. Mengubah menjadi kode 7 bit sesuai dengan Tabel 2.5

Tabel 2.6 Skema 7 bit kata MOEHI

Karakter Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 M 1 0 0 1 1 0 1 O 1 0 0 1 1 1 1 E 1 0 0 0 1 0 1 H 1 0 0 1 0 0 0 I 1 0 0 1 0 0 1

Page 34: 76460173-WaroengSMS

18

2. Mengubah kode 7 bit menjadi kode 8 bit, yang diwakili oleh pasangan heksa.

Karena total 7 bit x 5 huruf = 35 bit, sedangkan yang diperlukan adalah 8

bit x 5 huruf = 40 bit karena 8 bit mewakili suatu pasangan heksa (4 bit biner = 1

angka heksa), maka diperlukan 5 bit dummy berupa bilangan 0 yang diisikan pada

karakter terakhir.

Tabel 2.7 Konversi 7 bit ke 8 bit

Karakter Skema 7 bit Skema 8 bit Heksa M 1001101 1 1001101 CD O 1001111 01 100111 67 E 1000101 000 10001 11 H 1001000 1001 1001 99 I 1001001 00000 100 04

dummy

Dengan demikian kata MOEHI setelah dikonversi menjadi 8 bit menjadi

CD67119904.

Setelah mendapatkan masing-masing sub-header dari header PDU, maka

dapat digabungkan menjadi header PDU lengkap. Sub-header yang telah didapat

adalah sebagai berikut :

1. SCA → 07912618485400F9 (SMSC Exelcom dengan International Code).

2. PDU Type → 31 (Pengiriman SMS dengan balasan status pengiriman).

3. MR → 00 (nomor referensi SMS).

4. DA → 0B818065033308F8 (nomor tujuan 08563033808 National Code).

5. PID → 00 (Standard Text).

6. DCS → 00 (Skema data 7 bit).

7. VP → FF (waktu maksimum validasi).

8. UDL → 05 (panjang isi SMS).

Page 35: 76460173-WaroengSMS

19

9. UD → CD67119904 (isi SMS = MOEHI)

Jadi PDU lengkap-nya adalah

07912618485400F931000B818065033308F80000FF05CD67119904

B. PDU SMS Penerima (SMS Deliver PDU/Mobile Terminated (MT))

SMS PDU Penerima adalah terminal menerima pesan yang datang dari

SMSC ke HP dalam format PDU. Pada prinsipnya pesan yang kita terima dari

SMSC masih dalam format PDU setelah itu terminal HP yang menerima pesan

melakukan pengkodean menjai teks, proses ini sering disebut proses decodec.

Cara pengkodean format PDU sudah diatur dan distandarkan oleh ETSI. Format

PDU SMS Penerima adalah pada Gambar 2.3 (Tim Penelitian, 2005 : 17)

SCA PDU Type OA PID DCS SCTS UDL UD

Gambar 2.3 Skema format SMS PDU Penerima

Penjelasan masing-masing format adalah sebagai berikut :

B.1 Service Center Address (SCA)

SCA adalah informasi dari alamat (nomor) SMSC. SCA memiliki 3

komponen utama yaitu length, type of number, dan service center number.(Tim

Penelitian, 2005 : 16)

1. Length

Berupa jumlah pasangan heksadesimal SMSC dalam bilangan

heksadesimal.

Page 36: 76460173-WaroengSMS

20

2. Type of Number

Apabila SMSC dalam bentuk kode nasional, maka sub-header-nya 81

atau dalam bentuk kode internasional, maka sub-header-nya 91.

3. Service center number

Berupa pasangan heksadesimal yang dibalik-balik dari nomor SMSC. Jika

pada pasangan heksa terakhir berakhiran F, maka angka tersebut tidak memiliki

angka pasangan.

Sebagai contoh untuk nomor SMSC dari Excelcom dapat dijelaskan

dalam 2 cara, yaitu :

- Menggunakan National Code

Isi SCA = 06818081440590, maka akan diubah menjadi :

• 06 karena memiliki 6 pasang heksadesimal yaitu 5 pasang nomor SMSC

dan 1 pasang untuk National Code.

• 81 (National Code)

• 08 – 18 – 44 – 50 – 09 (nomor SMSC yang dibolak-balik)

Sehingga nomor SMSC-nya adalah 0818445009

- Menggunakan International code

Isi SCA = 07912618485400F9, maka diubah menjadi :

• 07 karena memiliki 7 pasang heksadesimal yaitu 6 pasang nomor SMSC

dan 1 pasang untuk International Code.

• 91 (International Code)

Page 37: 76460173-WaroengSMS

21

• 62 – 81 – 84 – 45 – 00 – 9F (Nomor SMSC yang dibolak-balik, dimana F

merupakan panambahan karena satu angka tidak memiliki pasangan

heksadesimal).

Sehingga nomor SMSC-nya adalah 62818445009.

B.2 PDU Type

Nilai default dari PDU Type untuk SMS Penerima adalah 04

heksadesimal atau 00000100 biner. Penjelasan tiap bit adalah pada Tabel 2.8

Tabel 2.8 PDU Type

Bit ke 7 6 5 4 3 2 1 0

Nama RP UDHI SRI <nn> <nn> MMS MTI MTI

Nilai 0 0 0 0 0 1 0 0

Keterangan :

Reply Path (RP) : Parameter yang menunjukkan bahwa terdapat alur

jawaban.

User Data Header Indicator (UDHI) : Bit ini bernilai 1 jika data pengirim

dimulai dengan suatu judul/tema.

Status Report Indication (SRI) : Bit ini bernilai 1 jika laporan status

dikembalikan ke SME.

More Message to Send (MMS) : Bit ini bernilai 0 jika ada pesan lebih

yang akan dikirim.

Message Type Indicator (MTI) : Bit ke-1 dan ke-0 ini bernilai 0 untuk

menunjukkan bahwa PDU ini adalah SMS Pengirim. (Tim Penelitian, 2005 : 18)

Page 38: 76460173-WaroengSMS

22

B.3 Originator Address (OA)

OA adalah alamat (nomor) dari pengirim, yang terdiri atas yaitu length,

type of number, dan originator number. (Gunawan, 2003 : 23)

1. Length

Berupa jumlah bilangan desimal nomor pengirim dalam bilangan

heksadesimal.

2. Type of Number

Apabila nomor pengirim dalam bentuk kode nasional, maka sub-header-

nya 81 atau dalam bentuk kode internasional, maka sub-header-nya 91.

3. Originator number

Berupa pasangan heksadesimal yang dibolak-balik dari nomor pengirim.

Jika pada pasangan heksa terakhir berakhiran F, maka angka tersebut tidak

memiliki angka pasangan.

Isi OA dapat dijelaskan dalam 2 cara, yaitu :

- Menggunakan National Code

Isi OA = 0B818065033308F8, maka akan diubah menjadi :

• 0B karena memiliki 11 angka pada nomor pengirim, sehingga 11 desimal =

0B heksadesimal.

• 81 (National Code)

• 08 – 56 – 30 – 33 – 80 – 8F (Nomor pengirim yang dibolak-balik, dimana F

merupakan panambahan karena satu angka tidak memiliki pasangan

heksadesimal).

Page 39: 76460173-WaroengSMS

23

Sehingga nomor pengirimnya adalah 08563033808.

- Menggunakan International code

Isi OA = 0C91625836308380, maka diubah menjadi :

• 0C karena memiliki 12 angka pada nomor pengirim, sehingga 12 desimal =

0C heksadesimal.

• 91 (International Code)

• 62 – 85 – 63 – 03 – 38 – 08 (Nomor pengirim yang dibolak-balik).

Sehingga nomor pengirimnya adalah 628563033808.

B.4 Protocol Identifier (PID)

Protocol Identifier adalah tipe atau format dari cara pengiriman pesan

yang biasanya diatur dari HP pengirim. Misalnya tipe Standard Text, Fax, E-mail,

Telex, X400, dan lain-lain. Nilai default dari PID adalah 00 (Standard Text).

Jika dikirim sebagai Telex, nilai PID-nya 01 dan jika dikirim sebagai

Fax, nilai PID-nya 02. (Tim Penelitian, 2005 : 18)

B.5 Data Coding Scheme (DCS)

Data Coding Scheme adalah rencana dari pengkodean data untuk

menentukan kelas dari pesan tersebut apakah berupa SMS teks standar, Flash

SMS, atau Blinking SMS. Jika yang digunakan adalah skema 7 bit, maka DCS

bernilai 00. Jika yang digunakan adalah skema 8 bit, maka DCS bernilai angka

heksadesimal lebih dari nol. (Tim Penelitian, 2005 : 19)

Page 40: 76460173-WaroengSMS

24

B.6 Service Center Time Stamps (SCTS)

Menurut Tim Penelitian (2005 : 19) SCTS adalah waktu penerimaan

pesan dari SMSC penerima. SCTS terdiri atas tahun, bulan, tanggal, jam, menit,

detik, dan zona waktu. Misal nilai SCTS adalah 60609102955382, maka

penjelasannya adalah sebagai berikut :

60 – Tahun 2006

60 – Bulan 06 (Juni)

91 – Tanggal 19

02 – Jam 20 (8 malam)

95 – Menit 59

53 – Detik 35

82 – Zona Waktu 28 (dengan 1 unit = 15 menit, jadi (28 x 15) / 60 menit

= 7 jam. Sehingga menjadi GMT +07.00).

B.7 User Data Length (UDL)

User Data Length adalah panjang pesan SMS yang telah diterima dengan

bentuk teks standar dalam angka heksadesimal.

B.8 User Data (UD)

User Data adalah isi pesan yang telah diterima dalam format

heksadesimal. Berdasarkan pada Tabel 2.5, pengkodean dari heksadesimal

menjadi nilai teks standar dilakukan seperti pada Tabel 2.9

Page 41: 76460173-WaroengSMS

25

Tabel 2.9 Konversi 8 bit ke 7 bit

Heksa Skema 7 bit Skema 8 bit Karakter CD 1001101 1 1001101 M 67 1001111 01 100111 O 11 1000101 000 10001 E 99 1001000 1001 1001 H 04 1001001 00000 100 I

dummy

2.2 SIEMENS AT Command

AT Command yang berarti Attention Command merupakan sekumpulan

perintah-perintah yang digunakan komputer untuk mengakses modem handphone.

Pada handphone dengan vendor SIEMENS, perintah AT Command akan diterima

melalui interface handphone. Sedangkan kontroler berupa mikrokontroler atau

komputer sebagai pengirim perintah akan mengirimkan perintah tersebut melalui

serial interface. Sehingga komunikasi antara handphone dan kontroler adalah

komunikasi secara serial.

Protokol yang digunakan oleh handphone SIEMENS untuk proses

pengiriman atau penerimaan SMS adalah PDU. Protokol ini merupakan

sekumpulan angka-angka heksadesimal yang merepresentasikan data-data header

berupa identitas dan isi SMS.

Cara penggunaan perintah AT Command adalah pengetikan perintah

selalu diawali oleh at atau AT kemudian dilanjutkan dengan perintah yang

diinginkan. Jika perintah yang diberikan tidak ada kesalahan, maka HP akan

memberikan jawaban dari perintah yang dikirim. Sebaliknya, jika terdapat

kesalahan perintah, maka jawaban yang diterima oleh host pengirim adalah

ERROR. (Kellerek, 2000)

Page 42: 76460173-WaroengSMS

26

Tabel 2.10 Beberapa perintah AT Command

Perintah Fungsi

AT+CBC Battery Charge AT+CSQ Kualitas sinyal keluaran AT+CSMS Pilih Message Service AT+CMGF Format SMS AT+CSCA Alamat SMSC AT+CMGL Daftar SMS AT+CMGR Baca SMS AT+CMGD Hapus SMS AT+CMGS Kirim SMS

2.3 Komunikasi Serial RS232

Menurut Mazidi (2000 : 184) transmisi data secara serial adalah transmisi

data dimana data tersebut akan dikirimkan tiap bit dalam satu waktu. Terdapat 2

cara dalam mentransmisikan data secara serial, yaitu secara Synchronous dan

Asynchronous. Dari kedua cara tersebut yang membedakan adalah sinyal clock

yang dipakai untuk sinkronisasi dalam mengirim data.

Transmisi secara Synchronous yaitu pengiriman data serial bersamaan

dengan sinyal clock, sedangkan Asynchronous yaitu pengiriman data serial tidak

bersamaan dengan sinyal clock sehingga receiver harus membangkitkan sinyal

clock sendiri (tidak perlu sinkronisasi). (Nalwan, 2003 : 41-42)

Berdasarkan arah proses komunikasi serial terdapat 3 metode, yaitu

Simplex, Half-Duplex dan Full-Duplex. (Mazidi, 2000 : 185)

Page 43: 76460173-WaroengSMS

27

Simplex Transmitter Receiver

Receiver

Receiver

Transmitter

Transmitter

Half-Duplex

Transmitter Receiver

Full-Duplex Receiver Transmitter

Gambar 2.4 Arah komunikasi serial

Satuan kecepatan transfer data (baudrate) pada komunikasi serial adalah

bits per second (bps). Untuk menjaga kompatibilitas dari beberapa peralatan

komunikasi data yang dibuat oleh beberapa pabrik, pada tahun 1960 Electronics

Industries Association (EIA) menstandarkan antarmuka serial dengan nama

RS232.

Output yang dihasilkan oleh RS232 tidak sesuai dengan output

Transistor-Transistor Logic (TTL) yang sudah ada. Dalam RS232, logika 1

direpresentasikan dengan tegangan -3 s.d. -25 volt sedangkan logika 0

direpresentasikan dengan tegangan +3 s.d. +25 volt. Hasil tak terdefinisi jika

berada diantara tegangan -3 s.d +3 volt. IBM PC atau komputer yang berbasis x86

(8086, 286, 386, 486 dan Pentium) secara umum prosesor yang digunakan

memiliki dua port COM. Keduanya merupakan konektor jenis RS232 yaitu DB25

dan DB9. (Mazidi, 2000 : 187) (Peacock, 1998)

Page 44: 76460173-WaroengSMS

28

Gambar 2.5 Pinout konektor jarum DB25

Tabel 2.11 Keterangan pinout DB25

No. Pin Nama Keterangan

1 GND Ground 2 TD Transmit Data (TxD/Tx) 3 RD Receive Data (RxD/Rx) 4 RTS Request To Send 5 CTS Clear To Send 6 DSR Data Set Ready 7 SGND Signal Ground 8 CD Carrier Detect (DCD) 9 - Disediakan untuk percobaan data set 10 - Disediakan untuk percobaan data set 11 - Tidak berfungsi 12 SDCD Secondary Carrier Detect 13 SCTS Secondary Clear to send 14 STD Secondary Transmit Data 15 DB Transmit Clock (TCLK/TxCLK) 16 SRD Secondary Receive Data 17 DD Receive Clock (RCLK) 18 LL Local Loopback 19 SRTS Secondary Request to Send 20 DTR Data Terminal Ready 21 RL/SQ Signal Quality Detector/Remote loopback 22 RI Ring Indicator 23 CH/CI Signal Rate selector 24 DA Auxiliary Clock (ACLK) 25 - Tidak berfungsi

Gambar 2.6 Pinout Konektor jarum DB9

Page 45: 76460173-WaroengSMS

29

Tabel 2.12 Keterangan pinout DB9

No. Pin Nama Keterangan

1 DCD Data Carrier Detect 2 RD Receive Data (RxD/Rx) 3 TD Transmit Data (TxD/Tx) 4 DTR Data Terminal Ready 5 SGND Ground 6 DSR Data Set Ready 7 RTS Request To Send 8 CTS Clear To Send 9 RI Ring Indicator

Untuk pengiriman data sebesar 1 byte pada proses komunikasi serial

diawali oleh 1 start bit (low), 8 data bit, 1 atau lebih stop bit (high). Satu paket

data ini disebut frame.

Gambar 2.7 Pembagian bit dalam 1 frame

2.4 Mikrokontroler MCS-51

Mikrokontroler sebagai komponen pengendali berupa program yang telah

kita buat dan masukkan ke dalamnya. Sebagai contoh mikrokontroler MCS-51

adalah Mikrokontroler AT89S52. Mikrokontroler ini memiliki karakteristik

sebagai berikut (ATMEL Corporation, 2005 : 1) :

- In-System Programmable (ISP) Flash Memory sebesar 8 kByte. Dengan

menggunakan flash chip ini, mengijinkan program memori dapat diprogram

ulang dalam sistem. Sehingga mikrokontroler ini tidak membutuhkan

mikrokontroler lain sebagai master untuk proses download program.

IDLE 8 Data Bits STOP +12

-

START START START

IDLE

Page 46: 76460173-WaroengSMS

30

- Memiliki Random Access Memory (RAM) sebesar 256 Byte.

- 32 jalur atau bit input dan output yang terbagi menjadi 4, yaitu P0, P1, P2, P3.

- Memiliki Watchdog timer.

- Memiliki 2 buah data pointer.

- Memiliki 3 buah timer dan counter 16 bit

- Memiliki Full duplex serial port sehingga memungkinkan pengiriman dan

penerimaan data secara serial dapat berlangsung bersamaan.

Mikrokontroler tersebut mempunyai 40 kaki, 32 kaki di antaranya adalah

kaki untuk keperluan port paralel. Tiap port paralel terdiri dari 8 kaki, dengan

demikian 32 kaki tersebut membentuk 4 buah port paralel, yang masing–masing

dikenal sebagai Port 0, Port 1, Port 2 dan Port 3. Nomor dari masing–masing jalur

(kaki) dari port paralel mulai dari dari 0 sampai 7, jalur (kaki) pertama Port 0

disebut sebagai P0.0 dan jalur terakhir untuk Port 3 adalah P3.7. (Putra, 2002 : 69)

Gambar 2.8 Pin out Microcontroller ATMEL 89S52

Page 47: 76460173-WaroengSMS

31

2.4.1 Fungsi–fungsi Kaki (Pin)

- VCC : Suplai tegangan

- GND : Ground atau pentanahan

- RST : Masukan reset. Kondisi ’1’ selama 2 siklus mesin selama

osilator bekerja akan mereset mikrokontroler yang bersangkutan

- ALE / PROG : Keluaran ALE atau Adreess Latch Enable menghasilkan pulsa–

pulsa untuk mengancing byte rendah (low byte) alamat selama

mengakses memori eksternal. Kaki ini juga berfungsi sebagai

masukan pulsa program (the program pulse input) atau PROG

selama pemrograman flash. Pada operasi normal, ALE akan

berpulsa dengan laju 1/6 dari frekuensi kristal dan dapat

digunakan sebagai pewaktuan (timing) atau pendetakan

(clocking) rangkaian eksternal. Catatan, ada satu pulsa yang

dilompati selama selama pengaksesan memori data eksternal.

Jika dikehendaki, operasi ALE bisa dimatikan dengan cara

mengatur bit 0 dari SFR lokasi 8Eh. Jika isinya ’1’, ALE hanya

akan aktif selama dijumpai instruksi MOVX atau MOVC. Selain

itu, kaki ini akan secara lemah di-pulled high. Mematikan bit

ALE tidak akan ada efeknya jika mikrokontroler mengeksekusi

program secara eksternal.

- PSEN : Program Store Enable merupakan sinyal baca untuk memori

program eksternal. Saat mikrokontroler menjalankan program

dari memori eksternal, PSEN akan diaktifkan dua kali per siklus

Page 48: 76460173-WaroengSMS

32

mesin, kecuali dua aktivasi PSEN dilompati (diabaikan) saat

mengakses memori data eksternal.

- EA/VPP : External Access Enable. EA harus selalu dihubungkan ke-

ground, jika mikrokontroler akan mengeksekusi program dari

memori eksternal lokasi 0000h hingga FFFFh. Selain dari itu, EA

harus dihubungkan ke VCC agar mikrokontroler mengakses

program secara internal, yaitu pada lokasi 0000h sampai 1FFFh

sedangkan lokasi 2000h sampai FFFFh pada memori eksternal.

Kaki ini juga berfungsi menerima tegangan 12 Volt (VPP) selama

pemrograman flash, khususnya untuk tipe mikrokontroler 12 Volt

VPP.

2.4.2 Spesifikasi Masing-masing Port

Keempat port pada mikrokontroler bersifat dwi-arah dan masing-masing

memiliki sebuah pengancing (latch), yang diacu dalam program sebagai Register

Fungsi Khusus (RFK atau SFR) sebagai P0, P1, P2 dan P3. Selain itu juga

memiliki sebuah penggerak keluaran (output driver) dan sebuah penyangga

masukan (input buffer) pada masing-masing kaki port.

Penggerak–penggerak keluaran Port 0 dan 2 serta penyangga masukan

dari Port 0 digunakan dalam pengaksesan memori eksternal. Pada aplikasi

semacam ini, Port 0 mengeluarkan byte rendah alamat memori eksternal,

dimultipleks secara waktu dengan byte yang akan dituliskan atau dibaca (ke/dari

memori eksternal). Port 2 mengeluarkan byte tinggi dari alamat memori eksternal

jika lebar alamatnya 16-bit, selain itu kaki–kaki Port 2 tetap meneruskan

Page 49: 76460173-WaroengSMS

33

menghasilkan isi SFR dari P2. Berikut ini akan dijelaskan masing–masing port

pada mikrokontroler. (Putra, 2002 : 71)

A. Port 0

Port 0 merupakan keluaran/masukan (I/O) bertipe open drain

bidirectional. Sebagai port keluaran, masing–masing kaki dapat menyerap arus

(sink) delapan masukan TTL (sekitar 3,8 mA). Pada saat ’1’ dituliskan ke kaki–

kaki Port 0 ini, maka kaki–kaki Port 0 dapat digunakan sebagai masukan–

masukan berimpedansi tinggi.

Jika Port 0 dapat dikonfigurasikan sebagai bus alamat/data bagian

rendah (low byte) selama proses pengaksesan memori data dan program eksternal.

Jika digunakan dalam mode ini Port 0 memiliki pullup internal.

Port 0 juga menerima kode–kode yang dikirim kepadanya selama proses

pemrograman dan mengeluarkan kode–kode selama proses varifikasi program

yang telah tersimpan dalam flash. Dalam hal ini dibutuhkan pullup eksternal

selama proses verifikasi program.

B. Port 1

Port 1 merupakan I/O dwi–arah yang dilengkapi dengan pullup internal.

Penyangga keluaran Port 1 mampu memberikan/menyerap arus empat masukan

TTL (sekitar 1,6 mA).

Jika ’1’dituliskan ke kaki–kaki Port 1, maka masing–masing kaki akan

di-pulled high dengan pullup internal sehingga dapat digunakan sebagai masukan.

Sebagai masukan, jika kaki–kaki Port 1 dihubungkan ke ground (di-low pulled),

Page 50: 76460173-WaroengSMS

34

maka masing–masing kaki akan memberikan arus (source) karena di-pulled high

secara internal. Port 1 juga menerima alamat bagian rendah (low byte) selama

pemrograman dan verifikasi flash.

C. Port 2

Port 2 merupakan I/O dwi–arah yang dilengkapi dengan pullup internal.

Penyangga keluaran port 1 mampu memberikan/menyerap arus empat masukan

TTL (sekitar 1,6 mA).

Jika ’1’ dituliskan ke kaki–kaki Port 2, maka masing–masing kaki akan

di-pulled high dengan pullup internal sehingga dapat digunakan sebagai masukan.

Sebagai masukan, jika kaki–kaki Port 2 dihubungkan ke ground (di-pulled low),

maka masing–masing kaki akan memberikan arus (source) karena di-pulled high

secara internal.

Port 2 akan memberikan byte alamat bagian tinggi (high byte) selama

pengambilan instruksi dari memori program eksternal dan selama pengaksesan

memori data eksternal yang menggunakan perintah dengan alamat 16-bit. Dalam

aplikasi ini, jika ingin mengirimkan ’1’, maka digunakan pullup internal yang

sudah disediakan. Selama pengaksesan memori data eksternal yang menggunakan

perintah dengan alamat 8-bit, Port 2 akan mengirimkan isi dari SFR P2. Port 2

juga menerima alamat bagian tinggi selama pemrograman dan verifikasi flash.

Page 51: 76460173-WaroengSMS

35

D. Port 3

Port 3 merupakan port I/O dwi–arah dengan dilengkapi pullup internal.

Penyangga keluaran Port 3 mampu memberikan/menyerap arus empat masukan

TTL (sekitar 1,6 mA).

Jika ’1’ dituliskan ke kaki–kaki port 3, maka masing–masing kaki akan

di-pulled high dengan pullup internal sehingga dapat digunakan sebagai masukan.

Sebagai masukan, jika kaki–kaki port 3 dihubungkan ke ground (di-pulled low),

maka masing–masing kaki akan memberikan arus (source) karena di-pulled high

secara internal.

Port 3, sebagaimana Port 1, memiliki fungsi–fungsi alternatif antara lain

menerima sinyal–sinyal kontrol (P3.6 dan P3.7), bersama–sama dengan port 2

(P2.6 dan P2.7) selama pemrograman dan verifikasi flash. (Putra, 2002 : 75)

(Mazidi, 2000 : 5)

Tabel 2.13 Fungsi–fungsi khusus kaki–kaki port 3

Port Pin Alternate Function P3.0 RXD (serial input port) P3.1 TXD (serial output port) P3.2 INT0 (external interrupt 0) P3.3 INT1 (external interrupt 1) P3.4 T0 (timer 0 external input) P3.5 T1 (timer 1 external input) P3.6 WR (external data memory write strobe) P3.7 RD (external data memory read strobe)

2.4.3 Timer/Counter

Keluarga mikrokontroler MCS-51 dilengkapi dengan tiga perangkat

Timer/Counter, masing-masing dinamakan sebagai Timer/Counter 0,

Timer/Counter 1, dan Timer 2.

Page 52: 76460173-WaroengSMS

36

Untuk mengakses Timer/Counter tersebut digunakan register khusus

yang tersimpan dalam Special Function Register (SFR). Pencacah biner Timer 0

diakses melalui register TL0 (Timer 0 Low Byte, memori internal alamat 6Ah) dan

register TH0 (Timer 0 High Byte, memori internal alamat 6Ch). Pencacah biner

Timer 1 diakses melalui register TL1 (Timer 1 Low Byte, memori internal alamat

6Bh) dan register TH1 (Timer 1 High Byte, memori internal alamat 6Dh).

Pencacah biner Timer/Counter pada MCS-51 merupakan pencacah biner

16 bit naik (count up binary counter) yang mencacah 0000h sampai FFFFh, saat

kondisi pencacah berubah dari FFFFh kembali ke 0000h akan timbul sinyal

berlebihan (overflow).

Untuk mengatur kerja Timer/Counter tersebut digunakan 2 register

tambahan, yaitu register TCON (Timer Control Register, memori data internal

alamat 88h, bisa diberi alamat per bit). Dan register TMOD (Timer Mode

Register, memori data internal alamat 89h, tidak bisa diberi alamat per bit). (Putra,

2002 : 112 - 115)

Tabel 2.14 Susunan bit dalam register TCON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Timer 1 Timer 0

Keterangan:

- TF1 : overflow flag Timer 1/Counter 1 (1 = overflow)

- TR1 : Enable Timer 1/Counter 1

- TF0 : overflow flag Timer 0/Counter 0 (1 = overflow)

Page 53: 76460173-WaroengSMS

37

- TR0 : Enable Timer 0/Counter 0

- IE1 : External Interrupt 1 edge flag

- IT1 : Interrupt 1 type control bit. Set/clear oleh program untuk menspesifikasi

sisi turun/level rendah trigger dari interupsi eksternal.

- IE0 : External Interrupt 0 edge flag

- IT0 : Interrupt 0 type control bit. Set/clear oleh program untuk menspesifikasi

sisi turun/level rendah trigger dari interupsi eksternal.

Tabel 2.15 Susunan bit dalam register TMOD

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 GATE C/T M1 M0 GATE C/T M1 M0

Timer 1 Timer 0

- GATE : merupakan bit pengatur sinyal detak. Jika GATE = 0, Timer/Counter

akan berjalan saat TR0 atau TR1 pada register TCON (TRx) = 1. Jika GATE =

1, Timer/Counter akan berjalan saat TRx = 1 atau INT1 untuk Timer 1 dan

INT0 untuk Timer 0 (INTx) = 1.

- C/T : dipakai untuk mengatur sumber sinyal detak yang diberikan kepada

pencacah biner. Jika C/T = 0, maka Timer akan aktif dengan sinyal detak

diperoleh dari osilator kristal yang frekuensinya sudah dibagi 12. Jika C/T = 1,

maka Counter akan aktif dengan sinyal detak diperoleh dari kaki T0 (untuk

Timer 0) dan kaki T1 (untuk Timer 1).

- M0 dan M1 : dipakai untuk menentukan Mode Timer/Counter.

Page 54: 76460173-WaroengSMS

38

Tabel 2.16 Mode Operasi Timer/Counter

M1 M0 Mode Operasi 0 0 0 Timer/ Counter 13 bit 0 1 1 Timer/Counter 16 bit 1 0 2 Timer auto reload 8 bit 1 1 3 TL0 adalah timer/Counter 8 bit yang dikontrol

oleh kontrol bit Timer 0 (TF0). TH0 adalah Timer/Counter 8 bit yang dikontrol oleh kontrol bit Timer 1 (TF1).

Untuk menghitung clock frequency adalah menggunakan perhitungan

berikut :

T = osilatorfrekuensi×

121

1 (2.1)

Sehingga, dengan menggunakan Mode 1 dapat dihitung waktu tunda

yang diperlukan dengan perhitungan berikut :

Delay = ( ) Tn ×−65536 (2.2)

Dengan n adalah nilai desimal dari nilai heksadesimal THxTLx. (Mazidi, 2000 :

159 - 160)

2.4.4 Interupsi

Interupsi adalah suatu keadaan eksternal atau internal yang

mengakibatkan mikrokontroler menunda proses yang sedang berjalan untuk

menjalankan proses lain. Mikrokontroler MCS-51 menyediakan enam sumber

interupsi, yaitu dua interupsi eksternal, tiga interupsi timer, dan satu interupsi

serial. Masing-masing sumber interupsi tersebut dapat diaktifkan dan

dinonaktifkan sendiri-sendiri dengan mengatur bit-bit yang terkait dalam register

Page 55: 76460173-WaroengSMS

39

IE (Interrupt Enable) di alamat memori internal A8h. (Putra, 2002 : 156) (Mazidi,

2000 : 211)

Tabel 2.17 Susunan bit dalam register IE

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 EA - ET2 ES ET1 EX1 ET0 EX0

Keterangan:

- EA : Enable semua interupsi (0 = non aktif, 1 = aktif).

- ET2 : Enable Timer 2 overflow atau menangkap interupsi (0 = non aktif, 1 =

aktif).

- ES : Enable interupsi serial (0 = non aktif, 1 = aktif).

- ET1 : Enable Timer 1 overflow (0 = non aktif, 1 = aktif).

- EX1 : Enable eksternal interupsi 1 (0 = non aktif, 1 = aktif).

- ET0 : Enable Timer 0 overflow (0 = non aktif, 1 = aktif).

- EX0 : Enable eksternal interupsi 0 (0 = non aktif, 1 = aktif).

Program yang tergabung dalam sistem interupsi disebut Interrupt Service

Routine (ISR) atau interrupt handler. Jika terjadi interupsi, mikrokontroler akan

mengeksekusi ISR. Setiap program interupsi berada pada lokasi memori internal

tertentu dan tidak berpindah-pindah. Pada Tabel 2.18 menunjukkan alamat ISR

pada memori internal mikrokontroler.

Page 56: 76460173-WaroengSMS

40

Tabel 2.18 Alamat ISR

No. Nama ROM Address

Alat Interupsi

1. Reset 0000h Power on Reset (pin 9) 2. INT0 0003h Interupsi 0 hardware eksternal (pin 12) 3. Timer 0 000Bh Overflow Timer 0 (TF0) 4. INT1 0013h Interupsi 1 hardware eksternal (pin 13) 5. Timer 1 001Bh Overflow Timer 1 (TF1) 6. Serial

COM 0023h Port I/O Serial

Secara default, apabila dalam suatu proses yang sedang berjalan terdapat

beberapa interupsi yang datang bersamaan, maka urutan prioritas interupsi yang

dikerjakan sesuai dengan urutan pada Tabel 2.18. Jika ingin mengatur prioritas

dari suatu interupsi, dapat diatur dalam register Interrput Priority (IP). (Mazidi,

2000 : 228)

Tabel 2.19 Susunan bit dalam register IP

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 - - PT2 PS PT1 PX1 PT0 PX0

Keterangan:

- PT2 : prioritas interupsi Timer 2 (0 = prioritas rendah, 1 = prioritas tinggi).

- PS : prioritas interupsi Serial (0 = prioritas rendah, 1 = prioritas tinggi).

- PT1 : prioritas interupsi Timer 1 (0 = prioritas rendah, 1 = prioritas tinggi).

- PX1 : prioritas interupsi INT1 (0 = prioritas rendah, 1 = prioritas tinggi).

- PT0 : prioritas interupsi Timer 0 (0 = prioritas rendah, 1 = prioritas tinggi).

- PX0 : prioritas interupsi INT0 (0 = prioritas rendah, 1 = prioritas tinggi).

Page 57: 76460173-WaroengSMS

41

2.4.5 Port Serial

Port serial pada mikrokontroler MCS-51 dapat digunakan dalam empat

Mode, kerja yang berbeda. Satu Mode diantaranya bekerja secara sinkron dan tiga

lainnya bekerja secara asinkron. (Putra, 2002 : 133)

A. Mode 0

Mode ini bekerja secara sinkron, data serial dikirim dan diterima melalui

kaki P3.0 (Rx), sedangkan kaki P3.1 (Tx) digunakan untuk menyalurkan detak

pendorong data serial yang dibangkitkan mikrokontroler. Data dikirim/diterima 8

bit sekaligus, dimulai dari bit ke-0 sampai dengan bit ke-7. Kecepatan pengiriman

data (baudrate) adalah 121 frekuensi kristal yang digunakan.

B. Mode 1

Mode ini tetap, yaitu data dikirim melalui kaki P3.1 (Tx) dan diterima

melalui kaki P3.0 (Rx), secara asinkron (juga seperti Mode 2 dan Mode 3). Data

dikirim/diterima 10 bit sekaligus, diawali dengan 1 bit start, 8 bit data mulai dari

bit ke-0 sampai dengan bit ke-7, dan 1 bit stop. Pada MCS-51 yang berfungsi

sebagai penerima bit stop adalah RB8 pada register SCON. Baud rate dapat diatur

sesuai keperluan. Mode 1, Mode 2, dan Mode 3 dikenal dengan Universal

Asynchronous Receiver/Transmitter (UART).

C. Mode 2

Data dikirim/diterima 11 bit sekaligus, diawali dengan 1 bit start, 8 bit

data mulai dari bit ke-0 sampai dengan bit ke-7, bit ke-9 dan 1 bit stop. Pada

Page 58: 76460173-WaroengSMS

42

MCS-51 yang berfungsi sebagai pengirim, bit ke-9 berasal data bit TB8 dalam

register SCON. Pada MCS-51 yang berfungsi sebagai penerima, bit ke-9

ditampung di data bit RB8 dalam register SCON, sedangkan bit stop tidak

ditampung. Baud rate bisa dipilih 321 atau

641 frekuensi kristal yang digunakan.

D. Mode 3

Mode ini sama dengan mode 2, tetapi baud rate dapat diatur sesuai

dengan keperluan. (Putra, 2002 : 134)

Tabel 2.20 Susunan bit dalam register SCON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 SM0 SM1 SM2 REN TB8 RB8 TI RI

Keterangan :

- SM0 dan SM1 : untuk menentukan mode kerja port serial

Tabel 2.21 Mode port serial

SM0 SM1 Mode Keterangan Baudrate 0 0 0 Register geser

Tetap (121 x frek. osilator)

0 1 1 UART 8 bit Dapat diubah-ubah (dengan Timer) 1 0 2 UART 9 bit

Tetap (321 atau

641 x frek. Osilator)

1 1 3 UART 9 bit Dapat diubah-ubah (dengan Timer)

- SM2 : untuk komunikasi multiprosesor.

- REN : untuk mengaktifkan kemampuan port serial menerima data.

- TB8 : bit ke-8 dari data yang akan dikirim (Mode 2 dan Mode 3).

Page 59: 76460173-WaroengSMS

43

- RB8 : bit ke-8 dari data yang telah diterima (Mode 2 dan Mode 3).

- TI : bernilai 1 jika data telah dikirim.

- RI : bernilai 1 jika data telah diterima.

E. Baudrate

Baud rate menunjukkan laju kecepatan pengiriman data digital secara

seri. Laju baud rate sama dengan banyaknya bit yang dikirim setiap detik. Pada

MCS-51 pengiriman secara serial ditentukan oleh Mode yang telah ditentukan.

Baud rate yang digunakan juga bersesuaian dengan Mode yang digunakan. Mode

0 Baud rate yang digunakan adalah (Putra, 2002 : 136):

Baudrate = 12

osilasifrekuensi (2.3)

Baud rate yang digunakan pada Mode 2 tergantung dari isi bit SMOD

yang ada pada register PCON.

Tabel 2.22 Susunan bit dalam register PCON

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 SMOD - - - GF1 GF0 PD IDL

Jika SMOD = 0 Baud rate yang digunakan adalah 641K = . Jika SMOD

= 1 Baud rate yang digunakan 321K = .

Baudrate = K osilasifrekuensi× (2.4)

Baud rate yang digunakan untuk Mode 1 dan 3 dapat ditentukan melalui

register Timer 1 dan juga bit SMOD pada register PCON. Jika SMOD = 0 Baud

rate yang digunakan adalah K=1. Jika SMOD = 1 Baud rate yang digunakan K=2.

Page 60: 76460173-WaroengSMS

44

Baudrate = ([ )]12561232 THosilasifrekuensiK−×

× (2.5)

2.4.6 Reset

C110uF/16v

R210k

S1

VCC

RST

R1100

Gambar 2.9 Skema rangkaian reset

Reset dapat dilakukan secara manual maupun otomatis saat power

diaktifkan (Power On Reset). Saat terjadi reset isi dari register akan berubah

sesuai yang ada pada Tabel 2.23 (Nalwan, 2003 : 27 - 28)

Tabel 2.23 Isi Register setelah reset

Register Isi Register Program Counter 0000H Akumulator 00H Register B 00H PSW 00H Stack Pointer (A) 07H DPTR 0000H Port 0 – 3 FFH Interrupt Priority (IP) XXX00000B Interrupt Enable (IE) 0XX00000B Register Timer 00H SCON 00H SBUF 00H PCON (HMOS) 0XXXXXXXB PCON (CMOS) 0XXX0000B

Page 61: 76460173-WaroengSMS

45

Reset terjadi dengan adanya logika 1 selama minimal 2 cycle pada kaki

RST. Setelah kondisi pin RST kembali low, mikrokontroler akan mulai

menjalankan program dari alamat 0000H. Kondisi pada internal RAM tidak

terjadi perubahan selama reset.

Gambar 2.10 merupakan gambar rangkaian reset yang bekerja secara

manual atau otomatis saat sumber daya diaktifkan. Saat sumber daya diaktifkan,

maka kapasitor C1 sesuai dengan sifat kapasitor akan terhubung singkat pada saat

itu sehingga rangkaian ekivalennya tampak pada Gambar 2.10A. Arus mengalir

dari VCC langsung ke kaki RST sehingga kaki tersebut berlogika 1. Kemudian

kapasitor terisi hingga tegangan pada kapasitor (VC) yaitu tegangan antara VCC

dan titik antara kapasitor C1 dan resistor R2 mencapai VCC, otomatis tegangan

pada R2 atau tegangan RST akan turun menjadi 0 sehingga kaki RST akan

berlogika 0 (Gambar 2.10B) dan proses reset selesai.

R210k

R1100

S1

C110uF/16v

R210k

S1

RST

VCC

RST

VCC

A

VR2

VC

R1100

B

Gambar 2.10 Aliran arus dan perubahan tegangan pada reset otomatis

Jika saklar S1 ditekan, reset kembali bekerja secara manual, aliran arus

akan mengalir dari VCC melalui R1 menuju kaki RST (Gambar 2.11). Tegangan

pada kaki RST atau VR2 akan berubah menjadi : (Nalwan, 2003 : 29)

Page 62: 76460173-WaroengSMS

46

21

22RR

xVCCRVR+

= (2.6)

Yaitu 4,95 volt dengan nilai VCC = 5 volt.

R210k

R1100

C110uF/16v

RST

VCC

B

Gambar 2.11 Rangkaian ekivalen saat saklar S1 ditekan

Tegangan 4,94 volt pada kaki RST menyebabkan kaki ini berlogika 1

pada saat saklar tersebut ditekan. Saat saklar dilepas, aliran arus dari VCC melalui

R1 akan terhenti dan tegangan pada kaki RST akan menurun menuju nol sehingga

logika pada kaki ini menjadi 0 dan proses reset selesai.

2.5 Octal Data Latch

Octal Data Latch merupakan komponen untuk me-latch (menahan) 8

data dengan kecepatan tinggi. (National Semiconductor, 1996 : 1). Komponen ini

dapat digunakan untuk memisahkan antara data dan alamat yang dikirimkan dari

mikrokontroler. Sebagai contoh komponen ini adalah 74LS373 dan 74LS573.

Pada kedua contoh tersebut hanya berbeda pada pin-out yang diberikan.

Page 63: 76460173-WaroengSMS

47

Gambar 2.12 Pin-out 74LS573 dan 74373

Sebagai contoh Octal Data Latch adalah 74LS573 yang dibangun dari

delapan buah komponen D-flip flop. Sehingga pronsip kerja yang digunakan

adalah jika Latch Enable (LE) pada pin nomor 11 dalam kondisi ’1’, maka data

yang dikeluarkan melalui jalur output (O0 s.d. O7) akan sesuai dengan data yang

masuk pada jalur input (D0 s.d. D7). Jika LE dalam kondisi ’0’, maka data yang

dikeluarkan melalui jalur output sesuai dengan data yang dimasukkan

sebelumnya. Hal ini sesuai dengan Tabel 2.24. (Barry, 2002 : 341)

Pada saat mikrokontroler mengirimkan alamat, maka sinyal ALE akan

me-latch proses tersebut dengan memberikan sinyal clock. Jadi, Port 0 akan

berupa jalur alamat jika ALE berlogika 1 atau Port 0 akan berupa jalur data jika

ALE berlogika 0. (Barry, 2002 : 334).

DM74LS573WM

Page 64: 76460173-WaroengSMS

48

Tabel 2.24 Octal Data Latch Truth table

2.6 RAM (Random Access Memory)

RAM disebut juga memori sementara (volatile memory). Ketika power

IC RAM dalam keadaan off, maka data yang tersimpan di dalamnya akan hilang.

Pengaksesan RAM dapat dilakukan dengan perintah menulis atau membaca, hal

ini berbeda dengan ROM (Read Only Memory) yang hanya bisa dibaca. Kode IC

yang diberikan RAM adalah 61xx atau 62xx. Tanda xx disesuaikan dengan

kapasitas yang dibawa dalam satuan kbit. (Mazidi, 2000 : 279)

Sebagai contoh untuk RAM dengan kapasitas 16 kbit atau 2 kByte (1

Byte = 8 bit), digunakan RAM 6116. Penentuan kapasitas RAM yang akan

digunakan berdasarkan banyak data yang akan disimpan pada RAM tersebut.

Pada RAM ini berjenis SRAM (Static RAM), berarti sel penyimpanan

dalam memori ini terbuat dari flip-flop dan tidak membutuhkan refreshing dalam

perintah untuk menyimpan data.

Karena alamat bit ke-0 (A0) sampai dengan bit ke-7 (A7) dan data bit ke-

0 (D0) sampai dengan bit ke-7 (D7) menempati kaki pin yang sama, maka untuk

mengakses RAM, diperlukan komponen pemisah antara alamat dan data.

Page 65: 76460173-WaroengSMS

49

Gambar 2.13 Pinout RAM 6116

2.7 CMOS Analog Multiplexer/Demultiplexer

4051 merupakan salah satu contoh komponen multiplekser 8-channel yang

memiliki tiga angka biner input kontrol, yaitu A, B, C dan sebuah input inhibit.

Sinyal tiga angka biner tersebut memilih 1 dari 8 channel yang akan diaktifkan

dan menghubungkan 1 dari 8 input ke output. (Fairchild Semiconductor, 2002 :

1).

Gambar 2.14 Pinout 4051

Page 66: 76460173-WaroengSMS

50

Tabel 2.25 Tabel Kebenaran Mux/Demux 4051

Inhibit (INH)

C B A Channel IN/OUT

0 0 0 0 0 0 0 0 1 1 0 0 1 0 2 0 0 1 1 3 0 1 0 0 4 0 1 0 1 5 0 1 1 0 6 0 1 1 1 7 1 X X X NONE

Sesuai dengan Tabel 2.25 komponen 4051 akan berfungsi sebagai

Multiplekser (satu jalur masukan pada pin 3 dengan satu pilihan jalur keluaran)

atau Demultiplekser (satu pilihan jalur masukan dengan satu jalur keluaran pada

pin 3) jika pin INH berlogika ’0’. Pilihan masukan atau keluaran disesuaikan

dengan kombinasi bit C, B, A.

2.8 RS232 Transmitter/Receiver

RS232 Transmitter/Receiver merupakan komponen penghubung inteface

RS232 yang memiliki 2 buah transmitter/receiver. Komponen ini mengubah

tegangan masukan berupa tegangan TTL menjadi tegangan keluaran RS232 atau

sebaliknya. (Intercil ICL232, 1997 : 1)

Tegangan keluaran (pin TxD) atau masukan (pin RxD) dari

mikrokontroler masih berupa tegangan TTL. Sehingga untuk mengubah tegangan

tersebut menjadi tegangan RS232, maka digunakan komponen MAX232 atau

ICL232. Dengan perubahan tegangan menjadi RS232, maka data yang dikirim

secara serial dapat berlangsung walaupun jarak antara pengirim dan penerima

sangat jauh (maksimal 50 kaki).

Page 67: 76460173-WaroengSMS

51

Gambar 2.15 Pinout ICL232

Gambar 2.16 Rangkaian fungsional ICL232

2.9 Keyboard

Keyboard digunakan sebagai alat input karena memiliki banyak tombol

yang memudahkan bagi user untuk menginputkan huruf atau angka. Jenis

keyboard yang akan digunakan adalah jenis keyboard untuk IBM PC-AT.

Setiap salah satu tombol keyboard ditekan atau dilepas, keyboard akan

mengirimkan kode ke host (host adalah komputer kalau keyboard dihubungkan ke

Page 68: 76460173-WaroengSMS

52

komputer, atau berupa mikrokontroler kalau keyboard dihubungkan dengan

peralatan berbasis mikrokontroler). Kode tersebut dinamakan sebagai Scan Code.

(Sutanto, 2000)

Setiap tombol pada keyboard memiliki scan code yang berbeda-beda.

Scan code dari masing-masing tombol dapat dilihat pada Gambar 2.17

Gambar 2.17 Scan code tombol keyboard

Konektor yang digunakan oleh keyboard adalah konektor PS2. Pada

konektor tersebut hanya terdapat empat pin penting yaitu VCC +5 volt, Ground,

Data dan Clock.

Gambar 2.18 Konektor PS2 (Keyboard) model lubang

Data yang dikirimkan dari keyboard berbentuk data serial dengan

pengiriman tiap bit data disertai dengan clock. Dengan demikian, mikrokontroler

sebagai host pengakses keyboard tidak perlu membangkitkan clock yang sama

Page 69: 76460173-WaroengSMS

53

untuk menerima data. Sinyal komunikasi data dari keyboard terdapat pada

Gambar 2.19

Gambar 2.19 Sinyal komunikasi data serial dari keyboard

Sesuai dengan Gambar 2.19 setiap pengiriman 1 byte data scan code

akan diawali dengan bit start (active low) kemudian diikuti oleh susunan delapan

bit data diawali bit Least Significant Bit (LSB) yaitu bit ke-0 sampai bit Most

Significant Bit (MSB) yaitu bit ke-7. Proses pengiriman tiap satu bit data terjadi

sesaat setelah kondisi clock berpindah dari logika 1 ke logika 0.

2.10 LCD (Liquid Crystal Display)

LCD digunakan sebagai output device yang mampu menampilkan huruf,

angka maupun karakter tertentu. Pengaksesan LCD dilakukan dengan

mengirimkan kode perintah seperti bentuk kursor, operasi kursor dan bersih layar

dan mengirimkan kode data yang merupakan kode ASCII dari karakter yang akan

ditampilkan.

Page 70: 76460173-WaroengSMS

54

Gambar 2.20 Karakter-karakter pada LCD

Pengaksesan LCD dari mikrokontroler menggunakan jalur alamat dan

data. Terdapat dua jalur alamat input yang digunakan, yaitu sebagai Instruction

Input dan Data Input. (EL-TECH ELECTRONICS, : 8)

Beberapa LCD memiliki pin-out yang berbeda-beda, tetapi mempunyai

deskripsi pin yang sama. Pin-pin tersebut adalah sebagai berikut :

- Vss : Ground

- VCC : +5V Power Supply

- VEE : Power Supply pengatur kecerahan

- RS : RS = 0, memilih Instruction Input

RS = 1, memilih Data Input

R/W : R/W = 0, tulis

R/W = 1, baca

Page 71: 76460173-WaroengSMS

55

- E : Enable

- DB7 – DB0 : 8 bit data bus

Proses menampilkan karakter pada LCD sama dengan proses menulis

data pada LCD. Ketika proses penulisan pada LCD, kondisi sinyal dari masing-

masing pin pada LCD adalah sesuai dengan Gambar 2.21

Gambar 2.21 Karakteristik pewaktuan proses menulis pada LCD

Dari Gambar 2.21 terlihat bahwa dalam proses penulisan LCD sinyal

yang berpengaruh adalah Enable (E) dan Read/Write (R/W). Sehingga untuk

dapat melakukan proses penulisan pada LCD sesuai dengan Tabel 2.26

Tabel 2.26 Tabel kebenaran pengoperasian LCD

Selector Active low

R/W Enable LCD

0 0 1 0 1 0 1 0 0 1 1 0

Sesuai dengan Tabel 2.26, tabel kebenaran tersebut sama dengan tabel

kebenaran dari gerbang logika not OR (NOR).

Page 72: 76460173-WaroengSMS

56

Tabel 2.27 Tabel Instruksi-instruksi dalam pengoperasian LCD

RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0 Instruksi

0 0 0 0 0 0 0 0 0 1 Display Clear 0 0 0 0 0 0 0 0 1 - Cursor Home 0 0 0 0 0 0 0 1 I/D S Entry Mode Set 0 0 0 0 0 0 1 D C B Display ON/OFF 0 0 0 0 0 1 S/C R/L - - Cursor/Display shift 0 0 0 0 1 DL 1 - - - Function Set 1 0 Data Data Write

Keterangan : I/D = 1 : Increment C = 1 : Cursor ON R/L = 1 : Right Shift I/D = 0 : Decrement C = 0 : Cursor OFF R/L = 0 : Left Shift S = 1 : Display Shift B = 1 : Blink ON DL = 1 : 8 bit S = 0 : No Display Shift B = 0 : Blink OFF DL = 0 : 4 bit D = 1 : Display ON S/C = 1 : Display Shift D = 0 : Display OFF S/C = 0 : Cursor Movement

2.11 1 of 8 Decoder

Sebagai contoh dekoder adalah komponen 74LS138. Pada komponen

tersebut memiliki tiga bit masukan Enable, yaitu dua active low (E1 dan E2) dan

satu active high (E3). Dekoder dapat menerima kombinasi tiga bit masukan A1,

A2, dan A3 dengan delapan bit keluaran active low (O0 s.d. O7). Semua bit

keluaran akan berlogika high jika E1 dan E2 tidak dalam kondisi low dan E3 tidak

dalam kondisi high. (MOTOROLA 1 OF 8 DECODER/DEMULTIPLEXER, : 1)

Page 73: 76460173-WaroengSMS

57

Gambar 2.22 Pin out 74LS138

Tabel 2.28 Tabel kebenaran 74LS138

Page 74: 76460173-WaroengSMS

BAB III

METODE PENELITIAN

Metode penelitian yang digunakan dalam perancangan perangkat keras

adalah studi kepustakaan berupa data-data literatur dari masing-masing

komponen, informasi dari internet dan konsep-konsep teoritis dari buku-buku

penunjang. Sedangkan dalam perancangan perangkat lunak berdasarkan teori dan

aplikasi dari buku-buku penunjang sehingga dapat dilakukan percobaan langsung

baik pada perangkat keras maupun pada komputer.

Keseluruhan sistem pada penelitian ini sesuai dengan blok diagram pada

Gambar 3.1.

IBM PC

Port Paralel

atauPort USB

Port Serial 1(COM1)

Port Serial 2(COM2)

PRINTER

TERMINALSELECTOR

TERMINAL1 TERMINAL 2 TERMINAL 3

MOBILE PHONE

Gambar 3.1 Blok Diagram sistem secara keseluruhan

58

Page 75: 76460173-WaroengSMS

59

3.1 Perancangan Perangkat Keras

Perancangan perangkat keras pada Terminal dan Terminal Selector

disesuaikan dengan fungsi dari masing-masing sistem.

Fungsi Terminal Selector adalah sebagai perangkat pemilih Terminal

yang akan mengirimkan data ke komputer atau menerima data dari komputer.

Sedangkan fungsi Terminal adalah sebagai perangkat yang digunakan oleh user

untuk mengetik dan mengirim SMS atau membaca SMS.

Blok diagram dari masing-masing sistem tersebut adalah sebagai berikut:

Gambar 3.2 Blok diagram sistem Terminal Selector

Page 76: 76460173-WaroengSMS

60

Gambar 3.3 Blok diagram sistem Terminal

3.1.1 Minimum Sistem AT89S52

Rangkaian Minimum sistem AT89S52 yang digunakan Terminal dan

Terminal Selector memiliki perbedaan dalam penggunaan Port 1 pada

mikrokontroler.

Y1

11.5092 Mhz

RESET

AD5

C1 33 pF

AD1AD5

U1

AT89S52

9

18

19

20

29

30

3140

12345678

2122232425262728

1011121314151617

3938373635343332

RST

XTAL2

XTAL1

GN

D

PSEN

ALE/PROG

EA

/VP

P

VC

CP1.0P1.1P1.2P1.3P1.4P1.5/MOSIP1.6/MISOP1.7/SCK

P2.0/A8P2.1/A9

P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15

P3.0/RXDP3.1/TXDP3.2/INTOP3.3/INT1P3.4/TOP3.5/T1P3.6/WRP3.7/RD

P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7

A10

En_Mux

TR

5 vAD1AD6

AD2AD4

C

R5

R Pack 10k

123456789

RD

A9

SCK

AD7

AD6

C2 33 pF

Rx

C

AD2

AD0

A8

5 vAD0..AD7A8..A10A13..A15ALE

ALE

AD7

WR

A

AD3

C4

0,1uF

AD0

MISO

B

Tx

R6

4k7

AD4

En_DeMux

MOSI AD3

Gambar 3.4 Minimum system Mikrokontroler AT89S52 pada Terminal Selector

Page 77: 76460173-WaroengSMS

61

C2 33 pF

AD0..AD7A8..A10A13..A15ALEKbd_dataKbd_clkWRRD

Tx

AD3

MISO

A10

AD2

U1

AT89S52

9

18

19

2029

30

3140

12345678

2122232425262728

1011121314151617

3938373635343332

RST

XTAL2

XTAL1

GN

DPSEN

ALE/PROG

EA

/VP

P

VC

CP1.0P1.1P1.2P1.3P1.4P1.5/MOSIP1.6/MISOP1.7/SCK

P2.0/A8P2.1/A9

P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15

P3.0/RXDP3.1/TXDP3.2/INTOP3.3/INT1P3.4/TOP3.5/T1P3.6/WRP3.7/RD

P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7

A15

AD5

Rx

Kbd_data

AD4MOSI

C7

0,1uF

AD0

A9

AD6

5 v

A14

Kbd_clk

WR

Y1

11.5092 Mhz

ALE

AD1

TR

A13

SCK

RD

RESET

C1 33 pF

R6

4k7

AD7

A8

Gambar 3.5 Minimum system Mikrokontroler AT89S52 pada Terminal

Karena terdapat beberapa sistem yang akan berkomunikasi dengan

mikrokontroler di Terminal Selector, maka digunakan Multiplekser /

Demultiplekser sebagai pemilih. Dalam penggunaannya membutuhkan bit-bit

pemilih dan pengaktif. Sehingga bit-bit pada Port 1 digunakan sebagai pengakses

Multiplekser/Demultiplekser.

Berbeda dengan Terminal, karena tidak adanya rangkaian Mux/Demux

pada Terminal, sehingga bit-bit untuk mengakses Mux/Demux tersebut dapat

dihilangkan. Sebagai pengganti, pada beberapa bit pada Port 1 akan digunakan

untuk mengakses Keyboard.

Page 78: 76460173-WaroengSMS

62

Pada pin VCC diberi masukan tegangan operasi berkisar antara 4,5 volt

sampai dengan 5,5 volt. Pin RST berfungsi untuk masukan reset program secara

otomatis atau manual. Pin RxD dan TxD dihubungkan ke komponen

Multiplekser/DeMultiplekser untuk mengakses MAX232 sehingga mikrokontroler

pada Terminal Selector dapat melakukan komunikasi serial dengan Terminal-

Terminal dan komputer secara bergantian. Pin WR dan RD dihubungkan ke

memory data eksternal yaitu RAM, agar mikrokontroler dapat membaca atau

menulis data pada memori tersebut.

Pin XTAL1 dan XTAL2 dihubungkan dengan komponen XTAL sebesar

11,0592 MHz. Pemilihan frekuensi osilasi dari XTAL tersebut berdasarkan

penggunaan mikrokontroler untuk komunikasi serial. Pin EA/VPP dihubungkan

ke VCC karena mikrokontroler akan mengeksekusi program dari memori internal.

Pin ALE/PROG dihubungkan pada memory data eksternal karena berfungsi

sebagai penghasil pulsa-pulsa untuk memisahkan antara Address dan Data pada

saat mengakses memori tersebut. Karena tidak menggunakan memori program

eksternal, maka pin PSEN tidak dihubungkan (not connect).

A. Program Downloader

Untuk melakukan proses downloading program dalam format .HEX dari

komputer ke dalam memory program internal mikrokontroler, penulis

menggunakan kabel downloader dengan interface DB25 yang dihubungkan pada

port LPT1 pada komputer. Sedangkan software yang digunakan adalah ISP-Flash.

(Khan, 2004).

Page 79: 76460173-WaroengSMS

63

P2DB25

13 25 12 24 11 23 10 22 9 21 8 20 7 19 6 18 5 17 4 16 3 15 2 14 1

J2conn_downloader

123456

MIS

OM

OS

IT

R

SC

KR

ES

ET

Gambar 3.6 Rangkaian kabel downloader pada port LPT1

Gambar 3.7 Software ISP-Flash Progammer ver3.0a

Konektor 6 pin pada Gambar 3.8 dihubungkan terlebih dahulu pada

Mikrokontroler AT89S52 di Terminal atau Terminal Selector jika akan

melakukan proses download program.

Page 80: 76460173-WaroengSMS

64

TRJ2

downloader

123456

MOSI

SCKMISO

RESET

Gambar 3.8 konektor downloader pada Mikrokontroler AT89S52

B. Komunikasi Serial

Terdapat beberapa mode serial dalam mikrokontroler. Penulis

menggunakan Serial Mode 1 dengan baudrate sebesar 19200 bps. Sehingga

pengaturan register SCON dan PCON adalah sebagai berikut :

Tabel 3.1 Susunan bit dalam register SCON

SM0 SM1 SM2 REN TB8 RB8 TI RI 0 1 0 1 0 0 0 0

Sehingga SCON bernilai 0x50.

Tabel 3.2 Susunan bit dalam register PCON

SMOD - - - GF1 GF0 PD IDL 1 0 0 0 0 0 0 0

Sehingga PCON bernilai 0x80.

Nilai yang diisikan pada register TH1 untuk menghasilkan baudrate

sebesar 19200 bps didapat dari perhitungan berikut :

Baudrate = ( )[ ]12561232 THosilasifrekuensiK−×

× (3.1)

Karena SMOD = 1, maka nilai K = 2.

Page 81: 76460173-WaroengSMS

65

19200 = ( )[ ]125612100592,11

322 6

TH−××

× (3.2)

Sehingga TH1 bernilai 253 atau 0xFD.

Setelah mendapatkan nilai-nilai dari beberapa register, maka register-

register tersebut dapat digunakan sebagai inisialisasi proses komunikasi serial

pada mikrokontroler. Inisialisasi tersebut diberikan pada program fungsi berikut :

void Serial_init() SCON = 0x50; //serial mode 1, REN = 1(Rx enable) PCON = 0x80; //baudrate 19200 pake mode 1, klo yg 9600 pake mode 0 TH1 = 0xFD; //baudrate 9600 bps ato 19200 bps TR1 = 1; TI = 1; //TI = 1; hrs ditulis kalo kita pake printf(); lama(10);

3.1.2 RAM 6116 (2 kByte)

Dalam RAM 6116 terdapat 11 bit alamat dan 8 bit data, sehingga

pengorganisasian memori-nya adalah 211x8 atau 2k x 8 (terdapat 2048 alamat

memori, dimana masing-masing alamat menampung 8 bit data).

Karena data yang akan disimpan ke dalam RAM berupa karakter

sebanyak maksimal 627 karakter (berupa 608 karakter isi SMS, 12 angka nomor

tujuan, 4 karakter pemisah, 1 karakter jumlah SMS, 2 karakter identitas

Terminal), sehingga data yang akan disimpan sebesar 627 Byte. Penggunaan

RAM dengan kapasitas 2 kByte sudah mencukupi untuk menyimpan data sebesar

627 Byte.

Terminal dan Terminal Selector memiliki kapasitas RAM yang sama.

RAM pada kedua sistem tersebut diakses dari mikrokontroler. Karena pada RAM

memiliki sebelas jalur Alamat dan delapan jalur Data yang berbeda, maka dari

delapan jalur Alamat Data (AD0 s.d. AD7) dari mikrokontroler perlu di-latch

menggunakan komponen 74LS573.

Page 82: 76460173-WaroengSMS

66

A. Terminal Selector

RAM yang digunakan pada Terminal Selector akan aktif ketika sistem

dalam keadaan aktif dan akan menyimpan sementara dari data yang masuk.

5 v

A5AD6

A8

ALE

A4

A6

A7

AD0

AD5

WR

A0

AD1

AD0..AD7A8..A10ALE C6

0,1 uF

AD7

AD4

AD6A3AD5

AD0

U3

74LS573

1

10 11

20

1918171615141312

23456789

OE

GND LE

VCC

1Q2Q3Q4Q5Q6Q7Q8Q

1D2D3D4D5D6D7D8D

A1

AD2

A2

A4

A1

U2

6116

87654321

232219

182021

910111314151617

24

12

A0A1A2A3A4A5A6A7A8A9A10

CEOEWE

D0D1D2D3D4D5D6D7

VCC

VSS

5 v

AD7

C5

0,1uF

AD4

A0AD3

A2

AD1

A6

A3

A9

A7

AD3A5AD2

A10

RD

Gambar 3.9 Rangkaian RAM pada Terminal Selector

Penyimpanan data di RAM terjadi pada saat data yang masuk secara

interupsi serial. Penulisan pada program adalah sebagai berikut :

void Receive_char() interrupt 4 using 1//interrupt serial dijalankan pake BANK 1 if (RI) bypass = SBUF; if (save) RAM_luar[index_RAM] = bypass; index_RAM++; RI = 0;

Sedangkan pengambilan data dari RAM terjadi pada saat Terminal

Selector akan mengirimkan data ke sistem lain. Penulisan pada program adalah

sebagai berikut :

Page 83: 76460173-WaroengSMS

67

--- set_kirim(); for (i=0; i<index_RAM; i++) printf("%c",RAM_luar[i]);//Send_char(RAM[i]); index_RAM = 0; ---

B. Terminal

Selain RAM, terdapat komponen LCD diakses secara Alamat dan Data.

Sehingga keduanya tidak dapat aktif secara bersamaan. Pemilihan keduanya

melalui selektor alamat pada komponen 74LS138.

A2

A9

C5

0,1uF

AD1AD0

AD3

AD7

A3AD4

WR

A0U3

74LS573

1

10 11

20

1918171615141312

23456789

OE

GND LE

VCC

1Q2Q3Q4Q5Q6Q7Q8Q

1D2D3D4D5D6D7D8D

ALE

A0

AD5

5 v

AD2

AD6

A1

5 v

RAMRD

LCD

U8

74LS138

123

6

45

15141312111097

16

8

ABC

G1

G2AG2B

Y0Y1Y2Y3Y4Y5Y6Y7

VC

C

GND

A3

A7 AD4

A7

A8

A4

A6

AD1AD0

A1

A5

RAM

A6

A4

A15

AD5

A5

AD0..AD7A8..A10A13..A15ALERDWR

5 v

U2

6116

87654321

232219

182021

910111314151617

24

12

A0A1A2A3A4A5A6A7A8A9A10

CEOEWE

D0D1D2D3D4D5D6D7

VCC

VSS

A10

A14

AD2

A2

AD7

AD3

AD6

C6

0,1 uF

A13

Gambar 3.10 Rangkaian RAM pada Terminal

Page 84: 76460173-WaroengSMS

68

Tabel 3.3 Pengalamatan RAM dan LCD

A15 A14 A13 A12…AD0 Nilai Address Keterangan 1 1 0 0 0xC000 Enable RAM 1 1 1 0 0xE000 Enable LCD

Deklarasi awal program untuk penulisan alamat RAM adalah sebagai

berikut :

at 0x0C000 xdata unsigned char RAM[650];

Penggunaan RAM pada Terminal sebagai tempat penyimpanan karakter

yang diketik oleh user sehingga dapat ditampilkan pada LCD. Jika karakter yang

ditulis berada pada indeks paling akhir, maka jumlah karakter dan pointer akan

bertambah. Tetapi jika karakter yang ditulis berada pada tengah-tengah kalimat,

maka semua karakter yang tersimpan di RAM akan digeser per indeks sehingga

karakter yang diketik dapat disisipkan. Penulisan program fungsi untuk

penyimpanan karakter yang diketik oleh user tersebut adalah sebagai berikut :

void tulis_char(unsigned char kode) if (index_RAM == char_akir) //penulisan karakter pd index paling akhir LCD_D = kode; lama(3); RAM [index_RAM] = kode; lama(3); index_RAM++; index_LCD++; kursor++; char_akir++; if (index_RAM%16 == 0) baris ++; ganti_brs(); ganti_lyr(); else if (index_RAM < char_akir) //penulisan karakter selain pd index paling akhir (tengah2 kalimat) for (i=char_akir; i>index_RAM; i--) RAM[i] = RAM[i-1]; lama(3); LCD_D = kode; lama(3); RAM [index_RAM] = kode; lama(3); index_RAM++; index_LCD++; kursor++; char_akir++; if (index_RAM%16 == 0) baris ++; ganti_brs(); tem_kur = kursor; tem_ind = index_LCD; tem_brs = baris; tem_RAM = index_RAM; data_RAM(); kursor = tem_kur; index_LCD = tem_ind; baris = tem_brs; index_RAM = tem_RAM; ganti_lyr(); LCD_C = kursor; lama(3); lama(5);

Page 85: 76460173-WaroengSMS

69

Pengambilan data dari RAM digunakan untuk menampilkan teks SMS

pada LCD. Data yang diambil mulai dari indeks RAM yang ditunjuk sampai

dengan karakter terakhir atau selama baris LCD sudah penuh. Dalam hal ini

menggunakan program fungsi berikut :

void data_RAM() for (i=index_RAM; i<char_akir && index_LCD<48; i++) LCD_D = RAM [i]; lama(3); kursor++; index_LCD++; index_RAM++; if (index_LCD < 48) if (index_RAM%16 == 0) //jika dalam 1 baris sdh penuh, pindah brs berikutnya baris++; ganti_brs(); if (index_LCD == 48) index_LCD = 47; kursor = 0x9F; LCD_C = kursor; lama(3); index_RAM--;

Sedangkan untuk menyimpan data SMS yang masuk dari Terminal

Selector dilakukan penyimpanan tiap karakter (hal ini sesuai dengan pengiriman

data serial 8 bit) kemudian indeks RAM akan di-increment. Penjelasan tersebut

sesuai dengan program fungsi berikut :

void Receive_char() if (RI) aceka = SBUF; if (save) RAM [index_RAM] = aceka; index_RAM++; char_akir++; RI = 0;

3.1.3 LCD 4x16

LCD hanya digunakan pada Terminal. Karena pada sistem ini LCD

beralamatkan 0xE000 dan RS sebagai pemilih antara Instruction Input dan Data

Input yang dihubungkan dengan jalur alamat bit ke-0 (A0), maka sesuai dengan

Page 86: 76460173-WaroengSMS

70

Tabel 3.3 untuk mengakses Instruction Input jalur alamat yang digunakan adalah

0xE000 sedangkan untuk Data input jalur alamat yang digunakan adalah 0xE001.

Deklarasi alamat tersebut digunakan pada program yang ditulis sebagai berikut :

at 0x0E000 xdata unsigned char LCD_C; // XDATA -> external data address at 0x0E001 xdata unsigned char LCD_D;

Berdasarkan timing diagram pada Gambar 2.21, Enable LCD didapat dari :

Enable (pada LCD) = LCD (dari 74LS138) NOR R/W (dari mikrokontroler)

AD0..AD7A0WRLCD

J1LCD

246810121416

13579

111315

D21N4002

R41k

13

2

5 v

5 v

VDD

R/W

VSSVEE

AD2 D2AD0 D0

AD6 D6AD4 D4

LCD

WR

EAD1D1

AD5D5AD3D3

AD7D7

A0RS

U6A

74LS02

2

31

14

7

5 v

Gambar 3.11 Rangkaian konektor LCD

Sesuai dengan daftar instruksi pada Tabel 2.27, jika ingin

mengoperasikan LCD, inisialisasi awal pada program ditulis dalam program

fungsi berikut :

void LCD_init() LCD_C = 0x01; lama (3); //Clear LCD_C = 0x38; lama (3); //Function Set LCD_C = 0x0F; lama (3); //Display On/Off LCD_C = 0x06; lama (15); //Entry Mode /* Baris 1 = 0x80, baris 2 = 0xC0, baris 3 = 0x90, baris 4 = 0xD0 */

Page 87: 76460173-WaroengSMS

71

Instruksi LCD_D = ... berfungsi untuk menampilkan karakter. Beberapa

program fungsi yang menggunakan instruksi tersebut untuk menampilkan

karakter yang diketik user atau data yang diambil dari RAM adalah sebagai

berikut :

void tulis_char(unsigned char kode) if (index_RAM == char_akir) //penulisan karakter pd index paling akhir LCD_D = kode; lama(3); RAM [index_RAM] = kode; lama(3); index_RAM++; index_LCD++; kursor++; char_akir++; if (index_RAM%16 == 0) baris ++; ganti_brs(); ganti_lyr(); else if (index_RAM < char_akir) //penulisan karakter selain pd index paling akhir (tengah2 kalimat) for (i=char_akir; i>index_RAM; i--) RAM[i] = RAM[i-1]; lama(3); LCD_D = kode; lama(3); RAM [index_RAM] = kode; lama(3); index_RAM++; index_LCD++; kursor++; char_akir++; if (index_RAM%16 == 0) baris ++; ganti_brs(); tem_kur = kursor; tem_ind = index_LCD; tem_brs = baris; tem_RAM = index_RAM; data_RAM(); kursor = tem_kur; index_LCD = tem_ind; baris = tem_brs; index_RAM = tem_RAM; ganti_lyr(); LCD_C = kursor; lama(3); lama(5); void data_RAM() for (i=index_RAM; i<char_akir && index_LCD<48; i++) LCD_D = RAM [i]; lama(3); kursor++; index_LCD++; index_RAM++; if (index_LCD < 48) if (index_RAM%16 == 0) baris++; ganti_brs(); if (index_LCD == 48) index_LCD = 47; kursor = 0x9F; LCD_C = kursor; lama(3); index_RAM--;

Jika dalam satu baris sudah penuh dengan karakter yang ditampilkan,

maka untuk karakter yang baru diketik harus berada pada baris berikutnya.

Page 88: 76460173-WaroengSMS

72

Sebagai penanda baris sudah penuh adalah nilai dari kursor penunjuk LCD.

Sedangkan jika kursor penunjuk LCD berada pada baris ke-4, berarti LCD sudah

penuh dan harus dilakukan pembersihan layar sebagai tanda scrolling.

void ganti_brs() //ganti baris dilakukan jika dlm 1 brs sdh penuh if (kursor == 0x90) //jk brs 1 penuh,mk pindah brs 2 LCD_C = 0xC0; lama(3); kursor = 0xC0; else if (kursor == 0xD0) //jk brs 2 penuh,mk pindah brs 3 LCD_C = 0x90; lama (3); kursor = 0x90; void ganti_lyr() //ganti layar dilakukan jika 3 brs awal LCD sdh penuh if (kursor == 0xA0) //jk brs 3 penuh,mk pindah brs 4 clrscr(); baris = baris - 2; index_RAM = baris * 16; data_RAM(); void clrscr() //untuk membersihkan Layar LCD dan mereset pointer kursor LCD_C = 0x01; lama(3); LCD_C = 0xD0; lama(3); LCD_D = 'F'; lama(3); LCD_D = '1'; lama(3); LCD_D = '='; lama(3); LCD_D = 'S'; lama(3); LCD_D = 'e'; lama(3); LCD_D = 'n'; lama(3); LCD_D = 'd'; lama(3); LCD_C = 0x80; lama(3); kursor = 0x80; index_LCD = 0; void reset_lyr() //untuk mereset semua status editing dan indeks-indeks clrscr(); index_RAM = 0; s_code = 0; s_code2 = 0; char_akir = 0; baris = 0; panah = 0; caps = 0; total = 1; RI = 0;

3.1.4 MAX232 RS232 Transmitter/Receiver

Penggunaan komponen ini dimaksudkan agar komunikasi antara

Terminal, Terminal Selector dan komputer dapat digunakan walaupun jarak dari

ketiga sistem tersebut cukup jauh. Pada penelitian ini jarak dari masing-masing

sistem tersebut adalah 2 meter.

Karena pada Terminal Selector sebagai pemilih Terminal atau komputer,

maka Multiplekser/Demultiplekser akan memilih jalur data serial yang masuk

atau keluar pada Terminal Selector.

Page 89: 76460173-WaroengSMS

73

C15

10u/16v

T1_Tx

Rx Terminal 2

Tx Terminal 1

T2_Tx

P1

DB9

59

48

37

26

1

C1410u/16v

PC_Tx

U5

MAX232

13

8

11

10

1

3

4

5

2

6

12

9

14

7

1615

R1IN

R2IN

T1IN

T2IN

C+

C1-

C2+

C2-

V+

V-

R1OUT

R2OUT

T1OUT

T2OUT

VC

CG

ND

T1_Rx

T3_TxJ5

RJ45_T3

12345678

J3

RJ45_T1

12345678

C910u/16v

12 vC1610u/16v

U4

MAX232

13

8

11

10

1

3

4

5

2

6

12

9

14

716

15

R1IN

R2IN

T1IN

T2IN

C+

C1-

C2+

C2-

V+

V-

R1OUT

R2OUT

T1OUT

T2OUTV

CC

GN

D

C1010u/16v

T2_Rx

Rx Terminal 3

C1210u/16v

12 v

PC_Rx

T3_Rx

C1310u/16v

12 v

Tx Terminal 3

J4

RJ45_T2

5 v

12345678Tx Terminal 2

5 v

C11

10u/16v

Rx Terminal 1

Gambar 3.12 Rangkaian MAX232 pada Terminal Selector

Penggunaan rangkaian MAX232 pada Terminal berguna untuk

melakukan komunikasi serial dengan Terminal Selector.

Page 90: 76460173-WaroengSMS

74

U4

MAX232

13

8

11

10

1

3

4

5

2

6

12

9

14

7

1615

R1IN

R2IN

T1IN

T2IN

C+

C1-

C2+

C2-

V+

V-

R1OUT

R2OUT

T1OUT

T2OUT

VC

CG

ND

C10

10u/16v

Tx

C310u/16v

Rx Terminal

Tx Terminal

12v

C1110u/16v

5 v

C810u/16v

J3

RJ45

12345678

Rx

Gambar 3.13 Rangkaian MAX232 pada Terminal

3.1.5 4051 Multiplekser/Demultiplekser

Rangkaian Multiplekser/Demultiplekser hanya digunakan pada Terminal

Selector. Karena proses komunikasi serial yang dilakukan dari Terminal Selector

ke komputer atau salah satu dari ketiga Terminal secara bergantian, maka

mikrokontroler pada Terminal Selector harus mampu memilih diantara empat

sistem tersebut.

Apabila dari mikrokontroler ingin mengirim data ke salah satu sistem,

maka yang akan diaktifkan (logika 0 pada pin INH) adalah Multiplekser. Hal ini

dilakukan karena jalur Transmitter dari mikrokontroler akan dihubungkan dengan

salah satu jalur Transmitter dari salah satu sistem (sesuai kombinasi bit A, B, C)

ke komponen MAX232 sehingga proses pengiriman data secara serial dapat

dilakukan.

Page 91: 76460173-WaroengSMS

75

C8

0,1uF

5 v

En_Mux

Tx

T2_TxT1_TxPC_Tx

T3_Tx

U9

4051 Mux

X013

X114

X215

X312

X41

X55

X62

X74

INH6

A11

B10

C9

X3VDD

16

VSS8

VEE7

C

AB

Gambar 3.14 Rangkaian Multiplekser 4051

Sedangkan apabila dari mikrokontroler ingin menerima data dari salah

satu sistem, maka yang akan diaktifkan (logika 0 pada pin INH) adalah

Demultiplekser. Hal ini dilakukan karena jalur Receiver dari mikrokontroler akan

dihubungkan dengan salah satu jalur Receiver dari salah satu sistem (sesuai

kombinasi bit A, B, C) ke komponen MAX232 sehingga proses penerimaan data

secara serial dapat dilakukan.

Rx

5 v

C7

0,1uF

En_DeMux

T1_RxPC_Rx

T2_RxT3_Rx

U10

4051 DeMux

X013

X114

X215

X312

X41

X55

X62

X74

INH6

A11

B10

C9

X3VDD

16

VSS8

VEE7A

BC

Gambar 3.15 Rangkaian Demultiplekser 4051

Page 92: 76460173-WaroengSMS

76

Kombinasi bit-bit A, B, dan C sebagai penentu sistem yang dipilih.

Kombinasi tersebut sesuai dengan Tabel 3.4

Tabel 3.4 Kombinasi A, B, C sebagai pemilih sistem

C B A Sistem 0 0 0 Komputer 0 0 1 Terminal 1 0 1 0 Terminal 2 0 1 1 Terminal 3

Pemilihan keempat sistem tersebut ditulis dalam program sebagai

berikut:

while(1) //---------------------------------------------------------------------// PC set_terima(); cc = 0; bb = 0; aa = 0; //Pilih PC lama (3); if (bypass == '0') --- //---------------------------------------------------------------------// T1 set_terima(); cc = 0; bb = 0; aa = 1; //Pilih T1 lama (3); if (bypass == '1') --- //---------------------------------------------------------------------// T2 set_terima(); cc = 0; bb = 1; aa = 0; //Pilih T2 lama (3); if (bypass == '2') --- //---------------------------------------------------------------------// T3 set_terima(); cc = 0; bb = 1; aa = 1; //Pilih T3 lama(3); if (bypass == '3') --- //---------------------------------------------------------------------//

Page 93: 76460173-WaroengSMS

77

3.1.6 Keyboard

Keyboard yang digunakan hanya pada Terminal terhubung ke

mikrokontroler melalui Port 1

Kbd_clkKbd_data

Kbd_data

JS2

PS2

123456

5 vKbd_clk

Gambar 3.16 Konektor PS2 (jarum) keyboard pada mikrokontroler

Berdasarkan timing diagram pada Gambar 2.19, pengambilan data 1 byte

scan code sebagai identitas dari masing-masing tombol diawali dengan

pengambilan start bit. Setelah mendapatkan data bit dilakukan pergeseran bit ke

kanan, hal ini dilakukan karena data bit yang diterima berawal dari bit LSB dan

berakhir sampai bit MSB. Setiap pengambilan satu bit data dilakukan setelah

mendapatkan sinyal clock dalam kondisi low. Pengambilan data 8 bit dilakukan

dua kali karena untuk mengetahui perbedaan tombol 8 bit dan tombol 16 bit.

Proses tersebut ditulis dalam fungsi program berikut :

void Tekan_tombol() B = 0x00; //definisi u/ tpt scancode while (Kclk); while (!Kclk); start = Kdata; // ambil start bit if (!start) // jika start bit = 0, brarti data scancode bs diambil for (i=0; i<8; i++) //ambil 8 bit pertama while (Kclk); while (!Kclk); B = B >> 1; B7 = Kdata; s_code = B; B = 0; for (i=0; i<8; i++) //ambil 8 bit kedua while (Kclk); while (!Kclk); B = B >> 1; B7 = Kdata; s_code2 = B; lama(5);

Page 94: 76460173-WaroengSMS

78

Untuk mengetahui tombol yang ditekan, perlu diketahui scan code yang

diberikan dari keyboard. Setelah mendapatkan scan code dari tombol yang

ditekan, kemudian disesuaikan dengan fungsi tombol tersebut. Khusus untuk

tombol F1 berfungsi untuk mengirim SMS dan tombol F2 untuk menerima SMS.

Pendeteksian tombol yang ditekan pada program adalah sebagai berikut :

while (1) tampil_jum(); shift = 0; do Tekan_tombol(); if (s_code == 0x12 || s_code == 0x59) //cek tombol shift shift = 1; while (s_code == 0 || s_code == 0x12 || s_code == 0x59 || s_code == 0xF0); //jk hbs nekan shift ki/ka ato lepas tombol, ulang lg ---

Penekanan tombol F2 hanya untuk membaca SMS yang masuk. Proses

yang terjadi adalah Terminal akan menunggu ijin pengiriman data dari Terminal

Selector. Apabila ijin tersebut telah diterima maka Terminal akan mengirimkan

tanda ke Terminal Selector bahwa siap menerima data. Kemudian setiap data

karakter yang masuk akan disimpan ke RAM sampai dengan karakter penutup

(karakter 0xAE). Kemudian data yang telah tersimpan tersebut akan ditampilkan

di LCD.

--- / ///////////////////////////////////////////////////////////////// if (s_code == 0x06 && char_akir == 0) //Press F2, untuk baca SMS / //////////////

LCD_C = 0x01; lama(3); LCD_C = 0xC0; lama(3); for (i = 0; i < 16; i++) LCD_D = SMS_msk[i]; lama(3); do Receive_char(); while(aceka != '4'); //tunggu ijin kirim data lama(5); printf(")"); lama(2); //beri ijin terima data save = 1; do Receive_char();

Page 95: 76460173-WaroengSMS

79

while(aceka != '«'); //mulai terima data sampe tanda tutup save = 0; clrscr(); index_RAM = 0; baris = 0; char_akir--; //char_akir-1, biar tanda tutup data ga ikut disimpan for (i=0; i<char_akir; i++) LCD_D = RAM [i]; lama(3); index_LCD++; kursor++; index_RAM++; if (index_RAM%16 == 0) baris++; ganti_brs(); if (kursor == 0xA0) //jk brs 3 penuh,mk pindah brs 4 lama(1000); clrscr(); ---

Penekanan tombol F1 hanya untuk mengirim SMS. Proses yang terjadi

adalah setelah pengguna menekan F1, maka pengguna diminta untuk

memasukkan nomor tujuan. Sebelum SMS dikirimkan, Terminal akan mengirim

ijin pengiriman data ke Terminal Selector. Apabila ijin tersebut telah dibalas,

maka Terminal akan mengirimkan SMS yang diambil dari RAM ke Terminal

Selector. Terminal akan menunggu status dari pengiriman SMS tersebut

kemudian menampilkannya.

--- ///////////////////////////////////////////////////////////////////////////////// else if (s_code == 0x05) //Press F1, untuk kirim SMS RAM [index_RAM] = 0xF0; lama(3);//tanda akir isi sms index_RAM++; ketik_nomor(); do metu = 0; do Tekan_tombol(); while (s_code == 0 || s_code == 0xF0); if ((s_code == 0x66) && kursor > 0xC1) //Press BACKSPACE kursor --; index_RAM--; LCD_C = kursor; lama(1); LCD_D = 0xA0; lama(1); LCD_C = kursor; lama(1); else if ((s_code == 0x16 ||s_code == 0x1E ||s_code == 0x26 ||s_code == 0x25 ||s_code == 0x2E ||s_code == 0x36 ||s_code == 0x3D ||s_code == 0x3E ||s_code == 0x46 ||s_code == 0x45) && kursor < 0xCF) LCD_D = tabel_scan[s_code]; lama(3); RAM [index_RAM] = tabel_scan[s_code]; lama(3); kursor++; index_RAM++;

Page 96: 76460173-WaroengSMS

80

else if (s_code == 0x05 || s_code == 0x76) metu = 1; while(!metu); if (s_code == 0x05) //Press F1 for (i=0; i<4; i++) //tanda akir no.tujuan + identitas terminal RAM [index_RAM] = T_id[i]; lama(3); index_RAM++; //-- klo nambah checksum disini --// RAM [index_RAM] = total + 0x30; lama(3); index_RAM++; RAM [index_RAM] = 0xAE; lama(3); index_RAM++; //stop bit paket data («) LCD_C = 0x01; lama(3); LCD_C = 0xC1; lama(3); for (i = 0; i < 13; i++) LCD_D = psn[i]; lama(3); aceka = '0'; // tunggu ijin kirim data do printf("1"); lama(3); Receive_char(); while(aceka != ')'); lama(3); for (i=0; i<index_RAM; i++) //-- mulai kirim paket data --// printf("%c", RAM [i]); lama(3); //Send_char(RAM [i]); lama(1); aceka = '0'; // tunggu status SMS do Receive_char(); while(aceka != 'D' && aceka != 'P'); LCD_C = 0x01; lama(3); LCD_C = 0xC1; lama(3); if (aceka == 'D') for (i = 0; i < 12; i++) LCD_D = sukses[i]; lama(3); else if (aceka == 'P') for (i = 0; i < 12; i++) LCD_D = tunda[i]; lama(3); lama(5000); reset_lyr(); else if (s_code == 0x76) //Press ESC clrscr(); index_RAM = 0; baris = 0; for (i=0; i<char_akir; i++) LCD_D = RAM [i]; lama(3); index_LCD++; kursor++; index_RAM++; if (index_RAM%16 == 0) baris++; ganti_brs();

Page 97: 76460173-WaroengSMS

81

if (kursor == 0xA0) //jk brs 3 penuh,mk pindah brs 4 lama(1000); clrscr(); ---

Jika pengguna menekan tombol Capslock, maka akan mengaktifkan flag

capslock dan akan menampilkan indikatornya pada LCD.

--- ///////////////////////////////////////////////////////////////////////////////// else if (s_code == 0x58) //Press capslock tem_kur = kursor; if (!caps) caps = 1; LCD_C = 0xD7; lama(3); LCD_D = 'c'; lama(3); LCD_D = 'a'; lama(3); LCD_D = 'p'; lama(3); LCD_D = 's'; lama(3); else caps = 0; LCD_C = 0xD7; lama(3); LCD_D = ' '; lama(3); LCD_D = ' '; lama(3); LCD_D = ' '; lama(3); LCD_D = ' '; lama(3); LCD_C = kursor; lama(3); ---

Jika pengguna menekan tombol panah kanan, maka akan menggerakkan

kursor LCD ke kanan. Jika telah sampai di kolom paling kanan, maka akan pindah

ke baris berikutnya dan mengaktifkan flag panah.

--- ///////////////////////////////////////////////////////////////////////////////// else if (s_code2 == 0xA2) //Press Right arrow if (index_RAM < char_akir) //jk uda sampe akir karakter ga boleh ke kanan lg kursor++; index_RAM++; index_LCD++; if (index_RAM%16 == 0) baris++; ganti_brs(); ganti_lyr(); LCD_C = kursor; lama(3); panah = 1; lama(3); ---

Jika pengguna menekan tombol panah kiri, maka akan menggerakkan

kursor LCD ke kiri. Jika telah sampai di kolom paling kiri, maka akan pindah ke

baris sebelumnya dan mengaktifkan flag panah.

Page 98: 76460173-WaroengSMS

82

--- / ///////////////////////////////////////////// else if (s_code2 == 0x5A) //Press Left arrow / //////////////////////////////////

if (baris != 0 || kursor != 0x80) //jk nyampe brs 1 kolom 1 ga boleh ke kiri lg if (kursor == 0x80) //jk nyampe baris 1 pd LCD, hrs ganti clrscr(); baris --; index_RAM = baris * 16; data_RAM(); LCD_C = kursor; lama(3); else kursor --; index_RAM --; index_LCD --; if (index_RAM%16 == 15) baris--; if (kursor == 0x8F) //awal baris 3 - 1 hrs ke akhir baris 2 kursor = 0xCF; if (kursor == 0xBF) //awal baris 2 - 1 hrs ke akhir baris 1 kursor = 0x8F; LCD_C = kursor; lama(3); panah = 1; lama(3); ---

Jika pengguna menekan tombol panah atas, maka akan menampilkan

data pada layar sebelumnya (scrolling). Penekanan tombol ini dilakukan jika

kursor berada di baris paling atas dalam satu layar LCD dan akan mengaktifkan

flag panah.

--- / ///////////////////////////////////////////////////////////// else if (s_code2 == 0xAA && s_code != 0x15) //Press Up arrow / //////////////////

tem_brs = kursor & 0x80; //panah atas dipake kalo kursor di baris 1 pd LCD if (baris != 0 && tem_brs == 0x80)

clrscr(); baris --; index_RAM = baris * 16; data_RAM(); LCD_C = kursor; lama(3); panah = 1; lama(3); ---

Jika pengguna menekan tombol panah bawah, maka akan menampilkan

data pada layar selanjutnya (scrolling). Penekanan tombol ini dilakukan jika

kursor berada di baris paling bawah dalam satu layar LCD dan akan mengaktifkan

flag panah.

Page 99: 76460173-WaroengSMS

83

--- ///////////////////////////////////////////////////////////////////////////////// else if (s_code2 == 0x92 && s_code != 0x32) //Press Down arrow got = ((baris + 2) * 16) - 1; tem_brs = kursor & 0x90; if (tem_brs == 0x90) //panah atas dipake kalo kursor di baris 3 pd LCD if (char_akir >= got) baris++; index_RAM = baris * 16; clrscr(); data_RAM(); panah = 1; lama(3); ---

Jika pengguna menekan tombol Backspace, maka indeks semua data

yang tersimpan di RAM akan digeser satu indeks ke kiri mulai dari posisi indeks

penunjuk RAM sampai dengan indeks dari data terakhir. Karena arah pergerakan

kursor adalah ke kiri, maka perubahan posisi kursor sama dengan jika ditekan

tombol panah kiri.

--- / /////////////////////////////////////////// else if (s_code == 0x66) //Press BACKSPACE / ////////////////////////////////////

if (baris != 0 || kursor != 0x80) if (kursor == 0x80) clrscr(); baris --; index_RAM = baris * 16; char_akir--; data_RAM(); LCD_C = kursor; lama(1); LCD_D = 0xA0; lama(1); LCD_C = kursor; lama(1); for (i=index_RAM; i<char_akir; i++) RAM[i] = RAM[i+1]; lama(3); else kursor--; index_RAM--; index_LCD--; char_akir--; if (index_RAM%16 == 15) baris--; if (kursor == 0x8F) //awal baris 3 - 1 hrs ke akhir baris 2 kursor = 0xCF; if (kursor == 0xBF) //awal baris 2 - 1 hrs ke akhir baris 1 kursor = 0x8F; LCD_C = kursor; lama(1); LCD_D = 0xA0; lama(1); LCD_C = kursor; lama(1); for (i=index_RAM; i<char_akir; i++)

Page 100: 76460173-WaroengSMS

84

RAM[i] = RAM[i+1]; lama(3); tem_kur = kursor; tem_ind = index_LCD; tem_brs = baris; tem_RAM = index_RAM; data_RAM(); kursor = tem_kur; index_LCD = tem_ind; baris = tem_brs; index_RAM = tem_RAM; ganti_lyr(); LCD_C = kursor; lama(3); lama(3); ---

Jika pengguna menekan tombol huruf atau angka, maka sebelum

ditampilkan atau disimpan perlu di-cek terlebih dahulu kondisi tombol Shift atau

Capslock. Hal ini dapat diketahui dari nilai flag kedua tombol tersebut. Huruf

kapital akan ditampilkan sesuai dengan database huruf tabel_scan2 […] jika salah

satu dari kedua flag tersebut aktif.

--- /////////////////////////////////////////////////////////Press SHIFT + character, maks isi sms = 608 karakter

//////////////////////////

else if ((shift == 1 || caps == 1) && char_akir < 609) tulis_char(tabel_scan2 [s_code]); else if ((shift == 0)&& char_akir < 609) if (!panah) //agar panah dilepas ga ngeluarin huruf tulis_char(tabel_scan [s_code]); else panah = 0; lama (7);

3.1.7 Format Data yang Dikirimkan Oleh Sistem

Karena komunikasi yang digunakan oleh antar sistem adalah

komunikasi serial dengan pengiriman beberapa bagian data secara berurutan

seperti identitas sistem, isi SMS, nomor tujuan dan total SMS, maka penggunaan

format data pengiriman ini berguna untuk mempermudah pemrograman di setiap

sistem dalam mengambil bagian-bagian data tersebut.

Page 101: 76460173-WaroengSMS

85

A. Pengiriman SMS

Format data SMS yang dikirim dari Terminal menuju Terminal Selector

kemudian dari Terminal Selector diteruskan ke komputer adalah sebagai berikut :

A B C D E F G H

Gambar 3.17 Format data pengiriman SMS dari Terminal ke komputer

Keterangan : A : Isi SMS E : Identitas Terminal pengirim

B : Karakter 0xF0 F : Karakter 0xF2

C : Nomor Tujuan G : Total SMS

D : Karakter 0xF1 H : Karakter 0xAE

B. Penerimaan SMS

Format data SMS yang dikirim dari komputer ke Terminal Selector

sebagai SMS yang akan dibaca oleh user di Terminal adalah sebagai berikut :

A B C

Gambar 3.18 Format data penerimaaan SMS

Keterangan : A : Identitas Terminal tujuan

B : Isi SMS

C : Karakter 0xAE

Sedangkan format data SMS yang dikirim dari Terminal Selector ke

Terminal adalah sebagai berikut :

Page 102: 76460173-WaroengSMS

86

A B

Gambar 3.19 Format data pengiriman SMS dari Terminal Selector ke Terminal

Keterangan : A : Isi SMS

B : Karakter 0xAE

3.2 Perancangan Perangkat Lunak

Hasil perancangan perangkat lunak akan diterapkan pada komputer

sebagai penampil program aplikasi yang berbasis Graphical User Interface

(GUI), Terminal Selector, dan Terminal. Sehingga dari ketiga sistem tersebut

dapat saling berkomunikasi.

3.2.1 Terminal Selector

Diagram alir perangkat lunak pada Terminal Selector sesuai pada

Gambar 3.20

Page 103: 76460173-WaroengSMS

87

Gambar 3.20 Diagram alir perangkat lunak pada Terminal Selector

3.2.2 Terminal

Diagram alir perangkat lunak pada Terminal sesuai pada Gambar 3.21

Page 104: 76460173-WaroengSMS

88

START

Tekan tombol KIRIM

Kirim data ke Terminal Selector

Tekan tombolPanah

Ambil dataDari RAM

TampilkanKe LCD

Tekan tombolHuruf/Angka

Ketik nomortujuan

Tampilkan di LCD & simpan di RAM

T

T

Y

Y

Bersihkan layarLCD

Ambil semua dataDari RAM

Simpan datadi RAM

Y

Y

Koneksi dgn Terminal Selector

T

Tekan TombolBaca SMS

Koneksi dgn Terminal Selector

Terima data dr Terminal

Selector&simpan ke RAM

Tampilkan di LCD

Y

TLCD kosong Y Y

TT

T

Gambar 3.21 Diagram alir perangkat lunak pada Terminal

3.2.3 Komputer

Secara umum, perangkat lunak pada komputer bertujuan untuk menerima

data dari Terminal Selector berupa SMS yang akan dikirim dan mengirimkan

SMS yang dipesan oleh user ke Terminal melalui Terminal Selector. Diagram alir

perangkat lunak dari aplikasi tersebut adalah sesuai dengan Gambar 3.22.

Page 105: 76460173-WaroengSMS

89

START

Terima datadr Terminal

Selector

Ubah jd format PDU

Kirim SMS

Simpan & Cetak Transaksi

Y

Pesanan baca SMST

T

Kirim ke Terminal Selector

Y

Gambar 3.22 Diagram alir perangkat lunak pada komputer

A. Informasi Handphone

Beberapa informasi handphone yang perlu diambil sebelum mengirim

dan menerima SMS adalah nama provider selular, nomor SMS Center, kapasitas

battery, dan kualitas sinyal. Sebelum mendapatkan informasi-informasi tersebut

program akan melakukan tes koneksi dengan handphone setelah meng-klik

tombol REFRESH yaitu dengan mengirim perintah AT<Enter> sampai didapat

status OK.

//Fungsi untuk mendapatkan status handphone dan SIM card procedure TFdepan.BBRefreshClick(Sender: TObject); var aw, ak : ShortInt; begin if Serial1.PortOpen then Serial1.PortOpen := False;

Page 106: 76460173-WaroengSMS

90

//Serial1.CommPort := SetPort.HPPort.ItemIndex + 1; //Serial1.Settings := SetPort.HPBaud.Text + ',n,8,1'; Serial1.PortOpen := True; lama := NOW; //*** Status Koneksi **************************// Serial1.Output := 'AT'#13; samp := ''; repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0) or (Pos('ERROR', samp) > 0) or (SecondsBetween(NOW, lama) > 3); if (Pos('OK', samp) > 0) then begin BBRefresh.Visible := True; kedip.Enabled := False; StatusBar1.Panels[1].Text := ''; StatusBar1.Panels[0].Text := ''; LKondisi.Caption := 'OK'; //*** Nomor SMSC ***************************// Serial1.Output := 'AT+CSCA?'#13; samp := ''; repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0)or (Pos('ERROR', samp) > 0); if (Pos('OK', samp) > 0) then begin aw := Pos('"+', samp) + 2; ak := Pos('",', samp); samp := copy(samp, aw , ak - aw); LSmsc.Caption := samp; smsc := samp; end; //*** Nama provider ***********************// Serial1.Output := 'AT+COPS?'#13; samp := ''; repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0)or (Pos('ERROR', samp) > 0); if (Pos('OK', samp) > 0) then begin aw := Pos(',"', samp) + 2; ak := Pos('"'+Char($0D), samp); samp := copy(samp, aw , ak - aw); LSimcard.Caption := samp; end; //*** Kapasitas battery ********************// Serial1.Output := 'AT+CBC'#13; samp := ''; repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0)or (Pos('ERROR', samp) > 0); if (Pos('OK', samp) > 0) then begin aw := Pos('0,', samp) + 2; samp := copy(samp, aw, (Pos('OK', samp) - aw) - 4); batteray.Position := StrToInt(samp); end; //*** Kualitas Sinyal *********************// Serial1.Output := 'AT+CSQ'#13; samp := ''; repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0)or (Pos('ERROR', samp) > 0);

Page 107: 76460173-WaroengSMS

91

if (Pos('OK', samp) > 0) then begin aw := Pos(': ', samp) + 2; samp := copy(samp, aw , Pos(',', samp)-aw); signal.Position := StrToInt(samp) + 1; end; //******************************************// if LSimcard.Caption = 'IND TELKOMSEL' then //Telkomsel begin LSmsc.Caption := '6281100000'; smsc := '6281100000'; c_pulsa := 'ATD["*888#"];' end else if LSimcard.Caption = 'IND SATELINDOCEL' then //IM3 begin LSmsc.Caption := '62855000000'; smsc := '62855000000'; c_pulsa := 'ATD["*388#"];' end else if LSimcard.Caption = 'proXL' then //pro XL Jempol begin LSmsc.Caption := '62818445009'; smsc := '62818445009'; c_pulsa := 'ATD["*123#"];' end; else if LSimcard.Caption = 'IND SATELINDOCEL' then //Mentari begin LSmsc.Caption := '62816124'; smsc := '62816124'; c_pulsa := 'ATD[*555#];' end; Serial2.Active := True; end else if (Pos('ERROR', samp) > 0) then begin LKondisi.Caption := 'ERROR'; end; end;

Gambar 3.23 Tampilan form utama

Page 108: 76460173-WaroengSMS

92

B. Konversi Teks Menjadi PDU dan Sebaliknya

Sebelum teks SMS dikirimkan, teks SMS tersebut harus diubah menjadi

format PDU. Sedangkan SMS yang diambil dari handphone masih dalam bentuk

PDU. Sehingga untuk membacanya perlu diubah menjadi bentuk teks.

B.1 Konversi Teks Menjadi PDU

Proses yang dilakukan untuk mengubah teks menjadi PDU adalah

mengubah data 8 bit menjadi data 7 bit. Proses diawali dari huruf pertama dari

teks. Untuk mendapatkan nilai ASCII dari huruf tersebut menggunakan perintah

ord(...). Nilai ASCII tersebut adalah 8 bit, maka untuk mengubah menjadi 7 bit

yaitu dengan mengambil bit ke-8 untuk dimasukkan ke huruf berikutnya. Proses

ini dilakukan sampai dengan huruf terakhir. Program fungsi berikut digunakan

untuk mengubah teks SMS menjadi PDU :

//Fungsi program untuk ubah teks jadi PDU function TFdepan.PDUdecoder(kal:String):String; // created by IIK var ulang, temp, panjang, index, hexa : Integer; huruf_1, huruf_2, mask, masking : Integer; hasil : String; begin panjang := length(kal); hasil := ''; hasil := hasil + IntToHex(panjang, 2); ulang := 1; mask := 255; for index := 1 to panjang do begin if ulang = 1 then huruf_1 := ord(kal[index]) else huruf_1 := huruf_2; if ulang = 8 then ulang := 1 else begin huruf_2 := ord(kal[index+1]); masking := mask shr (8 - ulang); temp := huruf_2 and masking; temp := temp shl (8 - ulang); hexa := huruf_1 or temp; hasil := hasil + IntToHex(hexa, 2); huruf_2 := huruf_2 shr ulang; inc(ulang); end; end; result := hasil; end;

Page 109: 76460173-WaroengSMS

93

B.2 Konversi PDU Menjadi Teks

Proses yang dilakukan untuk mengubah PDU menjadi teks adalah

mengubah data 7 bit menjadi data 8 bit. Proses diawali dari dua pasang pertama

huruf heksa dari PDU untuk mengetahui panjang teks. Kemudian mengambil satu

pasang heksa berikutnya untuk di-decode menjadi huruf. Proses tersebut

dilakukan sampai dengan panjang teks yang telah didapatkan pada awal proses.

Program fungsi berikut digunakan untuk mengubah PDU menjadi bentuk teks :

//Fungsi program untuk ubah PDU jadi teks // created by IIK @ April, 29 12:34 am function TFdepan.PDUencoder(kal:String):String; var hsl, var_str : String; hsl_int, i, stat, sisa, index, mask, mask1, mask2, pjg_PDU, pjg_kal : Integer; int_akhir, putar, temp : Integer; begin mask := 255; hsl := ''; pjg_PDU := length(kal); //cek 2 bit ato 3 bit awal hexa pd PDU if pjg_PDU <= 452 then begin pjg_kal := 0; var_str := copy (kal, 1, 1); // ambil bit1 dr PDU pjg_kal := pjg_kal + (16 * HexToDec(var_str)); var_str := copy (kal, 2, 1); // ambil bit2 dr PDU pjg_kal := pjg_kal + HexToDec(var_str); stat := 2; // mencatat index awal kal end else begin pjg_kal := 0; var_str := copy (kal, 1, 1); // ambil bit1 dr PDU pjg_kal := pjg_kal + (256 * HexToDec(var_str)); var_str := copy (kal, 2, 1); // ambil bit2 dr PDU pjg_kal := pjg_kal + (16 * HexToDec(var_str)); var_str := copy (kal, 3, 1); // ambil bit3 dr PDU pjg_kal := pjg_kal + HexToDec(var_str); stat := 3; // mencatat index awal kal end; index := 1; putar := 1; temp := 0; for i := 1 to pjg_kal do begin if putar = 8 then begin putar := 1; temp := 0; sisa := 0; end else begin hsl_int := 0; var_str := copy (kal, stat + index, 1); hsl_int := hsl_int + (16 * HexToDec(var_str)); var_str := copy (kal, stat + index + 1, 1); hsl_int := hsl_int + HexToDec(var_str); mask1 := mask shl (8 - putar); sisa := hsl_int and mask1; sisa := sisa shr (8 - putar);

Page 110: 76460173-WaroengSMS

94

mask2 := mask shr putar; int_akhir := hsl_int and mask2; int_akhir := int_akhir shl (putar - 1); int_akhir := int_akhir or temp; temp := sisa; hsl := hsl + chr(int_akhir); if putar = 7 then hsl := hsl + chr(sisa); index := index + 2; putar := putar + 1; end; end; result := hsl; end;

C. Pengiriman SMS

Pengiriman SMS, dilakukan setelah komputer menerima data dari

Terminal Selector. Data tersebut kemudian dipilah-pilah sehingga terdapat teks

SMS, nomor tujuan, identitas Terminal dan jumlah SMS. Setelah penambahan

header-header pada format PDU, maka SMS segera dikirim.

Setelah pengiriman SMS, komputer akan menyimpan SMS tersebut pada

form Outbox kemudian menunggu status report dari pengiriman tersebut. Jika

dalam waktu yang ditentukan tidak terdapat status report, maka pengiriman SMS

masih tertunda. Status dari pengiriman SMS (Tertunda atau Terkirim) segera

dikirim ke Terminal Selector untuk diteruskan ke Terminal. Sesaat kemudian

komputer akan mencetak hasil transaksi pengiriman SMS sebagai laporan kepada

user. Proses memilah-milah data tersebut ditulis dalam program fungsi berikut :

//Fungsi program untuk pengiriman SMS procedure TFdepan.Ngirim(); var m, n, v, q, r : Integer; sdhqrim, w : ShortInt; teksQrim : String; begin //data dari Terminal Selector hanya bs diproses stlh diterima stop bit if Pos(Char($AE), data_in) > 0 then begin q := Pos(Char($F0), data_in); teks_sms := copy(data_in, 1, q-1); r := Pos(Char($F1), data_in); no_tuj := copy (data_in, q+1, r-(q+1)); id := copy(data_in, r+1, 2); q := Pos(Char($F2), data_in);

Page 111: 76460173-WaroengSMS

95

tot := copy(data_in, q+1, 1);

Setelah didapatkan data-data tersebut, kemudian ditampilkan pada kolom

yang sesuai dengan Terminal yang mengirim.

--- pjg_SMS := length(teks_sms); if id = 'T1' then begin report1.Caption := 'Pending'; LNoTrans1.Caption := IntToStr(noTrans); LPj1.Caption := IntToStr(pjg_SMS); IsiSMS1.Lines.Text := teks_sms; LNo_tuj1.Caption := no_tuj; waktu := DateTimeToStr(NOW); LWaktu1.Caption := waktu; Inc(noTrans); data_in := ''; end else if id = 'T2' then begin report2.Caption := 'Pending'; LNoTrans2.Caption := IntToStr(noTrans); LPj2.Caption := IntToStr(pjg_SMS); IsiSMS2.Lines.Text := teks_sms; LNo_tuj2.Caption := no_tuj; waktu := DateTimeToStr(NOW); LWaktu2.Caption := waktu; Inc(noTrans); data_in := ''; end else if id = 'T3' then begin report3.Caption := 'Pending'; LNoTrans3.Caption := IntToStr(noTrans); LPj3.Caption := IntToStr(pjg_SMS); IsiSMS3.Lines.Text := teks_sms; LNo_tuj3.Caption := no_tuj; waktu := DateTimeToStr(NOW); LWaktu3.Caption := waktu; Inc(noTrans); data_in := ''; end; ---

Penyusunan header-header PDU diawali dengan nomor SMS Center dan

diakhiri dengan teks yang akan dikirim. Jumlah karakter teks yang dikirim

disesuaikan dengan jumlah SMS yang dikirim.

--- if smsc = '62818445009' then //proXL PDU := '07912618485400F9' else if smsc = '62855000000' then //IM3 PDU := '07912658050000F0' else if smsc = '62816125' then //Mentari PDU := '079126181652' else if smsc = '6281100000' then //Telkomsel PDU := '07912618010000F0'; n := length(PDU); //pjg SMSC PDU := PDU + '31'; //SMS type w/ REPORT STATUS PDU := PDU + '00'; //SMS Reference number PDU := PDU + no_tuj2PDU(no_tuj);

Page 112: 76460173-WaroengSMS

96

PDU := PDU + '00'; //SMS form as SMS PDU := PDU + '00'; //7 bits Encoding Data I/O scheme PDU := PDU + 'FF'; //SMS expired time sdhqrim := 0; notsend := False; for w := 1 to StrToInt(tot) do begin if w = 1 then teksQrim := copy(teks_sms, 1, 160) else if w = 2 then teksQrim := copy(teks_sms, 161, 144) else if w >= 3 then teksQrim := copy(teks_sms, 305+((w-3)*152), 152); PDUqrim := PDU + PDUdecoder(teksQrim); m := length(PDUqrim); //pjg smua PDU v := (m - n) div 2; StatusBar1.Panels[1].Text := PDUqrim; if length(no_tuj) > 4 then begin Serial1.Output := 'AT+CMGS=' + IntToStr(v) + #13; //mulai kirim SMS samp := ''; repeat samp := samp + Serial1.Input; until (Pos('>', samp) > 0) or (Pos('ERROR', samp) > 0); end else begin MessageDlg('NOMOR TUJUAN BERBAHAYA !!', mtInformation, [mbYes], 0); samp := 'ERROR'; end; if (Pos('>', samp) > 0) then begin Serial1.Output := PDUqrim + #$1A; samp := ''; repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0) or (Pos('ERROR', samp) > 0); end; if (Pos('OK', samp) > 0) then Inc(sdhqrim) else if (Pos('ERROR', samp) > 0) then begin notsend := TRUE; //kirim status TERTUNDA ke Terminal Selector Serial2.SendString(Chr($50)); Break; end; end; ---

Setelah pesan terkirim, maka program akan menghitung biaya yang

dibebankan pada pengguna dan akan menunggu status report dari pengiriman

tersebut.

--- dbyr := sdhqrim * tarip; if id = 'T1' then begin if notsend = TRUE then report1.Caption := 'NOT SENT' else begin LByr1.Caption := IntToStr(dbyr); p := 0; FOutbox.SimpanOutbox(no_tuj, waktu, IntToStr(pjg_SMS), teks_SMS); delay_cekreport.Enabled := True; end; end

Page 113: 76460173-WaroengSMS

97

else if id = 'T2' then begin if notsend = TRUE then report2.Caption := 'NOT SENT' else begin LByr2.Caption := IntToStr(dbyr); p := 0; FOutbox.SimpanOutbox(no_tuj, waktu, IntToStr(pjg_SMS), teks_SMS); delay_cekreport.Enabled := True; end; end else if id = 'T3' then begin if notsend = TRUE then report3.Caption := 'NOT SENT' else begin LByr3.Caption := IntToStr(dbyr); p := 0; FOutbox.SimpanOutbox(no_tuj, waktu, IntToStr(pjg_SMS), teks_SMS); delay_cekreport.Enabled := True; end; end; end; end; ---

Untuk mendapatkan status report dari SMS yang dikirim yaitu dengan

menunggu adanya SMS baru sampai waktu yang telah ditentukan. Status terkirim

atau tertunda akan dikirimkan ke Terminal yang mengirim SMS dan akan dicetak

pada bon transaksi.

//Fungsi program untuk mengetahui status pengiriman SMS procedure TFdepan.cek_report(); var PD : boolean; r : ShortInt; pendel, q, stt, smsin : String; begin Serial1.Output := 'at+cmgl=0'#13; lama := NOW; samp := ''; PD := False; repeat samp := samp + Serial1.Input; until (Pos(samp, 'OK') > 0) or (SecondsBetween(NOW, lama) > 3); if (Pos('+CMGL:', samp) > 0) then begin smsin := copy(samp, Pos('+CMGL:', samp)+17, 70); //ambil PDU q := copy (smsin, 2, 1); r := StrToInt(q); stt := copy (smsin, (r*2)+3, 2); //ambil kode status stlh kode SMS center if stt = '06' then begin if id = 'T1' then report1.Caption := 'Delivered' else if id = 'T2' then report2.Caption := 'Delivered' else if id = 'T3' then report3.Caption := 'Delivered'; Serial2.SendString(Chr($44)); //kirim status TERKIRIM ke Terminal Selector pendel := 'TERKIRIM'; PD := True; end; end else if PD = False then begin Serial2.SendString(Chr($50)); //kirim status TERTUNDA ke Terminal Selector pendel := 'TERTUNDA';

Page 114: 76460173-WaroengSMS

98

Edit1.Text := 'PENDING'; end; delay_cekreport.Enabled := False; //perintah ini jgn ditaruh dibwh sendiri if (id = 'T1') And (CB1.Checked = True)then Cetak_Bon('1', pendel) else if (id = 'T2') and (CB2.Checked = True) then Cetak_Bon('2', pendel) else if (id = 'T3') and (CB3.Checked = True) then Cetak_Bon('3', pendel); end; //Fungsi program untuk mencetak BON procedure TFdepan.Cetak_Bon(iden, stadus : String); begin HslCetak.Font.Name := 'Verdana'; HslCetak.Font.Size := 10; HslCetak.Lines.Clear; HslCetak.Lines.Add(' Waröeng SMS'+Chr(13)+Chr(10)); HslCetak.Lines.Add(' Terminal ' + iden); HslCetak.Lines.Add(' Tujuan'+Chr(9)+': ' + no_tuj); HslCetak.Lines.Add(' Waktu'+Chr(9)+': ' + waktu); HslCetak.Lines.Add(' Panjang'+Chr(9)+': ' + IntToStr(pjg_SMS)+' karakter'); HslCetak.Lines.Add(' Biaya'+Chr(9)+': Rp ' + IntToStr(dbyr)); HslCetak.Lines.Add(' Status'+Chr(9)+': '+stadus+Chr(13)+Chr(10)); HslCetak.Lines.Add(' [Bluebit]'); HslCetak.Print('c:\bon.txt'); //PASTIKAN FILE INI ADA DI DRIVE C: end;

D. Penerimaan SMS

Untuk mengetahui ada atau tidak SMS yang masuk, pengecekan

dilakukan pada form Inbox. Jika ada SMS yang masuk, maka SMS tersebut akan

disimpan. Karena SMS yang diterima dalam bentuk PDU, maka perlu dipilah-

pilah untuk diambil nomor pengirim, waktu pengiriman, dan isi SMS. Jika SMS

telah tersimpan pada program, maka SMS tersebut akan terhapus dari handphone.

Penulisan pada program adalah sebagai berikut :

//Fungsi program untuk mengambil data-data SMS dr PDU SMS yang masuk procedure TFInbox.UbahPDU2Text(var datasms, pengirim, tanggal, jam, isi: string); var pdu, smsc, tipe, bentuk, skema,batas: string; p,i: integer; begin pdu := datasms; smsc := ''; p := StrToInt('$' + copy(pdu, 1, 2)) - 1; pdu := copy(pdu,5,length(pdu)-4); for i := 1 to p do begin smsc := smsc + pdu[i*2]; smsc := smsc + pdu[i*2-1]; end; if smsc[length(smsc)] = 'F' then smsc := copy(smsc, 1, length(smsc) - 1); pdu := copy(pdu, p*2+1,length(pdu)-p*2); tipe := copy(pdu, 1, 2); if tipe = '06' then begin pengirim := 'SMS Center';

Page 115: 76460173-WaroengSMS

99

tanggal := '-'; jam := '-'; isi := 'SMS Report'; end else begin pdu := copy(pdu, 3, length(pdu)-2); pengirim := ''; p := StrToInt('$'+copy(pdu,1,2)); if p mod 2 = 1 then inc(p); pdu := copy(pdu,5,length(pdu)-4); for i := 1 to p div 2 do begin pengirim := pengirim + pdu[i*2]; pengirim := pengirim + pdu[i*2-1]; end; if pengirim[length(pengirim)] = 'F' then pengirim := copy(pengirim, 1, length(pengirim) - 1); pdu := copy(pdu,p+1,length(pdu)-p); bentuk := copy(pdu,1,2); pdu := copy(pdu, 3, length(pdu)-2); skema := copy(pdu,1,2); pdu := copy(pdu, 3, length(pdu)-2); tanggal := pdu[6]+pdu[5] + '/' + pdu[4]+pdu[3] + '/' + pdu[2]+pdu[1]; jam := pdu[8]+pdu[7] + ':' + pdu[10]+pdu[9] + ':' + pdu[12]+pdu[11]; pdu := copy(pdu, 13, length(pdu)-12); batas := copy(pdu,1,2); pdu := copy(pdu, 3, length(pdu)-2); isi := Fdepan.PDUencoder(pdu); end; end; //Fungsi program untuk tutup form procedure TFInbox.Button2Click(Sender: TObject); begin Close; end; //Fungsi program untuk men-cek SMS baru procedure TFInbox.BceknewsmsClick(Sender: TObject); var s, isi, tanggal, jam, pengirim : String; index_sms, samp : string; save_all : textfile; lama : TDateTime; begin Fdepan.Serial1.Output := 'AT+CMGL=0'#13; //cek SMS baru lama := NOW; samp := ''; repeat samp := samp + Fdepan.Serial1.Input; until (Pos('OK', samp) > 0) or (Pos('ERROR', samp) > 0) or (SecondsBetween(NOW, lama) > 180); if Pos('+CMGL:', samp) > 0 then //kalo ada SMS, langsung proses begin assignfile(save_all, 'SMS_in.txt'); rewrite(save_all); write(save_all, samp); closefile(save_all); reset(save_all); readln(save_all, samp); while (not EOF(save_all)) do begin readln(save_all, samp); if copy(samp, 1, 7) = '+CMGL: ' then begin index_sms := copy(samp, 8, pos(',', samp) - 8);

Page 116: 76460173-WaroengSMS

100

readln(save_all, samp); UbahPDU2Text(samp, pengirim, tanggal, jam, isi); tbInbox.Append; tbInbox['Pengirim'] := pengirim; tbInbox['Tanggal'] := tanggal; tbInbox['Jam'] := jam; tbInbox['Isi SMS'] := isi; tbInbox.Post; Fdepan.Serial1.Output := 'AT+CMGD=' + index_SMS + #13; //hapus SMS lama := NOW; repeat s := Fdepan.Serial1.Input; until (Pos('OK', s) > 0) or (Pos('ERROR', s) > 0) or (SecondsBetween (NOW, lama) > 180); end; end; closefile(save_all); end else MessageDlg('Ga ada SMS baru !', mtInformation, [mbYes], 0); end;

Gambar 3.24 Tampilan form Inbox

E. Pengiriman SMS ke Terminal

Jika dari SMS yang disimpan dalam form Inbox terdapat SMS yang

ingin dibaca oleh user, maka operator Billing memilih SMS tersebut untuk

Page 117: 76460173-WaroengSMS

101

dikirim ke Terminal melalui Terminal Selector. Penulisan pada program adalah

sebagai berikut :

1. Pada form Inbox

//Fungsi program kirim SMS ke form Utama procedure TFInbox.BkirimterminalClick(Sender: TObject); begin Fdepan.IsiSMSUC.Clear; Fdepan.TerTuj.Caption := ''; Fdepan.IsiSMSUC.Lines.Text := DBRichEdit1.Text; Fdepan.TerTuj.Caption := ComboBox1.Text; Fdepan.delay_ijin.Enabled := True; end;

2. Pada form Utama

//Fungsi program ijin kirin SMS ke Terminal Selector procedure TFdepan.delay_ijinTimer(Sender: TObject); begin Serial2.SendString('0'); e nd;

//Fungsi program kirim SMS ke Terminal Selector procedure TFdepan.BKirimClick(Sender: TObject); begin SMSUC := TerTuj.Caption + IsiSMSUC.Text + '«'; Serial2.SendString(SMSUC); BKirim.Enabled := False; end;

Gambar 3.25 Tampilan form Outbox

Page 118: 76460173-WaroengSMS

BAB IV

PENGUJIAN SISTEM

Pengujian sistem yang dilakukan penulis merupakan pengujian terhadap

perangkat keras dan perangkat lunak dari sistem Terminal, Terminal Selector dan

komputer yang telah selesai dibuat.

4.1 Pengujian Keyboard

4.1.1 Tujuan

Pengujian keyboard ini hanya dilakukan pada Terminal dan bertujuan

untuk mengetahui bahwa mikrokontroler dapat membaca data dan clock yang

dikirimkan oleh keyboard.

4.1.2 Alat yang Digunakan

1. Terminal yang sudah terhubung dengan Terminal Selector

2. Catu daya +12 volt

3. Keyboard

4. Osiloskop

5. Multimeter

4.1.3 Prosedur Pengujian

1. Hubungkan keyboard ke Terminal.

2. Hubungkan catu daya ke Terminal Selector dan lampu indikator power di

Terminal Selector dan Terminal akan menyala.

102

Page 119: 76460173-WaroengSMS

103

3. Download program untuk pengujian keyobard berikut ke dalam

mikrokontroler.

#include <reg52.h> sbit Kdata = P1^0; sbit Kclk = P1^1; bit start; sbit P30 = P3^0; sbit B7 = B^7; unsigned int i, s_code, s_code2; void lama (int e) //delay 10 ms int y; for (y=1; y<=e; y++) TH0 = 0xD8; TL0 = 0xF0; TR0 = 1; while (!TF0); TR0 = 0; TF0 = 0; void main() TMOD = 0x01; lama(10); while (1) s_code = 0; s_code2 = 0; do P30 = 0; //berlogika 0 jika ga ada penekanan tombol B = 0x00; //definisi u/ tpt scancode while (Kclk); while (!Kclk); //tunggu ada penekanan tombol start = Kdata; // ambil start bit if (!start) // jika start bit = 0, brarti data scancode bs diambil for (i=0; i<8; i++) //ambil 8 bit pertama while (Kclk); while (!Kclk); B = B >> 1; B7 = Kdata; s_code = B; B = 0; for (i=0; i<8; i++) //ambil 8 bit kedua while (Kclk); while (!Kclk); B = B >> 1; B7 = Kdata; s_code2 = B; lama(5); while (s_code == 0 || s_code == 0xF0); P30 = 1; lama(300); //berlogika 1 jika ada penekanan tombol

4. Dengan menggunakan osiloskop, gambarlah sinyal data pada Port 1.0 (pin 1)

mikrokontroler ketika ada penekanan tombol keyboard.

Page 120: 76460173-WaroengSMS

104

5. Dengan menggunakan multimeter, catatlah tegangan yang dikeluarkan oleh

Port 3.0 mikrokontroler (pin 10) ketika ada penekanan tombol keyboard.

4.1.4 Hasil Dari Pengujian

Hasil dari pengujian ini adalah sesuai dengan program pada prosedur

pengujian. Pada program tersebut Port 3.0 sebagai indikator penekanan tombol,

jika ada penekanan tombol maka Port 3.0 akan berlogika 1, sedangkan bila tidak

ada penekanan tombol maka Port 3.0 akan berlogika 0.

Tegangan yang dikeluarkan pada Port 3.0 saat belum ada penekanan

tombol keyboard adalah 0,45 volt (logika 0). Sedangkan tegangan pada Port 3.0

ketika ada penekanan tombol keyboard ditunjukkan pada Tabel 4.1

Tabel 4.1 Hasil pengujian keyboard

Tekan tombol

Tegangan pada Port 3.0 (volt)

Logika

A 4,89 1 S 4,89 1 D 4,89 1 F 4,89 1 G 4,89 1

Pembacaan sinyal dimulai dari sebelah kiri secara berurutan ke kanan,

mulai saat sinyal dalam keadaan low sebagai tanda start bit kemudian data bit ke-0

sampai bit ke-7, parity bit bernilai 0 (bit data yang bernilai 1 adalah ganjil)

kemudian stop bit dalam keadaan high.

Pada Gambar 4.1 sampai dengan Gambar 4.5 didapat dengan konfigurasi

osiloskop sebagai berikut :

Voltage Scale : 2,00 volt

Page 121: 76460173-WaroengSMS

105

Coupling : DC

Time/Div : 100,0 µs

Berikut ini adalah gambar-gambar sinyal dari data penekanan tombol

keyboard sesuai Tabel 4.1 :

V

t

Gambar 4.1 Sinyal data tombol A

Sehingga Gambar 4.1 dibaca 00011100001. Berarti data scan code

tombol A adalah 00011100 biner atau 0x1C heksadesimal.

V

t

Gambar 4.2 Sinyal data tombol S

Sehingga Gambar 4.2 dibaca 01101100001. Berarti data scan code

tombol S adalah 00011011 biner atau 0x1B heksadesimal.

Page 122: 76460173-WaroengSMS

106

V

t

Gambar 4.3 Sinyal data tombol D

Sehingga Gambar 4.3 dibaca 01100010001. Berarti data scan code

tombol D adalah 00100011 biner atau 0x23 heksadesimal.

V

t

Gambar 4.4 Sinyal data tombol F

Sehingga Gambar 4.4 dibaca 01101010001. Berarti data scan code

tombol F adalah 00101011 biner atau 0x2B heksadesimal.

V

t

Gambar 4.5 Sinyal data tombol G

Page 123: 76460173-WaroengSMS

107

Sehingga Gambar 4.5 dibaca 00010110001. Berarti data scan code

tombol G adalah 00110100 biner atau 0x34 heksadesimal.

4.2 Pengujian Pengiriman Data

Dalam pengujian ini dilakukan pengiriman beberapa header dari format

pengiriman SMS, yaitu karakter 0xF0, 0xF1, 0xF2, 0xAE dan karakter isi SMS.

Gambar-gambar sinyal merupakan sinyal TTL (sebelum atau sesudah

berubah menjadi sinyal RS232) yang diambil dari pin Tx mikrokontroler pada

Terminal dan pin Rx mikrokontroler pada Terminal Selector.

4.2.1 Tujuan

Pengujian ini bertujuan untuk mengetahui apakah data yang telah dikirim

oleh Terminal sesuai dengan data yang diterima oleh Terminal Selector dan dapat

dikirimkan ke komputer.

4.2.2 Alat yang Digunakan

1. Salah satu Terminal yang sudah terhubung dengan Terminal Selector

2. Seperangkat komputer

3. Catu daya +12 volt

4. Osiloskop

4.2.3 Prosedur Pengujian

1. Hubungkan catu daya ke Terminal Selector dan lampu indikator power di

Terminal Selector dan Terminal akan menyala.

Page 124: 76460173-WaroengSMS

108

2. Hubungkan komputer dengan Terminal Selector dengan menggunakan kabel

serial silang.

3. Download program untuk pengiriman data berikut ke dalam mikrokontroler.

Data yang dikirimkan berganti-ganti yaitu karakter 0xF0, 0xF1, 0xF2, 0xAE

dan huruf-huruf sebagai isi SMS. Penggantian pengiriman data, lihat baris ke-

15 pada Terminal dan baris ke-29 dan baris ke-33 pada Terminal Selector.

Program pada Terminal :

#include <reg52.h> #include <stdio.h> void lama(int suwi); void Serial_init(); void Interrupt_init(); void main() TMOD = 0x21; lama(300); //Timer1 16 bit auto reload, Timer0 16 bit Serial_init(); Interrupt_init(); while (1) printf("%c", 0xF0); // Pilih data yg akan dikirim //printf("%c", 0xF1); //printf("%c", 0xF2); //printf("%c", 0xAE); //printf("ABCDEFGHIJKLMNOP"); lama(300); void lama (int suwi) //waktu tunda 10 ms unsigned int w; for (w=1; w<=suwi; w++) TH0 = 0xD8; TL0 = 0xF0; TR0 = 1; while (!TF0); TR0 = 0; TF0 = 0; void Serial_init() SCON = 0x50; //serial mode 1, REN = 1(Rx enable) PCON = 0x80; //baudrate mode 1, klo yg 9600 pake mode 0 TH1 = 0xFD; //baudrate 19200 bps TR1 = 1; TI = 1; lama(5); //TI = 1 hrs ada klo pake printf(); void Interrupt_init() IE = 0x90; //interrupt enable (EA) = 1, interrupt serial (ES) = 1; IP = 0x10; //interrupt serial priority (PS) = 1;

Page 125: 76460173-WaroengSMS

109

Program pada Terminal Selector:

#include <reg52.h> #include <stdio.h> sbit aa = P1^0; sbit bb = P1^1; sbit cc = P1^2; sbit En_Demux = P1^3; sbit En_Mux = P1^4; unsigned int i, indx; unsigned char RAM_dlm[40]; void lama(int suwi); void Serial_init(); void Interrupt_init(); void set_kirim(); void set_terima(); void main() TMOD = 0x21; lama(10); //Timer1 16 bit auto reload, Timer0 16 bit Serial_init(); Interrupt_init(); indx = 0; while (1) cc = 0; bb = 1; aa = 0; //Pilih T2 set_terima(); if (indx == 16) //sesuai jumlah data yg mo dikirim ato diterima cc = 0; bb = 0; aa = 0; //Pilih PC set_kirim(); //printf("%c", RAM_dlm[0]); for (i = 0; i < indx; i++) //buat ngirim kalimat printf("%c", RAM_dlm[i]); lama(1); lama(2); indx = 0; void lama (int suwi) //waktu tunda 10 ms unsigned int w; for (w=1; w<=suwi; w++) TH0 = 0xD8; TL0 = 0xF0; TR0 = 1; while (!TF0); TR0 = 0; TF0 = 0; void Serial_init() SCON = 0x50; //serial mode 1, REN = 1(Rx enable) PCON = 0x80; //baudrate mode 1, klo yg 9600 pake mode 0 TH1 = 0xFD; //baudrate 19200 bps TR1 = 1; TI = 1; lama(5); //TI = 1 hrs ada klo pake printf(); void Interrupt_init() IE = 0x90; //interrupt enable (EA) = 1, interrupt serial (ES) = 1; IP = 0x10; //interrupt serial priority (PS) = 1;

Page 126: 76460173-WaroengSMS

110

void Receive_char() interrupt 4 using 1 //interrupt serial dijalankan pake BANK 1 if (RI) RAM_dlm[indx] = SBUF; indx++; RI = 0; void set_terima() En_Mux = 1; En_Demux = 0; //terima data (enable-nya active low) void set_kirim() En_Mux = 0; En_Demux = 1; //kirim data (enable-nya active low)

4. Dengan menggunakan Osiloskop, gambarlah sinyal yang dikeluarkan dari pin

Tx mikrokontroler pada Terminal dan bandingkan dengan sinyal Rx

mikrokontroler pada Terminal Selector.

5. Dengan menggunakan software SerialNG Basic Demo, lihat data serial yang

diterima oleh komputer.

Konfigurasi port serial pada SerialNG Basic Demo adalah sebagai

berikut :

- Port : COM1

- Baudrate : 19200 bps

- Parity : NONE

- Flowcontrol : NONE

- Databit : 8 bit

- Stop bit : 1 bit

4.2.4 Hasil Pengujian

Hasil dari pengujian ini adalah sesuai dengan program pada prosedur

pengujian. Data yang dikirimkan tiap 2 detik dari Terminal akan diteruskan ke

komputer oleh Terminal Selector.

Page 127: 76460173-WaroengSMS

111

Tabel 4.2 Hasil pengiriman data

Data dari Terminal Data yang diterima komputer

Durasi Ket

Karakter 0xF0 Karakter 0xF0 < 1 detik Sesuai Karakter 0xF1 Karakter 0xF1 < 1 detik Sesuai Karakter 0xF2 Karakter 0xF2 < 1 detik Sesuai Karakter 0xAE Karakter 0xAE < 1 detik Sesuai

Huruf ’A’ Huruf ’A’ < 1 detik Sesuai Kalimat

’ABCDEFGHIJKLMNOP’Kalimat

’ABCDEFGHIJKLMNOP’< 1 detik Sesuai

Pembacaan sinyal data TTL pada Terminal dan Terminal Selector

dimulai dari sebelah kiri berurutan mulai start bit (low), 8 bit data mulai LSB

sampai MSB kemudian ditutup stop bit (high).

Gambar-gambar sinyal data pada Terminal dan Terminal Selector didapat

dengan konfigurasi Osiloskop sebagai berikut :

Voltage Scale : 2,00 volt

Coupling : DC

Time/Div : 5,0 µs

A. Sinyal Data Karakter 0xF0

Sinyal data 0xF0 yang dikirimkan oleh Terminal dapat diteruskan ke

komputer oleh Terminal Selector. Hal ini sesuai dengan Gambar 4.6, Gambar 4.7

dan Gambar 4.8.

Page 128: 76460173-WaroengSMS

112

V

t

Gambar 4.6 Sinyal data 0xF0 yang dikirim oleh Terminal

V

t

Gambar 4.7 Sinyal data 0xF0 yang diterima oleh Terminal Selector

Gambar 4.8 Data 0xF0 yang diterima oleh komputer

Page 129: 76460173-WaroengSMS

113

B. Sinyal Data Karakter 0xF1

Sinyal data 0xF1 yang dikirimkan oleh Terminal dapat diteruskan ke

komputer oleh Terminal Selector. Hal ini sesuai dengan Gambar 4.9, Gambar 4.10

dan Gambar 4.11.

V

t

Gambar 4.9 Sinyal data 0xF1 yang dikirim oleh Terminal

V

t

Gambar 4.10 Sinyal data 0xF1 yang diterima oleh Terminal Selector

Page 130: 76460173-WaroengSMS

114

Gambar 4.11 Data 0xF1 yang diterima oleh komputer

C. Sinyal Data Karakter 0xF2

Sinyal data 0xF2 yang dikirimkan oleh Terminal dapat diteruskan ke

komputer oleh Terminal Selector. Hal ini sesuai dengan Gambar 4.12, Gambar

4.13 dan Gambar 4.14.

V

t

Gambar 4.12 Sinyal data 0xF2 yang dikirim oleh Terminal

Page 131: 76460173-WaroengSMS

115

V

t

Gambar 4.13 Sinyal data 0xF2 yang diterima oleh Terminal Selector

Gambar 4.14 Data 0xF2 yang diterima oleh komputer

D. Sinyal Data Karakter 0xAE

Sinyal data 0xAE yang dikirimkan oleh Terminal dapat diteruskan ke

komputer oleh Terminal Selector. Hal ini sesuai dengan Gambar 4.15, Gambar

4.16 dan Gambar 4.17.

Page 132: 76460173-WaroengSMS

116

V

t

Gambar 4.15 Sinyal data 0xAE yang dikirim oleh Terminal

V

t

Gambar 4.16 Sinyal data 0xAE yang diterima oleh Terminal Selector

Gambar 4.17 Data 0xAE yang diterima oleh komputer

Page 133: 76460173-WaroengSMS

117

E. Sinyal Data Kalimat ’ABCDEFGHIJKLMNOP’

Karena data yang dikirimkan dari Terminal sangat banyak, maka penulis

tidak mengambil sinyal data pada Terminal dan Terminal Selector. Sehingga

untuk mengetahui keberhasilan pengiriman data, dapat dilihat langsung di

komputer.

Gambar 4.18 Data kalimat ’ABCDEFGHIJKLMNOP’ yang diterima oleh komputer

F. Pengiriman SMS

Sebelum dilakukan pengiriman SMS, komputer akan menerima data

SMS yang akan dikirim dari Terminal. Pada Tabel 4.3 merupakan hasil uji coba

penerimaan data pada komputer.

Page 134: 76460173-WaroengSMS

118

Tabel 4.3 Uji coba penerimaan data SMS dari Terminal pada Komputer

Terminal Asal (secara acak)

Isi SMS Nomor Tujuan Status di

Komputer1 Daftar 4444 Diterima 3 Daftar 4444 Diterima 2 Daftar 4444 Diterima 3 Ubah 4444 Diterima 2 Ya.. Forward aja.. Kl km

mo pake, pake aja. Tulis no asalny ya?

4444 Diterima

1 Uji coba Terminal 1 08563033808 Diterima 2 Uji coba Terminal 2 081703355558 Diterima 1 Uji coba Terminal 1 08133444404 Diterima 1 Coba lagi ahh… 123456 Diterima 3 Uda ah, capek nih.. 0318494454 Diterima

Karena waktu yang diperlukan untuk menerima status report yang

diberikan oleh SMS Center tiap provider selular berbeda-beda, maka setelah

pengiriman SMS diberikan waktu selama 10 detik untuk menunggu status report.

Jika dalam waktu tersebut tidak terdapat status report maka SMS yang dikirim

dianggap Tertunda.

Tabel 4.3 terdapat beberapa contoh pengiriman SMS ke berbagai nomor

tujuan. Dalam hal ini pengiriman SMS menggunakan nomor kartu 081703355558

(proXL). Isi SMS berupa kalimat ”ABCDEFGHIJKLMNOPQRSTUVWXYZ

abcdefghijklmnopqrstuvwxyz 1234567890”

Page 135: 76460173-WaroengSMS

119

Tabel 4.4 Pengiriman SMS ke beberapa nomor handphone

No Tujuan Waktu kirim Waktu terima (sesuai SMSC)

Status

081330997480 12:56:05 12:57:28 Terkirim 08563033808 13:00:42 13:01:43 Terkirim 085234585658 13:04:16 13:05:17 Terkirim 081931532107 13:07:46 13:08:47 Terkirim

4444 -- -- Tidak terkirim

G. Penerimaan SMS

Setelah menerima SMS baru dan apabila SMS tersebut akan dibaca oleh

user, maka isi SMS tersebut akan dikirimkan ke Terminal. Pada Tabel 4.5

merupakan hasil uji coba penerimaan data pada Terminal.

Tabel 4.5 Uji coba penerimaan data SMS dari Komputer pada Terminal

Terminal Tujuan

(secara acak)

Isi SMS Status di Terminal

2 Pesan utk Anda:Nomor 081703626398 dapat dihubungi kembali.

Diterima

3 Pesan utk Anda:Nomor 081703626398 dapat dihubungi kembali.

Diterima

1 Pesan utk Anda:Nomor 081703626398 dapat dihubungi kembali.

Diterima

2 Kartu Prabayar xl anda sudah terdaftar dengan Pin 31806339.Untuk perubahan data ketik UBAH ke

4444 atau datang ke xl center terdekat.Terima kasih

Diterima

2 Njajal maning soo..n Diterima 3 Selamat menempuh suasana hidup baru..

Ihtiar,tawakal,bersabarlah

Diterima

2 ABCDEFGHIJ Diterima 1 Boz HPmu ada SMS.mo diforward lagi ga? Diterima 1 Tes Terminal 1 Diterima 3 Tes Terminal 3 Diterima

Page 136: 76460173-WaroengSMS

120

4.3 Pengujian Program Billing

4.3.1 Tujuan

Dalam pengujian ini bertujuan untuk mengetahui apakah program Billing

dapat menerima data dari Terminal Selector, mengirim dan membaca SMS dari

handphone.

4.3.2 Alat yang Digunakan

1. Keyboard dan LCD yang sudah terhubung dengan Terminal.

2. Terminal Selector yang sudah terhubung dengan Terminal.

3. Seperangkat komputer yang sudah terhubung dengan HP dan Terminal

Selector.

4. Catu daya +12 volt.

4.3.3 Prosedur Pengujian

1. Hubungkan Terminal Selector dan komputer melalui port COM2.

2. Hubungkan handphone dan komputer melalui port COM1.

3. Download program lengkap masing-masing Terminal dan Terminal Selector.

4. Pastikan komputer sudah terkoneksi dengan handphone, yaitu dengan meng-

klik tombol REFRESH pada program Billing sampai status koneksi dalam

keadaan OK.

4.3.4 Hasil Pengujian

Program Billing akan menerima data dari Terminal Selector dan

menampilkannya melalui Status bar. Setelah data diterima, header data tersebut

Page 137: 76460173-WaroengSMS

121

diidentifikasi untuk ditampilkan pada kolom Terminal kemudian dikirimkan

sebagai SMS.

Gambar 4.19 Program Billing menerima data dari Terminal Selector

Setiap SMS yang dikirim akan disimpan dalam form Outbox. Untuk

menampilkan form tersebut yaitu dengan meng-klik tab Cek – Outbox.

Page 138: 76460173-WaroengSMS

122

Gambar 4.20 Program Billing menyimpan SMS yang dikirim

Apabila ingin mengetahui ada atau tidaknya SMS baru dan

menyimpannya pada program, dapat meng-klik tab Cek – Inbox kemudian meng-

klik tombol Cek SMS Baru.

Gambar 4.21 Program Billing menyimpan SMS baru

Page 139: 76460173-WaroengSMS

BAB V

PENUTUP

5.1 Kesimpulan

Setelah melakukan penelitian ini, penulis mengambil kesimpulan sebagai

berikut :

1. Dengan menggunakan baudrate yang semakin tinggi, maka transmisi data

serial semakin cepat. Tetapi apabila digunakan untuk jarak yang cukup jauh,

kemungkinan hilangnya data (data looses) semakin besar.

2. Setelah mengirimkan data serial dari mikrokontroler harus diberikan waktu

tunda selama kurang lebih 10 ms sebelum menjalankan instruksi selanjutnya.

Hal ini bertujuan agar mikrokontroler benar-benar selesai dalam mengirimkan

data.

3. Sebelum mengirimkan data serial dari perangkat satu ke perangkat lain,

diperlukan pengiriman data ijin untuk mengirimkan data kemudian data akan

dikirim setelah menerima keadaan siap dari perangkat tujuan.

4. Untuk mengakses RAM dan LCD secara bergantian diperlukan waktu tunda

bagi mikrokontroler untuk menulis atau membaca data ke RAM dan waktu

tunda setelah menulis pada LCD. Hal ini dilakukan karena kedua perangkat

tersebut sama-sama diakses melalui address dan data sehingga hilangnya data

yang ditransmisikan dapat dihindari.

5. Durasi waktu yang dibutuhkan untuk mendapatkan status report dari SMS yang

telah dikirim tergantung dari respon SMS Center provider selular yang

digunakan.

123

Page 140: 76460173-WaroengSMS

124

5.2 Saran

Sebagai pengembangan dari penelitian yang telah dilakukan, penulis

memberikan saran sebagai berikut :

1. Jika jarak transmisi data yang ditempuh cukup jauh dan jumlah data yang

dikirim sangat banyak, sebaiknya komunikasi serial yang digunakan

menggunakan baudrate yang kecil.

2. Apabila transmisi data serial tidak dapat menggunakan RS232 dikarenakan

jarak tempuh yang sangat jauh, maka transmisi data serial dapat menggunakan

RS485.

3. Dengan tipe RAM yang sama tetapi merk yang berbeda akan memiliki waktu

akses yang berbeda. Sebaiknya sebelum memilih RAM, teliti dahulu waktu

akses yang diperlukan melalui datasheet yang diberikan.

4. Dalam penelitian ini jika dilakukan pengiriman SMS lebih dari 160 karakter,

maka handphone tujuan akan menerima SMS secara terpisah sesuai dengan

jumlah karakter dalam setiap pengiriman. Sehingga diperlukan header

tambahan apabila ingin menggabungkan beberapa SMS tersebut.

5. Setelah didukung oleh perangkat hasil pnelitian penulis yang mampu mengirim

SMS dengan cepat dan dapat digunakan untuk umum, maka perlu adanya

kerjasama dengan provider selular untuk diberikannya jalur prioritas dalam

pengiriman SMS.

Page 141: 76460173-WaroengSMS

DAFTAR PUSTAKA

Agus, L. 2003. Belajar Sendiri Mengolah Database dengan Borland Delphi 7. Jakarta : PT Elex Media Komputindo.

ATMEL Corporation. 2005. 8-bit Microcontroller with 8K Bytes In-System

Programmable Flash AT89S52. (Online). (http://www.atmel.com, diakses 12 Mei 2006)

Brey, B. B. 2002. Mikroprosesor Intel : 8086/8088, 80186/80188, 80286, 80386, 80486, Pentium, dan Pentium pro : Arsitektur, Pemrograman Antarmuka Edisi kelima Jilid I. Jakarta : Erlangga.

Divisi Penelitian. 2002. Pemrograman Borland Delphi 7 Lengkap dengan Contoh Aplikasi ( jilid 1). Yogyakarta : ANDI.

EL-TECH ELECTRONICS. --. LCD MODULE USER MANUAL. Surabaya : EL-

TECH ELECTRONICS.

FAIRCHILD SEMICONDUCTOR. 2001. FAIRCHILD SEMICONDUCTOR DM74LS373 DM74LS374 3-STATE Octal D-Type Transparent Latches and Edge-Triggered Flip-Flops. (Online). (http://www.fairchildsemi.com, diakses 16 Januari 2004).

FAIRCHILD SEMICONDUCTOR. 2002. CD4051BC CD4052BC CD4053BC Single 8-Channel Analog Multiplexer/Demultiplexer Dual 4-Channel Analog Multiplexer/Demultiplexer Triple 2-Channel Analog Multiplexer/Demultiplexer. (Online). (http://www.fairchildsemi.com, diakses 14 April 2005).

Gunawan, F. 2003. Membuat Aplikasi SMS Gateway Server dan Client dengan Java dan PHP. Jakarta : PT Elex Media Komputindo.

Hartono, J. 2002. Konsep Dasar Pemrograman Bahasa C. Yogyakarta : ANDI. Intersil. 1997. Intersil ICL232. (Online). (http://www.intersil.com, diakses 19

November 2004).

125

Page 142: 76460173-WaroengSMS

126

Kellerek. 2000. Manual Reference AT Command Set for the SIEMENS Mobile Phone S35i, C35i, M35i. (Online). (http://www.siemens.com, diakses 21 Juli 2006).

Khan, M. A. 2004. Asim’s ISP Loader 89Sxxxx. (Online). (http://www.kmitl.ac.th/~kswichit/cheapcable/index.html, diakses 21 Juli 2006).

Khang, B. 2003. Trik Pemrograman Aplikasi Berbasis SMS. Jakarta : PT Elex

Media Komputindo.

Maria, A. 2000. AT Command Set for Nokia GSM Products. (Online). (http:// www.dipol.com.ua/NOKIA_AT-help.pdf, diakses 21 Juli 2006).

Mazidi, M.A. 2000. The 8051 MICROCONTROLLER & Embedded System. New

Jersey : Printice Hall.

MOTOROLA. --. MOTOROLA 1 OF 8 DECODER/DEMULTIPLEXER. (Online). (http://ece-www.colorado.edu/~mcclurel/sn74ls138rev5.pdf, diakses 21 Juli 2006).

Nalwan, P. A. 2003. Panduan Praktis Teknik Antarmuka dan Pemrograman Mikrokontroler AT89C51. Jakarta : PT Elex Media Komputindo.

National Semiconductor. 1996. National Semiconductor DM74LS573 Octal D Latch with TRI-STATE Outputs. (Online). (http:// wolverine.caltech.edu/datashet/74LS573.pdf, diakses 21 Juli 2006).

Noname. 2006. LCD Interfacing Reference Page. (Online).

(http://www.myke.com/44780LCD.htm, diakses 11 Mei 2006).

Peacock, C. 1998. Interfacing the Serial / RS232 Port.V5.0. (Online). (http://www.beyondlogic.org/serial/serial.pdf, diakses 21 Juli 2006).

Pettersson, L. SMS And PDU Format. (Online). (http://www.dreamfabric.com/sms, diakses 5 Maret 2006).

Page 143: 76460173-WaroengSMS

127

Putra, A. E. 2002. Belajar Mikrokontroler AT89C51/52/55 Teori dan Aplikasi. Yogyakarta : Gava Media.

Sutanto, B. 2000. Keyboard IBM PC. (Online). (http://alds.stts.edu, diakses 12

April 2002). Tim Penelitian. 2005. Pengembangan Aplikasi Sistem Informasi Akademik

Berbasis SMS dengan JAVA. Semarang : Wahana Komputer.

Page 144: 76460173-WaroengSMS

128

Lampiran 1 : Rangkaian Skematik Terminal

U2 6116

A08

A17

A26

A35

A44

A53

A62

A71

A823

A922

A10

19

CE18

OE20

WE

21

D09

D110

D211

D313

D414

D515

D616

D717VCC24 VSS 12

U1 AT89

S52

RST

9

XTAL

218

XTAL

119

GND 20

PSEN

29

ALE/

PROG

30

EA/VPP31

VCC40P1

.01

P1.1

2

P1.2

3

P1.3

4

P1.4

5

P1.5

/MOS

I6

P1.6

/MIS

O7

P1.7

/SCK

8

P2.0

/A8

21P2

.1/A

922

P2.2

/A10

23P2

.3/A

1124

P2.4

/A12

25P2

.5/A

1326

P2.6

/A14

27P2

.7/A

1528

P3.0

/RXD

10

P3.1

/TXD

11

P3.2

/INTO

12

P3.3

/INT1

13

P3.4

/TO

14

P3.5

/T1

15

P3.6

/WR

16

P3.7

/RD

17

P0.0

/AD0

39

P0.1

/AD1

38

P0.2

/AD2

37

P0.3

/AD3

36

P0.4

/AD4

35

P0.5

/AD5

34

P0.6

/AD6

33

P0.7

/AD7

32

U3 74LS

573

OE1

GND

10LE

11

VCC

20

1Q19

2Q18

3Q17

4Q16

5Q15

6Q14

7Q13

8Q12

1D2

2D3

3D4

4D5

5D6

6D7

7D8

8D9

A10

A8A9AD2

AD0

AD5

AD3

AD7

AD1

AD6

AD4

TR

A1A0 A5A4 A7

Y1

11.5

092

Mhz

C5

0,1u

F

C233

pF

C133

pF

J1LC

D

2 4 6 8 10 12 14 16

1 3 5 7 9 11 13 15

C6 0,1

uF

R4 1k1

3

2

D21N

4002

5 v

5 v

5 v

A6

AD0

J3 RJ45

1 2 3 4 5 6 7 8

Rx T

erm

inal

Tx T

erm

inal

12v

AD1

U5 LM78

05VI

1

GND 2

VO3

5 v

VDD

12v

AD2

C12

2200

uF/2

5vC1

310

0uF/

25v

AD3

C10 10u/

16v

AD4

5 v

AD5

U4 MAX2

32

R1IN

13

R2IN

8

T1IN

11

T2IN

10

C+1

C1-

3

C2+

4

C2-

5

V+2

V-6

R1OU

T12

R2OU

T9

T1OU

T14

T2OU

T7

VCC16 GND 15

R/W

VSS

C810

u/16

v

Tx

VEE

AD6

C11

10u/

16v

C310

u/16

v

Rx

AD7

5 v

D3 LED

A2 A3

AD0

D0AD

2D2

C

R5 R Pa

ck 1

0k1

2 3 4 5 6 7 8 9

AD4

D4AD

6D6

WR

LCD

EAD

1D1

AD3

D3AD

5D5

AD7

D7

A0RS

U6A

74LS

02

2 31

14 7

5 v

U8 74LS

138

A1

B2

C3

G16

G2A

4

G2B

5

Y015

Y114

Y213

Y312

Y411

Y510

Y69

Y77

VCC16

GND

8

A15

5 v

A14

A13

C9

10uF

/16v

RAM

Kbd_

clk

LCD

Kbd_

data

SW1

rese

t

5 v

R2 10k

A15

A14

Title

Size

Docu

men

t Num

ber

Rev

Date

:Sh

eet

of

<Doc

><R

evCo

de>

Term

inal

Cust

om

11

Frida

y, J

uly 2

8, 2

006

5 v

C4 10uF

/16v

C7

0,1u

F

R327

0

A13

5 v

JS2

PS2

12

34

56

R1 100

Kbd_

data

Kbd_

clk

A6A2 A4A3A0 A5A1 A7 A10

A8 A9AD

5AD

4

AD6

AD1

AD7

AD0

AD3

AD2

RESE

T

RESE

T

J2

down

loade

r

1 2 3 4 5 6

MOSI

TR

Tx

RESE

TSC

KMI

SO

Rx

ALE

ALE

5 v

R6 4k7

5 v

MOSI

SCK

MISO

WR

WR

RD

RDRAM

AD1

AD0

AD3

AD2

AD4

AD7

AD5

AD6

Page 145: 76460173-WaroengSMS

129

Lampiran 2 : Rangkaian Skematik Terminal Selektor

U2

6116

A0

8

A1

7

A2

6

A3

5

A4

4

A5

3

A6

2

A7

1

A8

23

A9

22

A10

19

CE

18

OE

20

WE

21

D0

9

D1

10

D2

11

D3

13

D4

14

D5

15

D6

16

D7

17

VC

C24

VS

S12

U3

74LS

573

OE

1

GN

D10

LE11

VC

C20

1Q19

2Q18

3Q17

4Q16

5Q15

6Q14

7Q13

8Q12

1D2

2D3

3D4

4D5

5D6

6D7

7D8

8D9

C16

10u/

16v

A B C

C13

10u/

16v

C15 10

u/16

vU

5

MA

X232

R1I

N13

R2I

N8

T1IN

11

T2IN

10

C+

1

C1-

3

C2+

4

C2-

5

V+

2

V-

6

R1O

UT

12

R2O

UT

9

T1O

UT

14

T2O

UT

7

VCC16

GND15

5 v

C14

10u/

16v

T2_T

x

T2_R

x

T3_T

x

T3_R

x

Tx T

erm

inal

2

Rx

Term

inal

2

Tx T

erm

inal

3

Rx

Term

inal

3

A B C

J5 RJ4

5_T3

1 2 3 4 5 6 7 8J4 RJ4

5_T2

1 2 3 4 5 6 7 8

12 v

A1

A4

A5

A7

Y1

11.5

092

Mhz

C1

33 p

F

C2

33 p

F

C5

0,1u

F

C6

0,1

uF

J6 CO

NN

Pow

er

1 2

WR

12 v

A6

TR

A B C

5 v

5 v

C7

0,1u

F

C8 0,

1uF

En_

DeM

ux

En_

Mux

En_

Mux

En_

DeM

uxR

x Tx

A2

A3

T2_R

xT3

_Rx

PC

_Rx

T1_R

x

AD

1A

D2

AD

0

AD

3

AD

5A

D4

AD

6

C

R5

R P

ack

10k

123456789

AD

7

5 v

T1_T

xT2

_Tx

T3_T

x

PC

_Tx

5 v

RD

WR

RD

SW

1

12 v

U9

4051

Mux

X013

X114

X215

X312

X41

X55

X62

X74

INH

6

A11

B10

C9

X3

VDD16

VS

S8

VE

E7

U10

4051

DeM

ux

X013

X114

X215

X312

X41

X55

X62

X74

INH

6

A11

B10

C9

X3

VDD16

VS

S8

VE

E7

R2

10k C

1610

u/16

v

C15 10

u/16

vC

1310

u/16

v

5 v

U5

MA

X232

R1I

N13

R2I

N8

T1IN

11

T2IN

10

C+

1

C1-

3

C2+

4

C2-

5

V+

2

V-

6

R1O

UT

12

R2O

UT

9

T1O

UT

14

T2O

UT

7

VCC16

GND15

5 v

C14

10u/

16v

C3

10uF

/16v

T2_T

x

T3_R

x

T3_T

x

T2_R

x

Tx T

erm

inal

2

C4

0,1u

F

Tx T

erm

inal

3

Rx

Term

inal

2

Rx

Term

inal

3

J4 RJ4

5_T2

1 2 3 4 5 6 7 8 J5 RJ4

5_T3

1 2 3 4 5 6 7 8

12 v

12 v

RE

SE

T

RE

SE

T

R1

100

A6

A4

A3

A2

A5

A7

A0

A1

A8

A10

A9

AD

4A

D5

AD

6A

D7

AD

1A

D0

AD

3A

D2

RE

SE

T

J1 FA

N

1 2 3

AD

0

C19

10uF

/16v

D1

LED

AD

1

R3 270

J2 dow

nloa

der

1 2 3 4 5 6

U6

LM78

05

VI

1

GND2

VO

3

AD

2

TR MO

SI

5 v

Tx

MIS

OS

CK

12 v

AD

3

Rx

ALE

C17

2200

uF/2

5vC

1810

0uF

/25v

AD

4

5 v

U1

AT8

9S52

RS

T9

XTA

L218

XTA

L119

GND20

PS

EN

29

ALE

/PR

OG

30

EA/VPP31

VCC40

P1.

01

P1.

12

P1.

23

P1.

34

P1.

45

P1.

5/M

OS

I6

P1.

6/M

ISO

7

P1.

7/S

CK

8

P2.

0/A

821

P2.

1/A

922

P2.

2/A

1023

P2.

3/A

1124

P2.

4/A

1225

P2.

5/A

1326

P2.

6/A

1427

P2.

7/A

1528

P3.

0/R

XD10

P3.

1/TX

D11

P3.

2/IN

TO12

P3.

3/IN

T113

P3.

4/TO

14

P3.

5/T1

15

P3.

6/W

R16

P3.

7/R

D17

P0.

0/A

D0

39

P0.

1/A

D1

38

P0.

2/A

D2

37

P0.

3/A

D3

36

P0.

4/A

D4

35

P0.

5/A

D5

34

P0.

6/A

D6

33

P0.

7/A

D7

32

AD

5

R6

4k7

5 v

AD

6A

D7

ALE

MO

SI

SC

KM

ISO

A10

A9

A8

A0

AD

0A

D1

AD

4

AD

2A

D3

AD

7

AD

5A

D6

Page 146: 76460173-WaroengSMS

130

Lampiran 3 : Listing Program Terminal #include <reg52.h> #include <stdio.h> at 0x0E000 xdata unsigned char LCD_C; // XDATA -> external data address at 0x0E001 xdata unsigned char LCD_D; at 0x0C000 xdata unsigned char RAM[650]; //uda cukup buat nampumg maks 627 karakter // CODE u/ nyimpen di ROM. alamatnya t'serah. unsigned -> biar ga ada tanda min /*at 0x500*/ code unsigned char tabel_scan[128] = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, '`', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 'q', '1', 0x00, 0x00, 0x00, 'z', 's', 'a', 'w', '2', 0x00, 0x00, 'c', 'x', 'd', 'e', '4', '3', 0x00, 0x00, ' ', 'v', 'f', 't', 'r', '5', 0x00, 0x00, 'n', 'b', 'h', 'g', 'y', '6', 0x00, 0x00, 0x00, 'm', 'j', 'u', '7', '8', 0x00, 0x00, ',', 'k', 'i', 'o', '0', '9', 0x00, 0x00, '.', '/', 'l', ';', 'p', '-', 0x00, 0x00, 0x00, 0x27, 0x00, '[', '=', 0x00, 0x00, 0x00, 0x00, ' ', ']', 0x00, 0x5C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, '1', 0x00, '4', '7', 0x00, 0x00, 0x00, '0', '.', '2', '5', '6', '8', 0x1B, 0x00, 0x00, '+', '3', '-', '*', '9', 0x00, 0x00; code unsigned char tabel_scan2[96] = 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, '~', 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 'Q', '!', 0x00, 0x00, 0x00, 'Z', 'S', 'A', 'W', '@', 0x00, 0x00, 'C', 'X', 'D', 'E', '$', '#', 0x00, 0x00, ' ', 'V', 'F', 'T', 'R', '%', 0x00, 0x00, 'N', 'B', 'H', 'G', 'Y', '^', 0x00, 0x00, 0x00, 'M', 'J', 'U', '&', '*', 0x00, 0x00, '<', 'K', 'I', 'O', ')', '(', 0x00, 0x00, '>', '?', 'L', ':', 'P', '_', 0x00, 0x00, 0x00, '"', 0x00, '', '+', 0x00, 0x00, 0x00, 0x00, ' ', '', 0x00, '|', 0x00, 0x00; code unsigned char str_notjan[14] = "Nomor Tujuan :"; code unsigned char SMS_msk[16] = "SMS segera masuk"; code unsigned char str_notjan2[16] = "F1=Send ESC=Back"; code unsigned char psn[13] = "Please Wait.."; code unsigned char sukses[12] = "SMS Terkirim"; code unsigned char tunda[12] = "SMS Tertunda"; code unsigned char T_id[4] = 0xF1, 'T', '1', 0xF2; //jgn lupa ubah jg baris 173 sbit Kdata = P1^0; sbit Kclk = P1^1; sbit B7 = B^7; bit shift, start, panah, caps, metu, save; unsigned char tem_kur, tem_ind, kursor, index_LCD, s_code, s_code2, aceka; unsigned int i, index_RAM, tem_RAM, char_akir, baris, tem_brs, got, dig1, dig2, dig3, sisa, total, sarah; void lama(int suwi); void LCD_init(); void Serial_init(); void Interrupt_init(); //void Send_char(unsigned char w); void Tekan_tombol(); void ganti_lyr(); void ganti_brs(); void data_RAM(); void clrscr(); void tampil_jum(); void ketik_nomor(); void tulis_char(unsigned char kode); void reset_lyr(); void Receive_char(); void main()

Page 147: 76460173-WaroengSMS

131

TMOD = 0x21; lama(50); //Timer1 8 bit auto reload, Timer0 16 bit LCD_init(); Serial_init(); Interrupt_init(); reset_lyr(); aceka = 0; save = 0; while(1) tampil_jum(); shift = 0; do Tekan_tombol(); if (s_code == 0x12 || s_code == 0x59) //cek tombol shift shift = 1; while (s_code == 0 || s_code == 0x12 || s_code == 0x59 || s_code == 0xF0); //jk hbs nekan shift ki/ka ato lepas tombol, ulang lg ///////////////////////////////////////////////////////////////////////////////// if (s_code == 0x06 && char_akir == 0) //Press F2 LCD_C = 0x01; lama(3); LCD_C = 0xC0; lama(3); for (i = 0; i < 16; i++) LCD_D = SMS_msk[i]; lama(3); do Receive_char(); while(aceka != '4'); //tunggu ijin kirim data lama(5); printf(")"); lama(2); //beri ijin terima data save = 1; do Receive_char(); while(aceka != '«'); //mulai terima data sampe tanda tutup save = 0; clrscr(); index_RAM = 0; baris = 0; char_akir--; //char_akir-1, biar tanda tutup data ga ikut disimpan for (i=0; i<char_akir; i++) LCD_D = RAM [i]; lama(3); index_LCD++; kursor++; index_RAM++; if (index_RAM%16 == 0) baris++; ganti_brs(); if (kursor == 0xA0) //jk brs 3 penuh,mk pindah brs 4 lama(1000); clrscr(); ///////////////////////////////////////////////////////////////////////////////// else if (s_code == 0x05) //Press F1 index_RAM = char_akir; RAM [index_RAM] = 0xF0; lama(3);//tanda akir isi sms index_RAM++; ketik_nomor(); do metu = 0; do Tekan_tombol();

Page 148: 76460173-WaroengSMS

132

while (s_code == 0 || s_code == 0xF0); if ((s_code == 0x66) && kursor > 0xC1) //Press BACKSPACE kursor --; index_RAM--; LCD_C = kursor; lama(1); LCD_D = 0xA0; lama(1); LCD_C = kursor; lama(1); else if ((s_code == 0x16 ||s_code == 0x1E ||s_code == 0x26 ||s_code == 0x25 ||s_code == 0x2E ||s_code == 0x36 ||s_code == 0x3D ||s_code == 0x3E ||s_code == 0x46 ||s_code == 0x45) && kursor < 0xCF) LCD_D = tabel_scan[s_code]; lama(3); RAM [index_RAM] = tabel_scan[s_code]; lama(3); kursor++; index_RAM++; else if (s_code == 0x05 || s_code == 0x76) metu = 1; while(!metu); if (s_code == 0x05) //Press F1 for (i=0; i<4; i++) //tanda akir no.tujuan + identitas terminal RAM [index_RAM] = T_id[i]; lama(3); index_RAM++; //-- klo nambah checksum disini --// RAM [index_RAM] = total + 0x30; lama(3); index_RAM++; RAM [index_RAM] = 0xAE; lama(3); index_RAM++; //stop bit paket data («) LCD_C = 0x01; lama(3); LCD_C = 0xC1; lama(3); for (i = 0; i < 13; i++) LCD_D = psn[i]; lama(3); // tunggu ijin kirim data aceka = '0'; do printf("1"); lama(3); Receive_char(); while(aceka != ')'); lama(3); //-- mulai kirim paket data --// for (i=0; i<index_RAM; i++) printf("%c", RAM [i]); lama(3); //Send_char(RAM [i]); lama(1); // tunggu status SMS aceka = '0'; do Receive_char(); while(aceka != 'D' && aceka != 'P'); LCD_C = 0x01; lama(3); LCD_C = 0xC1; lama(3); if (aceka == 'D') for (i = 0; i < 12; i++) LCD_D = sukses[i]; lama(3);

Page 149: 76460173-WaroengSMS

133

else if (aceka == 'P') for (i = 0; i < 12; i++) LCD_D = tunda[i]; lama(3); lama(5000); reset_lyr(); else if (s_code == 0x76) //Press ESC clrscr(); index_RAM = 0; baris = 0; for (i=0; i<char_akir; i++) LCD_D = RAM [i]; lama(3); index_LCD++; kursor++; index_RAM++; if (index_RAM%16 == 0) baris++; ganti_brs(); if (kursor == 0xA0) //jk brs 3 penuh,mk pindah brs 4 lama(1000); clrscr(); ///////////////////////////////////////////////////////////////////////////////// else if (s_code == 0x58) //Press capslock tem_kur = kursor; if (!caps) caps = 1; LCD_C = 0xD7; lama(3); LCD_D = 'c'; lama(3); LCD_D = 'a'; lama(3); LCD_D = 'p'; lama(3); LCD_D = 's'; lama(3); else caps = 0; LCD_C = 0xD7; lama(3); LCD_D = ' '; lama(3); LCD_D = ' '; lama(3); LCD_D = ' '; lama(3); LCD_D = ' '; lama(3); LCD_C = kursor; lama(3); ///////////////////////////////////////////////////////////////////////////////// else if (s_code2 == 0xA2) //Press Right arrow if (index_RAM < char_akir) //jk uda sampe akir karakter ga boleh ke kanan lg kursor++; index_RAM++; index_LCD++; if (index_RAM%16 == 0) baris++; ganti_brs(); ganti_lyr(); LCD_C = kursor; lama(3); panah = 1; lama(3); ///////////////////////////////////////////////////////////////////////////////// else if (s_code2 == 0x5A) //Press Left arrow if (baris != 0 || kursor != 0x80) //jk nyampe brs 1 kolom 1 ga boleh ke kiri lg if (kursor == 0x80) //jk nyampe baris 1 pd LCD, hrs ganti clrscr(); baris --; index_RAM = baris * 16; data_RAM();

Page 150: 76460173-WaroengSMS

134

LCD_C = kursor; lama(3); else kursor --; index_RAM --; index_LCD --; if (index_RAM%16 == 15) baris--; if (kursor == 0x8F) //awal baris 3 - 1 hrs ke akhir baris 2 kursor = 0xCF; if (kursor == 0xBF) //awal baris 2 - 1 hrs ke akhir baris 1 kursor = 0x8F; LCD_C = kursor; lama(3); panah = 1; lama(3); ///////////////////////////////////////////////////////////////////////////////// else if (s_code2 == 0xAA && s_code != 0x15) //Press Up arrow tem_brs = kursor & 0x80; if (baris != 0 && tem_brs == 0x80) //panah atas dipake kalo kursor di baris 1 pd LCD clrscr(); baris --; index_RAM = baris * 16; data_RAM(); LCD_C = kursor; lama(3); panah = 1; lama(3); ///////////////////////////////////////////////////////////////////////////////// else if (s_code2 == 0x92 && s_code != 0x32) //Press Down arrow got = ((baris + 2) * 16) - 1; /*tem_brs = kursor & 0xC0; if (tem_brs == 0xC0) //jika brs 2 ke brs 3 if (char_akir >= got) index_RAM = got; baris++; index_LCD = 47; kursor = 0x9F; LCD_C = kursor; lama(5); tem_brs = kursor & 0x80; if (tem_brs == 0x80) //jika brs 1 ke brs 2 if (char_akir >= got) index_RAM = got; baris++; index_LCD = 31; kursor = 0xCF; LCD_C = kursor; lama(5); */ tem_brs = kursor & 0x90; if (tem_brs == 0x90) ////panah atas dipake kalo kursor di baris 3 pd LCD if (char_akir >= got) baris++; index_RAM = baris * 16; clrscr(); data_RAM(); panah = 1; lama(3); /////////////////////////////////////////////////////////////////////////////////

Page 151: 76460173-WaroengSMS

135

else if (s_code == 0x66) //Press BACKSPACE if (baris != 0 || kursor != 0x80) if (kursor == 0x80) clrscr(); baris --; index_RAM = baris * 16; char_akir--; data_RAM(); LCD_C = kursor; lama(1); LCD_D = 0xA0; lama(1); LCD_C = kursor; lama(1); for (i=index_RAM; i<char_akir; i++) RAM[i] = RAM[i+1]; lama(3); else kursor--; index_RAM--; index_LCD--; char_akir--; if (index_RAM%16 == 15) baris--; if (kursor == 0x8F) //awal baris 3 - 1 hrs ke akhir baris 2 kursor = 0xCF; if (kursor == 0xBF) //awal baris 2 - 1 hrs ke akhir baris 1 kursor = 0x8F; LCD_C = kursor; lama(1); LCD_D = 0xA0; lama(1); LCD_C = kursor; lama(1); for (i=index_RAM; i<char_akir; i++) RAM[i] = RAM[i+1]; lama(3); tem_kur = kursor; tem_ind = index_LCD; tem_brs = baris; tem_RAM = index_RAM; data_RAM(); kursor = tem_kur; index_LCD = tem_ind; baris = tem_brs; index_RAM = tem_RAM; ganti_lyr(); LCD_C = kursor; lama(3); lama(3); ///////////////////////////////////////////////////////////////////////////////// /*else if (s_code == 0x5A) //Press ENTER clrscr(); index_RAM = 0; baris = 0; for (i=0; i<char_akir; i++) LCD_D = RAM [i]; lama(5); //printf("%c", RAM [i]); lama(1); //Send_char(RAM [i]); lama(1); index_LCD++; kursor++; index_RAM++; if (index_RAM%16 == 0) baris++; ganti_brs(); if (kursor == 0xA0) //jk brs 3 penuh,mk pindah brs 4 lama(1000); clrscr(); */ ///////////////////////////////////////////////////////////////////////////////// else if ((shift == 1 || caps == 1) && char_akir < 609) //Press SHIFT + character, maks isi sms = 608 karakter tulis_char(tabel_scan2 [s_code]);

Page 152: 76460173-WaroengSMS

136

else if ((shift == 0)&& char_akir < 609) //Press character, maks isi sms = 608 karakter if (!panah) //agar panah dilepas ga ngeluarin huruf tulis_char(tabel_scan [s_code]); else panah = 0; lama (7); void Receive_char() //interrupt 4 using 1 //interrupt serial dijalankan pake BANK 1 if (RI) aceka = SBUF; if (save) RAM [index_RAM] = aceka; index_RAM++; char_akir++; RI = 0; void tulis_char(unsigned char kode) if (index_RAM == char_akir) //penulisan karakter pd index paling akhir LCD_D = kode; lama(3); RAM [index_RAM] = kode; lama(3); index_RAM++; index_LCD++; kursor++; char_akir++; if (index_RAM%16 == 0) baris ++; ganti_brs(); ganti_lyr(); else if (index_RAM < char_akir) //penulisan karakter selain pd index paling akhir (tengah2 kalimat) for (i=char_akir; i>index_RAM; i--) RAM[i] = RAM[i-1]; lama(3); LCD_D = kode; lama(3); RAM [index_RAM] = kode; lama(3); index_RAM++; index_LCD++; kursor++; char_akir++; if (index_RAM%16 == 0) baris ++; ganti_brs(); tem_kur = kursor; tem_ind = index_LCD; tem_brs = baris; tem_RAM = index_RAM; data_RAM(); kursor = tem_kur; index_LCD = tem_ind; baris = tem_brs; index_RAM = tem_RAM; ganti_lyr(); LCD_C = kursor; lama(3); lama(5); void data_RAM() for (i=index_RAM; i<char_akir && index_LCD<48; i++) LCD_D = RAM [i]; lama(3); kursor++; index_LCD++; index_RAM++; if (index_LCD < 48) if (index_RAM%16 == 0) baris++; ganti_brs();

Page 153: 76460173-WaroengSMS

137

if (index_LCD == 48) index_LCD = 47; kursor = 0x9F; LCD_C = kursor; lama(3); index_RAM--; void ganti_brs() if (kursor == 0x90) //jk brs 1 penuh,mk pindah brs 2 LCD_C = 0xC0; lama(3); kursor = 0xC0; else if (kursor == 0xD0) //jk brs 2 penuh,mk pindah brs 3 LCD_C = 0x90; lama (3); kursor = 0x90; void ganti_lyr() if (kursor == 0xA0) //jk brs 3 penuh,mk pindah brs 4 clrscr(); baris = baris - 2; index_RAM = baris * 16; data_RAM(); void clrscr() LCD_C = 0x01; lama(3); LCD_C = 0xD0; lama(3); LCD_D = 'F'; lama(3); LCD_D = '1'; lama(3); LCD_D = '='; lama(3); LCD_D = 'S'; lama(3); LCD_D = 'e'; lama(3); LCD_D = 'n'; lama(3); LCD_D = 'd'; lama(3); LCD_C = 0x80; lama(3); kursor = 0x80; index_LCD = 0; void reset_lyr() clrscr(); index_RAM = 0; s_code = 0; s_code2 = 0; char_akir = 0; baris = 0; panah = 0; caps = 0; total = 1; RI = 0; void Tekan_tombol() B = 0x00; //definisi u/ tpt scancode while (Kclk); while (!Kclk); start = Kdata; // ambil start bit if (!start) // jika start bit = 0, brarti data scancode bs diambil for (i=0; i<8; i++) //ambil 8 bit pertama while (Kclk); while (!Kclk); B = B >> 1; B7 = Kdata; s_code = B; B = 0; for (i=0; i<8; i++) //ambil 8 bit kedua while (Kclk); while (!Kclk); B = B >> 1; B7 = Kdata; s_code2 = B; lama(5); void tampil_jum()

Page 154: 76460173-WaroengSMS

138

dig1 = char_akir / 100; sisa = char_akir % 100; dig2 = sisa / 10; dig3 = sisa % 10; //jum pengiriman tiap total karakter = 160, 304, 456, 608 if (char_akir <= 160) total = 1; else if (char_akir > 160 && char_akir <= 304) total = 2; else if (char_akir > 304 && char_akir <= 456) total = 3; else if (char_akir > 456 && char_akir <= 608) total = 4; tem_kur = kursor; LCD_C = 0xDB; lama(3); LCD_D = dig1 + 0x30; lama(5); LCD_D = dig2 + 0x30; lama(3); LCD_D = dig3 + 0x30; lama(3); LCD_D = '/'; lama(3); LCD_D = total + 0x30; lama(3); kursor = tem_kur; LCD_C = kursor; lama(3); void ketik_nomor() LCD_C = 0x01; lama(5); LCD_C = 0x81; lama(5); for (i = 0; i < 14; i++) LCD_D = str_notjan[i]; lama(3); LCD_C = 0xD0; lama(5); for (i = 0; i < 16; i++) LCD_D = str_notjan2[i]; lama(3); kursor = 0xC1; LCD_C = kursor; lama(3); void lama (int suwi) //waktu tunda 1 ms unsigned int w; for (w=1; w<=suwi; w++) TH0 = 0xFC; TL0 = 0x18; TR0 = 1; while (!TF0); TR0 = 0; TF0 = 0; void LCD_init() LCD_C = 0x01; lama (3); //Clear LCD_C = 0x38; lama (3); //Function Set LCD_C = 0x0F; lama (3); //Display On/Off LCD_C = 0x06; lama (15); //Entry Mode //LCD_C = 0x18; lama (5); //Cursor/display shift /* Baris 1 = 0x80, baris 2 = 0xC0, baris 3 = 0x90, baris 4 = 0xD0 */ void Serial_init() SCON = 0x50; //serial mode 1, REN = 1(Rx enable) PCON = 0x80; //baudrate 19200 pake mode 1, klo yg 9600 pake mode 0 TH1 = 0xFD; //baudrate 9600 bps ato 19200 bps TR1 = 1; TI = 1; //TI = 1; hrs ditulis kalo kita pake printf(); lama(10); void Interrupt_init()

Page 155: 76460173-WaroengSMS

139

IE = 0x90; //interrupt enable (EA) = 1, interrupt serial (ES) = 1; IP = 0x10; //interrupt serial priority (PS) = 1; /*void Send_char(unsigned char w) //fungsi ini alternatif dr printf(); TI = 0; SBUF = w; while(!TI); */

Page 156: 76460173-WaroengSMS

140

Lampiran 4 : Listing Program Terminal Selector #include <reg52.h> #include <stdio.h> at 0x00000 xdata unsigned char RAM_luar[650]; //uda cukup buat 627 karakter sbit aa = P1^0; sbit bb = P1^1; sbit cc = P1^2; sbit En_Demux = P1^3; sbit En_Mux = P1^4; bit save; unsigned int i, index_RAM; unsigned char id_T, bypass; void lama(unsigned int suwi); void Serial_init(); void Interrupt_init(); void Send_char(unsigned char w); void set_kirim(); void set_terima(); void kirim_SMS(); void main() TMOD = 0x21; lama(5); //Timer1 16 bit auto reload, Timer0 16 bit Interrupt_init(); Serial_init(); save = 0; index_RAM = 0; bypass= 0; while(1) //---------------------------------------------------------------------// PC set_terima(); cc = 0; bb = 0; aa = 0; //Pilih PC lama (3); if (bypass == '0') set_kirim(); printf(")"); //tanda balas siap terima data lama(1); set_terima(); save = 1; while(bypass != '«'); //data yg masuk langsung disimpan ke RAM luar (liat void Receive_char()). 0xAE = stop bit dr Terminal save = 0; lama(3); id_T = RAM_luar[0]; if (id_T == '1') cc = 0; bb = 0; aa = 1; //Pilih T1 else if (id_T == '2') cc = 0; bb = 1; aa = 0; //Pilih T2 else if (id_T == '3') cc = 0; bb = 1; aa = 1; //Pilih T3 else break; set_kirim(); printf("4");lama(2); //kirim ijin mo ngirim SMS ke Terminal set_terima(); bypass = 0; while(bypass != ')'); //tunggu sampe Terminal siap

Page 157: 76460173-WaroengSMS

141

lama(5); set_kirim(); for (i=1; i<index_RAM; i++) printf("%c",RAM_luar[i]);//Send_char(RAM[i]); lama(3); index_RAM = 0; bypass = 0; //---------------------------------------------------------------------// T1 set_terima(); cc = 0; bb = 0; aa = 1; //Pilih T1 lama (3); if (bypass == '1') kirim_SMS(); cc = 0; bb = 0; aa = 0; //Pilih PC, u/ nrima status SMS set_terima(); while(bypass != 'D' && bypass != 'P'); cc = 0; bb = 0; aa = 1; //Pilih T1 set_kirim(); printf("%c", bypass); lama(3); //---------------------------------------------------------------------// T2 set_terima(); cc = 0; bb = 1; aa = 0; //Pilih T2 lama (3); if (bypass == '2') kirim_SMS(); cc = 0; bb = 0; aa = 0; //Pilih PC, u/ nrima status SMS set_terima(); while(bypass != 'D' && bypass != 'P'); cc = 0; bb = 1; aa = 0; //Pilih T2 set_kirim(); printf("%c", bypass); lama(3); //---------------------------------------------------------------------// T3 set_terima(); cc = 0; bb = 1; aa = 1; //Pilih T3 lama(3); if (bypass == '3') kirim_SMS(); cc = 0; bb = 0; aa = 0; //Pilih PC, u/ nrima status SMS set_terima(); while(bypass != 'D' && bypass != 'P'); cc = 0; bb = 1; aa = 1; //Pilih T3 set_kirim(); printf("%c", bypass); lama(3); //---------------------------------------------------------------------// void set_terima() En_Mux = 1; En_Demux = 0; //terima data (enable-nya active low) void set_kirim() En_Mux = 0; En_Demux = 1; //kirim data (enable-nya active low)

Page 158: 76460173-WaroengSMS

142

void lama (unsigned int suwi) //waktu tunda 1 ms unsigned int w; for (w=1; w<=suwi; w++) TH0 = 0xFC; TL0 = 0x18; TR0 = 1; while (!TF0); TR0 = 0; TF0 = 0; void Serial_init() SCON = 0x50; //serial mode 1, REN = 1(Rx enable) PCON = 0x80; //baudrate 19200 pake mode 1, klo yg 9600 pake mode 0 TH1 = 0xFD; //baudrate 9600 bps ato 19200 bps TR1 = 1; TI = 1; //TI = 1; hrs ditulis kalo kita pake printf(); lama(10); void Interrupt_init() IE = 0x90; //interrupt enable (EA) = 1, interrupt serial (ES) = 1; IP = 0x10; //interrupt serial priority (PS) = 1; void Send_char(unsigned char w) //fungsi ini jika dipake, sbg pengganti printf(); TI = 0; SBUF = w; while(!TI); void kirim_SMS() set_kirim(); printf(")"); //tanda balas siap terima data lama(1); set_terima(); save = 1; while(bypass != 0xAE); //data yg masuk langsung disimpan ke RAM luar (liat void Receive_char()). 0xAE = stop bit dr Terminal save = 0; cc = 0; bb = 0; aa = 0; //Pilih PC, u/ pengiriman data set_kirim(); for (i=0; i<index_RAM; i++) printf("%c",RAM_luar[i]);//Send_char(RAM[i]); lama(1); index_RAM = 0; bypass = 0; void Receive_char() interrupt 4 using 1//interrupt serial dijalankan pake BANK 1 if (RI) bypass = SBUF; if (save) RAM_luar[index_RAM] = bypass; index_RAM++; RI = 0;

Page 159: 76460173-WaroengSMS

143

Lampiran 5 : Listing Program Billing Komputer

- Form Utama unit FUtama; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls, ComCtrls, Menus, OleCtrls, MSCommLib_TLB, SerialNG, XPMan; type TFdepan = class(TForm) GroupBox1: TGroupBox; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label5: TLabel; report1: TLabel; LNo_tuj1: TLabel; LWaktu1: TLabel; LPj1: TLabel; Label12: TLabel; Label13: TLabel; LNoTrans1: TLabel; Label15: TLabel; LByr1: TLabel; Label17: TLabel; View1: TCheckBox; GroupBox2: TGroupBox; Label18: TLabel; LNoTrans2: TLabel; Label20: TLabel; LNo_tuj2: TLabel; Label26: TLabel; Label28: TLabel; LWaktu2: TLabel; LPj2: TLabel; Label34: TLabel; Label36: TLabel; report2: TLabel; Label40: TLabel; LByr2: TLabel; Label44: TLabel; View2: TCheckBox; GroupBox3: TGroupBox; Label21: TLabel; Label22: TLabel; LNoTrans3: TLabel; LNo_tuj3: TLabel; Label27: TLabel; Label29: TLabel; LWaktu3: TLabel; LPj3: TLabel; Label35: TLabel; Label37: TLabel; report3: TLabel; Label41: TLabel; LByr3: TLabel; Label45: TLabel; View3: TCheckBox; GroupBox4: TGroupBox; Image2: TImage; Label7: TLabel; Label8: TLabel; Label9: TLabel; Image3: TImage; GroupBox5: TGroupBox; Label46: TLabel; Label47: TLabel; Label48: TLabel;

Page 160: 76460173-WaroengSMS

144

LKondisi: TLabel; BBRefresh: TBitBtn; MainMenu1: TMainMenu; Setting1: TMenuItem; Port1: TMenuItem; Serial1: TMSComm; Label50: TLabel; LSmsc: TLabel; LSimcard: TLabel; Label49: TLabel; batteray: TProgressBar; signal: TProgressBar; Serial2: TSerialPortNG; IsiSMS1: TMemo; IsiSMS2: TMemo; IsiSMS3: TMemo; XPManifest1: TXPManifest; delay_cekreport: TTimer; Cek1: TMenuItem; Inbox1: TMenuItem; HslCetak: TRichEdit; GroupBox6: TGroupBox; IsiSMSUC: TMemo; Label4: TLabel; TerTuj: TLabel; BKirim: TBitBtn; CheckBox4: TCheckBox; delay_ijin: TTimer; Bcekpulsa: TButton; GroupBox7: TGroupBox; RECekpulsa: TRichEdit; arif1: TMenuItem; Outbox1: TMenuItem; StatusBar1: TStatusBar; Image5: TImage; kedip: TTimer; Laporan1: TMenuItem; ransaksi1: TMenuItem; CB1: TCheckBox; CB2: TCheckBox; CB3: TCheckBox; function HexToDec(huruf:String):integer; function PDUencoder(kal:String):String; function PDUdecoder(kal:String):String; function no_tuj2PDU (nomer : String) : String; procedure Ngirim(); procedure cek_report(); procedure Cetak_Bon (iden, stadus : String); procedure Port1Click(Sender: TObject); procedure BBRefreshClick(Sender: TObject); procedure arif1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure View1Click(Sender: TObject); procedure View2Click(Sender: TObject); procedure View3Click(Sender: TObject); procedure Serial2RxClusterEvent(Sender: TObject); procedure FormActivate(Sender: TObject); procedure delay_cekreportTimer(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Inbox1Click(Sender: TObject); procedure CheckBox4Click(Sender: TObject); procedure BKirimClick(Sender: TObject); procedure delay_ijinTimer(Sender: TObject); procedure BcekpulsaClick(Sender: TObject); procedure Outbox1Click(Sender: TObject); procedure kedipTimer(Sender: TObject); procedure ransaksi1Click(Sender: TObject); private Private declarations public Public declarations end; var

Page 161: 76460173-WaroengSMS

145

Fdepan: TFdepan; dbyr, pjg_SMS, tarip, byr, noTrans : Integer; p : ShortInt; c_pulsa, waktu, id, no_tuj, tot, samp, smsc : String; SMSUC, PDUqrim, PDU, data_in, teks_sms : WideString; lama : TDateTime; kdip, notsend : boolean; implementation uses DateUtils, FSetPort, formTarif, FormInbox, FormOutbox, FormTrans; $R *.dfm procedure TFdepan.Ngirim(); var m, n, v, q, r : Integer; sdhqrim, w : ShortInt; teksQrim : String; begin //data dari Terminal Selector hanya bs diproses stlh diterima stop bit if Pos(Char($AE), data_in) > 0 then begin StatusBar1.Panels[1].Text := data_in; q := Pos(Char($F0), data_in); teks_sms := copy(data_in, 1, q-1); r := Pos(Char($F1), data_in); no_tuj := copy (data_in, q+1, r-(q+1)); id := copy(data_in, r+1, 2); q := Pos(Char($F2), data_in); tot := copy(data_in, q+1, 1); pjg_SMS := length(teks_sms); if id = 'T1' then begin report1.Caption := 'Pending'; LByr1.Caption := '0'; LNoTrans1.Caption := IntToStr(noTrans); LPj1.Caption := IntToStr(pjg_SMS); IsiSMS1.Lines.Text := teks_sms; LNo_tuj1.Caption := no_tuj; waktu := DateTimeToStr(NOW); LWaktu1.Caption := waktu; Inc(noTrans); data_in := ''; end else if id = 'T2' then begin report2.Caption := 'Pending'; LByr2.Caption := '0'; LNoTrans2.Caption := IntToStr(noTrans); LPj2.Caption := IntToStr(pjg_SMS); IsiSMS2.Lines.Text := teks_sms; LNo_tuj2.Caption := no_tuj; waktu := DateTimeToStr(NOW); LWaktu2.Caption := waktu; Inc(noTrans); data_in := ''; end else if id = 'T3' then begin report3.Caption := 'Pending'; LByr3.Caption := '0'; LNoTrans3.Caption := IntToStr(noTrans); LPj3.Caption := IntToStr(pjg_SMS); IsiSMS3.Lines.Text := teks_sms; LNo_tuj3.Caption := no_tuj; waktu := DateTimeToStr(NOW); LWaktu3.Caption := waktu; Inc(noTrans); data_in := ''; end;

Page 162: 76460173-WaroengSMS

146

if smsc = '62818445009' then //proXL Jempol PDU := '07912618485400F9' else if smsc = '62855000000' then //IM3 PDU := '07912658050000F0' else if smsc = '62816124' then //Mentari PDU := '079126181642' else if smsc = '6281100000' then //Telkomsel PDU := '07912618010000F0'; n := length(PDU); //pjg SMSC PDU := PDU + '31'; //SMS type w/ REPORT STATUS PDU := PDU + '00'; //SMS Reference number PDU := PDU + no_tuj2PDU(no_tuj); PDU := PDU + '00'; //SMS form as SMS PDU := PDU + '00'; //7 bits Encoding Data I/O scheme PDU := PDU + 'FF'; //SMS expired time sdhqrim := 0; notsend := False; for w := 1 to StrToInt(tot) do begin if w = 1 then teksQrim := copy(teks_sms, 1, 160) else if w = 2 then teksQrim := copy(teks_sms, 161, 144) else if w >= 3 then teksQrim := copy(teks_sms, 305+((w-3)*152), 152); PDUqrim := PDU + PDUdecoder(teksQrim); m := length(PDUqrim); //pjg smua PDU v := (m - n) div 2; StatusBar1.Panels[1].Text := PDUqrim; if length(no_tuj) > 4 then begin Serial1.Output := 'AT+CMGS=' + IntToStr(v) + #13; //mulai kirim SMS samp := ''; repeat samp := samp + Serial1.Input; until (Pos('>', samp) > 0) or (Pos('ERROR', samp) > 0); end else begin MessageDlg('NOMOR TUJUAN BERBAHAYA !!', mtInformation, [mbYes], 0); samp := 'ERROR'; end; if (Pos('>', samp) > 0) then begin Serial1.Output := PDUqrim + #$1A; samp := ''; repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0) or (Pos('ERROR', samp) > 0); end; if (Pos('OK', samp) > 0) then Inc(sdhqrim) else if (Pos('ERROR', samp) > 0) then begin notsend := TRUE; //kirim status TERTUNDA ke Terminal Selector Serial2.SendString(Chr($50)); Break; end; end; dbyr := sdhqrim * tarip; if id = 'T1' then begin if notsend = TRUE then report1.Caption := 'NOT SENT' else begin LByr1.Caption := IntToStr(dbyr); p := 1; FOutbox.SimpanOutbox(no_tuj, waktu, IntToStr(pjg_SMS), teks_SMS); StatusBar1.Panels[0].Text := 'Tunggu Report..';

Page 163: 76460173-WaroengSMS

147

delay_cekreport.Enabled := True; end; end else if id = 'T2' then begin if notsend = TRUE then report2.Caption := 'NOT SENT' else begin LByr2.Caption := IntToStr(dbyr); p := 1; FOutbox.SimpanOutbox(no_tuj, waktu, IntToStr(pjg_SMS), teks_SMS); StatusBar1.Panels[0].Text := 'Tunggu Report..'; delay_cekreport.Enabled := True; end; end else if id = 'T3' then begin if notsend = TRUE then report3.Caption := 'NOT SENT' else begin LByr3.Caption := IntToStr(dbyr); p := 1; FOutbox.SimpanOutbox(no_tuj, waktu, IntToStr(pjg_SMS), teks_SMS); // simpan SMS StatusBar1.Panels[0].Text := 'Tunggu Report..'; delay_cekreport.Enabled := True; end; end; end; end; procedure TFdepan.cek_report(); var PD : boolean; r : ShortInt; pendel, q, stt, smsin : String; begin Serial1.Output := 'AT+CMGL=0'#13; //cek SMS baru lama := NOW; samp := ''; PD := False; repeat samp := samp + Serial1.Input; until (Pos(samp, 'OK') > 0) or (SecondsBetween(NOW, lama) > 3); if (Pos('+CMGL:', samp) > 0) then begin smsin := copy(samp, Pos('+CMGL:', samp), 70); //ambil PDU baris 2 samp := copy(smsin, Pos(Chr($0A), smsin)+1, 60); //ambil PDU baris 3 q := copy (samp, 2, 1); r := HexToDec(q); stt := copy (samp, (r*2)+3, 2); //ambil kode status stlh kode SMS center if stt = '06' then begin if id = 'T1' then report1.Caption := 'Delivered' else if id = 'T2' then report2.Caption := 'Delivered' else if id = 'T3' then report3.Caption := 'Delivered'; Serial2.SendString(Chr($44)); //kirim status TERKIRIM ke Terminal Selector pendel := 'TERKIRIM'; PD := True; StatusBar1.Panels[0].Text := ''; StatusBar1.Panels[1].Text := ''; end; p := 0; end; if (PD = False) Or (stt <> '06') then begin Serial2.SendString(Chr($50)); //kirim status TERTUNDA ke Terminal Selector pendel := 'TERTUNDA'; StatusBar1.Panels[0].Text := ''; StatusBar1.Panels[1].Text := ''; p := 0;

Page 164: 76460173-WaroengSMS

148

end; delay_cekreport.Enabled := False; //perintah ini jgn ditaruh dibwh sendiri if (id = 'T1') And (CB1.Checked = True)then Cetak_Bon('1', pendel) else if (id = 'T2') and (CB2.Checked = True) then Cetak_Bon('2', pendel) else if (id = 'T3') and (CB3.Checked = True) then Cetak_Bon('3', pendel); end; procedure TFdepan.Cetak_Bon(iden, stadus : String); begin HslCetak.Font.Name := 'Verdana'; HslCetak.Font.Size := 10; HslCetak.Lines.Clear; HslCetak.Lines.Add(' Waröeng SMS'+Chr(13)+Chr(10)); HslCetak.Lines.Add(' Terminal ' + iden); HslCetak.Lines.Add(' Tujuan'+Chr(9)+': ' + no_tuj); HslCetak.Lines.Add(' Waktu'+Chr(9)+': ' + waktu); HslCetak.Lines.Add(' Panjang'+Chr(9)+': ' + IntToStr(pjg_SMS)+' karakter'); HslCetak.Lines.Add(' Biaya'+Chr(9)+': Rp ' + IntToStr(dbyr)); HslCetak.Lines.Add(' Status'+Chr(9)+': '+stadus+Chr(13)+Chr(10)); HslCetak.Lines.Add(' [Bluebit]'); HslCetak.Print('c:\bon.txt'); //PASTIKAN FILE INI ADA DI DRIVE C: end; function TFdepan.HexToDec(huruf:String):integer; begin if huruf = 'A' then result := 10 else if huruf = 'B' then result := 11 else if huruf = 'C' then result := 12 else if huruf = 'D' then result := 13 else if huruf = 'E' then result := 14 else if huruf = 'F' then result := 15 else result := StrToInt(huruf); end; function TFdepan.PDUdecoder(kal:String):String; // created by IIK var ulang, temp, panjang, index, hexa : Integer; huruf_1, huruf_2, mask, masking : Integer; hasil : String; begin panjang := length(kal); hasil := ''; hasil := hasil + IntToHex(panjang, 2); ulang := 1; mask := 255; for index := 1 to panjang do begin if ulang = 1 then huruf_1 := ord(kal[index]) else huruf_1 := huruf_2; if ulang = 8 then ulang := 1 else begin huruf_2 := ord(kal[index+1]); masking := mask shr (8 - ulang); temp := huruf_2 and masking; temp := temp shl (8 - ulang); hexa := huruf_1 or temp; hasil := hasil + IntToHex(hexa, 2); huruf_2 := huruf_2 shr ulang; inc(ulang); end; end; result := hasil; end; function TFdepan.PDUencoder(kal:String):String; // created by IIK @ April, 29 12:34 am var

Page 165: 76460173-WaroengSMS

149

hsl, var_str : String; hsl_int, i, stat, sisa, index, mask, mask1, mask2, pjg_PDU, pjg_kal : Integer; int_akhir, putar, temp : Integer; begin mask := 255; hsl := ''; pjg_PDU := length(kal); //cek 2 bit ato 3 bit awal hexa pd PDU if pjg_PDU <= 452 then begin pjg_kal := 0; var_str := copy (kal, 1, 1); // ambil bit1 dr PDU pjg_kal := pjg_kal + (16 * HexToDec(var_str)); var_str := copy (kal, 2, 1); // ambil bit2 dr PDU pjg_kal := pjg_kal + HexToDec(var_str); stat := 2; // mencatat index awal kal end else begin pjg_kal := 0; var_str := copy (kal, 1, 1); // ambil bit1 dr PDU pjg_kal := pjg_kal + (256 * HexToDec(var_str)); var_str := copy (kal, 2, 1); // ambil bit2 dr PDU pjg_kal := pjg_kal + (16 * HexToDec(var_str)); var_str := copy (kal, 3, 1); // ambil bit3 dr PDU pjg_kal := pjg_kal + HexToDec(var_str); stat := 3; // mencatat index awal kal end; index := 1; putar := 1; temp := 0; for i := 1 to pjg_kal do begin if putar = 8 then begin putar := 1; temp := 0; sisa := 0; end else begin hsl_int := 0; var_str := copy (kal, stat + index, 1); hsl_int := hsl_int + (16 * HexToDec(var_str)); var_str := copy (kal, stat + index + 1, 1); hsl_int := hsl_int + HexToDec(var_str); mask1 := mask shl (8 - putar); sisa := hsl_int and mask1; sisa := sisa shr (8 - putar); mask2 := mask shr putar; int_akhir := hsl_int and mask2; int_akhir := int_akhir shl (putar - 1); int_akhir := int_akhir or temp; temp := sisa; hsl := hsl + chr(int_akhir); if putar = 7 then hsl := hsl + chr(sisa); index := index + 2; putar := putar + 1; end; end; result := hsl; end; function TFdepan.no_tuj2PDU (nomer : String) : String; var kmbali, help : String; q, i, j, k : ShortInt; s : Char; begin

Page 166: 76460173-WaroengSMS

150

q := length(nomer); kmbali := IntToHex(q, 2); help := copy(nomer, 1, 1); if help = '0' then kmbali := kmbali + '81' else kmbali := kmbali + '91'; //bolak-balik no_tujuan if q mod 2 = 1 then nomer := nomer + 'F'; q := length(nomer); j := q div 2; i := 1; for k := 1 to j do begin s := nomer [i]; nomer [i] := nomer [i+1]; nomer [i+1] := s; i := i + 2; end; kmbali := kmbali + nomer; Result := kmbali; end; procedure TFdepan.Port1Click(Sender: TObject); begin SetPort.Show; end; procedure TFdepan.BBRefreshClick(Sender: TObject); var aw, ak : ShortInt; begin if Serial1.PortOpen then Serial1.PortOpen := False; //Serial1.CommPort := SetPort.HPPort.ItemIndex + 1; //Serial1.Settings := SetPort.HPBaud.Text + ',n,8,1'; Serial1.PortOpen := True; //*** Status Koneksi **************************// lama := NOW; Serial1.Output := 'AT'#13; samp := ''; repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0) or (Pos('ERROR', samp) > 0) or (SecondsBetween(NOW, lama) > 3); if (Pos('OK', samp) > 0) then begin BBRefresh.Visible := True; kedip.Enabled := False; StatusBar1.Panels[1].Text := ''; StatusBar1.Panels[0].Text := ''; LKondisi.Caption := 'OK'; //*** Nomor SMSC ***************************// Serial1.Output := 'AT+CSCA?'#13; samp := ''; repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0)or (Pos('ERROR', samp) > 0); if (Pos('OK', samp) > 0) then begin aw := Pos('"+', samp) + 2; ak := Pos('",', samp); samp := copy(samp, aw , ak - aw); LSmsc.Caption := samp; smsc := samp; end; //*** Nama provider ***********************// Serial1.Output := 'AT+COPS?'#13; samp := '';

Page 167: 76460173-WaroengSMS

151

repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0)or (Pos('ERROR', samp) > 0); if (Pos('OK', samp) > 0) then begin aw := Pos(',"', samp) + 2; ak := Pos('"'+Char($0D), samp); samp := copy(samp, aw , ak - aw); LSimcard.Caption := samp; end; //*** Kapasitas battery ********************// Serial1.Output := 'AT+CBC'#13; samp := ''; repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0)or (Pos('ERROR', samp) > 0); if (Pos('OK', samp) > 0) then begin aw := Pos('0,', samp) + 2; samp := copy(samp, aw, (Pos('OK', samp) - aw) - 4); batteray.Position := StrToInt(samp); end; //*** Kualitas Sinyal *********************// Serial1.Output := 'AT+CSQ'#13; samp := ''; repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0)or (Pos('ERROR', samp) > 0); if (Pos('OK', samp) > 0) then begin aw := Pos(': ', samp) + 2; samp := copy(samp, aw , Pos(',', samp)-aw); signal.Position := StrToInt(samp) + 1; end; //******************************************// if LSimcard.Caption = 'IND TELKOMSEL' then //Telkomsel begin LSmsc.Caption := '6281100000'; smsc := '6281100000'; c_pulsa := 'ATD["*888#"];' end else if LSimcard.Caption = 'IND SATELINDOCEL' then //IM3 begin LSmsc.Caption := '62855000000'; smsc := '62855000000'; c_pulsa := 'ATD["*388#"];' end else if LSimcard.Caption = 'proXL' then //pro XL Jempol begin LSmsc.Caption := '62818445009'; smsc := '62818445009'; c_pulsa := 'ATD["*123#"];' end; else if LSimcard.Caption = 'IND SATELINDOCEL' then //Mentari begin LSmsc.Caption := '62816124'; smsc := '62816124'; c_pulsa := 'ATD[*555#];' end; Serial2.Active := True; end else if (Pos('ERROR', samp) > 0) then begin LKondisi.Caption := 'ERROR'; end; end;

Page 168: 76460173-WaroengSMS

152

procedure TFdepan.arif1Click(Sender: TObject); begin Tarif.Show; end; procedure TFdepan.FormCreate(Sender: TObject); begin noTrans := 1; data_in := ''; kdip := TRUE; kedip.Enabled := True; StatusBar1.Panels[1].Text := '== tekan REFRESH sekarang !! =='; end; procedure TFdepan.View1Click(Sender: TObject); begin if View1.Checked then IsiSMS1.Visible := True else IsiSMS1.Visible := False; end; procedure TFdepan.View2Click(Sender: TObject); begin if View2.Checked then IsiSMS2.Visible := True else IsiSMS2.Visible := False; end; procedure TFdepan.View3Click(Sender: TObject); begin if View3.Checked then IsiSMS3.Visible := True else IsiSMS3.Visible := False; end; procedure TFdepan.Serial2RxClusterEvent(Sender: TObject); begin data_in := data_in + Serial2.ReadNextClusterAsString; if Pos(data_in, ')') > 0 then begin delay_ijin.Enabled := False; BKirim.Enabled := True; data_in := ''; SMSUC := ''; end else Ngirim(); end; procedure TFdepan.FormActivate(Sender: TObject); begin tarip := StrToInt(Tarif.ETarif.Text); end; procedure TFdepan.delay_cekreportTimer(Sender: TObject); begin if p = 2 then //waktu tunggu cek report begin cek_report(); end; Inc(p); end; procedure TFdepan.FormClose(Sender: TObject; var Action: TCloseAction); begin if Serial1.PortOpen then Serial1.PortOpen := False; if Serial2.Active then Serial2.Active := False; end; procedure TFdepan.Inbox1Click(Sender: TObject); begin FInbox.Show; end; procedure TFdepan.CheckBox4Click(Sender: TObject); begin if CheckBox4.Checked then IsiSMSUC.Visible := True

Page 169: 76460173-WaroengSMS

153

else IsiSMSUC.Visible := False; end; procedure TFdepan.BKirimClick(Sender: TObject); begin SMSUC := TerTuj.Caption + IsiSMSUC.Text + '«'; Serial2.SendString(SMSUC); BKirim.Enabled := False; end; procedure TFdepan.delay_ijinTimer(Sender: TObject); begin Serial2.SendString('0'); end; procedure TFdepan.BcekpulsaClick(Sender: TObject); var pulsa : String; begin lama := NOW; Serial1.Output := c_pulsa + #13; //tekan CALL/YES/OK samp:=''; repeat samp := samp + Serial1.Input; until (Pos('OK', samp) > 0) or (Pos('ERROR', samp) > 0) or (SecondsBetween(NOW, lama) > 5); if (Pos('OK', samp) > 0) then begin pulsa := copy(samp, 16, Pos('OK',samp)-2); RECekpulsa.Text := pulsa; end else if (Pos('ERROR', samp) > 0) then MessageDlg('Network Failed !!', mtInformation, [mbYes], 0); Serial1.Output := 'AT+CHUP'#13; //tekan tutup telpon end; procedure TFdepan.Outbox1Click(Sender: TObject); begin FOutbox.Show; end; procedure TFdepan.kedipTimer(Sender: TObject); begin if (kdip = False) then begin BBRefresh.Visible := True; kdip := True; end else if (kdip = True) then begin BBRefresh.Visible := False; kdip := False; end; end; procedure TFdepan.ransaksi1Click(Sender: TObject); begin FTrans.Show; end; end.

- Form Inbox

unit FormInbox; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Grids, DBGrids, StdCtrls, ComCtrls, DBCtrls, Mask, ExtCtrls, DB, DBTables;

Page 170: 76460173-WaroengSMS

154

type TFInbox = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; dsInbox: TDataSource; DBNavigator1: TDBNavigator; DBEdit1: TDBEdit; DBEdit2: TDBEdit; DBEdit3: TDBEdit; DBRichEdit1: TDBRichEdit; DBGrid1: TDBGrid; tbInbox: TTable; Bceknewsms: TButton; Button2: TButton; Label5: TLabel; ComboBox1: TComboBox; Bkirimterminal: TButton; procedure UbahPDU2Text(var datasms, pengirim, tanggal, jam, isi: string); procedure Button2Click(Sender: TObject); procedure BceknewsmsClick(Sender: TObject); procedure BkirimterminalClick(Sender: TObject); private Private declarations public Public declarations end; var FInbox: TFInbox; implementation uses FUtama, DateUtils; $R *.dfm procedure TFInbox.UbahPDU2Text(var datasms, pengirim, tanggal, jam, isi: string); var pdu, smsc, tipe, bentuk, skema,batas: string; p,i: integer; begin pdu := datasms; smsc := ''; p := StrToInt('$' + copy(pdu, 1, 2)) - 1; pdu := copy(pdu,5,length(pdu)-4); for i := 1 to p do begin smsc := smsc + pdu[i*2]; smsc := smsc + pdu[i*2-1]; end; if smsc[length(smsc)] = 'F' then smsc := copy(smsc, 1, length(smsc) - 1); pdu := copy(pdu, p*2+1,length(pdu)-p*2); tipe := copy(pdu, 1, 2); if tipe = '06' then begin pengirim := 'SMS Center'; tanggal := '-'; jam := '-'; isi := 'SMS Report'; end else begin pdu := copy(pdu, 3, length(pdu)-2); pengirim := ''; p := StrToInt('$'+copy(pdu,1,2)); if p mod 2 = 1 then inc(p); pdu := copy(pdu,5,length(pdu)-4); for i := 1 to p div 2 do begin pengirim := pengirim + pdu[i*2]; pengirim := pengirim + pdu[i*2-1]; end;

Page 171: 76460173-WaroengSMS

155

if pengirim[length(pengirim)] = 'F' then pengirim := copy(pengirim, 1, length(pengirim) - 1); pdu := copy(pdu,p+1,length(pdu)-p); bentuk := copy(pdu,1,2); pdu := copy(pdu, 3, length(pdu)-2); skema := copy(pdu,1,2); pdu := copy(pdu, 3, length(pdu)-2); tanggal := pdu[6]+pdu[5] + '/' + pdu[4]+pdu[3] + '/' + pdu[2]+pdu[1]; jam := pdu[8]+pdu[7] + ':' + pdu[10]+pdu[9] + ':' + pdu[12]+pdu[11]; pdu := copy(pdu, 13, length(pdu)-12); batas := copy(pdu,1,2); pdu := copy(pdu, 3, length(pdu)-2); isi := Fdepan.PDUencoder(pdu); end; end; procedure TFInbox.Button2Click(Sender: TObject); begin Close; end; procedure TFInbox.BceknewsmsClick(Sender: TObject); var s, isi, tanggal, jam, pengirim : String; index_sms, samp : string; save_all : textfile; lama : TDateTime; begin Fdepan.Serial1.Output := 'AT+CMGL=0'#13; //cek SMS baru lama := NOW; samp := ''; repeat samp := samp + Fdepan.Serial1.Input; until (Pos('OK', samp) > 0) or (Pos('ERROR', samp) > 0) or (SecondsBetween(NOW, lama) > 180); if Pos('+CMGL:', samp) > 0 then //kalo ada SMS, langsung proses begin assignfile(save_all, 'SMS_in.txt'); rewrite(save_all); write(save_all, samp); closefile(save_all); reset(save_all); readln(save_all, samp); while (not EOF(save_all)) do begin readln(save_all, samp); if copy(samp, 1, 7) = '+CMGL: ' then begin index_sms := copy(samp, 8, pos(',', samp) - 8); readln(save_all, samp); UbahPDU2Text(samp, pengirim, tanggal, jam, isi); tbInbox.Append; tbInbox['Pengirim'] := pengirim; tbInbox['Tanggal'] := tanggal; tbInbox['Jam'] := jam; tbInbox['Isi SMS'] := isi; tbInbox.Post; Fdepan.Serial1.Output := 'AT+CMGD=' + index_SMS + #13; //hapus SMS lama := NOW; repeat s := Fdepan.Serial1.Input; until (Pos('OK', s) > 0) or (Pos('ERROR', s) > 0) or (SecondsBetween (NOW, lama) > 180);

Page 172: 76460173-WaroengSMS

156

end; end; closefile(save_all); end else MessageDlg('Ga ada SMS baru !', mtInformation, [mbYes], 0); end; procedure TFInbox.BkirimterminalClick(Sender: TObject); begin Fdepan.IsiSMSUC.Clear; Fdepan.TerTuj.Caption := ''; Fdepan.IsiSMSUC.Lines.Text := DBRichEdit1.Text; Fdepan.TerTuj.Caption := ComboBox1.Text; Fdepan.delay_ijin.Enabled := True; Close; end; end.

- Form Outbox unit FormOutbox; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, DBCtrls, DB, DBTables, Grids, DBGrids, StdCtrls, Mask, ComCtrls; type TFOutbox = class(TForm) dsOutbox: TDataSource; DBGrid1: TDBGrid; tbOutbox: TTable; DBNavigator1: TDBNavigator; Label1: TLabel; Label2: TLabel; DBEdit1: TDBEdit; DBEdit2: TDBEdit; Label3: TLabel; DBEdit3: TDBEdit; Label4: TLabel; Label5: TLabel; DBRichEdit1: TDBRichEdit; Button1: TButton; procedure SimpanOutbox (notuj, waktu, dhowo, isine : String); procedure Button1Click(Sender: TObject); private Private declarations public Public declarations end; var FOutbox: TFOutbox; implementation uses FUtama; $R *.dfm procedure TFOutbox.SimpanOutbox(notuj, waktu, dhowo, isine : String); begin tbOutbox.Append; tbOutbox['No_Tujuan'] := notuj; tbOutbox['Waktu'] := waktu; tbOutbox['Pjg_Isi'] := dhowo; tbOutbox['Isi_SMS'] := isine; tbOutbox.Post; end; procedure TFOutbox.Button1Click(Sender: TObject);

Page 173: 76460173-WaroengSMS

157

begin Close; end; end.

- Form Tarif unit formTarif; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TTarif = class(TForm) Label1: TLabel; ETarif: TEdit; Label2: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); private Private declarations public Public declarations end; var Tarif: TTarif; implementation uses FUtama; $R *.dfm procedure TTarif.Button1Click(Sender: TObject); begin tarip := StrToInt(ETarif.Text); Close; end; end.

- Form Transaksi

unit FormTrans; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TFTrans = class(TForm) Label1: TLabel; LJumTrans: TLabel; Label3: TLabel; Label4: TLabel; LPulsaOut: TLabel; Label6: TLabel; LIncome: TLabel; Label8: TLabel; LLaba: TLabel; Button1: TButton; procedure Button1Click(Sender: TObject); procedure FormActivate(Sender: TObject); private Private declarations

Page 174: 76460173-WaroengSMS

158

public Public declarations end; var FTrans: TFTrans; implementation uses FUtama, formTarif; $R *.dfm procedure TFTrans.Button1Click(Sender: TObject); begin Close; end; procedure TFTrans.FormActivate(Sender: TObject); var pulsa, income, laba : Integer; begin pulsa := (noTrans-1) * 350; income := (noTrans-1) * tarip; LJumTrans.Caption := IntToStr(noTrans-1); LPulsaOut.Caption := 'Rp ' + IntToStr(pulsa); LIncome.Caption := 'Rp ' + IntToStr(income); LLaba.Caption := 'Rp ' + IntToStr(income - pulsa); end; end.

Page 175: 76460173-WaroengSMS

159

Lampiran 6 : Petunjuk Penggunaan Alat

1. Hubungkan handphone SIEMENS C45, C35 atau M35 ke komputer pada port

COM1 dengan menggunakan kabel data handphone tersebut.

2. Hubungkan Terminal Selector dengan komputer pada port COM2 dengan

menggunakan kabel serial DB9 yang tersedia.

3. Hubungkan printer dengan komputer melalui port LPT1 atau USB kemudian

nyalakan.

4. Hubungkan Terminal 1 dengan Terminal Selector dengan menggunakan kabel

UTP yang berlabel TS1 dan T1.

Catatan : Sesuaikan label kabel TS1 dengan konektor yang berlabel TS1 pada

Terminal Selector dan label kabel T1 dengan konektor yang berlabel T1 pada

Terminal 1.

5. Lakukan langkah no. 4 pada Terminal 2 dengan menggunakan kabel UTP

berlabel TS2 dan T2.

6. Lakukan langkah no. 4 pada Terminal 3 dengan menggunakan kabel UTP

berlabel TS3 dan T3.

7. Hubungkan ketiga keyboard pada ketiga Terminal melalui konektor PS2.

8. Buat file kosong bernama bon.txt kemudian simpan di drive C:\

9. Jalankan program WarungSMS.exe di komputer. Akan tampil form utama

dengan tombol REFRESH berkedip. Klik tombol tersebut sampai status

koneksi dalam kondisi OK.

10. Hubungkan kabel power Terminal Selector pada sumber listrik AC dan lampu

tombol power akan menyala. Kemudian tekan tombol power tersebut dan

Page 176: 76460173-WaroengSMS

160

pastikan indikator power (LED biru) pada masing-masing Terminal dan

Terminal Selector menyala.

11. Pada tiap Terminal akan siap untuk mengirim dan menerima SMS

Langkah-langkah mengirim SMS ke Terminal

1. Pada Terminal tujuan yang kosong harus dalam keadaan siap menerima SMS,

yaitu dengan menekan tombol F2.

2. Buka form Inbox pada program WarungSMS melalui tab Cek-Inbox.

3. Klik tombol Cek SMS Baru jika ingin menampilkan SMS baru.

4. Jika SMS yang akan dikirim ke Terminal terdapat dalam daftar, maka pilih

SMS tersebut kemudian pilih Terminal tujuan kemudian klik tombol Upload.

5. Tunggu tombol Kirim pada form utama menjadi aktif kemudian klik tombol

tersebut dan SMS akan terkirim ke Terminal tujuan.

Page 177: 76460173-WaroengSMS

161

Lampiran 7

BIODATA PENULIS

Nama : Ihyauddin

Kelahiran : Kediri, 19 Juni 1984

Alamat : Jl. Wonocolo Pabrik Kulit 3/15

Surabaya 60237

No telepon : 031-8494454

0856 303 3808

E-mail : [email protected]

Riwayat pendidikan :

1. SD Muhammadiyah 6 Surabaya, lulus tahun 1996.

2. SMP Negeri 12 Surabaya, lulus tahun 1999.

3. SMA Muhammadiyah 1 Yogyakarta, lulus tahun 2002.

4. Sekolah Tinggi Manajemen Informatika & Teknik Komputer Surabaya

(STIKOM), mengikuti ujian Tugas Akhir pada periode Agustus 2006.