Jumat, 27 Juni 2014

AN-0191 Sistem Alarm Rumah berbasis MMS dilengkapi dengan Camera Interface



Pada diagram alir tersebut terdapat dua aliran, yang pertama adalah program utama yang bekerja mendeteksi kondisi-kondisi sensor. Saat salah satu sensor mendeteksi ada obyek atau kebakaran maka program akan langsung mengirimkan foto dalam bentuk MMS beserta teks yang menunjukkan informasi sensor apa yang aktif sehingga pengguna dapat mengetahui jenis sensor yang aktif dari MMS yang diterima di HP.
Diagram alir kedua adalah interupsi serial yang mendeteksi pesan SMS yang dikirim oleh pengguna melalui HP dan diterima oleh SIM5216. Pesan ini diteruskan ke DST-51 dan apabila pesan tersebut berisi SMS “ambilfoto” maka DST-51 akan memerintahkan SIM5216 untuk mengirimkan foto. Bagian ini digunakan apabila pengguna ingin melihat kondisi melalui camera setiap saat.
Agar sistem yang dirangkai dapat bekerja sesuai diagram alir tersebut maka program atau source code perlu diisikan ke dalam DST-51 terlebih dahulu.
Lebih detail mengenai cara untuk download program ke DST-51 dapat dilihat di AN0160.

LISTING PROGRAM

$MOD51
        CSEG

DeviceID    EQU    057h        ;ID Telemeter

PowerKey    Bit    P1.0
CTS        Bit    P1.2
RTS        Bit    P1.3

SIMVDD        Bit    P3.7        ;belum tahu
Indicator    Bit    P1.7

SensorSmoke        Bit    P2.2
SensorInfra1        Bit    P2.3
SensorInfra2        Bit    P2.4
SensorInfra3        Bit    P2.5
SensorSonar        Bit    P2.6

SetPointSensorSuhu    EQU    80h

        DSEG
    Org    36H

PTR:     Ds      2
PTR2:    Ds      2
PTR3:    Ds      2

RAM_ID:          Ds      1
RAM_HPServer:    Ds      15
RAM_OperatorNumber:      Ds      10
TF0Counter:      Ds      1
IndexSMS:        Ds      1
IndexPerintah:   Ds      1
CheckSum:        Ds      1
PrescaleTimer:   Ds      1
CounterHP:       Ds      1
                    ;
Flag3:           Ds      1               ;Flag Serba guna
BufferSensTemp:  Ds      5
BufferSensor:    Ds      5
Status:          Ds      1               ;Bit 0 = Flag Sensor Infra 1
                    ;Bit 1 = Flag Sensor Infra 2
                    ;Bit 2 = Flag Sensor Infra 3
                    ;Bit 3 = Flag Sensor Smoke
                    ;Bit 4 = Flag Sensor sonar
                    ;Bit 5 = Flag Sensor suhu
                    ;Bit 6 = Flag Sensor Infra 1 diproses
                    ;Bit 7 = Flag Sensor Infra 2 diproses
Status2:         Ds      1               ;Bit 0 = Flag Sensor Infra 3 diproses
                    ;Bit 1 = Flag Sensor Smoke diproses
                    ;Bit 2 = Flag Sensor Sonar diproses
                    ;Bit 3 = Flag Sensor Suhu diproses
                  


        CSEG
    Org    000H
    Ljmp    Start
    Org    003H
    ljmp    intr0
    Org    00Bh
    Ljmp    Timer0Interrupt
    Org    013H
    Ljmp    INTR1
    Org    023h
    LJmp    SerialInterrupt



Intr0:

    Reti  

INTR1:
    Reti

;============================================
; Kalau Call Ready = GSM On
; Kalau 's' = koneksi dengan PC



PBDone:
    DB    'PB DONE',0

TurnONGSM:

    Clr    PowerKey
    Mov    R7,#100
    Lcall    Delayx10mS
    Setb    PowerKey

TungguCommandBerikut:
    Lcall    TungguCommand
    Mov    DPTR,#PBDone
    Mov    R0,#BufferPerintah
    Lcall    CompareRAMnTabel
    Jc    TungguCommandBerikut

    Ljmp    GSMSudahON                ;



TurnONGSM2:
    LJmp    TurnONGSM


CompareRAMnTabel:
    Mov    B,@R0
    Inc    R0
    Mov    A,#00
    Movc    A,@A+DPTR
    Jz    RAMdanTabelCocok
    Inc    DPTR
    Clr    C
    Subb    A,B
    Jnz    RAMTidakCocok
    Ljmp    CompareRAMnTabel

