⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 try.bas

📁 用工控机(386)通过串行口控制手机收发短信
💻 BAS
📖 第 1 页 / 共 2 页
字号:
      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 + -