Arduino:Справочник языка Arduino/Функции/Дополнительные функции ввода/вывода/shiftOut()

Материал из Онлайн справочника
Перейти к: навигация, поиск

Проверка/Оформление/Редактирование: Мякишев Е.А.


shiftOut()

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

Такой способ передачи данных называют последовательный протокол с синхронизацией. Он часто используется для взаимодействия микроконтроллеров с датчиками и сенсорами, а также другими микроконтроллерами. Последовательная передача с синхронизацией позволяет устройствам связываться на максимальной скорости. Смотрите также документацию (англ.) по SPI (Serial Peripheral Interface Protocol) - протокол последовательного периферийного интерфейса.

Синтаксис

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.

  1. // Вывод будет MSBFIRST с первого (левого) бита
  2. int data = 500;
  3. // выводим старший байт
  4. shiftOut(dataPin, clock, MSBFIRST, (data >> 8));
  5. // выводим младший бит
  6. shiftOut(dataPin, clock, MSBFIRST, data);
  7.  
  8. // вывод LSBFIRST с последнего бита
  9. data = 500;
  10. // выводим младший бит
  11. shiftOut(dataPin, clock, LSBFIRST, data);
  12. // выводим старший бит
  13. shiftOut(dataPin, clock, LSBFIRST, (data >> 8));

Пример

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

  1. //**************************************************************//
  2. //  Name    : shiftOutCode, Hello World                         //
  3. //  Author  : Carlyn Maw,Tom Igoe                               //
  4. //  Date    : 25 Oct, 2006                                      //
  5. //  Version : 1.0                                               //
  6. //  Notes   : Code for using a 74HC595 Shift Register           //
  7. //          : to count from 0 to 255                            //
  8. //****************************************************************
  9.  
  10. //Порт подключенный к ST_CP 74HC595
  11. int latchPin = 8;
  12. //Порт подключенный к SH_CP  74HC595
  13. int clockPin = 12;
  14. //Порт подключенный к DS 74HC595
  15. int dataPin = 11;
  16.  
  17. void setup() {
  18.   //устанавливаем режим порта выхода
  19.   pinMode(latchPin, OUTPUT);
  20.   pinMode(clockPin, OUTPUT);
  21.   pinMode(dataPin, OUTPUT);
  22. }
  23.  
  24. void loop() {
  25.   for (int j = 0; j < 256; j++) {
  26.     //устанавливаем LOW на latchPin пока не окончена передача байта
  27.     digitalWrite(latchPin, LOW);
  28.     shiftOut(dataPin, clockPin, LSBFIRST, j);  
  29.     //устанавливаем HIGH на latchPin, чтобы проинформировать регистр, что передача окончена.
  30.     digitalWrite(latchPin, HIGH);
  31.     delay(1000);
  32.   }
  33. }

См.также

Внешние ссылки