Keaslian Penelitian
Skripsi ini berjudul Perancangan Pengendalian Peralatan Lampu Listrik Jarak Jauh Menggunakan Telepon Seluler, dimana pengendalian lampu listrik menggunakan fasilitas SMS (Short Message Service) pada telepon seluler. Alat ini juga diharapkan dapat memantau keadaan peralatan lampu listrik apakah dalam keadaan hidup atau mati. Merk telepon seluler yang digunakan adalah jenis Siemens M35. Sistem yang digunakan adalah sistem komunikasi serial antara telepon seluler Siemens M35 dengan mikrokontroler AT89S51. Mikrokontroler sebagai pengendali dan pemantau keadaan peralatan lampu listrik.
Diagram Kotak Perangkat Keras
Sistem kendali lampu dengan media SMS ini, dirancang berdasarkan berbasis mikrokontroler AT89S51. Gambar 3.1 menunjukkan blok diagram dari alat ini.

Pada Gambar 3.1 ditunjukkan diagram kotak sistem secara keseluruhan. HP Siemens M35 digunakan sebagai Gateway SMS. HP dengan mikrokontroler terhubung dengan menggunakan kabel data yang memanfaatkan komunikasi serial RS232. Jenis komunikasi yang digunakan adalah model UART.
Mikrokontroler mempunyai peran sebagai basis sistem. Mikrokontroler akan membaca dan berkomunikasi dengan HP, kemudian mengendalikan lampu dengan bantuan driver relai, serta membaca sensor yang telah dilewatkan sebuah komparator.
Driver dipasang bertujuan untuk mengendalikan lampu yang bekerja pada tegangan AC/220V. Hal ini mutlak diperlukan karena mikrokontroler hanya bekerja pada level tegangan TTL dan CMOS, sehingga tidak mampu secara langsung mengendalikan lampu.
Sensor yang berupa fototransistor digunakan untuk mengubah kondisi cahaya ke dalam besaran listrik. Agar sensor yang bersifat analog mampu dibaca oleh mikrokontroler yang bersifat digital sehingga perlu dipasang sebuah komparator. Komparator ini bertugas untuk membandingkan kondisi sensor yang masuk ke pin (+) op-amp dengan tegangan referensi pada pin (-) op-amp ketika gelap atau terang dan mengubahnya menjadi logika digital pada pin output-nya. Sedangkan gerbang not 74LS14 yang mempunyai kemampuan trigger pulsa masukan dan pada data sheet keluaran dari IC ini sudah standar TTL sehingga dapat langsung dihubungkan dengan mikrokontroler. Gerbang not 74LS14 juga digunakan untuk membalik keadaan tegangan input sehingga pada saat input high maka keluarannya akan bernilai low.
Mikrokontroler
Mikrokontroler merupakan komponen utama yang mengendalikan seluruh sistem. Mikrokontroler yang digunakan pada penelitian ini adalah mikrokontroler keluaran Atmel dengan seri AT89S51. Seri ini merupakan varian baru dari keluarga AT89C51 yang mengelami perubahan prosedur pengisian program. Pada seri ini memiliki fasilitas ISP (In Sistem Programming) yang tidak dimiliki pada seri sebelumnya. Fasilitas ini memungkinkan pengubahan isi program walaupun sistem sedang berjalan.
Untuk bekerja dengan mikrokontroler ini diperlukan beberapa komponen tambahan yang sering disebut dengan sistem minimum. Syarat-syarat tersebut antara lain, sistem clock atau osilator, sistem reset dan sistem ISP. Pada penelitian ini sistem minimum disajikan pada Gambar 3.2.

Pada Gambar 3.2 disajikan skema rangkaian minimum mikrokontroler AT89S51/52. Sistem pendukung yang pertama yaitu sistem osilator yang terdiri dari x-tal senilai 11,0592 MHz dan dua buah kapasitor senilai 33pF. Nilai 11,0592MHz dipilih dengan pertimbangan untuk menghasilkan nilai baud rate yang tidak terjadi error.



Komunikasi mikrokontroler dan HP
Untuk berkomunikasi antara mikrokontroler dan HP diperlukan fasilitas komunikasi serial dengan model UART dengan kecepatan 19200bps untuk jenis HP Siemens M35. Kecepatan ini akan bervariasi tergantung dari jenis HP yang digunakan. Level tegangan yang digunakan adalah RS232. Sementara itu mikrokontroler hanya menyediakan fasilitas komunikasi serial UART dengan pin TX, dan Rx dengan level tegangan RS232. Untuk itu diperlukan sebuah sistem adapter yang mampu mengubah level tegangan TTL ke level RS232.
Pada HP Siemens M35 terdapat konektor untuk berkomunikasi dengan piranti luar. Biasanya konektor ini mampu diakses dengan kabel data serial. Umumnya kabel data sudah dilengkapi dengan konverter RS232 untuk itu mikrokontroler memerlukan piranti tambahan yaitu modul konverter dari TTL ke RS232. Pada Gambar 3.3 disajikan skema rangkaian komunikasi serial RS232.

Untuk memenuhi standar komunikasi RS232 diperlukan IC konverter MAX232. IC ini diproduksi oleh Maxim dallas semiconductor. Pada IC ini sudah dilengkapi dengan sistem adapter RS232 sehingga tinggal menghubungkan pin T1IN dengan pin TXD dari mikrokontroler pada P3.1, dan menghubungkan pin R1IN dengan pin RXD dari mikrokontroler pada P3.0.
Pada bagian HP sebelum masuk ke terminal harus dikonversi dulu ke level tegangan yang mampu diakses oleh Hand Phone. Umumnya pengkonversian ini sudah otomatis dilakukan oleh kabel data dari Hand Phone tersebut. Model koneksi kabel data untuk HP Siemens M35 di gambarkan pada Gambar 3.4.

Pada Gambar 3.4 disajikan model koneksi kabel data yang kompatibel dengan PC. Pada Gambar 3.5 disajikan koneksi pada HP Siemens M35. Pada konektor ini terdapat 2 pin sebagai jalur komunikasi. Pada koneksi Hand Phone Siemens M35, pin-pin yang ada harus dihubungkan sesuai dengan fungsi terminal masing-masing. Adapun fungsi masing-masing terminal disajikan pada tabel 3.1

Tabel 3.1. Fungsi terminal HP Siemens M35
No Nama Fungsi In/Out
1 GND Ground
2 SELF SERVICE Recognition / Battery Charger In/Out
3 LOAD Charging Voltage In
4 BATTERY Battery Out
5 DATA OUT Data Send Out
6 DATA IN Data Receive In
7 Z_CLK Recognition / Control Accesoris
8 Z_DATA Recognition / Control Accesoris
9 MICG Ground for Microphone In
10 MIC Microphone input
11 AUD Loudspeaker output Out
12 AUDG Ground for Loudspeaker
Sensor dan Komparator
Pada sistem aplikasi SMS untuk kendali lampu ini bersifat close loop. Untuk itu perlu dipasang sensor cahaya untuk memantau cahaya yang dihasilkan oleh lampu. Selain itu juga sensor cahaya juga akan memberikan interupsi atau sinyal pemberitahuan ke mikrokontroler.
Sensor ini menggunakan komponen utama fototransistor. Fototransistor adalah komponen peka cahaya yang bekerja sebagaimana transistor bekerja. Keluaran fototransistor dikuatkan oleh penguat pembanding atau yang biasa disebut sebagai komparator. Keluaran komparator dimasukkan ke sebuah masukan schmitt trigger sebelum diakses ke mikrokontroler. Maksud dari pemasangan schmitt trigger adalah, agar level tegangan keluarannya sesuai dengan level tegangan TTL. Gambar 3.6 disajikan gambar sensor cahaya.

Cara kerja dari rangkaian ini adalah jika terkena cahaya maka fototransistor akan tertutup atau bertahanan kecil. Sehingga pada kaki komparator input non inverting akan bernilai rendah atau lebih rendah dari tegangan input inverting. Sehingga tegangan keluaran komparator akan rendah. Kemudian tegangan ini akan dibalik menjadi logika tinggi oleh inverting schmitt trigger 74LS14 sehingga akan menjadi logika 1. Jika tidak terkena cahaya maka nilai tahanan fototransistor akan tinggi, atau transistor hubung buka. Sehingga nilai input inverting akan lebih tinggi dari input non inverting. Hal ini akan menyebabkan keluaran komparator tinggi dan kemudian dibalik oleh schmitt trigger 74LS14 menjadi rendah.
Jadi pada saat terkena cahaya, ouput sensor akan tinggi, dan jika tidak terkena cahaya output sensor akan rendah. Potensiometer R2 berfungsi untuk mengatur besar tegangan pembanding atau tegangan referensi.

Driver Relai

Mikrokontroler mampu mengeluarkan tegangan 0V dan 5V. Namun dalam kenyataannya tegangan ini tidak bisa digunakan secara langsung untuk menggerakkan beban. Hal ini disebabkan karena arus yang mampu dilewatkan oleh kaki-kaki mikrokontroler sangat kecil. Untuk itu perlu dipasang piranti yang mampu menguatkan arus, sehingga dapat digunakan untuk menggerakkan beban. Piranti ini biasa disebut dengan driver.
Rangkaian driver biasanya terdiri dari transistor-transistor daya. Mikrokontroler ini digunakan untuk menyalakan suara yang dihasilkan dari relai yang memerlkan tegangan 12 Vdc, maka digunakan transistor D313 untuk pensaklarannya. Pada Gambar 3.7 disajikan driver untuk relai 12 Vdc dengan kendali port mikrokontroler.

Pada rangkaian driver Gambar 3.7, digunakan transistor D313. Hal ini dilakukan karena arus dari mikrokontroler terlalu kecil. Sementara itu transistor TIP 31 digunakan untuk menggerakkan relai. Cara kerja dari rangkaian ini adalah, jika diberikan logika low atau 0V dari port mikrokontroler, maka Transistor D313 akan bekerja atau terhubung maka pada basis T2 NPN akan berlogika high, sehingga T2 NPN akan bekerja atau terhubung. Maka jika T2 terhubung relai akan mendapatkan suplai tegangan 12 Vdc. Setelah relai ON, maka pada titik NO (Normaly open) akan menutup dan akan terhubung dengan phase 220 VAC dan akan ada arus yang mengalir ke lampu 1 sehingga lampu 1 menyala.
Perancangan Flow chart
Perancangan perangkat lunak untuk menangani sistem kendali dengan SMS ini, disusun berdasarkan flow chart yang disajikan pada Gambar 3.8 berikut.

Alur program yang diberikan ke HP yang pertama adalah pengaturan mode stanby. Dengan mode ini, HP akan secara otomatis memberikan pemberiahuan ke mikrokontroler jika ada SMS masuk. Dengan adanya mode ini, mikrokontroler memantau adanya pemberitahuan dari HP jika ada SMS masuk. Mode stand-by diberikan dengan perintah AT+CNMI=1,1. Dengan perintah ini secara otomatis HP akan diset pada posisi stand-by. Setelah perintah ini HP diberi perintah AT+CMGD=1. Perintah ini digunakan untuk menghapus inbox pada index memory pertama. Jika index pertama kosong, maka secara otomatis jika ada SMS masuk akan masuk ke lokasi index pertama.
Jika ada SMS masuk, mikrokontroler akan memberikan perintah untuk membaca isi inbox. Perintah yang diberikan adalah AT+CMGR=1. Angka 1 menunjukkan lokasi inbox yang akan dibaca. Setelah perintah ini diberikan HP akan memberikan data-data PDU yang merupakan isi dari SMS.
Isi SMS akan dikomparasi dengan kata kunci yang ada. Jika sesuai maka mikrokontroler akan mengeksekusi perintah tersebut. Namun jika isi SMS tidak dikenali, maka mikrokontroler akan memberikan pesan error. Dan tidak akan mengeksekusi perintah tersebut. Jika perintah sesuai kata kunci mikrokontroler akan mengeksekusi perintah tersebut. Kemudian memantau kondisi sensor dan memberikan SMS balasan.

Perancangan Kode SMS

Untuk memberikan perintah ke sistem, tidak semua SMS mampu dikenali oleh sistem. Hanya SMS tertentu yang sudah disesuaikan yang mampu dikenali oleh sistem. Berbagai rancangan kode-kode SMS disajikan pada Tabel 3.2 berikut ini.
Tabel 3.2 Rancangan Kode SMS
No Isi SMS Status Kegunaan
1 DTE 1 ON Valid Menyalakan lampu 1
2 DTE 2 ON Valid Menyalakan lampu 2
3 DTE 1 OFF Valid Memadamkan lampu 1
4 DTE 2 OFF Valid Memadamkan lampu 2
5 CEK STATUS Valid Melihat status lampu 1 & 2
6 Lampu 1 on Invalid Pesan error (UNKNOW COMMAND)
7 Lampu 2 on Invalid Pesan error (UNKNOW COMMAND)
Hasil perancangan sistem Pengendalian Peralatan Lampu Listrik Jarak Jauh Menggunakan Telepon Seluler ini dapat dilihat pada Gambar 4.1.

