📄 sms_alam.asm
字号:
;CPU(LPC932) 1200,9600BPS ADDR(13003330666)
;外部复位,看门狗
$include (REG932.INC)
RST_TIME EQU 4AH ;GSM断电计数
SEND_TIME EQU 4BH ;发送重复次数
msg_len equ 4ch ;短消息长度
num_type equ 4eh ;号码类型
num_len equ 4fh ;号码长度
COUNT_50MS EQU 42H ;50MS计数
CSQ EQU 4DH ;信号强度
COUNT_1S EQU 30H
COUNT_1M EQU 31H
COUNT_1H EQU 32H
COUNT_10MS EQU 33H
TIME_OFF EQU 34H
TIME_ON EQU 35H
;***********************************************************
D2_BUF EQU 51H ; 临时数据缓存 51-6F
;*************************************************************
TON_SET EQU 30
TOFF_SET EQU 60
;**************************************************************
POWER_GSM BIT P0.0
LED_DATA BIT P0.1
LOCAL_INPUT BIT P2.0
;**************************************************************
ERR_GSM BIT 03H
OVER_500MS BIT 01H ;500MS通讯超时标志
T_1S BIT 00H
T_1M BIT 02H
T_1H BIT 04H
ALARM BIT 06H
FIRST BIT 07H
LAST_INPUT BIT 08H
;***************************************************************
ORG 0000h
LJMP MAIN
ORG 000BH
LJMP INT_50MS
ORG 001BH
LJMP INT_TIME
ORG 0100H
MAIN: MOV SP,#070H
LCALL INI_PRO
LCALL UN_WDT
MOV R3,#10 ;延时
LOOP1: LCALL DELAY2S
DJNZ R3,LOOP1
LCALL SET_GSM
RETURN: JNB T_1S,$
CLR T_1S
LOOP2: LCALL TEST_GSM
JB ERR_GSM,LOOP2
JB LAST_INPUT,FUN1
JNB LOCAL_INPUT,FUN01
FUN00: MOV TIME_OFF,COUNT_1M
CLR LAST_INPUT
LJMP RETURN
FUN01: CLR ALARM
MOV TIME_ON,#00H ;复位COUNT_1M
MOV COUNT_1S,#00H
MOV COUNT_1M,#00H
JB T_1H,LOOP3
MOV A,TIME_OFF ;判断关闭时间是否小于设定
CLR C
SUBB A,#TOFF_SET
JNC LOOP3
JB FIRST,LOOP3
MOV SEND_TIME,#05H
LCALL SEND_SMS ;小于报警
;SETB ALARM
MOV TIME_OFF,#0FFH
LOOP3: SETB LAST_INPUT
CLR T_1H
CLR FIRST
LJMP RETURN
FUN1: JNB LOCAL_INPUT,FUN11
FUN10: CLR ALARM
MOV TIME_OFF,#0FFH
MOV COUNT_1S,#00H
MOV COUNT_1M,#00H
CLR T_1H
CLR LAST_INPUT
LJMP RETURN
FUN11: JB ALARM,LOOP4
MOV TIME_ON,COUNT_1M
MOV A,TIME_ON
CLR C
SUBB A,#TON_SET
JC LOOP4
MOV SEND_TIME,#05H
LCALL SEND_SMS ;大于报警
SETB ALARM
LOOP4: SETB LAST_INPUT
LJMP RETURN
;***************************************
;***************************************
SEND_SMS:MOV num_type,#0a1h
MOV msg_len,#32
MOV num_len,#08h
CLR LED_DATA
MOV DPTR,#AT_NUM1
LCALL MSG_RETN
JNB ERR_GSM,SEND11
DJNZ SEND_TIME,SEND_SMS
SEND11: SETB LED_DATA
LCALL DELAY2S
CLR LED_DATA
MOV SEND_TIME,#05H
; LJMP SEND77
MOV num_type,#091h
MOV msg_len,#35
MOV num_len,#0dh
SEND1: MOV DPTR,#AT_NUM2
LCALL MSG_RETN
JNB ERR_GSM,SEND22
DJNZ SEND_TIME,SEND1
SEND22: SETB LED_DATA
LCALL DELAY2S
CLR LED_DATA
MOV SEND_TIME,#05H
SEND2: MOV DPTR,#AT_NUM3
LCALL MSG_RETN
JNB ERR_GSM,SEND33
DJNZ SEND_TIME,SEND2
SEND33: SETB LED_DATA
LCALL DELAY2S
CLR LED_DATA
MOV SEND_TIME,#05H
SEND3: MOV DPTR,#AT_NUM4
LCALL MSG_RETN
JNB ERR_GSM,SEND44
DJNZ SEND_TIME,SEND3
SEND44: SETB LED_DATA
LCALL DELAY2S
CLR LED_DATA
MOV SEND_TIME,#05H
SEND4: MOV DPTR,#AT_NUM5
LCALL MSG_RETN
JNB ERR_GSM,SEND55
DJNZ SEND_TIME,SEND4
SEND55: SETB LED_DATA
LCALL DELAY2S
CLR LED_DATA
MOV SEND_TIME,#05H
SEND5: MOV DPTR,#AT_NUM6
LCALL MSG_RETN
JNB ERR_GSM,SEND66
DJNZ SEND_TIME,SEND5
SEND66: SETB LED_DATA
LCALL DELAY2S
CLR LED_DATA
MOV SEND_TIME,#05H
SEND6: MOV DPTR,#AT_NUM7
LCALL MSG_RETN
JNB ERR_GSM,SEND77
DJNZ SEND_TIME,SEND6
SEND77: SETB LED_DATA
LCALL DELAY2S
MOV SEND_TIME,#05H
RET
;*************************************
;***************************************************************************
INT_TIME: PUSH ACC
MOV A,COUNT_10MS
INC A
CJNE A,#100,INT_T1
CLR A
SETB T_1S
MOV A,COUNT_1S
INC A
CJNE A,#60,INT_T2
CLR A
SETB T_1M
MOV A,COUNT_1M
INC A
CJNE A,#60,INT_T3
CLR A
SETB T_1H
INT_T3: MOV COUNT_1M,A
CLR A
INT_T2: MOV COUNT_1S,A
CLR A
INT_T1: MOV COUNT_10MS,A
MOV TH1,#90H ;17777US
MOV TL1,#01H
setb ET1
setb TR1
setb ea
POP ACC
RETI
;********************************************
MSG_RETN: PUSH DPH
PUSH DPL
MOV DPTR,#AT_CMGS ;AT+CMGS=
LCALL AT_TX
MOV A,msg_len ;15+10*2
LCALL HEX1_BCD
MOV B,A
MOV A,R3
LCALL BCD_ASC
LCALL TX_BYTE
MOV A,B
SWAP A
LCALL BCD_ASC
LCALL TX_BYTE
MOV A,B
LCALL BCD_ASC
LCALL TX_BYTE
MOV A,#0DH
LCALL TX_BYTE
MOV DPTR,#ATMSGWAT ;WAIT <
LCALL AT_RX
JNB ERR_GSM,MSG2
POP DPL
POP DPH
LJMP MSGERR
MSG2: MOV R3,#10 ;延时
LOOP9: LCALL DELAY2S
DJNZ R3,LOOP9
MOV DPTR,#AT_HEAD ;发送消息头
CLR A
MOVC A,@A+DPTR
DEC A
MOV R7,A
INC DPTR
MSG3: CLR A
MOVC A,@A+DPTR
LCALL HEX_ASC
LCALL TX_BYTE
XCH A,B
LCALL TX_BYTE
INC DPTR
DJNZ R7,MSG3
MOV A,num_len ;号码长度
LCALL HEX_ASC
LCALL TX_BYTE
XCH A,B
LCALL TX_BYTE
MOV A,num_type ;号码类型
LCALL HEX_ASC
LCALL TX_BYTE
XCH A,B
LCALL TX_BYTE
POP DPL ;发送SIM/UIM号
POP DPH
CLR A
MOVC A,@A+DPTR
DEC A
MOV R7,A
INC DPTR
MSG4: CLR A
MOVC A,@A+DPTR
LCALL HEX_ASC
LCALL TX_BYTE
XCH A,B
LCALL TX_BYTE
INC DPTR
DJNZ R7,MSG4
MOV DPTR,#AT_TRAIL ;发送消息尾
CLR A
MOVC A,@A+DPTR
DEC A
MOV R7,A
INC DPTR
MSG5: CLR A
MOVC A,@A+DPTR
LCALL HEX_ASC
LCALL TX_BYTE
XCH A,B
LCALL TX_BYTE
INC DPTR
DJNZ R7,MSG5
MOV A,#20 ;消息长度 10*2
LCALL HEX_ASC
LCALL TX_BYTE
XCH A,B
LCALL TX_BYTE
MOV DPTR,#AT_TEXT1 ;发送消息内容
;JNB INPUT_1,MSG51
;MOV DPTR,#AT_TEXT2
MSG51: CLR A
MOVC A,@A+DPTR
DEC A
MOV R7,A
INC DPTR
MSG6: CLR A
MOVC A,@A+DPTR
LCALL HEX_ASC
LCALL TX_BYTE
XCH A,B
LCALL TX_BYTE
INC DPTR
DJNZ R7,MSG6
MSG_OUT3: MOV A,#1AH ;1AH
LCALL TX_BYTE
MOV R7,#10
MSG62: LCALL WAITE
JB RI,MSG61
DJNZ R7,MSG62
LJMP MSGERR
MSG61: MOV A,SBUF
CLR RI
CJNE A,#0DH,MSGERR
MOV DPTR,#ATCMGS
LCALL AT_RX
JB ERR_GSM,MSGERR
MSG7: LCALL WAITE
JB OVER_500MS,MSGERR
MOV A,SBUF
CLR RI
CJNE A,#0AH,MSG7
LCALL RCE_OK
JB ERR_GSM,MSGERR
MSG_OUT1: RET
MSGERR: lcall delay2s
SETB ERR_GSM
RET
;**************GSM硬复位**********************************
RST_POW_GSM: SETB POWER_GSM
MOV R3,#10 ;GSM断电延时
INI_P2: LCALL DELAY2S
DJNZ R3,INI_P2
CLR POWER_GSM
MOV R3,#30 ;上电延时
DELAY: LCALL DELAY2S
DJNZ R3,DELAY
RET
;**************GSM软复位**********************************
RST_SOFT_GSM: MOV DPTR,#AT_CGRESET
LCALL AT_TX
MOV R3,#20
RST_S1: LCALL DELAY2S
DJNZ R3,RST_S1
RET
;*****************发送AT命令************************
AT_TX: CLR TI
CLR A ;发送AT命令
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -