151-0153 Rabbit Semiconductor, 151-0153 Datasheet - Page 88

no-image

151-0153

Manufacturer Part Number
151-0153
Description
ASSEMBLY - RABBITFLEX CABLES
Manufacturer
Rabbit Semiconductor
Series
RabbitFLEX™r
Datasheet

Specifications of 151-0153

Accessory Type
Cable Assembly
For Use With/related Products
BL300F
Lead Free Status / RoHS Status
Vendor undefined / Vendor undefined
We will now go through each part of this new while loop in detail:
Like before, we use a costatement to make implementing debouncing easier. Now notice the
flexDigInGroup16() function call. Like flexDigOutGroup16(), this function takes an array
of Flex_IOPin pointers. However, the second parameter is a pointer to an unsigned integer.
flexDigInGroup16() places the values read from the digital inputs into this unsigned integer
(switch_values, in this case). This is done in much the same way that the outputs are used in
flexDigOutGroup16(). That is, the value read from the first input in the group is placed in the least
significant bit in the unsigned integer; the second input value is placed in the next least significant bit; etc.
Note that having a do/while loop in a costatement is not an efficient design for cooperative multitasking,
since the costatement would not yield until a switch has been pressed. In a real-world application, busy
waiting such as this should be replaced with a waitfor statement and a function call to code that would
check for the switch press and return.
Notice that we are reading the switch inputs until one of the switches has been pressed. Because we read
the values in a group, we can check all switches simultaneously.
Next, we must inspect the switch_values unsigned integer to determine which switch was pressed. To
do this, we use the value variable to check against each bit of switch_values. That is, we change
the bit that is set within the variable value in each iteration of the loop. By ORing the value variable
against switch_values, we can determine if the corresponding switch has been pressed.
82
while (1) {
costate {
// Check if a switch has been pressed
do {
} while (switch_values == 0x00);
// Determine which switch was pressed
value = 1;
switch_pressed = switches;
led = leds;
switchnum = 1;
while (!(value | switch_values)) {
}
// switch_pressed now indicates which pin was pressed
flexDigInGroup16(switches, &switch_values);
value <<= 1;
switch_pressed++;
led++;
switchnum++;
www.rabbit.com
Applications Programming

Related parts for 151-0153