Campbell Scientific CR9000X Measurement and Control System User Manual
Page 142

Section 4. CRBasic – Native Language Programming
EXAMPLE 4.2.4-3. Programming with Bool8 and a bit-shift operator.
Public Alarm(32)
Public Flags As Long
Public FlagsBool8(4) As Long
DataTable (Bol8Data,True,-1)
DataInterval
(0,1,Sec,10)
Sample(2,FlagsBool8(1),Bool8)
'store bits 1 through 16 in columns 1 through 16 of data file
Sample(2,FlagsBool8(3),Bool8)
'store bits 17 through 32 in columns 17 through 32 of data file
EndTable
BeginProg
Scan
(1,Sec,3,0)
'Reset all bits each pass before setting bits selectively
'Set bits selectively. Hex used to save space.
'Logical OR bitwise comparison
'If bit in OR bit in The result
'Flags Is Bin/Hex Is Is
'----------
---------- ----------
'0 0
0
'0 1
1
'1 0
1
'1 1
1
' Binary equivalent of Hex:
If Alarm(1) Then Flags = Flags OR &h1
' &b1
If Alarm(2) Then Flags = Flags OR &h2
' &b10
If Alarm(3) Then Flags = Flags OR &h4
' &b100
If Alarm(4) Then Flags = Flags OR &h8
' &b1000
If Alarm(5) Then Flags = Flags OR &h10
' &b10000
If Alarm(6) Then Flags = Flags OR &h20
' &b100000
If Alarm(7) Then Flags = Flags OR &h40
' &b1000000
If Alarm(8) Then Flags = Flags OR &h80
' &b10000000
If Alarm(9) Then Flags = Flags OR &h100
' &b100000000
If Alarm(10) Then Flags = Flags OR &h200
' &b1000000000
If Alarm(11) Then Flags = Flags OR &h400
' &b10000000000
If Alarm(12) Then Flags = Flags OR &h800
' &b100000000000
If Alarm(13) Then Flags = Flags OR &h1000
' &b1000000000000
If Alarm(14) Then Flags = Flags OR &h2000
' &b10000000000000
If Alarm(15) Then Flags = Flags OR &h4000
' &b100000000000000
If Alarm(16) Then Flags = Flags OR &h8000
' &b1000000000000000
If Alarm(17) Then Flags = Flags OR &h10000
' &b10000000000000000
If Alarm(18) Then Flags = Flags OR &h20000
' &b100000000000000000
If Alarm(19) Then Flags = Flags OR &h40000
' &b1000000000000000000
If Alarm(20) Then Flags = Flags OR &h80000
' &b10000000000000000000
If Alarm(21) Then Flags = Flags OR &h100000
' &b100000000000000000000
If Alarm(22) Then Flags = Flags OR &h200000
' &b1000000000000000000000
If Alarm(23) Then Flags = Flags OR &h400000
' &b10000000000000000000000
If Alarm(24) Then Flags = Flags OR &h800000
' &b100000000000000000000000
If Alarm(25) Then Flags = Flags OR &h1000000
' &b1000000000000000000000000
If Alarm(26) Then Flags = Flags OR &h2000000
' &b10000000000000000000000000
If Alarm(27) Then Flags = Flags OR &h4000000
' &b100000000000000000000000000
If Alarm(28) Then Flags = Flags OR &h8000000
' &b1000000000000000000000000000
If Alarm(29) Then Flags = Flags OR &h10000000
' &b10000000000000000000000000000
If Alarm(30) Then Flags = Flags OR &h20000000
' &b100000000000000000000000000000
If Alarm(31) Then Flags = Flags OR &h40000000
' &b1000000000000000000000000000000
If Alarm(32) Then Flags = Flags OR &h80000000
'&b10000000000000000000000000000000
'Note: &HFF = &B11111111. By shifting at 8 bit increments along 32-bit ‘Flags’ (Long data
type)
'the first 8 bits in the four Longs FlagsBool8(4) are loaded with alarm states. Only the
first
'8 bits of each Long ‘FlagsBool8’ are stored when converted to Bool8.
'Logical AND bitwise comparison
'If bit in OR bit in The result
'Flags Is Bin/Hex Is Is
'----------
---------- ----------
'0 0
0
'0 1
0
'1 0
0
'1 1
1
FlagsBool8(1)
=
Flags
AND
&HFF
'AND 1st 8 bits of "Flags" & 11111111
FlagsBool8(2) = (Flags >> 8) AND &HFF
'AND 2nd 8 bits of "Flags" & 11111111
FlagsBool8(3) = (Flags >> 16) AND &HFF
'AND 3rd 8 bits of "Flags" & 11111111
FlagsBool8(4) = (Flags >> 24) AND &HFF
'AND 4th 8 bits of "Flags" & 11111111
CallTable(Bol8Data)
NextScan
EndProg
4-14