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

📄 p.bas

📁 基于89c2051开发的ptr8000一对多无线通信程序.
💻 BAS
字号:
REM '$INCLUDE: 'QB.BI'

DECLARE SUB Delay (pa%)
DECLARE SUB InitWatchDog (pa%, pb%, pc%, pd%)
DECLARE SUB FeedWatchDog ()
DECLARE SUB ResetWatchDog ()
DECLARE SUB UnLockConfig ()
DECLARE SUB LockConfig ()
DECLARE SUB DisableWatchdog ()
DECLARE SUB EnableWatchDog ()
DECLARE SUB SetCounterValue (pa%, pb%, pc%)
DECLARE SUB SetTimeAction (pa%)

DIM LSHI, lshj, lshk, lshl, lshc, lsht AS INTEGER
DIM COM1RBUFF(0 TO 6) AS INTEGER
DIM COM2RBUFF(0 TO 6) AS INTEGER
DIM COM3RBUFF(0 TO 6) AS INTEGER
DIM COM4SBUFF(0 TO 10) AS INTEGER
DIM COM1RBUFFP AS INTEGER
DIM COM2RBUFFP AS INTEGER
DIM COM3RBUFFP AS INTEGER
DIM COM4SBUFFP AS INTEGER

COM1RBUFFP = 0: COM2RBUFFP = 0: COM3RBUFFP = 0: COM4SBUFFP = 0
COM4SBUFF(0) = &HD7: COM4SBUFF(1) = &H6: COM4SBUFF(2) = &H53: COM4SBUFF(9) = &H0: COM4SBUFF(10) = &H45
PRINT "Waiting 2 Seconds!"
Delay (2) 'Wait for the mobil and the meter to work well!
'CALL InitWatchDog(&HFF, &HFF, &HFF, &HD)
'CALL FeedWatchDog
PRINT "INIT com1 TO com4!"

OUT &H3FB, &H80
OUT &H2FB, &H80
OUT &H3EB, &H80
OUT &H2EB, &H80

OUT &H3F8, &H60
OUT &H2F8, &H60
OUT &H3E8, &H60
OUT &H2E8, &H60

OUT &H3F9, &H0 '1200BPS
OUT &H2F9, &H0 '1200BPS
OUT &H3E9, &H0 '1200BPS
OUT &H2E9, &H0 '1200BPS

OUT &H3FB, 3   'n,8,1
OUT &H2FB, 3   'n,8,1
OUT &H3EB, 3   'n,8,1
OUT &H2EB, 3   'n,8,1

'OUT &H3FC, 3
'OUT &H2FC, 3
'OUT &H3EC, 3
'OUT &H2EC, 3

ON TIMER(1) GOSUB dealtime
TIMER ON

'ON KEY(31) GOSUB MYEXIT 'F12 TRAP
'KEY(31) ON

WHILE 1
'CALL FeedWatchDog

IF INP(&H3FD) AND &H1 THEN
 COM1RBUFF(COM1RBUFFP) = INP(&H3F8)
 IF COM1RBUFF(COM1RBUFFP) = &H45 AND COM1RBUFF((COM1RBUFFP + 6) MOD 7) = 0 AND COM1RBUFF((COM1RBUFFP + 3) MOD 7) = &H53 THEN
  COM4SBUFF(3) = COM1RBUFF((COM1RBUFFP + 4) MOD 7): COM4SBUFF(4) = COM1RBUFF((COM1RBUFFP + 5) MOD 7)
 END IF
 COM1RBUFFP = COM1RBUFFP + 1
 IF COM1RBUFFP = 7 THEN COM1RBUFFP = 0
END IF

IF INP(&H2FD) AND &H1 THEN
 COM2RBUFF(COM2RBUFFP) = INP(&H2F8)
 IF COM2RBUFF(COM2RBUFFP) = &H45 AND COM2RBUFF((COM2RBUFFP + 6) MOD 7) = 0 AND COM2RBUFF((COM2RBUFFP + 3) MOD 7) = &H53 THEN
  COM4SBUFF(5) = COM2RBUFF((COM2RBUFFP + 4) MOD 7): COM4SBUFF(6) = COM2RBUFF((COM2RBUFFP + 5) MOD 7)
 END IF
 COM2RBUFFP = COM2RBUFFP + 1
 IF COM2RBUFFP = 7 THEN COM2RBUFFP = 0
END IF

IF INP(&H3ED) AND &H1 THEN
 COM3RBUFF(COM3RBUFFP) = INP(&H3E8)
 IF COM3RBUFF(COM3RBUFFP) = &H45 AND COM3RBUFF((COM3RBUFFP + 6) MOD 7) = 0 AND COM3RBUFF((COM3RBUFFP + 3) MOD 7) = &H53 THEN
  COM4SBUFF(7) = COM3RBUFF((COM3RBUFFP + 4) MOD 7): COM4SBUFF(8) = COM3RBUFF((COM3RBUFFP + 5) MOD 7)
 END IF
 COM3RBUFFP = COM3RBUFFP + 1
 IF COM3RBUFFP = 7 THEN COM3RBUFFP = 0
END IF

IF SENDBZ = 1 THEN
 IF (INP(&H2ED) AND &H60) = &H60 THEN
  OUT &H2E8, COM4SBUFF(COM4SBUFFP) 'ALWAYS SEND TO COM4.
 'IF (INP(&H3FD) AND &H60) = &H60 THEN
  'OUT &H3F8, COM4SBUFF(COM4SBUFFP) 'ALWAYS SEND TO COM1.
  COM4SBUFFP = COM4SBUFFP + 1
  PRINT LSHI
  LSHI = LSHI + 1
 END IF
 IF COM4SBUFFP = 11 THEN
  COM4SBUFFP = 0
  SENDBZ = 0
 END IF
END IF

WEND
MYEXIT:
'CALL DisableWatchdog
END

dealtime:
SENDBZ = 1
RETURN


handler:
Delay (1)
RESUME

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 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

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

SUB LockConfig
OUT &H22, &H13
OUT &H23, &H0
END SUB

SUB ResetWatchDog
DIM LSHI AS INTEGER
OUT &H22, &H3C
LSHI = INP(&H23)
OUT &H23, LSHI OR &H20
END SUB

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

SUB UnLockConfig
OUT &H22, &H13
OUT &H23, &HC5
END SUB

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -