📄 sms7.asm
字号:
SS_41:
LCALL DELAY100MS
MOV A,RDATE_LEN
CLR C
CJNE A,#09H,$+3
JC SS_41
LCALL CHECK_UP
INC RSEND_CONT
JNB SEND_OK,SS_42
AJMP SS_43
SS_42:
CLR C
MOV A,RSEND_CONT
CJNE A,#3,$+3
JNC SS_4
SS_43:
CLR IF_ACK_BIT
SETB SMSLED
CLR EA
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;串口中断
;IN :R0-SENDADDR,R1-RECIVEADDR
;OUT :RDATE_LEN ,BUF_DATA
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
INT_232:
PUSH ACC ;保护现场
PUSH PSW
PUSH DPL
PUSH DPH
JBC RI,I_232_RCV
I_232_SEND:
CLR TI
MOV A,SDATE_LEN
JZ I_232_EOF
MOV A,@R0
MOV SBUF,A
INC R0
dec SDATE_LEN
LJMP I_232_EOF
I_232_RCV:
CLR RI
JB IF_ACK_BIT,I_232_ROF
MOV A,SBUF
CJNE A,#06H,I_232_RMSG
MOV R1,#BUF_DATA ;ACK
MOV @R1,A
INC R1
LCALL WAIT_RI
JB BIT_TIMEOUT,I_232_EOF
MOV A,SBUF ;COMMD
MOV @R1,A
MOV CMD_R,A
INC R1
LCALL WAIT_RI
JB BIT_TIMEOUT,I_232_ERR
MOV A,SBUF ;LEN
MOV @R1,A
INC R1
MOV R2,A
CLR A
I_232_DATA:
LCALL WAIT_RI
JB BIT_TIMEOUT,I_232_ERR
MOV @R1,SBUF ;DATE
ADD A,@R1
MOV SUM,A
INC R1
DJNZ R2,I_232_DATA
LCALL WAIT_RI
JB BIT_TIMEOUT,I_232_ERR
MOV @R1,SBUF ;SUM
MOV A,@R1
CJNE A,SUM,I_232_ERR
SETB COM_DATE_READY
CLR TI
MOV SBUF,#06
JNB TI,$
CLR TI
MOV SBUF,CMD_R ;返回成功标志,和命令码
JNB TI,$
CLR TI
AJMP I_232_EOF
I_232_ERR:
CLR TI
MOV SBUF,#26
JNB TI,$
MOV SBUF,CMD_R ;返回失败标志,和命令码
JNB TI,$
CLR TI
AJMP I_232_EOF
I_232_ROF:
MOV A,SBUF
MOV @R1,A
INC R1
INC RDATE_LEN
I_232_EOF:
POP DPH
POP DPL
POP PSW ;恢复现场
POP ACC
RETI
I_232_RMSG:
MOV R1,#BUF_DATA
MOV @R1,A
INC R1
LCALL WAIT_RI
JB BIT_TIMEOUT,I_232_EOF
MOV @R1,SBUF
INC R1
I_232_RMSG1:
LCALL WAIT_RI
JB BIT_TIMEOUT,I_232_EOF
MOV @R1,SBUF
MOV A,@R1
INC R1
CJNE A,#0AH,I_232_RMSG1
MOV R1,#BUF_DATA+2
MOV A,@R1
CJNE A,#2BH,I_232_EOF
SETB MGS_RI
MOV R1,#BUF_DATA+14
MOV RSMS_LIST1,@R1
INC R1
MOV RSMS_LIST2,@R1
AJMP I_232_EOF
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;WAIT_RI:
;IN:
;OUT:BIT_TIMEOUT
;;;;;;;;;;;;;;;;;;;;;;;;;;;
WAIT_RI:
MOV TH1,#00
MOV TL1,#00
CLR BIT_TIMEOUT
SETB TR1
NOP
NOP
WAITR_1:
lCALL WATCHDOG
NOP
JB RI,WAITR_2
NOP
NOP
JNB TF1,WAITR_1 ;等待中断发送数据完毕,或超时
SETB BIT_TIMEOUT
WAITR_2:
CLR TR1
CLR TF1
CLR RI
RET
;----------------------------------------
;CHECK_UP: 检查是否是"OK"
; COMD_OK
;IN:BUF_DATA
;OUT:COMD_OK,READY_OK,SEND_OK
;----------------------------------------
CHECK_UP:
SETB RS0
CLR RS1
LCALL WATCHDOG
clr COMD_OK
CLR READ_OK
CLR SEND_OK
MOV R0,#BUF_DATA+2
CHK_COM: ;校验命令返回码?
CJNE @R0,#4FH,CHK_READ
INC R0
Cjne @R0,#4bh,CHECK_UP_EOF
SETB COMD_OK
LJMP CHECK_UP_EOF
CHK_READ: ;校验数据准备提示符?
CJNE @R0,#3EH,CHK_SEND
INC R0
CJNE @R0,#20H,CHECK_UP_EOF
SETB READ_OK
CHK_SEND:
CJNE @R0,#2BH,CHECK_UP_EOF
INC R0
CJNE @R0,#43H,CHECK_UP_EOF
INC R0
CJNE @R0,#4DH,CHECK_UP_EOF
INC R0
CJNE @R0,#47H,CHECK_UP_EOF
INC R0
CJNE @R0,#53H,CHECK_UP_EOF
SETB SEND_OK
CHECK_UP_EOF:
CLR RS0
CLR RS1
RET
;======================================================
;功能:
; EEPROM 24C16程序读写模块:
; 连续方式读: R_24C16 (R_EPAGE,R_EADDR,R0,R2)
; 连续字节方式写: W_24C16 (R_EPAGE,R_EADDR,R0,R2)
;说明:
;======================================================
;---------------------------------------------------
;功能:
; 对24C16的
;入口: 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','=','+'
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','N','M','I','=','2',',','1',',','0',',','1',',','1',0DH,0AH
TABLE_RMSG: DB 'A','T','+','C','M','G','R','='
TABLE_DMSG: DB 'A','T','+','C','M','G','D','='
table_msgcomd: db 'A','T','+','C','M','G','S','='
TABLE_MSGstart: DB '0','8','9','1'
TABLE_MSGhead: DB '1','1','0','0','0','D','9','1'
TABLE_MSGCONTRAL: DB '0','0','0','8','0','0'
TABLE_RACK: DB 'A','T','+','C','M','G','S','=','0','2','3',0DH
TABLE_SETOK: DB '8','B','B','E','7','F','6','E','6','2','1','0','5','2','9','F',1AH
TABLE_SETERR: DB '8','B','B','E','7','F','6','E','5','9','3','1','8','D','2','5',1AH
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -