Приветствую Вас ГостьПятница, 03.05.2024, 10:11

AVR & ARDUINO




Каталог статей

Главная » Статьи » Справочник

shiftOut()

Описание

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

Примечание: Для взаимодействия с устройствами, тактируемыми по фронту импульсов, перед вызовом shiftOut() необходимо убедиться, что тактовый контакт переключен в низкий уровень, например с помощью функции digitalWrite(clockPin, LOW).

Функция является программной реализацией SPI; аппаратная версия реализована в библиотеке SPI, поэтому она является быстрее, но работает только со специальными контактами.

Синтаксис

 shiftOut(dataPin, clockPin, bitOrder, value);

Параметры

dataPin - информационный контакт, с которого будет отправляться каждый бит из сдвигаемого байта данных (int)

clockPin - тактовый (синхронизирующий) контакт, который будет переключаться каждый раз, когда на контакте dataPin устанавливается корректное значение (int)

bitOrder - характеризует порядок, в котором будут сдвигаться и выводиться биты; может принимать значения MSBFIRST или LSBFIRST. (Most Significant Bit First - старший значащий бит первым, или Least Significant Bit - младший значащий бит первым).

value - сдвигаемый байт данных (byte)

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

нет

Примечание

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

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

// Действия для направления передачи MSBFIRST 
int data = 500;
// передать старший байт
shiftOut(dataPin, clock, MSBFIRST, (data >> 8)); 
// передать младший байт
shiftOut(data, clock, MSBFIRST, data);
 
// Действия для направления передачи LSBFIRST 
data = 500;
// передать младший байт
shiftOut(dataPin, clock, LSBFIRST, data); 
// передать старший байт
shiftOut(dataPin, clock, LSBFIRST, (data >> 8)); 

Пример

Схема, соответствующая примеру, описана в инструкции по работе со сдвиговым регистром 74HC595.

//************************************************************** //
// Название : shiftOutCode, Hello World //
// Автор : Carlyn Maw,Tom Igoe //
// Дата : 25 октября 2006 //
// Версия : 1.0 //
// Заметки : Программа использования сдвигового регистра 74HC595 //
// : для счета от 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++) {
 //формируем ноль на latchPin и удерживаем его до конца передачи
 digitalWrite(latchPin, LOW);
 shiftOut(dataPin, clockPin, LSBFIRST, j); 
 //возвращаем высокий уровень на latchin, тем самым сообщая микросхеме о том, что
 //больше не требуется воспринимать информацию
 digitalWrite(latchPin, HIGH);
 delay(1000);
 }
}

Смотрите также:

shiftIn()

SPI


Справочник

Материалы взяты с официального сайта проекта Arduino и представлены по лицензии Creative Commons Attribution-ShareAlike 3.0 License.



Источник: http://arduino.cc/en/Reference/ShiftOut
Категория: Справочник | Добавил: magi (29.01.2015)
Просмотров: 2689 | Теги: последовательный вывод | Рейтинг: 0.0/0
Всего комментариев: 0
avatar
Поиск
Вход на сайт
На правах рекламы

Мы переезжаем на сайт Arduino по-русски