📄 sms6.asm
字号:
MOV @R1,A
INC R1
INC RDATE_LEN
CJNE A,#0DH,I232_CHK
SETB SMS_DATE_OK
I232_CHK:
CJNE A,#05H,I_232_EOF
SETB COM_DATE_READY
I_232_EOF:
POP DPH
POP DPL
POP PSW ;恢复现场
POP ACC
;开放串口中断
RETI
;----------------------------------------
; CHECK_UP: 检查是否是"OK"
; COMD_OK
;----------------------------------------
CHECK_UP:
LCALL WATCHDOG
clr COMD_OK
CLR READ_OK
MOV R0,#BUF_DATA
CHK_COM: ;校验命令返回码?
INC R0
INC R0
MOV A,@R0
CJNE A,#4FH,CHK_READ
INC R0
mov a,@r0
cjne a,#4bh,CHECK_UP_EOF
SETB COMD_OK
LJMP CHECK_UP_EOF
CHK_READ: ;校验数据准备提示符?
CJNE A,#3EH,CHK_SEND
INC R0
MOV A,@R0
CJNE A,#20H,CHECK_UP_EOF
SETB READ_OK
CHK_SEND:
MOV A,#13
ADD A,R0
MOV R0,A
MOV A,@R0
CJNE A,#4FH,CHECK_UP_EOF
INC R0
MOV A,@R0
CJNE A,#4BH,CHECK_UP_EOF
SETB SEND_OK
CHECK_UP_EOF:
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; explain.asm 命令解释程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
explain:
MOV RO,#BUF_DATA
INC R0
MOV A,@R0
MOV R2,A
ADD A,#4
CJNE A,RDATE_LEN,EXP_ERR
MOV R0,#BUF_DATA
INC R0
INC R0
MOV A,@R0
PUSH R2
EXP_SUM:
INC R0
ADD A,@R0
MOV SUM,A
DJNZ R2,EXP_SUM
MOV R0,#BUF_DATA
MOV A,R0
POP R2
ADD A,R2
INC A
MOV R0,A
CJNE @R0,SUM,EXP_ERR
MOV R0,#BUF_DATA
INC R0
INC R0
INC R0
MOV R_EPAGE,#00H
MOV R_EADD,#00H
MOV R2,#13
LCALL W_24C16
JB BIT_EEF,EXP_ERR
INC R0
MOV R_EPAGE,#01H
MOV R_EADD,#00H
MOV R2,#13
ret
;======================================================
;功能:
; EEPROM 24C16程序读写模块:
; 连续方式读: R_24C16 (R_EPAGE,R_EADDR,R0,R2)
; 连续字节方式写: W_24C16 (R_EPAGE,R_EADDR,R0,R2)
;说明:
;======================================================
;---------------------------------------------------
;功能:
; 对24C16的RAM进行合法性检查
;入口: R_EPAGE--
; R_EADDR--
; R0--内存地址
; R2--长度<256
;---------------------------------------------
R_24C16:
CLR EA
;--终止可能没有结束的读写
CLR BIT_ESCL
CLR BIT_ESDA
SETB BIT_ESCL
SETB BIT_ESDA
MOV R5,R_EADDR
LOP4:
MOV A,R_EPAGE
ANL A,#07H
RL A
ORL A,#0A0H
;--START
CLR BIT_ESCL
SETB BIT_ESDA
SETB BIT_ESCL
CLR BIT_ESDA
;--PAGE ADDR
MOV R3,#8
ILP:
CLR BIT_ESCL
RLC A
MOV BIT_ESDA,C
SETB BIT_ESCL
DJNZ R3,ILP
CLR BIT_ESCL
SETB BIT_ESDA
;--ACK
SETB BIT_ESCL
JB BIT_ESDA,ER3
;--WORD ADDR
MOV A,R5
MOV R3,#8
ILP1:
CLR BIT_ESCL
RLC A
MOV BIT_ESDA,C
SETB BIT_ESCL
DJNZ R3,ILP1
CLR BIT_ESCL
SETB BIT_ESDA
;--ACK
SETB BIT_ESCL
ER3:
JNB BIT_ESDA,ER31
LJMP ER2
ER31:
;--注释部分为使用随机方式读
CLR BIT_ESCL
;--START
SETB BIT_ESDA
SETB BIT_ESCL
CLR BIT_ESDA
;--SLAVE ADDRESS
MOV A,R_EPAGE
ANL A,#07H
RL A
ORL A,#0A1H
MOV R3,#08H
LOP2:
CLR BIT_ESCL
RLC A
MOV BIT_ESDA,C
SETB BIT_ESCL
DJNZ R3,LOP2
CLR BIT_ESCL
SETB BIT_ESDA
SETB BIT_ESCL
;--BYTES
MOV R4,#08H
LOP3:
MOV A,@R0
CLR BIT_ESCL
SETB BIT_ESCL
MOV C,BIT_ESDA
RLC A
MOV @R0,A
DJNZ R4,LOP3
INC R0
INC R5
DJNZ R2,LOP40
LJMP LOP41
LOP40:
LJMP LOP4
LOP41:
;--STOP
CLR BIT_ESCL
CLR BIT_ESDA
SETB BIT_ESCL
SETB BIT_ESDA
CLR BIT_EEF
SETB EA
RET
ER2:
SETB BIT_EEF
SETB EA
RET
;---------------------------------------------------
;功能:
; 连续写24C16
;入口: R_EPAGE--
; R_EADDR--
; R0--内存地址
; R2--长度
;;---------------------------------------------
W_24C16:
CLR EA
;--START AND STOP
CLR BIT_ESCL
SETB BIT_ESDA
SETB BIT_ESCL
CLR BIT_ESDA
;--PAGE ADDR
MOV A,R_EPAGE
ANL A,#07H
RL A
ORL A,#0A0H
MOV R3,#08H
ILOP:
CLR BIT_ESCL
RLC A
MOV BIT_ESDA,C
SETB BIT_ESCL
DJNZ R3,ILOP
;--ACK
CLR BIT_ESCL
SETB BIT_ESDA
SETB BIT_ESCL
JB BIT_ESDA,HERE
;--WORD ADDR
MOV A,R_EADDR
MOV R3,#8
ILOP1:
CLR BIT_ESCL
RLC A
MOV BIT_ESDA,C
SETB BIT_ESCL
DJNZ R3,ILOP1
;--ACK
CLR BIT_ESCL
SETB BIT_ESDA
SETB BIT_ESCL
JB BIT_ESDA,HERE
;--DATA
ILOP3:
MOV R3,#8
MOV A,@R0
ILOP2:
CLR BIT_ESCL
RLC A
MOV BIT_ESDA,C
SETB BIT_ESCL
DJNZ R3,ILOP2
;--ACK
CLR BIT_ESCL
SETB BIT_ESDA
SETB BIT_ESCL
JB BIT_ESDA,HERE
INC R0
DJNZ R2,ILOP3
;--STOP
CLR BIT_ESCL
CLR BIT_ESDA
SETB BIT_ESCL
SETB BIT_ESDA
CLR BIT_EEF
SETB EA
RET
HERE:
SETB BIT_EEF
SETB EA
RET
;-------------------------------------------
WATCHDOG:
; MOV WDTRST,#01EH
; MOV WDTRST,#0E1H
NOP
NOP
RET
;-------------------------------------------
; Delay1MS:
;
;-------------------------------------------
Delay1MS:
PUSH _R2
MOV _R2,#98
DM11_1:
LCALL WATCHDOG
DJNZ _R2,DM11_1
POP _R2
NOP
RET
;-------------------------------------------
; Delay100MS:
; in -- RCNT_MS:延时值MS (<256)
;
;-------------------------------------------
Delay10MS:
PUSH _R2
PUSH _R3
MOV _R2,#100
DM_1:
MOV _R3,#60
DM_2:
DJNZ _R3,$
DJNZ _R2,DM_1
POP _R3
POP _R2
NOP
RET
;-------------------------------------------
; Delay100MS:
; in --
;
;-------------------------------------------
Delay100MS:
PUSH _R1
MOV _R1,#10
DM1_1:
lCALL DELAY10MS
DJNZ _R1,DM1_1
POP _R1
NOP
RET
;---------------------------------------------
delay1000ms:
lcall delay100ms
lcall delay100ms
lcall delay100ms
lcall delay100ms
lcall delay100ms
lcall delay100ms
lcall delay100ms
lcall delay100ms
lcall delay100ms
lcall delay100ms
ret
table_reset: db 'A','T','Z','0',0dh,0Ah
TABLE_gogsm: DB 'A','T','+','C','O','P','S','=','0',0DH,0AH
TABLE_setsms1: DB 'A','T','+','C','S','C','A','=','+','8','6','1'
DB '3','8','0','0','5','1','9','5','0','0',0DH,0AH
TABLE_SETSMS0: DB 'A','T','+','C','M','G','F','=','0',0DH,0AH
TABLE_SCOMRATE: DB 'A','T','+','I','P','R','=','9','6','0','0',0DH,0AH
TABLE_STECHAR: DB 'A','T','+','C','S','M','P','=','1','7',',','1','6'
DB '7',',','0',',','2','5',0DH,0AH
table_msglen: db 'A','T','+','C','M','G','S','=','2','5',0DH;'8','1','5','0','4','1','8','0','7',0DH
table_MSGDATE: DB ;'4','F','6','0','5','9','7','d'1AH
db '0','8','9','1','6','8','3','1','0','8','5';08 91 6831085
db '0','9','1','0','5','F','0','1','1','0','0';09105f0 1100
db '0','D','9','1','6','8','3','1','1','8','0';0d 91 6831681
db '5','1','4','0','8','F','7','0','0','0','8';18954f4 0008
db '0','0','0','A','7','E','B','F','8','D','E';0010 4e2d<sub>
DB 'F','8','F','C','7','8','F','7','D','F','F','0','1',1AH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -