René Bohne / ArduinoHAL

Dependents:   Potentiometer

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers wiring_shift.c Source File

wiring_shift.c

00001 /*
00002   wiring_shift.c - shiftOut() function
00003   Part of Arduino - http://www.arduino.cc/
00004 
00005   Copyright (c) 2005-2006 David A. Mellis
00006 
00007   This library is free software; you can redistribute it and/or
00008   modify it under the terms of the GNU Lesser General Public
00009   License as published by the Free Software Foundation; either
00010   version 2.1 of the License, or (at your option) any later version.
00011 
00012   This library is distributed in the hope that it will be useful,
00013   but WITHOUT ANY WARRANTY; without even the implied warranty of
00014   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00015   Lesser General Public License for more details.
00016 
00017   You should have received a copy of the GNU Lesser General
00018   Public License along with this library; if not, write to the
00019   Free Software Foundation, Inc., 59 Temple Place, Suite 330,
00020   Boston, MA  02111-1307  USA
00021 
00022   $Id: wiring.c 248 2007-02-03 15:36:30Z mellis $
00023 */
00024 
00025 #include "wiring_private.h"
00026 
00027 uint8_t shiftIn(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder) {
00028     uint8_t value = 0;
00029     uint8_t i;
00030 
00031     for (i = 0; i < 8; ++i) {
00032         digitalWrite(clockPin, HIGH);
00033         if (bitOrder == LSBFIRST)
00034             value |= digitalRead(dataPin) << i;
00035         else
00036             value |= digitalRead(dataPin) << (7 - i);
00037         digitalWrite(clockPin, LOW);
00038     }
00039     return value;
00040 }
00041 
00042 void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
00043 {
00044     uint8_t i;
00045 
00046     for (i = 0; i < 8; i++)  {
00047         if (bitOrder == LSBFIRST)
00048             digitalWrite(dataPin, !!(val & (1 << i)));
00049         else    
00050             digitalWrite(dataPin, !!(val & (1 << (7 - i))));
00051             
00052         digitalWrite(clockPin, HIGH);
00053         digitalWrite(clockPin, LOW);        
00054     }
00055 }