Arduino:Справочник языка Arduino/Функции/Дополнительные функции ввода/вывода/shiftOut()
Поддержать проект | Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Содержание
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 }
См.также
Внешние ссылки