Adding shiftIn() from Wiring (no count or delaytime though).

This commit is contained in:
David A. Mellis 2010-08-11 22:59:00 +00:00
parent cbc52cbe3c
commit 57e2c152f1
3 changed files with 20 additions and 3 deletions

View File

@ -157,6 +157,7 @@ noInterrupts KEYWORD2 NoInterrupts
noTone KEYWORD2 NoTone
pinMode KEYWORD2 PinMode
pulseIn KEYWORD2 PulseIn
shiftIn KEYWORD2 ShiftIn
shiftOut KEYWORD2 ShiftOut
tone KEYWORD2 Tone

View File

@ -117,7 +117,8 @@ void delay(unsigned long);
void delayMicroseconds(unsigned int us);
unsigned long pulseIn(uint8_t pin, uint8_t state, unsigned long timeout);
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, byte val);
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val);
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder);
void attachInterrupt(uint8_t, void (*)(void), int mode);
void detachInterrupt(uint8_t);

View File

@ -24,9 +24,24 @@
#include "wiring_private.h"
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, byte val)
uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
uint8_t value = 0;
uint8_t i;
for (i = 0; i < 8; ++i) {
digitalWrite(clockPin, HIGH);
if (bitOrder == LSBFIRST)
value |= digitalRead(dataPin) << i;
else
value |= digitalRead(dataPin) << (7 - i);
digitalWrite(clockPin, LOW);
}
return value;
}
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
{
int i;
uint8_t i;
for (i = 0; i < 8; i++) {
if (bitOrder == LSBFIRST)