Archangel
- 5th July 2008, 06:13
Thanks to the code posted below by Darrel
in http://www.picbasic.co.uk/forum/showthread.php?t=9134
TimeCmpFlags VAR BYTE
PastStart VAR TimeCmpFlags.0
PastStop VAR TimeCmpFlags.1
NextDay VAR TimeCmpFlags.2
ProgON VAR TimeCmpFlags.3
CheckTimes:
TimeCmpFlags = 0 ; clear flags first
; if the Start and Stop times are the same, then Always OFF
if (Stop_H=Start_H) AND _
(Stop_M=Start_M) AND _
(Stop_S=Start_S) then AlwaysOFF
; is it past the Start time?
if (Hours>Start_H) OR _
(Hours=Start_H AND Minutes>Start_M) OR _
(Hours=Start_H AND Minutes=Start_M AND Seconds>=Start_S) then PastStart=1
; is it past the Stop time?
if (Hours>Stop_H) OR _
(Hours=Stop_H AND Minutes>Stop_M) OR _
(Hours=Stop_H AND Minutes=Stop_M AND Seconds>=Stop_S) then PastStop=1
; does the period end the following day?
if (Stop_H< Start_H) OR _
(Stop_H=Start_H AND Stop_M < Start_M) OR _
(Stop_H=Start_H AND Stop_M=Start_M AND Stop_S < Start_S) then NextDay=1
;---------------
if !NextDay then ; same day, use AND
if PastStart AND !PastStop then ProgON = 1
else ; next day, use OR
IF PastStart OR !PastStop then ProgON = 1
endif
AlwaysOFF:
return
I will never think of a BYTE variable the same way again. I always thought of a BYTE as a container which holds a number from 0-255, but the code above struck me this way, a BYTE is a BIT Array! where 8 bits all share the same variable name. All in how you look at things I guess, I saved this as an example for some future need. Thanks Darrel.
in http://www.picbasic.co.uk/forum/showthread.php?t=9134
TimeCmpFlags VAR BYTE
PastStart VAR TimeCmpFlags.0
PastStop VAR TimeCmpFlags.1
NextDay VAR TimeCmpFlags.2
ProgON VAR TimeCmpFlags.3
CheckTimes:
TimeCmpFlags = 0 ; clear flags first
; if the Start and Stop times are the same, then Always OFF
if (Stop_H=Start_H) AND _
(Stop_M=Start_M) AND _
(Stop_S=Start_S) then AlwaysOFF
; is it past the Start time?
if (Hours>Start_H) OR _
(Hours=Start_H AND Minutes>Start_M) OR _
(Hours=Start_H AND Minutes=Start_M AND Seconds>=Start_S) then PastStart=1
; is it past the Stop time?
if (Hours>Stop_H) OR _
(Hours=Stop_H AND Minutes>Stop_M) OR _
(Hours=Stop_H AND Minutes=Stop_M AND Seconds>=Stop_S) then PastStop=1
; does the period end the following day?
if (Stop_H< Start_H) OR _
(Stop_H=Start_H AND Stop_M < Start_M) OR _
(Stop_H=Start_H AND Stop_M=Start_M AND Stop_S < Start_S) then NextDay=1
;---------------
if !NextDay then ; same day, use AND
if PastStart AND !PastStop then ProgON = 1
else ; next day, use OR
IF PastStart OR !PastStop then ProgON = 1
endif
AlwaysOFF:
return
I will never think of a BYTE variable the same way again. I always thought of a BYTE as a container which holds a number from 0-255, but the code above struck me this way, a BYTE is a BIT Array! where 8 bits all share the same variable name. All in how you look at things I guess, I saved this as an example for some future need. Thanks Darrel.