Am I bit shifting correctly>
Posted: Mon Jan 09, 2012 3:48 am
Hi,
I receive a BYTE via RS485. The low nibble (bits 0 - 3) are 4 digital input states. I need to separate them into 4 BYTES, each of the new bytes represents a single input. If the value in the LSB is == 1 then the input is HI, if the LSB is == 0 then the Input is LO.
bit 0 of the received BYTE is input 1 (DI_01)
bit 1 of the received BYTE is input 2 (DI_02)
bit 2 of the received BYTE is input 3 (DI_03)
bit 3 of the received BYTE is input 4 (DI_04)
// MOVE VALUE RECIEVED IN TEMP CALC VAR
SLV28AB_DI.Calc_Temp_1 = RS485_RX_DATA_001_LO
// SET INPUT 1 BIT 0 TO PROPER VALUE
DI_01_RS485_NODE_6 = SLV28AB_DI.Calc_Temp_1 << 7 // SHIFT LEFT TO GET RID OF ALL OTHER INPUT VALUES
DI_01_RS485_NODE_6 = DI_01_RS485_NODE_6 >> 7 // SHIFT RIGHT SO ONLY THIS INPUT IS REMAINING = 1 HI, =0 LO
// SET INPUT 2 BIT 1 TO PROPER VALUE
DI_02_RS485_NODE_6 = SLV28AB_DI.Calc_Temp_1 << 6 // SHIFT LEFT TO GET RID OF ALL OTHER INPUT VALUES
DI_02_RS485_NODE_6 = DI_02_RS485_NODE_6 >> 7 // SHIFT RIGHT SO ONLY THIS INPUT IS REMAINING = 1 HI, =0 LO
// SET INPUT 3 BIT 2 TO PROPER VALUE
DI_03_RS485_NODE_6 = SLV28AB_DI.Calc_Temp_1 << 5 // SHIFT LEFT TO GET RID OF ALL OTHER INPUT VALUES
DI_03_RS485_NODE_6 = DI_03_RS485_NODE_6 >> 7 // SHIFT RIGHT SO ONLY THIS INPUT IS REMAINING = 1 HI, =0 LO
// SET INPUT 4 BIT 3 TO PROPER VALUE
DI_04_RS485_NODE_6 = SLV28AB_DI.Calc_Temp_1 << 4 // SHIFT LEFT TO GET RID OF ALL OTHER INPUT VALUES
DI_04_RS485_NODE_6 = DI_04_RS485_NODE_6 >> 7 // SHIFT RIGHT SO ONLY THIS INPUT IS REMAINING = 1 HI, =0 LO
Does my local VAR SLV28AB_DI.Calc_Temp_1 get altered when I do SLV28AB_DI.Calc_Temp_1 << 6?
Will I get the desired results I am looking for?
Thank you,
Ron
I receive a BYTE via RS485. The low nibble (bits 0 - 3) are 4 digital input states. I need to separate them into 4 BYTES, each of the new bytes represents a single input. If the value in the LSB is == 1 then the input is HI, if the LSB is == 0 then the Input is LO.
bit 0 of the received BYTE is input 1 (DI_01)
bit 1 of the received BYTE is input 2 (DI_02)
bit 2 of the received BYTE is input 3 (DI_03)
bit 3 of the received BYTE is input 4 (DI_04)
// MOVE VALUE RECIEVED IN TEMP CALC VAR
SLV28AB_DI.Calc_Temp_1 = RS485_RX_DATA_001_LO
// SET INPUT 1 BIT 0 TO PROPER VALUE
DI_01_RS485_NODE_6 = SLV28AB_DI.Calc_Temp_1 << 7 // SHIFT LEFT TO GET RID OF ALL OTHER INPUT VALUES
DI_01_RS485_NODE_6 = DI_01_RS485_NODE_6 >> 7 // SHIFT RIGHT SO ONLY THIS INPUT IS REMAINING = 1 HI, =0 LO
// SET INPUT 2 BIT 1 TO PROPER VALUE
DI_02_RS485_NODE_6 = SLV28AB_DI.Calc_Temp_1 << 6 // SHIFT LEFT TO GET RID OF ALL OTHER INPUT VALUES
DI_02_RS485_NODE_6 = DI_02_RS485_NODE_6 >> 7 // SHIFT RIGHT SO ONLY THIS INPUT IS REMAINING = 1 HI, =0 LO
// SET INPUT 3 BIT 2 TO PROPER VALUE
DI_03_RS485_NODE_6 = SLV28AB_DI.Calc_Temp_1 << 5 // SHIFT LEFT TO GET RID OF ALL OTHER INPUT VALUES
DI_03_RS485_NODE_6 = DI_03_RS485_NODE_6 >> 7 // SHIFT RIGHT SO ONLY THIS INPUT IS REMAINING = 1 HI, =0 LO
// SET INPUT 4 BIT 3 TO PROPER VALUE
DI_04_RS485_NODE_6 = SLV28AB_DI.Calc_Temp_1 << 4 // SHIFT LEFT TO GET RID OF ALL OTHER INPUT VALUES
DI_04_RS485_NODE_6 = DI_04_RS485_NODE_6 >> 7 // SHIFT RIGHT SO ONLY THIS INPUT IS REMAINING = 1 HI, =0 LO
Does my local VAR SLV28AB_DI.Calc_Temp_1 get altered when I do SLV28AB_DI.Calc_Temp_1 << 6?
Will I get the desired results I am looking for?
Thank you,
Ron