📄 try.bas
字号:
phmsg$ = ""
LOOP
END SUB
SUB Delay (pa%)
DIM startt AS STRING
DIM endt AS STRING
startt = TIME$
DO
endt = TIME$
IF (60 + VAL(RIGHT$(endt, 2)) - VAL(RIGHT$(startt, 2))) MOD 60 > (pa% MOD 60) THEN
EXIT DO
END IF
LOOP
END SUB
SUB DisableWatchDog
DIM lshi AS INTEGER
OUT &H22, &H37
lshi = INP(&H23)
OUT &H23, lshi AND &HBF
END SUB
SUB DSendMsg (SMsg$, tel$)
DIM msg AS STRING
DIM str AS STRING
DIM lshi AS INTEGER
DIM startt AS STRING
DIM endt AS STRING
msg = "0011000D9168"
lshi = 0
WHILE lshi < 6
IF lshi = 5 THEN
msg = msg + "F"
ELSE
msg = msg + CHR$(ASC(MID$(tel$, 2 * lshi + 2, 1)))
END IF
msg = msg + CHR$(ASC(MID$(tel$, 2 * lshi + 1, 1)))
lshi = lshi + 1
WEND
msg = msg + "000801"
IF LEN(SMsg$) < 16 THEN msg = msg + "0"
msg = msg + LTRIM$(HEX$(LEN(SMsg$)))
REM Msg = Msg + SMsg$ '"5F007BB162A58B66"
lshi = 0
WHILE lshi < LEN(SMsg$)
str = HEX$(ASC(MID$(SMsg$, lshi + 1, 1)))
IF ASC(MID$(SMsg$, lshi + 1, 1)) < 16 THEN str = "0" + LTRIM$(str)
msg = msg + LTRIM$(str)
lshi = lshi + 1
WEND
PRINT "Excuting ATZ!"
PRINT #12, "ATZ" + CHR$(13)
str = ""
startt = TIME$
DO
str = MsgFromPhone 'str + INPUT$(LOC(12), #12)
endt = TIME$
IF (60 + VAL(RIGHT$(endt, 2)) - VAL(RIGHT$(startt, 2))) MOD 60 > MaxT THEN
PRINT "Excute ATZ Failed!"
EXIT DO
END IF
LOOP UNTIL INSTR(str, "OK")
MsgFromPhone = ""
PRINT str
PRINT "Excuting AT+CMGF=0!"
PRINT #12, "AT+CMGF=0" + CHR$(13)
str = ""
startt = TIME$
DO
str = MsgFromPhone 'str + INPUT$(LOC(12), #12)
endt = TIME$
IF (60 + VAL(RIGHT$(endt, 2)) - VAL(RIGHT$(startt, 2))) MOD 60 > MaxT THEN
PRINT "Excute AT+CMGF=0 Failed!"
EXIT DO
END IF
LOOP UNTIL INSTR(str, "OK")
MsgFromPhone = ""
PRINT str
PRINT ; "Excuting AT+CMGS=0XX!"
PRINT #12, "AT+CMGS=0" + LTRIM$(STR$(15 + LEN(SMsg$))) + CHR$(13)
str = ""
startt = TIME$
DO
str = MsgFromPhone 'str + INPUT$(LOC(12), #12)
endt = TIME$
IF (60 + VAL(RIGHT$(endt, 2)) - VAL(RIGHT$(startt, 2))) MOD 60 > MaxT THEN
PRINT "Excute AT+CMGS=0XX Failed!"
EXIT DO
END IF
LOOP UNTIL INSTR(str, ">")
MsgFromPhone = ""
PRINT str
PRINT ; "Sending Message!"
PRINT #12, msg + CHR$(&H1A) + CHR$(&HD)
'PRINT #12, "0011000D91683100683473F100080108535A4E07901A4FE1" + CHR$(&H1A) + CHR$(13)
'PRINT #12, "0011000D91683103781793F5000801080031003200330044" + CHR$(&H1A) + CHR$(13)
str = ""
startt = TIME$
DO
str = MsgFromPhone 'str + INPUT$(LOC(12), #12)
endt = TIME$
IF (60 + VAL(RIGHT$(endt, 2)) - VAL(RIGHT$(startt, 2))) MOD 60 > MaxT THEN
PRINT "Sending message Failed!"
EXIT DO
END IF
LOOP UNTIL INSTR(str, "OK")
MsgFromPhone = ""
PRINT str
END SUB
SUB EnableWatchDog
DIM lshi AS INTEGER
OUT &H22, &H37
lshi = INP(&H23)
OUT &H23, lshi OR &H40
END SUB
SUB FeedWatchDog
CALL UnLockConfig
CALL DisableWatchDog
CALL ResetWatchDog
CALL EnableWatchDog
CALL LockConfig
END SUB
FUNCTION GenCommand$ (pa%)
DIM lshi, lshj, v AS INTEGER
DIM str AS STRING
DIM crc AS INTEGER
DIM I, j, LshCount AS INTEGER
DIM a(0 TO 9) AS INTEGER
DIM b(0 TO 9) AS INTEGER
v = VARPTR(pa%)
lshi = PEEK(v + 1): lshj = PEEK(v)
a(0) = 2: a(1) = &H52: a(2) = lshi: a(3) = lshj
I = 0: crc = 0
WHILE I < 4
crc = CalculateCharacterCRC16(crc, a(I))
I = I + 1
WEND
v = VARPTR(crc)
lshi = PEEK(v + 1): lshj = PEEK(v)
a(4) = lshi: a(5) = lshj
b(0) = a(0)
I = 1: j = 1
WHILE I < 6
SELECT CASE a(I)
CASE 2, 3, &H10, &H11, &H13:
b(j) = &H10: b(j + 1) = &H40 + a(I)
j = j + 1
CASE ELSE
b(j) = a(I)
END SELECT
j = j + 1
I = I + 1
WEND
LshCount = j
str = CHR$(2)
I = 1
WHILE I < LshCount
str = str + CHR$(b(I))
I = I + 1
WEND
str = str + CHR$(3) + CHR$(13)
GenCommand = str
END FUNCTION
FUNCTION GENCRC16% (pi%)
DIM j AS INTEGER
DIM k1 AS LONG
DIM crc1 AS LONG
DIM k, crc AS INTEGER
DIM LshResult AS INTEGER
k1 = pi%
k1 = k1 * 256
k = L2S(k1)
crc = 0
j = 0
WHILE j < 8
IF ((crc XOR k) AND &H8000) THEN
crc1 = crc
crc1 = crc1 * 2
crc = L2S(crc1)
crc = crc XOR &H1021
ELSE
crc1 = crc
crc1 = crc1 * 2
crc = L2S(crc1)
END IF
k1 = k
k1 = k1 * 2
k = L2S(k1)
j = j + 1
WEND
LshResult = crc
GENCRC16 = LshResult
END FUNCTION
FUNCTION GetMsgFromPhone% (no%, phmsg$)
DIM gg AS INTEGER
DIM TelStr AS STRING
DIM TimeStr AS STRING
DIM NewSms AS INTEGER
DIM startt AS STRING
DIM endt AS STRING
DIM SMSII AS INTEGER
DIM lshreturn AS INTEGER
DIM SMSReStr AS STRING
DIM temp AS STRING
NewSms = False
lshreturn = 0
FOR SMSII = 1 TO MaxMsgNum
SMSII = no%
SMSReStr = ""
startt = TIME$
PRINT "Excuting AT+CMGR=" + STR$(SMSII)
PRINT #12, "AT+CMGR=" + STR$(SMSII) + CHR$(13)
DO
endt = TIME$
SMSReStr = MsgFromPhone 'SMSReStr + INPUT$(LOC(12), 12)
IF (60 + VAL(RIGHT$(endt, 2)) - VAL(RIGHT$(startt, 2))) MOD 60 > MaxT THEN
PRINT "Excute AT+CMGR=" + STR$(SMSII) + "Failed!"
EXIT DO
END IF
LOOP UNTIL INSTR(1, SMSReStr, "OK")
MsgFromPhone = ""
IF INSTR(1, SMSReStr, "+CMGR: 0,,0") > 0 OR SMSReStr = "" THEN
NewSms = False
ELSE
lshreturn = lshreturn + 1
gg = INSTR(1, SMSReStr, "D9168")
IF gg > 0 THEN
TelStr = TelEX(MID$(SMSReStr, gg + 5, 12))
TimeStr = TimeEX(MID$(SMSReStr, gg + 21, 12))
gb = INSTR(gg + 37, SMSReStr, CHR$(13))
temp = MID$(SMSReStr, gg + 37, gb - gg - 37)
phmsg$ = temp
lshi = lshi + 1
SMSReStr = ""
startt = TIME$
PRINT "Excuting AT+CMGD=" + STR$(SMSII)
PRINT #12, "AT+CMGD=" + STR$(SMSII) + CHR$(13)
DO
endt = TIME$
SMSReStr = MsgFromPhone 'SMSReStr + INPUT$(LOC(12), 12)
IF (60 + VAL(RIGHT$(endt, 2)) - VAL(RIGHT$(startt, 2))) MOD 60 > MaxT THEN
PRINT "Excute AT+CMGD=" + STR$(SMSII) + "Failed!"
EXIT DO
END IF
LOOP UNTIL INSTR(1, SMSReStr, "OK")
MsgFromPhone = ""
END IF
END IF
EXIT FOR
NEXT
GetMsgFromPhone = lshreturn
END FUNCTION
FUNCTION Ieee2Double# (pa%())
DIM v, lshi, lshj, lshk, lshl AS INTEGER
DIM LdbResult AS DOUBLE
v = VARPTR(LflResult)
POKE v + 7, pa%(0): POKE v + 6, pa%(1): POKE v + 5, pa%(2): POKE v + 4, pa%(3)
POKE v + 3, pa%(4): POKE v + 2, pa%(5): POKE v + 1, pa%(6): POKE v + 0, pa%(7)
Ieee2Double = LdbResult
END FUNCTION
FUNCTION Ieee2Float! (pa%())
DIM v, lshi, lshj, lshk, lshl AS INTEGER
DIM LflResult AS SINGLE
v = VARPTR(LflResult)
POKE v + 3, pa%(0): POKE v + 2, pa%(1): POKE v + 1, pa%(2): POKE v, pa%(3):
Ieee2Float = LflResult
END FUNCTION
SUB InitWatchDog (pa%, pb%, pc%, pd%)
CALL UnLockConfig
CALL DisableWatchDog
CALL SetCounterValue(pa%, pb%, pc%)'per 512s
CALL SetTimeAction(pd%)
CALL EnableWatchDog
CALL LockConfig
END SUB
FUNCTION L2S% (pl&)
DIM lshi, lshj AS INTEGER
DIM LshResult AS INTEGER
v = VARPTR(pl&)
lshi = PEEK(v): lshj = PEEK(v + 1)
v = VARPTR(LshResult)
POKE v, lshi: POKE v + 1, lshj
L2S = LshResult
END FUNCTION
SUB LockConfig
OUT &H22, &H13
OUT &H23, &H0
END SUB
FUNCTION ReadFile%
DIM lshi, lshreturn AS INTEGER
DIM str AS STRING
DIM readstatus AS STRING
lshreturn = 0
readstatus = ""
PRINT "Openning m.txt for validate!"
OPEN "m.txt" FOR INPUT AS #12
str = INPUT$(LOF(12), 12)
IF INSTR(str, "[End]") = 0 THEN
ReadFile% = 1
CLOSE #12
RETURN
END IF
CLOSE #12
PRINT "Openning m.txt for input!"
OPEN "m.txt" FOR INPUT AS #12
WHILE readstatus <> "End"
LINE INPUT #12, str
SELECT CASE str
CASE "[Tel]"
readstatus = "Tel"
lshi = 0
CASE "[Reg]":
readstatus = "Reg"
lshi = 0
CASE "[Tim]":
readstatus = "Tim"
lshi = 0
CASE "[Cen]":
readstatus = "Cen"
lshi = 0
CASE "[End]":
readstatus = "End"
CASE "":
CASE ELSE
SELECT CASE readstatus
CASE "Tel"
tel(lshi) = str
CASE "Reg"
reg(0, lshi) = LEFT$(str, INSTR(str, ",") - 1)
str = RIGHT$(str, LEN(str) - INSTR(str, ","))
reg(1, lshi) = LEFT$(str, INSTR(str, ",") - 1)
str = RIGHT$(str, LEN(str) - INSTR(str, ","))
reg(2, lshi) = LEFT$(str, INSTR(str, ",") - 1)
str = RIGHT$(str, LEN(str) - INSTR(str, ","))
reg(3, lshi) = str
CASE "Cen"
CentralCode = str
CASE "Tim"
interval = VAL(str)
CASE ELSE
END SELECT
lshi = lshi + 1
IF lshi > MaxNum THEN
lshreturn = 1
END IF
END SELECT
WEND
CLOSE #12
ReadFile% = lshreturn
END FUNCTION
SUB ResetWatchDog
DIM lshi AS INTEGER
OUT &H22, &H3C
lshi = INP(&H23)
OUT &H23, lshi OR &H20
END SUB
FUNCTION S2L& (pl%)
DIM lshi, lshj AS INTEGER
DIM LlnResult AS LONG
v = VARPTR(pl%)
lshi = PEEK(v): lshj = PEEK(v + 1)
v = VARPTR(LlnResult)
POKE v, lshi: POKE v + 1, lshj
S2L = LlnResult
END FUNCTION
SUB SetCounterValue (pa%, pb%, pc%)
DIM lshi AS INTEGER
OUT &H22, &H3B
OUT &H23, pa%
OUT &H22, &H3A
OUT &H23, pb%
OUT &H22, &H39
OUT &H23, pc%
END SUB
SUB SetTimeAction (pa%)
DIM lshi AS INTEGER
OUT &H22, &H38
lshi = INP(&H23)
OUT &H23, (lshi AND &HF) + pa% * 16
END SUB
FUNCTION TelEX$ (DataStr AS STRING)
DIM tr AS INTEGER
DIM rstr AS STRING
tr = LEN(DataStr)
FOR ii = 1 TO tr STEP 2
rstr = rstr + MID$(DataStr, ii + 1, 1)
rstr = rstr + MID$(DataStr, ii, 1)
NEXT
rstr = MID$(rstr, 1, tr - 1)
TelEX$ = rstr
END FUNCTION
FUNCTION TimeEX$ (DataStr AS STRING)
DIM tr AS INTEGER
DIM rstr AS STRING
tr = LEN(DataStr)
FOR ii = 1 TO tr STEP 2
rstr = rstr + MID$(DataStr, ii + 1, 1)
rstr = rstr + MID$(DataStr, ii, 1)
SELECT CASE ii
CASE 1, 3
rstr = rstr + "-"
CASE 5
rstr = rstr + " "
CASE 7, 9
rstr = rstr + ":"
END SELECT
NEXT
TimeEX = rstr
END FUNCTION
SUB UnLockConfig
OUT &H22, &H13
OUT &H23, &HC5
END SUB
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -