📄 sms_alam.asm
字号:
MOVC A,@A+DPTR
DEC A
MOV R7,A
AT_TX1: INC DPTR
CLR TI
CLR A
MOVC A,@A+DPTR
MOV SBUF,A
JNB TI,$
DJNZ R7,AT_TX1
CLR TI
RET
;*****************************************
;****************接受AT命令*************************
AT_RX: CLR RI
CLR ERR_GSM
CLR A
MOVC A,@A+DPTR
DEC A
MOV R7,A
INC DPTR
MOV R0,#D2_BUF
AT_RX1: LCALL WAITE
JB OVER_500MS,AT_RX2
MOV A,SBUF
;MOV @R0,A
CLR RI
MOV B,A
CLR A
MOVC A,@A+DPTR
CJNE A,B,AT_RX2
INC DPTR
INC R0
DJNZ R7,AT_RX1
CLR ERR_GSM
RET
AT_RX2: SETB ERR_GSM
RET
;********************************************************
RCE_OK: CLR ERR_GSM
MOV DPTR,#AT_OK
LCALL AT_RX
RET
;*****************************************************
RCE_CSQ: CLR ERR_GSM
MOV DPTR,#ATCSQ
LCALL AT_RX
JB ERR_GSM,RCE_C2
LCALL WAITE
JB OVER_500MS,RCE_C2
CLR RI
MOV A,SBUF
MOV B,A
LCALL WAITE
JB OVER_500MS,RCE_C2
CLR RI
MOV A,SBUF
LCALL ASC_HEX
MOV CSQ,A
CLR ERR_GSM
RET
RCE_C2: SETB ERR_GSM
RET
;****************************************************
SET_GSM: MOV DPTR,#ATE0
LCALL AT_TX
LCALL RCE_OK
JB ERR_GSM,SET_GSM
LCALL DELAY2S
MOV DPTR,#AT_CMGF ;GSM参数设置
LCALL AT_TX
LCALL RCE_OK
JB ERR_GSM,SET_GSM
RET
;****************************************************
TEST_GSM: ;MOV R2,#10
TEST_G2: MOV DPTR,#AT_AT
LCALL AT_TX
LCALL RCE_OK
JB ERR_GSM,TEST_ERR
TEST_G1: ;LCALL DELAY2S
MOV DPTR,#AT_CSQ ;测试信号强度
LCALL AT_TX
LCALL RCE_CSQ
JB ERR_GSM,TEST_ERR
MOV A,CSQ
SUBB A,#40H
JNC TEST_err
CLR ERR_GSM
;LCALL DELAY2S
RET
TEST_ERR: LCALL DELAY2S
LCALL DELAY2S
LCALL DELAY2S
SETB ERR_GSM
RET
;**************初始化GSM_UART*****************************
INI_UART: ;SETB RT
;CLR GD
MOV P1M1,#02H ;TXD输出,RXD输入
MOV P1M2,#01H
MOV BRGR1,#02H ;7.373/ 6M, 9600
MOV BRGR0,#0F0H ;2F0/261
MOV BRGCON,#3
MOV SSTAT,#40H
MOV SCON,#50h ;方式1,8数据位,无校验,
MOV PCON,#00H ;SMOD=0
RET
;*****************************************
EN_WDT: MOV WDL,#0FFh ; New count to be loaded to 8-bit down counter
CLR EA ; disable interrupt
MOV WDCON,#0E5H ;e5 ; write back to WDCON (after the watchdog is enabled, a feed must occur
; immediately)
MOV WFEED1,#0A5h ; do watchdog feed part 1
MOV WFEED2,#05Ah ; do watchdog feed part 2
SETB EA
RET
UN_WDT: MOV WDCON,#0E0H
RET
;***************************************************
FEED_DOG:CLR EA ; disable interrupt
MOV WFEED1,#0A5h ; do watchdog feed part 1
MOV WFEED2,#05Ah ; do watchdog feed part 2
setb ea
RET
;********************初始化******************************
INI_PRO:
MOV P0M1,#00H ;P0上拉输出
MOV P0M2,#0FFH
MOV P0,#00H
SETB LED_DATA
MOV P2M1,#0FFH ;P2仅为输入
MOV P2M2,#00H
LCALL INI_UART
CLR ERR_GSM
MOV TMOD,#11H
MOV TH0,#03CH ;500MS
MOV TL0,#0B0H
MOV TH1,#90H ;10MS
MOV TL1,#01H
setb ET1
setb TR1
CLR ES
setb ea
CLR A
MOV COUNT_10MS,A
MOV COUNT_1S,A
MOV COUNT_1M,A
MOV COUNT_1H,A
CLR T_1S
CLR T_1M
CLR T_1H
MOV TIME_OFF,#0FFH
MOV TIME_ON,#00H
CLR LAST_INPUT
CLR ALARM
SETB FIRST
MOV R0,#RST_TIME ;数据区复位
MOV R7,#3
CLR A
INI_P1: MOV @R0,A
INC R0
DJNZ R7,INI_P1
RET
;*************************************************
DELAY20MS:MOV R6,#20
DELAY11:MOV R5,#200
DELAY12:NOP
NOP
NOP
NOP
DJNZ R5,DELAY12
DJNZ R6,DELAY11
DJNZ R7,DELAY20MS
RET
;***************************************************
TX_BYTE: CLR TI
MOV SBUF,A
JNB TI,$
CLR TI
RET
;单字节BCD码整数转换成单字节十六进制整数
;入口条件:待转换的单字节BCD码整数在累加器 A 中。
;出口信息:转换后的单字节十六进制整数仍在累加器 A 中。
;影响资源: PSW 、 A 、 B 、 R4 堆栈需求: 2字节
BCD1_HEX:MOV B,#10H
DIV AB
MOV R4,B
MOV B,#10
MUL AB
ADD A,R4
RET
;单字节十六进制整数转换成单字节BCD码整数
;待转换的单字节十六进制整数在累加器A中。
;出口信息:转换后的BCD码整数(十位和个位)仍在累加器A中,百位在R3中。
;影响资源:PSW、A、B、R3 堆栈需求: 2字节
HEX1_BCD: MOV B,#100 ;分离出百位,存放在R3中
DIV AB
MOV R3,A
MOV A,#10 ;余数继续分离十位和个位
XCH A,B
DIV AB
SWAP A
ORL A,B ;将十位和个位拼装成BCD码
RET
;单字节十六进制数转换成双字节ASCII码
;入口条件:待转换的单字节十六进制数在累加器A中。
;出口信息:高四位的ASCII码在A中,低四位的ASCII码在B中。
;影响资源:PSW、A、B 堆栈需求: 4字节
HEX_ASC: MOV B,A ;暂存待转换的单字节十六进制数
LCALL BCD_ASC ;转换低四位
XCH A,B ;存放低四位的ASCII码
SWAP A ;准备转换高四位
LCALL BCD_ASC ;将累加器的低四位转换成ASCII码
RET
;***************************************************
;双字节ASC码转单字节十六进制
ASC_HEX: LCALL SUBB1 ;IN H(B),L(A)
XCH A,B ;OUT A
LCALL SUBB1 ;R2,A,B,C
SWAP A
ORL A,B
RET
SUBB1: CLR C
SUBB A,#30H
MOV R2,A
SUBB A,#0AH
JC SUB10
XCH A,R2
SUBB A,#07H
RET
SUB10: MOV A,R2
RET
;*****************************************************
BCD_ASC: ANL A,#0FH
ADD A,#90H ;IN ACC
DA A ;OUT ACC
ADDC A,#40H
DA A
RET
;************************************************************************
;*名称: INT_50MS *
;************************************************************************
INT_50MS: PUSH ACC
CLR TR0
MOV A,COUNT_50MS
INC A
CJNE A,#0FFH,INTT1
SETB OVER_500MS
POP ACC
RETI
INTT1: MOV COUNT_50MS,A
MOV TH0,#3CH
MOV TL0,#0AFH
SETB TR0
POP ACC
RETI
;******************************************************
DELAY2S: MOV R7,#04
DELAY21: LCALL FEED_DOG ;*********
MOV R6,#0FFH
DELAY22: MOV R5,#0FFH
DELAY23: NOP
NOP
NOP
DJNZ R5,DELAY23
DJNZ R6,DELAY22
DJNZ R7,DELAY21
RET
;**********************************************************************
WAITE: MOV COUNT_50MS,#00H ;等待接受数据 (<500MS)
CLR OVER_500MS
MOV TH0,#3CH
MOV TL0,#0AFH
SETB EA
SETB ET0
SETB TR0
SETB REN
WAITE2: JB OVER_500MS,WAITE1
lcall FEED_DOG
JNB RI,WAITE2
WAITE1: CLR ET0
CLR TR0
setb EA
RET
;***********************************************************
EE_READ_B: CLR EA ;EE读(入口:A地址)(出口:A数据)
MOV DEECON,#00H
MOV DEEADR,A
EE_R1: MOV A,DEECON
ANL A,#80H
CJNE A,#80H,EE_R1
MOV A,DEECON
ANL A,#07FH
MOV DEECON,A
MOV A,DEEDAT
SETB EA
RET
;***********************************************************
EE_WRITE_B: CLR EA ;EE写(入口:A地址,B数据)
MOV DEECON,#00H
MOV DEEDAT,B
MOV DEEADR,A
EE_W1: MOV A,DEECON
ANL A,#80H
CJNE A,#80H,EE_W1
MOV A,DEECON
ANL A,#07FH
MOV DEECON,A
SETB EA
RET
;******************************************************************************
AT_AT: DB 04H,41H,54H,0DH ;AT
AT_OK: DB 07H,0DH,0AH,4FH,4BH,0DH,0AH ;OK
AT_CGRESET: DB 0CH,41H,54H,2BH,43H,47H,52H,45H,53H,45H,54H,0DH ;AT+CGRESET
AT_CMGF: DB 0BH,41H,54H,2BH,43H,4DH,47H,46H,3DH,30H,0DH ;AT+CMGF=0<CR>
AT_CNMI: DB 13H,41H,54H,2BH,43H,4EH,4DH,49H,3DH,32H,2CH,31H,2CH,30H,2CH,30H,2CH,30H,0DH ;AT+CNMI=2,1,0,0,0<CR>
AT_CSQ: DB 08H,41H,54H,2BH,43H,53H,51H,0DH ;AT+CSQ
ATCSQ: DB 09H,0DH,0AH,2BH,43H,53H,51H,3AH,20H ;+CSQ:<SPACE>
DB 06H,2CH,39H,39H,0DH,0AH
AT_CMGR: DB 09H,41H,54H,2BH,43H,4DH,47H,52H,3DH ;AT+CMGR=
ATCMGR: DB 08H,0DH,0AH,2BH,43H,4DH,47H,52H ;<CR><LF>+CMGR
AT_CMGD: DB 09H,41H,54H,2BH,43H,4DH,47H,44H,3DH ;AT+CMGD=
ATADDR1: ;DB 0DH,33H,31H,39H,30H,30H,33H,31H,35H,32H,30H,46H,38H ;13093051028f
;DB 0DH,33H,31H,38H,30H,35H,33H,30H,30H,32H,34H,46H,30H ;13083500420F
;DB 0DH,33H,31H,39H,30H,30H,33H,30H,35H,39H,39H,46H,38H ;13093050998F
;DB 0DH,33H,31H,35H,30H,32H,37H,34H,30H,31H,34H,46H,37H ;13057204417
DB 0DH,33H,31H,30H,30H,33H,33H,36H,32H,36H,32H,46H,34H ;13003326264F
;DB 0DH,33H,31H,30H,30H,33H,33H,30H,33H,35H,35H,46H,35H ;13003330555F
;DB 0DH,33h,31h,30H,30H,33H,33H,35h,38h,39h,33h,46h,39h ;13003385399f
ATADDR: ;DB 05H,33H,38H,46H,31H ;831F
DB 07H,38H,32H,30H,30H,46H,32H ;28002F
AT_CMGS: DB 09H,41H,54H,2BH,43H,4DH,47H,53H,3DH ;AT+CMGS=
ATMSGWAT: DB 05H,0DH,0AH,3EH,20H ;<CR><LF>><NUL>
AT_HEAD1: ;DB 0FH,00H,11H,00H,0BH,81H,31H,90H,03H,15H,20H,0F8H,00H,15H,0AAH ;消息头,目标地址13093051028,8BIT编码
;DB 0FH,00H,11H,00H,0BH,81H,31H,80H,53H,00H,24H,0F0H,00H,15H,0AAH ;消息头,目标地址13083500420,8BIT编码
;DB 0FH,00H,11H,00H,0BH,81H,31H,90H,03H,05H,99H,0F8H,00H,15H,0AAH ;消息头,目标地址13093050998,8BIT编码
;DB 0FH,00H,11H,00H,0BH,81H,31H,50H,27H,40H,14H,0F7H,00H,15H,0AAH ;消息头,目标地址13057204417,8BIT编码
DB 0FH,00H,11H,00H,0BH,81H,31H,00H,33H,62H,62H,0F4H,00H,15H,0AAH ;消息头,目标地址13003326264,8BIT编码
;DB 0FH,00H,11H,00H,0BH,81H,31H,00H,33H,03H,55H,0F5H,00H,15H,0AAH ;消息头,目标地址13003330555,8BIT编码
;DB 0FH,00H,11H,00H,0BH,81H,31H,00H,33H,58H,93H,0F9H,00H,15H,0AAH ;发送PDU消息头,目标地址13003385399,8BIT编码
;AT_HEAD: ;DB 0BH,00H,11H,00H,03H,81H,38H,0F1H,00H,15H,0AAH ;消息头,目标地址831,8BIT编码
; DB 0CH,00H,11H,00H,05H,81H,82H,00H,0F2H,00H,15H,0AAH ;消息头,目标地址28002,8BIT编码
ATCMGS: DB 09H,0AH,2BH,43H,4DH,47H,53H,3AH,20H ;<LF>+CMGS:<NUL>
ATE0: DB 06H,41H,54H,45H,30H,0DH ;ATE0
CHANGBIAO: DB 04H,48H,54H,43H ;厂标HTC
PAT_STA: DB 01H,02H,53H,0F3H ;读状态字
CARD_NUM: DB 0DH,31H,33H,33H,39H,35H,31H,30H,30H,35H,30H,30H,0DH
TEXT: DB 07H,48H,45H,4CH,4CH,4FH,1AH
AT_HEAD: DB 04H,00H,11H,00H ;消息头,
AT_NUM1: DB 05H,50H,38H,70H,30H ;05830703 后勤平台
AT_NUM2: DB 08H,68H,31H,83H,22H,49H,94H,0F1H ;13382294491 王强
AT_NUM3: DB 08H,68H,31H,53H,18H,70H,72H,0F2H ;13358107272 李大农
AT_NUM4: DB 08H,68H,31H,53H,18H,60H,36H,0F3H ;13358106633 刘继斌
AT_NUM5: DB 08H,68H,31H,18H,15H,30H,47H,0F7H ;13815103747 邱师傅
AT_NUM6: DB 08H,68H,31H,90H,03H,30H,07H,0F0H ;SIM/UIM号13093003700 田备
AT_NUM7: DB 08H,68H,31H,90H,03H,03H,22H,0F4H ;13093030224 赵让
AT_TRAIL: DB 04H,00H,08H,01H ;消息尾
AT_TEXT1: ;DB 09H,80H,0D6H,9CH,7CH,8DH,77H,5EH,8AH ;胖鱼
DB 15H,62H,0A5H,8BH,66H,00H,3AH,6DH,88H,96H,32H,68H,13H,88H,0ABH,62H,53H,5FH,00H,00H,21H
AT_TEXT2: ;DB 09H,80H,0D6H,9CH,7CH,8DH,77H,5EH,8AH ;胖鱼
DB 15H,63H,0D0H,79H,3AH,00H,3AH,6DH,88H,96H,32H,68H,13H,5DH,0F2H,51H,73H,95H,0EDH,00H,21H
;***************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -