📄 p.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 + -