RAMdanTabelCocok:
    Clr    C
    Ret

RAMTidakCocok:
    Setb    C
    Ret



Start:
    Lcall    Init_Serial
    Mov    Status,#0FFh

    Mov    Flag3,#0FFh
    Mov    DPTR,#ID
    Lcall    DPTRSEE16bit

    Cjne    A,#DeviceID,SetDef
    Ljmp    NoDefault


SetDef:
    Lcall    SetDefault

NoDefault:

    Lcall    Init_Serial            ;Inisial Serial 11.5200
    Clr    RI
    Clr    TI
    Jnb    SIMVDD,TurnONGSM2        ;Cek GSM aktif?

GSMSudahON:

    Mov    R7,#100
    Lcall    Delayx10mS

    Lcall    ClearBufferPerintah        ;Hapus data di buffer perintah

    Lcall    InitTimer            ;Aktifkan Interupsi Timer
    Mov    PreScaleTimer,#200
   
    Mov    TF0Counter,#00            ;Set Prescaler
    Setb    EA
    Setb    ET0

    Lcall    InitGSM
    Lcall    DeleteAllSMS            ;Hapus Semua SMS

    Setb    TR0
    Clr    RI
    Clr    TI

    Ljmp    $








;================================================================================
; END OF MAIN PROGRAM

Selasa, 10 Juni 2014

PERANCANGAN PENGENDALIAN PERALATAN LAMPU LISTRIK JARAK JAUH MENGGUNAKAN TELEPON SELULER (tugas 3)






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.

Listing program pascal
TUNGGU KARAKTER BALASAN '"'

ADA_SMS:      CLR             RI                   ;
            JNB             RI,CEKS1
            jmp            star

CEKS1:            JB            SAKLAR_1,CEKS
            JNB            SAKLAR_1,$
            CPL             LAMPU1
            CALL             TUNDA_LONG
            SJMP             GO

CEKS:            JNB             RI,CEKS2
            jmp            star

CEKS2:            JB            SAKLAR_2,GO
            JNB            SAKLAR_2,$
            CPL             LAMPU2
            CALL             TUNDA_LONG
            SJMP             GO

GO:            JNB             RI,CEKS1
star:            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
            SJMP            BANDING

BANDING:      MOV            DPTR,#L1ON            ;AMBIL CODE PDU 'LAMPU 1 ON'
            MOV            R0,#12                  ;BANDNGKAN 20X
            CALL            BANDING_KATA     
            JB            flag_sms,DATA_BEDA2            ;JIKA BEDA LOMPAT KE LABEL
            MOV            21H,#1                 
            SETB            LAMPU1                 
            setb            memori_relai.0
           
            CALL            TUNDA_LONG
            JMP            SEND_SMS

DATA_BEDA2:      MOV            DPTR,#L2ON           
            MOV            R0,#12                 
            CALL            BANDING_KATA
            JB            flag_sms,DATA_BEDA3
            MOV            21H,#2                 
            SETB            LAMPU2                 
            setb            memori_relai.1
           
            CALL            TUNDA_LONG
            JMP            SEND_SMS

DATA_BEDA3:      MOV            DPTR,#L1OFF           
            MOV            R0,#14                 
            CALL            BANDING_KATA
            JB            flag_sms,DATA_BEDA4
            MOV            21H,#9                 
            CLR            LAMPU1           
            clr            memori_relai.0
           
            CALL            TUNDA_LONG
            JMP            SEND_SMS

DATA_BEDA4:      MOV            DPTR,#L2OFF           
            MOV            R0,#14                 
            CALL            BANDING_KATA
            JB            flag_sms,DATA_BEDA5
            MOV            21H,#10                 
            CLR            LAMPU2                       
            clr            memori_relai.1
           
            CALL            TUNDA_LONG
            JMP            SEND_SMS
DATA_BEDA5:      MOV             DPTR,#STAT1            
            MOV             R0,#14                 
            CALL             BANDING_KATA
            JB             flag_sms,DATA_BEDA6
            MOV             21H,#17            
            CALL            TUNDA_LONG
            JMP            SEND_SMS

DATA_BEDA6:      MOV             DPTR,#STAT2            
            MOV             R0,#14           
            CALL             BANDING_KATA
            JB             flag_sms,DATA_BEDA7
            MOV             21H,#18             
            CALL            TUNDA_LONG           
            JMP            SEND_SMS
DATA_BEDA7:      MOV            21H,#25
            CALL            TUNDA_LONG
            JMP            SEND_SMS
           
