 #INCLUDE	"DEFS.INC"
;
;
	
	.ORG	0
	LJMP	START
;
;
SBUF	.EQU	099H
TH1	.EQU	08DH
TL1	.EQU	08BH
PCON	.EQU	087H
SCON	.EQU	098H
TI	.EQU	099H
RI	.EQU	098H

	.ORG	100H
NUM2	.EQU	51
NUM1	.EQU	50
NUM4	.EQU	53
NUM3	.EQU	52
NUM6	.EQU	55
NUM5	.EQU	54
NUM8	.EQU	57
NUM7	.EQU	56
NUM10	.EQU	59
NUM9	.EQU	58
NUMF	.EQU	61
NUM11	.EQU	60
;===========================================
AT	.TEXT	"ATZ"
ATK	.DB	0DH,0H
ATCMGS	.TEXT	"AT+CMGS=18"
ATCMGSK .DB	0DH,0H
SMS .TEXT "0001000B91"
;=====;"0001000B919712836618F9000020416650DA0C81402090E83C6FB7E0E173592E02D9CB721708E682C5C4"
SMSK1	.DB	0H
;NUM2	.TEXT	"0"
;NUM1	.TEXT	"0"
;NUM4	.TEXT	"0"
;NUM3	.TEXT	"0"
;NUM6	.TEXT	"0"
;NUM5	.TEXT	"0"
;NUM8	.TEXT	"0"
;NUM7	.TEXT	"0"
;NUM10	.TEXT	"0"
;NUM9	.TEXT	"0"
;NUMF	.TEXT	"F"
;NUM11	.TEXT	"0"
;SMSEND	.TEXT	"000020416650DA0C81402090E83C6FB7E0E173592E02D9CB721708E682C5C4"
;SMSK	.DB	1AH,0DH,0H

SMSEND1	.TEXT	"00082A0422042004150412041E0413041000210020041E0442043A0440002E0020043A0430043F043E0442002E"
SM1K	.DB	1AH,0DH,0H,0H
SMSEND2	.TEXT	"00082A0422042004150412041E041304100021002000200020002004110430043304300436043D0438043A002E"
SM2K	.DB	1AH,0DH,0H,0H
SMSEND3	.TEXT	"00082A0422042004150412041E0413041000210020041E0442043A0440002E002004340432043504400438002E"
SM3K	.DB	1AH,0DH,0H,0H
SMSEND4	.TEXT	"00082A0422042004150412041E04130410002100200423043404300440043D044B04390020043404300442002E"
SM4K	.DB	1AH,0DH,0H,0H
;=============
VOLTEND  .TEXT "00082A0412043D0438043C0430043D0438043500210020041D043504420020043F043804420430043D0438044F"
VOLTK	.DB	1AH,0DH,0H,0H
;=============

ATEO	.TEXT	"ATE0"
ATEOK	.DB	0DH,0H

ATCPBS	.DB 41H,54H,2BH,43H,50H,42H,53H,3DH,22H,53H,4DH,22H,0DH,0H
ATCPBR	.TEXT	"AT+CPBR=1"
ATCPBRK .DB	0DH,0H
ATE1	.TEXT	"ATE1"
ATE1K	.DB	0DH,0H








;==================================================
START
	MOV	IE,#0
	MOV	TMOD,#20h
	MOV	TH1,#0FDh
	MOV	TL1,#0FDh
	MOV	PCON,#10000000B
	
	MOV	SCON,#50h
	SETB	TR1
	
	SETB	P3.2
	SETB	P3.3
	SETB	P3.4
	SETB	P3.5
	SETB	P3.7
	SETB	P1.2 ;контроль питания.
	SETB	P1.0
	SETB	P1.1
;================ATZ->OK================
	MOV	P1,#01111111b
	MOV	DPTR,#AT
	ACALL	PUTSTR
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH
	LCALL	OKEY
	JZ	ATOKD
	LJMP	ERRORF