Koneksi HP
Pengujian terhadap konektivitas HP dilakukan dengan menggunakan soft ware hyper terminal dari windows. Yang perlu diperhatikan adalah setting baud rate yang digunakan. HP Siemens C35 / M35 memiliki baud rate 19200 bps. Berikut ini adalah gambar software hyper terminal ketika mikrokontroler direset :

Perintah pertama yang diberikan adalah AT+CMGD =1 yang artinya menghapus lokasi inbox sms no 1 pada handphone. Setelah itu mikrokontroler mengirimkan kode AT+CNMI=1,1 yang artinya mengirimkan mode stand-by ke HP agar dapat menerima SMS.
Setelah ada SMS yang masuk, maka perintah yang kedua adalah ‘AT+CMGR=1’ perintah ini digunakan untuk membaca inbox HP pada lokasi memory no 1. Kemudian perintah yang ketiga adalah ‘AT+CMGS=30’ yang artinya mengirim SMS balasan ke nomor pengirim yang pada Gambar 4.5 terlihat nomor pengirim adalah 0D91261808624919F8.

Data ini merupakan data PDU yang terdiri dari beberapa header. Header-header tersebut adalah:
 0D = No pengirim/penerima berjumlah 13 angka.
 91261808624919F8 = No HP penerima, dan bila diartikan nomornya adalah 6281802694918.
 00 = Bentuk SMS yang terima dalam format SMS biasa.
 00 = Skema encoding yang dipakai 7 bit
 09CC18E8E904096153 = Isi balasan SMS, bila diartikan menjadi ‘L1 ON BOS’
Perintah yang ke-empat setelah tanda panah adalah ‘AT+CMGD=1’ perintah ini digunakan untuk menghapus inbox pada lokasi pertama. Jika perintah ini berhasil, maka respon HP adalah ‘OK’.
Gambar Rangkaian Keseluruhan


Listing Program

