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

Материал из Онлайн справочника
Перейти к навигацииПерейти к поиску
Нет описания правки
 
Нет описания правки
 
(не показаны 3 промежуточные версии 2 участников)
Строка 10: Строка 10:
== Синтаксис ==
== Синтаксис ==


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
shiftOut(dataPin, clockPin, bitOrder, value)
shiftOut(dataPin, clockPin, bitOrder, value)
</syntaxhighlight>
</syntaxhighlight>
Строка 16: Строка 16:
=== Параметры ===
=== Параметры ===


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
dataPin: номер порта вход/выхода, на который выводятся биты (int)
dataPin: номер порта вход/выхода, на который выводятся биты (int)
clockPin: номер порта по которому производится синхронизация (int)
clockPin: номер порта по которому производится синхронизация (int)
Строка 25: Строка 25:
=== Возвращаемое значение ===
=== Возвращаемое значение ===


<syntaxhighlight lang="c" enclose="div">
<syntaxhighlight lang="c">
нет
нет
</syntaxhighlight>
</syntaxhighlight>
Строка 35: Строка 35:
Текущая реализация функции shiftOut() может выводить только один байт (8 бит) информации, поэтому необходимо произвести несколько действий чтобы  вывести значения больше 255.
Текущая реализация функции shiftOut() может выводить только один байт (8 бит) информации, поэтому необходимо произвести несколько действий чтобы  вывести значения больше 255.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
// Вывод будет MSBFIRST с первого (левого) бита
// Вывод будет MSBFIRST с первого (левого) бита
int data = 500;
int data = 500;
Строка 55: Строка 55:
Пример вывода счетчика от 0 до 255 на сдвиговый регистр с последовательным вводом 74HC595.
Пример вывода счетчика от 0 до 255 на сдвиговый регистр с последовательным вводом 74HC595.


<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS" enclose="div">
<syntaxhighlight lang="c" line="GESHI_NORMAL_LINE_NUMBERS|GESHI_FANCY_LINE_NUMBERS">
//**************************************************************//
//**************************************************************//
//  Name    : shiftOutCode, Hello World                        //
//  Name    : shiftOutCode, Hello World                        //
Строка 96: Строка 96:


<references />
<references />
{{Навигационная таблица/Портал/Arduino}}
[[Категория:Справочник языка Arduino]]
[[Категория:Справочник языка Arduino]]
[[Категория:Функция]]
[[Категория:Функция]]

Текущая версия от 11:28, 8 июля 2023

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


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.

// Вывод будет 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.

//**************************************************************//
//  Name    : shiftOutCode, Hello World                         //
//  Author  : Carlyn Maw,Tom Igoe                               //
//  Date    : 25 Oct, 2006                                      //
//  Version : 1.0                                               //
//  Notes   : Code for using a 74HC595 Shift Register           //
//          : to count from 0 to 255                            //
//****************************************************************
 
//Порт подключенный к ST_CP 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);
  }
}

См.также

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