@defragster:
What do you think?
Code:
static const int shiftOutDly = 10;
static const int maxSpeedBeforeDelay = 300e6;
void shiftOut_lsbFirst(uint8_t dataPin, uint8_t clockPin, uint8_t value)
{
uint8_t mask;
if (F_CPU_ACTUAL > maxSpeedBeforeDelay)
for (mask = 0x01; mask; mask <<= 1) {
digitalWrite(dataPin, value & mask);
delayNanoseconds(shiftOutDly );
digitalWrite(clockPin, HIGH);
delayNanoseconds(shiftOutDly );
digitalWrite(clockPin, LOW);
delayNanoseconds(shiftOutDly );
}
else
for (mask = 0x01; mask; mask <<= 1) {
digitalWrite(dataPin, value & mask);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}
}
void shiftOut_msbFirst(uint8_t dataPin, uint8_t clockPin, uint8_t value)
{
uint8_t mask;
if (F_CPU_ACTUAL > maxSpeedBeforeDelay)
for (mask = 0x80; mask; mask >>= 1) {
digitalWrite(dataPin, value & mask);
delayNanoseconds(shiftOutDly );
digitalWrite(clockPin, HIGH);
delayNanoseconds(shiftOutDly );
digitalWrite(clockPin, LOW);
delayNanoseconds(shiftOutDly );
}
else
for (mask = 0x01; mask; mask >>= 1) {
digitalWrite(dataPin, value & mask);
digitalWrite(clockPin, HIGH);
digitalWrite(clockPin, LOW);
}
}