;>>>>>>>>>>>>>>>>>>>>>>>>RUTIN PENGIRIMAN SMS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Isi_2:            djnz            r4,TUNGGU2
            JMP            MULAI

SEND_SMS:      MOV            DPTR,#SMSSEND            ;BACA SMS           
            CALL            KIRIM_DATA            ;KIRIM PERINTAH
            mov            r4,#1
            sjmp            TUNGGU2

TUNGGU2:      CALL            TERIMA_DATA
            CJNE            A,#'>',Isi_2            ;TUNGGU KARAKTER >

            MOV            DPTR,#SMS_CENTER      ;KIRIM NO SMS CENTER           
            MOV            R0,#6
BERULANG1A:      CLR            A
            MOVC            A,@A+DPTR
            CALL            KIRIM_SERIAL
            INC            DPTR
            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,#6                  ;'000000'
BERULANG3A:      CLR            A
            MOVC            A,@A+DPTR
            CALL            KIRIM_SERIAL
            INC            DPTR
            DJNZ            R0,BERULANG3A

            clr            a
            MOV            A,21H
            CJNE            A,#1,CEK_FLAG2
            CALL            ISI_L1ON
            JMP            DONE

CEK_FLAG2:      CJNE            A,#2,CEK_FLAG3
            CALL            ISI_L2ON
            JMP            DONE

CEK_FLAG3:      CJNE            A,#9,CEK_FLAG4
            CALL            ISI_L1OFF
            JMP            DONE

CEK_FLAG4:      CJNE            A,#10,CEK_FLAG5
            CALL            ISI_L2OFF
            JMP            DONE
CEK_FLAG5:      CJNE             A,#17,CEK_FLAG6
            jmp            Cek_1
Cek_1:            JB             LAMPU1,CEK_SEN1
            CALL             ISI_L1Off
            JMP             DONE
CEK_SEN1:      JNB             LAMPU1,CEK_FLAG7
            CALL             ISI_L1On
            JMP             DONE

CEK_FLAG6:      CJNE             A,#18,CEK_FLAG7
            jmp            Cek_2
cek_2:            JB             LAMPU2,CEK_SEN2
            CALL             ISI_L2Off
            JMP             DONE
CEK_SEN2:      JNB             LAMPU2,CEK_FLAG7
            CALL             ISI_L2On
            JMP             DONE
CEK_FLAG7:      CALL            ISI_UNKNOW
            JMP            DONE

DONE:            MOV            A,#1AH                  ;DONE
            CALL            KIRIM_SERIAL
            mov            r4,#5
tunggu:            CALL            TERIMA_DATA
            CJNE            A,#'K',Isi_1
            CALL            HAPUS_INBOX
            CALL            MODE_STANBY
            JMP            ADA_SMS
            JMP            $

Isi_1:            djnz            r4,tunggu
            JMP            MULAI

;>>>>>>>>>>>>>>>>>>>SUB RUTIN PENGISIAN KATA SMS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ISI_L1ON:      MOV            DPTR,#REPORT1           
            MOV            R0,#30
BERULANG1:      CLR            A
            MOVC            A,@A+DPTR
            CALL            KIRIM_SERIAL
            INC            DPTR
            DJNZ            R0,BERULANG1
            RET

ISI_L2ON:      MOV            DPTR,#REPORT2           
            MOV            R0,#30
BERULANG2:      CLR            A
            MOVC            A,@A+DPTR
            CALL            KIRIM_SERIAL
            INC            DPTR
            DJNZ            R0,BERULANG2
            RET

ISI_L1OFF:      MOV            DPTR,#REPORT3            ;AMBIL DATA TABEL
            MOV            R0,#30
BERULANG9:      CLR            A
            MOVC            A,@A+DPTR
            CALL            KIRIM_SERIAL
            INC            DPTR
            DJNZ            R0,BERULANG9
            RET

ISI_L2OFF:      MOV            DPTR,#REPORT4            ;AMBIL DATA TABEL
            MOV            R0,#30
BERULANG10:      CLR            A
            MOVC            A,@A+DPTR
            CALL            KIRIM_SERIAL
            INC            DPTR
            DJNZ            R0,BERULANG10
            RET

ISI_UNKNOW:      MOV            DPTR,#UNKNOW           
            MOV            R0,#30
BERULANG40:      CLR            A
            MOVC            A,@A+DPTR
            CALL            KIRIM_SERIAL
            INC            DPTR
            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:                                          ;HAPUS INBOX
            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