;>>>>>>>>>>>>>>>Program SMS controler 2 titik lampu menggunakan 2 buah relai>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>Mikrokontroler at89s52>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>HP siemens M35>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>Kata kunci sms ada di akhir program>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>Alat ini bisa dikontrol menggunakan SMS dan push button/saklar pada p3.2$3.3>>>>>>>>
;>>>>setting PCON terdapat di inisialisasi baud rate 19200 Bps, mov 87H,#80H>>>>>>>>>>>
;>>>>>>>>>>>>>Alat ini sudah diuji coba dan dapat bekerja dengan normal>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SAK1 BIT P3.2
SAK2 BIT P3.3
LAMPU1 BIT P2.7
LAMPU2 BIT P2.6
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ORG 00H
MOV 20H,#00 ;KOSONGKAN BUFFER
MOV 21H,#00
JMP MULAI
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>PROGRAM UTAMA>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
MULAI: MOV P2,#0ffH
call TUNDA_LONG
mov p2,#00h
call TUNDA_LONG
SETB LAMPU1
call TUNDA_LONG
CALL INITIAL ;INISIALISASI BAUD RATE 19200
CLR LAMPU1
call TUNDA_LONG
SETB LAMPU1
call TUNDA_LONG
CALL HAPUS_INBOX
CALL MODE_STANBY ;KIRIM PERINTAH MODE STANBY
CALL TUNDA_LONG
CLR LAMPU1
ADA_SMS: CLR RI ;TUNGGU KARAKTER BALASAN ‘”‘
CEKS1: JB SAK1,CEKS2
CPL LAMPU1
CALL TUNDA_LONG
SJMP GO
CEKS2: JB SAK2,GO
CPL LAMPU2
CALL TUNDA_LONG
SJMP GO
GO: JNB RI,Ada_sms
MOV A,SBUF ;TUNGGU ADA SMS MASUK
INC R0
CJNE A,#’”‘,ADA_SMS
MOV R0,#7 ;AMBIL 7 KARAKTER BERIKUTNYA
CALL AMBIL_SERIAL
CALL BACA_SMS ;BACA DAN SIMPAN NO HP
MOV R0,#18 ;AMBIL 18 KARAKTER BERIKUTNYA
CALL AMBIL_SERIAL ;
MOV R1,#45H ;SIMPAN ISI INBOX MULAI ALAMAT 45H
MOV R0,#00 ;CLEAR COUNTER
CALL SIMPAN_KATA2
JMP BANDING
BANDING: MOV DPTR,#L1ON ;AMBIL CODE PDU ‘OUT 1 ON’
MOV R0,#16 ;BANDNGKAN 12X
CALL BANDING_KATA
JB 20H,DATA_BEDA2 ;JIKA BEDA LOMPAT KE LABEL
MOV 21H,#01 ;FLAG UNTUK ‘OUT 1 ON’
SETB LAMPU1
JMP SSS
DATA_BEDA2: MOV DPTR,#L2ON ;BANDINGKAN APAKAH DATA
MOV R0,#16 ;’OUT 2 ON’?
CALL BANDING_KATA
JB 20H,DATA_BEDA3
MOV 21H,#02 ;FLAG UNTUK ‘OUT 2 ON’
SETB LAMPU2
JMP SSS
DATA_BEDA3: MOV DPTR,#L1OFF ;BANDINGKAN APAKAH DATA
MOV R0,#18 ;’OUT 1 OFF?
CALL BANDING_KATA
JB 20H,DATA_BEDA4
MOV 21H,#9 ;FLAG UNTUK ‘OUT 1 OFF’
CLR LAMPU1
JMP SSS
DATA_BEDA4: MOV DPTR,#L2OFF ;BANDINGKAN APAKAH DATA
MOV R0,#18 ;’OUT 2 OFF?
CALL BANDING_KATA
JB 20H,DATA_BEDA6
MOV 21H,#10 ;FLAG UNTUK ‘OUT 2 OFF’
CLR LAMPU2
JMP SSS
DATA_BEDA6: MOV DPTR,#CEK_STATUS ;BANDINGKAN APAKAH DATA
MOV R0,#20 ;’CEK STATUS?
CALL BANDING_KATA
JB 20H,DATA_BEDA7
MOV 21H,#17 ;FLAG UNTUK ‘CEK STATUS’
JMP SSS
DATA_BEDA7: MOV 21H,#25
SSS: CALL TUNDA_LONG
CALL SEND_SMS
CALL HAPUS_INBOX
JMP ADA_SMS
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>RUTIN PENGIRIMAN SMS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SEND_SMS: MOV DPTR,#SMSSEND ;BACA SMS
CALL KIRIM_DATA ;KIRIM PERINTAH
TUNGGUS: CALL TERIMA_DATA
CJNE A,#’>’,TUNGGUS ;TUNGGU KARAKTER >
CALL TUNDA_LONG
MOV DPTR,#SMS_CENTER ;KIRIM NO SMS CENTER
MOV R0,#6
BERULANG1A: CALL ULANGAN
DJNZ R0,BERULANG1A
MOV R0,70H ;JUMLAH NO HP
MOV A,R0
ADD A,#2
MOV R0,A
MOV R1,#30H ;ALAMAT AWAL NO HP
BERULANG2A: CLR A
MOV A,@R1
CALL KIRIM_SERIAL
INC R1
DJNZ R0,BERULANG2A
MOV DPTR,#REF_SMS ;KIRIM NO REFFERENSI SMSM
MOV R0,#4 ;’0000′
BERULANG3A: CALL ULANGAN
DJNZ R0,BERULANG3A
MOV A,21H
CJNE A,#01,CEK_FLAG2
CALL ISI_L1ON
JMP DONE
CEK_FLAG2: MOV A,21H
CJNE A,#02,CEK_FLAG3
CALL ISI_L2ON
JMP DONE
CEK_FLAG3: MOV A,21H
CJNE A,#09,CEK_FLAG4
CALL ISI_L1OFF
JMP DONE
CEK_FLAG4: MOV A,21H
CJNE A,#10,CEK_FLAG5
CALL ISI_L2OFF
JMP DONE
CEK_FLAG5: MOV A,21H
CJNE A,#17,CEK_FLAG7
CALL ISI_CEK_STAT
JMP DONE
CEK_FLAG7: MOV A,21H
CJNE A,#25,CEK_FLAG7
CALL ISI_UNKNOW
JMP DONE
DONE: MOV A,#1AH ;DONE
CALL KIRIM_SERIAL
TUNGGUU: CALL TERIMA_DATA
CJNE A,#’K',TUNGGUU
CPL A
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>SUB RUTIN PENGISIAN KATA SMS>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ISI_L1ON: MOV DPTR,#OK1 ;BACA SMS
MOV R0,#28
BERULANG1: CALL ULANGAN
DJNZ R0,BERULANG1
RET
ISI_L2ON: MOV DPTR,#OK2 ;BACA SMS
MOV R0,#28
BERULANG2: CALL ULANGAN
DJNZ R0,BERULANG2
RET
ISI_L1OFF: MOV DPTR,#OK9 ;AMBIL DATA TABEL
MOV R0,#30
BERULANG9: CALL ULANGAN
DJNZ R0,BERULANG9
RET
ISI_L2OFF: MOV DPTR,#OK10 ;AMBIL DATA TABEL
MOV R0,#30
BERULANG10: CALL ULANGAN
DJNZ R0,BERULANG10
RET
ISI_CEK_STAT: jb lampu1,status_2
jb lampu2,status_3
jmp status_1
Status_1: MOV DPTR,#STAT1 ; out 1 & 2 off
MOV R0,#64
ULANGAN1: CALL ULANGAN
DJNZ R0,ULANGAN1
CALL TUNDA_LONG
RET
Status_2: jb lampu2,Status_4
MOV DPTR,#STAT2 ; out 1 on & 2 off
MOV R0,#62
ULANGAN2: CALL ULANGAN
DJNZ R0,ULANGAN2
CALL TUNDA_LONG
RET
Status_3: jb lampu1,status_4
MOV DPTR,#STAT3 ; out 1 off & 2 on
MOV R0,#62
ULANGAN3: CALL ULANGAN
DJNZ R0,ULANGAN3
CALL TUNDA_LONG
RET
Status_4: MOV DPTR,#STAT4 ; out 1 & 2 on
MOV R0,#60
ULANGAN4: CALL ULANGAN
DJNZ R0,ULANGAN4
CALL TUNDA_LONG
RET
ULANGAN: CLR A
MOVC A,@A+DPTR
ACALL KIRIM_SERIAL
INC DPTR
RET
ISI_UNKNOW: MOV DPTR,#UNKNOW ;BACA SMS
MOV R0,#44
BERULANG40: CALL ULANGAN
DJNZ R0,BERULANG40
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>INISIALISASI BAUT RATE 19200>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
INITIAL: MOV SCON,#50H ;INISIALISASI BAUD RATE 19200
MOV TMOD,#20H
Mov 87h,#80h
MOV TH1,#0FdH
SETB TR1
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>HAPUS SMS DI LOKASI INBOX INDEX 1>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
HAPUS_INBOX: MOV DPTR,#HAPUS ;KIRIM PRINTAH ‘AT+CMGD=1′
LAGI1: CLR A ;KOSONGKAN ACC
MOVC A,@A+DPTR ;AMBIL DATA TABEL YANG DITUNJUK DPTR
CLR TI ;AKTIVASI KIRIM SERIAL
MOV SBUF,A ;KIRIMKAN DATA
JNB TI,$ ;TUNGGU SELESAI DIKIRIM
INC DPTR ;NAIKKAN PENUNJUK TABEL
CJNE A,#00,LAGI1 ;TUNGGU SEMUA KARAKTER DIKIRIM
TUNGGU_A: CLR RI ;AKTIVASI TERIMA SERIAL
JNB RI,$ ;TUNGGU TERIMA KARAKTER
MOV A,SBUF ;AMBIL DATA SERIAL KE ACC
CJNE A,#10,tunggu_a ;TUNGGU HINGGA BALASAN ’10′
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>AKTIVASI MODE STANBY>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
MODE_STANBY: MOV DPTR,#PESAN ;KIRIM PERINTAH ‘AT+CNMI=1,1′
LAGI2: CLR A ;RESET ACC
MOVC A,@A+DPTR ;AMBIL KARAKTER DARI TABEL
CLR TI ;AKTIVASI KIRIM SERIAL
MOV SBUF,A ;KELUARKAN DATA DARI ACC KE BUFFER
JNB TI,$ ;KIRIM SERIAL
INC DPTR ;NAIKKAN PENUNJUK TABEL
CJNE A,#00,LAGI2 ;TUNGGU SEMUA KARAKTER SELESAI
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>RUTIN TERIMA DATA 1 BYTE>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
TERIMA_DATA: CLR RI ;DATA DISIMPAN DI ACC
JNB RI,$
MOV A,SBUF
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>RUTIN KIRIM DATA DARI TABEL>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
KIRIM_DATA: CLR A ;RESET ACC
MOVC A,@A+DPTR ;AMBIL KARAKTER DARI TABEL
CLR TI ;AKTIVASI KIRIM SERIAL
MOV SBUF,A ;KELUARKAN DATA DARI ACC KE BUFFER
JNB TI,$ ;KIRIM SERIAL
INC DPTR ;NAIKKAN PENUNJUK TABEL
CJNE A,#00,KIRIM_DATA ;TUNGGU SEMUA KARAKTER SELESAI
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>SUB RUTIN KIRIM DATA SERIAL 1 BYTE>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
KIRIM_SERIAL: CLR TI
MOV SBUF,A
JNB TI,$
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>SUB RUTIN KIRIM DATA SERIAL DGN>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>JUMLAH BYTE TERGANTUNG R0>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
KIRIM_COUNT: CLR A
CLR TI
MOV A,@R1
MOV SBUF,A
JNB TI,$
INC R1
DJNZ R0,KIRIM_SERIAL
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>SUB RUTIN TERIMA DATA SERIAL DGN>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>JUMLAH BYTE TERGANTUNG R0>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
AMBIL_SERIAL: CLR RI ;TUNGGU KARAKTER BALASAN ‘,’
JNB RI,$
MOV A,SBUF ;TUNGGU ADA SMS MASUK
DJNZ R0,AMBIL_SERIAL
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>SUB RUTIN KONVERSI CODE ASCII KE HEXA>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ASCII_HEX: PUSH ACC
MOV A,B
ANL A,#0F0H ;AMBIL HIGH NIBLE
CJNE A,#30H,BUKAN_ANGKA
ANGKA: MOV A,B
ANL A,#0FH ;AMBIL LOW NIBLE
MOV B,A
POP ACC
RET
BUKAN_ANGKA: MOV A,B
ANL A,#0FH
ADD A,#9
MOV B,A
POP ACC
RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>SUB RUTIN BACA SMS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
BACA_SMS: MOV DPTR,#SMSREAD ;BACA SMS
CALL KIRIM_DATA ;KIRIM PERINTAH ‘AT+CMGR=1′
BACA: CALL TERIMA_DATA ;AMBIL DATA BALASAN
CJNE A,#’,',BACA ;TUNGGU KARAKTER ‘,’
JMP BACA1
BACA1: CALL TERIMA_DATA ;AMBIL DATA BALASAN
CJNE A,#0AH,BACA1 ;TUNGGU KARAKTER STOP BYTE
MOV R0,#2
CALL AMBIL_SERIAL ;AMBIL JUMLAH PAKET DATA SMSC
MOV B,A
CALL ASCII_HEX ;KONVERSI DATA ASCII KE HEX
MOV A,B
MOV B,#2
MUL AB ;KALIKAN 2
MOV R0,A ;JADIKAN COUNTER
CALL AMBIL_SERIAL
MOV R0,#2
CALL AMBIL_SERIAL ;AMBIL JUMLAH PAKET DATA SMSC
MOV R0,#2 ;2 KARAKTER BERIKUTNYA
CALL AMBIL_SERIAL ;AMBIL NO HP
CJNE A,#’B',CEK_DIGIT1 ;NO HP 10 DIGIT
MOV R0,#14
MOV 70H,R0 ;JUMLAH NO HP DISIMPAN DI R2
JMP COUNT_LAGI1
CEK_DIGIT1: CJNE A,#’C',CEK_DIGIT2
MOV R0,#14 ;NO HP 11 DIGIT
MOV 70H,R0 ;JUMLAH NO HP DISIMPAN DI R2
JMP COUNT_LAGI2
CEK_DIGIT2: CJNE A,#’D',EXITZ ;NO HP 12 DIGIT
MOV R0,#16
MOV 70H,R0 ;JUMLAH NO HP DISIMPAN DI R2
JMP COUNT_LAGI3
EXITZ: JMP MULAI
COUNT_LAGI1: MOV 30H,#’0′
MOV 31H,#’B’
MOV R1,#32H
COUNT1: CLR RI ;AMBIL DATA NO HP
JNB RI,$
MOV A,SBUF
MOV @R1,A
INC R1
DJNZ R0,COUNT1
JMP NEXT
COUNT_LAGI2: MOV 30H,#’0′
MOV 31H,#’C’
MOV R1,#32H
COUNT2: CLR RI ;AMBIL DATA NO HP
JNB RI,$
MOV A,SBUF
MOV @R1,A
INC R1
DJNZ R0,COUNT2
JMP NEXT
COUNT_LAGI3: MOV 30H,#’0′
MOV 31H,#’D’
MOV R1,#32H
COUNT3: CLR RI ;AMBIL DATA NO HP
JNB RI,$
MOV A,SBUF
MOV @R1,A
INC R1
DJNZ R0,COUNT3
JMP NEXT
NEXT: RET
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>SUB RUTIN PENYIMPANAN KODE PDU>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SIMPAN_KATA: CLR A
CALL TERIMA_DATA
MOV @R1,A
INC R1
DJNZ R0,SIMPAN_KATA ;SIMPAN PDU KE BUFFER MULAI 45H
RET
SIMPAN_KATA1: CLR A
CALL TERIMA_DATA
MOV @R1,A
INC R1
CJNE A,#0DH,SIMPAN_KATA1 ;SIMPAN PDU KE BUFFER MULAI 45H
RET
SIMPAN_KATA2: CLR A
CALL TERIMA_DATA
MOV @R1,A
INC R1
INC R0
CJNE R0,#30,TRS
JMP TRS1
TRS: CJNE A,#0DH,SIMPAN_KATA1 ;SIMPAN PDU KE BUFFER MULAI 45H
TRS1: RET
;=============================================================================
; TUNDA WAKTU
;=============================================================================
TUNDA_LONG: MOV R5,#010H
JJz: CALL TUNDA
DJNZ R5,JJz
RET
TUNDA: MOV R7,#100
LD1: DJNZ R6,$
DJNZ R7,LD1
RET
;=============================================================================
; SUB RUTIN BANDING BUFFER DGN TABEL
;=============================================================================
BANDING_KATA: MOV R1,#45H
ULANG_BANDING: CLR A
MOVC A,@A+DPTR
XRL A,@R1
JZ SAMA
SETB 20H
RET
SAMA: INC DPTR
INC R1
DJNZ R0,ULANG_BANDING
CLR 20H
RET
;=============================================================================
;Data kata kunci sms
;=============================================================================
UNKNOW: DB ’18D0A234E9A40691206A92185C8288C965D119648242′ ; PERINTAH TIDAK DIKENAL !
DB 0
L1ON: DB ’08CF2A1514033D9D’ ; OUT 1 ON
L2ON: DB ’08CF2A1524033D9D’ ; OUT 2 ON
L1OFF: DB ’09CF2A1514033D8D46′ ; OUT 1 OFF
L2OFF: DB ’09CF2A1524033D8D46′ ; OUT 2 OFF
CEK_STATUS: DB ’0AC3E21234A506A9D529′ ; CEK STATUS
STAT1: DB ’23536A905A9D8250A067950A8A817AA0A7D1C8023DAB54900CD4033D8D46500A’
DB 0 ; STATUS ( OUT 1 = OFF, OUT 2 = OFF )
STAT2: DB ’22536A905A9D8250A067950A8A817AA0A793057A56A92019A8077A1A8DA014′
DB 0 ; STATUS ( OUT 1 = ON, OUT 2 = OFF )
STAT3: DB ’22536A905A9D8250A067950A8A817AA0A7D1C8023DAB54900CD4033D9DA014′
DB 0 ; STATUS ( OUT 1 = OFF, OUT 2 = ON )
STAT4: DB ’21536A905A9D8250A067950A8A817AA0A793057A56A92019A8077A3A4129′
DB 0 ; STATUS ( OUT 1 = ON, OUT 2 = ON )
OK1: DB ’0ECF250BF4AC524131500FF47402′ ; OK OUT 1 = ON
OK2: DB ’0ECF250BF4AC524132500FF47402′ ; OK OUT 2 = ON
OK9: DB ’0FCF250BF4AC524131500FF4341A01′ ; OK OUT 1 = OFF
OK10: DB ’0FCF250BF4AC524132500FF4341A01′ ; OK OUT 2 = OFF
SMSSEND: DB ‘AT+CMGS=30′,13,10
DB 0
REF_SMS: DB ’0000′
DB 0
SMS_CENTER: DB ’000100′
DB 0
SMSREAD: DB ‘AT+CMGR=1′,13,10
DB 0
PESAN: DB ‘AT+CNMI=1,1′,13,10
DB 0
HAPUS: DB ‘AT+CMGD=1′,13,10
DB 0
END