shiftOut()

Выводит байт информации на порт вход/выхода последовательно (побитово). Вывод может осуществляться как с первого (левого), так и с последнего (правого) бита. Каждый бит последовательно подается на заданный порт, после чего подается сигнал на синхронизирующий порт вход/выход, информируя о доступности к считыванию бита.

Такой способ передачи данных называют последовательный протокол с синхронизацией. Он часто используется для взаимодействия микроконтроллеров с датчиками и сенсорами, а также другими микроконтроллерами. Последовательная передача с синхронизацией позволяет устройствам связываться на максимальной скорости.

Синтаксис

shiftOut(dataPin, clockPin, bitOrder, value);

Параметры

dataPin: номер порта вход/выхода, на который выводятся биты (int)
clockPin: номер порта по которому производится синхронизация (int)
bitOrder: используемая последовательность вывода бит. MSBFIRST (Most Significant Bit First) - слева или LSBFIRST (Least Significant Bit First) - справа.
value: значение (байт) для вывода (byte)

Возвращаемое значение

нет

Замечание по использованию

Порт вывода (dataPin) и синхронизирующий порт (clockPin) должны быть предварительно сконфигурированы как порты вывода с помощью функции pinMode().

Текущая реализация функции shiftOut() может выводить только один байт (8 бит) информации, поэтому необходимо произвести несколько действий чтобы вывести значения больше 255.

Вывод будет MSBFIRST с первого (левого) бита int data = 500;

выводим старший байт shiftOut(dataPin, clock, MSBFIRST, (data » 8));

выводим младший бит shiftOut(dataPin, clock, MSBFIRST, data);

вывод LSBFIRST с последнего бита data = 500;

выводим младший бит shiftOut(dataPin, clock, LSBFIRST, data);

выводим старший бит shiftOut(dataPin, clock, LSBFIRST, (data » 8));

Пример

Пример вывода счетчика от 0 до 255 на сдвиговый регистр с последовательным вводом 74HC595.

int latchPin = 8; //Порт, подключенный к SH_CP 74HC595 
int clockPin = 12; //Порт, подключенный к DS 74HC595 
int dataPin = 11;

void setup() {
	//устанавливаем режим порта выхода
	pinMode(latchPin, OUTPUT);
	pinMode(clockPin, OUTPUT);
	pinMode(dataPin, OUTPUT);
}

void loop() {
	for (int j = 0; j < 256; j++) {
		//устанавливаем LOW на latchPin пока не окончена передача байта
		digitalWrite(latchPin, LOW);
		shiftOut(dataPin, clockPin, LSBFIRST, j); 
		//устанавливаем HIGH на latchPin, чтобы проинформировать регистр, что передача окончена.
		digitalWrite(latchPin, HIGH);
		delay(1000);
	}
}