TERIMA_DATA:      mov            r4,#255                  ;RUTIN TERIMA DATA 1 BYTE
            mov            r5,#255
            mov            r6,#100
            CLR            RI                  ;DATA DISIMPAN DI ACC
tunggu_3:      JNB            RI,isi_3
            MOV            A,SBUF                 
            RET

Isi_3:            djnz            r4,tunggu_3
            djnz            r5,tunggu_3
            djnz            r6,tunggu_3
            JMP            MULAI

;>>>>>>>>>>>>>>>>>RUTIN KIRIM DATA DARI TABEL>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
KIRIM_DATA:      mov            r4,#255                  ;RUTIN KIRIM DATA 1 BYTE
            mov            r5,#255
            mov            r6,#5
            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
tunggu_6:      JNB            TI,isi_6            ;KIRIM SERIAL
            INC            DPTR                  ;NAIKKAN PENUNJUK TABEL
                                          ;RUTIN KIRIM DATA 1 BYTE
            CJNE            A,#00,KIRIM_DATA      ;TUNGGU SEMUA KARAKTER SELESAI
            RET     

Isi_6:            djnz            r4,tunggu_6
            djnz            r5,tunggu_6
            djnz            r6,tunggu_6
            JMP            MULAI

;>>>>>>>>>>>>>>>SUB RUTIN KIRIM DATA SERIAL 1 BYTE>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
KIRIM_SERIAL:      mov            r4,#255                  ;RUTIN KIRIM serial 1 BYTE
            mov            r5,#255
            mov            r6,#5
            CLR            TI
            MOV            SBUF,A
tunggu_4:      JNB            TI,Isi_4
            RET

Isi_4:            djnz            r4,tunggu_4
            djnz            r5,tunggu_4
            djnz            r6,tunggu_4
            JMP            MULAI

;>>>>>>>>>>>>>>>>>>>>>>>>>SUB RUTIN KIRIM DATA SERIAL DGN>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;>>>>>>>>>>>>>>>>>>>>>>>>>>>JUMLAH BYTE TERGANTUNG R0>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
KIRIM_COUNT:      mov            r4,#255                 
            mov            r5,#255
            mov            r6,#5
            CLR            A
            CLR            TI
            MOV            A,@R1
            MOV            SBUF,A

tunggu_5:      JNB            TI,Isi_5
            INC            R1
            DJNZ            R0,KIRIM_SERIAL
            RET

Isi_5:            djnz            r4,tunggu_5
            djnz            r5,tunggu_5
            djnz            r6,tunggu_5
            JMP            MULAI

;>>>>>>>>>>>>>>>>>>>>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 ','
            sJMP            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


;>>>>>>>>>>>>>>>>>>>SUB RUTIN PENYIMPANAN KODE PDU>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SIMPAN_KATA1:      CLR            A
            CALL            TERIMA_DATA
            MOV            @R1,A
            INC            R1
            CJNE            A,#0DH,SIMPAN_KATA1      ;SIMPAN PDU KE BUFFER MULAI 45H
            RET


;>>>>>>>>>>>>>>>>>>>>>>>SUB RUTIN PENYIMPANAN KODE PDU>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
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            flag_sms
            RET

SAMA:       INC            DPTR
            INC            R1
            DJNZ           R0,ULANG_BANDING
            CLR            flag_sms
            RET

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>Data PDU SMS>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
UNKNOW:
      DB      '0FD0B23CEDA687D1A069981D468300'            ;Perintah Salah
      DB      0


L1ON:
      DB      '05CC18E8ED06'                              ;L1 on
L2ON:
      DB      '054C19E8ED06'                              ;L2 on

L1OFF:
      DB      '06CC18E86D3603'                        ;L1 off
L2OFF:
      DB      '064C19E86D3603'                        ;L2 off

STAT1:
      DB      '06C3F21AC48C01'                        ;Cek L1
STAT2:
      DB      '06C3F21AC49401'                        ;Cek L2


REPORT1:
      DB      '0FCF350BC40CB7E175500CF4748300'            ;Ok, Lampu 1 On
REPORT2:                 
      DB      '0FCF350BC40CB7E175900CF4748300'            ;Ok, Lampu 2 On
REPORT3:
      DB      '0FCF350BC40CB7E175500CF4349B01'            ;Ok, Lampu 1 Off
REPORT4:
      DB      '0FCF350BC40CB7E175900CF4349B01'            ;Ok, Lampu 2 Off

SMSSEND:
      DB      'AT+CMGS=29',13,10
      DB      0


REF_SMS:
      DB      '000000'
      DB      0


SMS_CENTER:
      DB      '001100'
      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