ShiftOut

Материал из MK90.ORG wiki
Перейти к:навигация, поиск

Справка Язык | Библиотеки | Сравнение | Изменения

shiftOut()

Описание

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

Функция реализована программно; см. таже библиотеку SPI, которая работает только на определенных пинах, но зато намного быстрее, т.к. использует аппаратную поддержку ATmega.

Синтаксис

shiftOut(dataPin, clockPin, bitOrder, value)

Параметры

dataPin: номер пина, в который выводится каждый бит (int)

clockPin: номера пина, на который подается импульс после установки значения в dataPin (int)

bitOrder: направление передачи битов; либо MSBFIRST (сначала наиболее значащий), либо LSBFIRST (сначала наименее значащий).

value: выводимые данные (byte)

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

Отсутствует

Замечание

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

Функция shiftOut в настоящий момент выводит только один байт (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.


//**************************************************************//
//  Name    : shiftOutCode, Hello World                         //
//  Author  : Carlyn Maw,Tom Igoe                               //
//  Date    : 25 Oct, 2006                                      //
//  Version : 1.0                                               //
//  Notes   : Программа использует чип 74HC595 для счета        //
//          : от 0 до 255                                       //
//****************************************************************

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

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

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

Пример делает следующее: выводит значение переменной-счетчика от 0 до 255 в чип 74HC595 (сдвиговый регистр с последовательным вводом).

Смотри также

Руководство по Wiring


Исправления, пожелания и новые статьи должны быть опубликованы через Форум.

Оригинальные тексты руководств и переводы распространяются Arduino и MK90 на условиях лицензии Creative Commons Attribution-ShareAlike 3.0 License. Примеры исходных кодов и ссылки являются общественным достоянием.