ATOKD

	MOV	P1,#11111111b

;================AT+CPBS="SM"===получаем доступ к сим ======
	MOV	DPTR,#ATCPBS
	ACALL	PUTSTR
	ACALL	TENGETCH
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH


	LCALL	OKEY
	JZ	ATCPBSD
	LJMP	ERRORF
ATCPBSD	
	MOV	P1,#01111111b


;===============AT+CPBR=1===считываем первую ячейку========
	MOV	DPTR,#ATCPBR
	ACALL	PUTSTR



	ACALL	TENGETCH
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH

	CJNE	A,#43h,NOZAP ; сравнение и переход если не равно + (нет записи)
	LJMP	YEPZAP
NOZAP   	LJMP	ERRORF
	MOV	P1,#11111111b

YEPZAP	ACALL	TENGETCH
	 ; номер
	MOV	NUM1,A
	ACALL	GETCH
	MOV	NUM2,A
	ACALL	GETCH
	MOV	NUM3,A
	ACALL	GETCH
	MOV	NUM4,A
	ACALL	GETCH
	MOV	NUM5,A
	ACALL	GETCH
	MOV	NUM6,A
	ACALL	GETCH
	MOV	NUM7,A
	ACALL	GETCH
	MOV	NUM8,A	
	ACALL	GETCH
	MOV	NUM9,A
	ACALL	GETCH
	MOV	NUM10,A
	ACALL	GETCH
	MOV	NUM11,A
	MOV	A,#46h ; ???????????????
	MOV	NUMF,A

	MOV	P1,#01111111b
	LCALL	TENGETCH
	LCALL	TENGETCH
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH
	MOV	P1,#11111111b
;==============================
DEGURKA

	MOV	A,P3
	JNB	ACC.7,OXPAHA ; переход если 0
	
	LJMP	DEGURKA
OXPAHA	
	LCALL	PROCED	
	LJMP	DEGURKA

;============================================
;++++++++++++++++++++++++++++++++++++++++++++
;++++++++++++++++++++++++++++++++++++++++++++
;++++++++++++++++++++++++++++++++++++++++++++
;++++++++++++++++++++++++++++++++++++++++++++
;++++++++++++++++++++++++++++++++++++++++++++
PROCED
	MOV	R5,#0	;питание 
	CLR	PSW.5

OPROS	
	ACALL	DEL100
	CPL	P1.7

	MOV	A,P3 ; снятие с охраны?
	JNB	ACC.7,DALEE ; переход если 0
	MOV	P1,#11111111b
	RET
DALEE

;------------------------
	CJNE	R5,#0,NOVOLT ; сравнили если R5 НЕ равен 0 то опрашивать не надо
	MOV	A,P1
	JB	ACC.2,VVC ;перех если =1
	MOV	R7,#7
	LCALL	PROGR
	MOV	R5,#1
VVC		
NOVOLT
;-----------------------
	JNB	PSW.5,NOSRABOT			; переход если бит = 0
	
;=======задержка 5 мин=======


	MOV	P1,#01111111b
	ACALL	PAUSEL
;	MOV	R5,#0	
	CLR	PSW.5
	MOV	P1,#11111111b

	MOV	A,P3  ; снятие с охраны?
	JNB	ACC.7,DALEE1 ; переход если 0
	MOV	P1,#11111111b
	RET
DALEE1	

;============================
NOSRABOT


	MOV	A,P3
	JNB	ACC.5,KAPOT ; проверка 1шл.
	
	LJMP	SHL2
KAPOT

	MOV	R7,#1

	LCALL	PROGR

SHL2	
	MOV	A,P3
	JNB	ACC.4,BAGAZ ; проверка 2шл.
	
	LJMP	SHL3
BAGAZ

	MOV	R7,#2
	LCALL	PROGR

SHL3	
	MOV	A,P3
	JNB	ACC.3,DVERI ; проверка 3шл.

	LJMP	SHL4

DVERI

	MOV	R7,#3
	LCALL	PROGR
SHL4
	MOV	A,P3
	JNB	ACC.2,UDAR ; проверка 3шл. удар
	LJMP	SHL5
UDAR 

	MOV	R7,#4
	LCALL	PROGR
SHL5


	LJMP	OPROS






; программа
PROGR

;===========Сработка==========

	MOV	P1,#01111111b
	

;===============AT+cmgs=18 отсылаем sms ============




	MOV	DPTR,#ATCMGS
	ACALL	PUTSTR



;====вставить задержку.!!!!!!!!!!!!!!!!!!
;	ACALL	DEL1001
DEL1001	MOV R1,#255
DLY11	MOV R6,#255
	DJNZ	R6,$
	DJNZ	R1,DLY11
	

;===========SMS=====================

	MOV	DPTR,#SMS
	ACALL	PUTSTR

	MOV	A,NUM2
	LCALL	PUTCH
	MOV	A,NUM1
	LCALL	PUTCH
	MOV	A,NUM4
	LCALL	PUTCH
	MOV	A,NUM3
	LCALL	PUTCH
	MOV	A,NUM6
	LCALL	PUTCH
	MOV	A,NUM5
	LCALL	PUTCH
	MOV	A,NUM8
	LCALL	PUTCH
	MOV	A,NUM7
	LCALL	PUTCH
	MOV	A,NUM10
	LCALL	PUTCH
	MOV	A,NUM9
	LCALL	PUTCH
	MOV	A,#46H
	LCALL	PUTCH
	MOV	A,NUM11
	LCALL	PUTCH

;=======какой шлейф?========

	CJNE	R7,#1,SHLE2
	MOV	DPTR,#SMSEND1	
	LJMP	SEND
SHLE2	CJNE	R7,#2,SHLE3
	MOV	DPTR,#SMSEND2	
	LJMP	SEND
SHLE3	CJNE	R7,#3,SHLE4
	MOV	DPTR,#SMSEND3	
	LJMP	SEND
SHLE4	CJNE	R7,#4,VOLT1
	MOV	DPTR,#SMSEND4
SEND	
	LCALL	PUTSTR
	SETB	PSW.5
	RET
;-------------------------------------
VOLT1	MOV	DPTR,#VOLTEND
	LCALL	PUTSTR
	RET
;---------------------------
TENGETCH 	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH
	
	RET	



OKEY	ACALL	GETCH
	ACALL	GETCH
	ACALL	GETCH

	CJNE	A,#4Fh,ERRL ; сравнение и переход если не равно
	ACALL	GETCH
	CJNE	A,#4Bh,ERRL ; OK
	ACALL	GETCH
	ACALL	GETCH
	MOV	A,#0  ;возвращаем в А 0 если ОК
	RET
ERRL	MOV	A,#1
	RET
	
ERRORF
	MOV	P1,#11111111b	
	LJMP	START
	
PUTSTR	CLR	A
	MOVC	A,@A+DPTR
	JZ	PUTSTR_E
	ACALL	PUTCH
	INC	DPTR
	SJMP	PUTSTR
PUTSTR_E	RET

PUTCH	MOV	SBUF,A
	JNB	TI, $
	CLR	TI
	RET	
GETCH	
	CLR	A
	JNB	RI,GETCH
	MOV	A,SBUF
	CLR	RI
	RET
	



PAUSEL	MOV	R3,#5
PUA
	LCALL	PAUSER
	MOV	A,P3
	JNB	ACC.7,DALEE2 ; переход если 0
	MOV	P1,#11111111b
	RET

DALEE2
	DJNZ	R3,PUA
	RET

PAUSER	MOV	A,#255
	MOV	R4,#255

L100	LCALL	DEL100
	LCALL	DEL100
	DJNZ	R4,L100
	RET
DEL100	MOV R1,#255
DLY1	MOV R6,#255
	DJNZ	R6,$
	DJNZ	R1,DLY1
	RET


;
;
	.END
