Сдвиговый регистр 74hc595 и семисегментный индикатор
Содержание:
- 4Тестовый скетч для изучения работы регистра сдвига
- 7Каскадное подключение регистров сдвига к Arduino
- Как работает регистр сдвига?
- Скетч для использования 74HC595
- Что такое сдвиговый регистр
- Преимущества использования сдвигового регистра 74HC595:
- ШИМ
- Пример 1: Использование одного сдвигового регистра
- Datasheets
- Зачем нужен сдвиговый регистр 74HC595
- Анимация светодиодов
- Регистр сдвига (последовательный регистр)
4Тестовый скетч для изучения работы регистра сдвига
Напишем вот такой скетч и загрузим в память Arduino. Здесь мы по циклу будем записывать два числа – 210 и 0 – в сдвиговый регистр с небольшими временными интервалами между ними. Да, только и всего.
#include <SPI.h> // подключаем библиотеку void setup() { SPI.begin(); // инициализируем SPI pinMode(PIN_SPI_SS, OUTPUT); } void loop() { digitalWrite(PIN_SPI_SS, LOW); // выбор регистра сдвига SPI.transfer(210); // передаём число "210" в сдвиговый регистр digitalWrite(PIN_SPI_SS, HIGH); // конец передачи delay(10); // задержка 10 мсек digitalWrite(PIN_SPI_SS, LOW); SPI.transfer(0); digitalWrite(PIN_SPI_SS, HIGH); delay(90); }
PIN_SPI_SS – это внутренняя стандартная константа, которая соответствует выводу «10» Ардуино в режиме SPI. Данная константа определена в файле pins_arduino.h, который находится по пути %programfiles%\arduino-(версия)\hardware\arduino\avr\variants\ Также там определены константы PIN_SPI_MOSI (пин 11), PIN_SPI_MISO (пин 12), PIN_SPI_SCK (пин 13). В ранних версиях Arduino IDE (например, 1.6.хх) этих констант не было.
В принципе, мы могли бы с таким же успехом использовать любой другой цифровой вывод Arduino; тогда пришлось бы в программе объявить его и не забыть задать режим работы – OUTPUT.
Подавая на этот вывод LOW, мы активируем наш сдвиговый регистр на приём/передачу. После передачи мы снова поднимаем напряжение в HIGH, и обмен заканчивается. Включим схему в работу и посмотрим, что покажет логический анализатор.
7Каскадное подключение регистров сдвига к Arduino
Давайте подключим три регистра сдвига 74HC595 к Arduino и попробуем управлять ими по SPI.
В разделе 3 этой статьи была дана схема подключения одного регистра 74HC595 к Arduino. Схема, когда к Arduino подключены несколько ведомых устройств в каскадном режиме, отличается не сильно. Основное отличие в том, что используется один пин выбора ведомого, который активирует одновременно все подключённые устройства (пин SS Arduino подключён ко всем входам STCP), а также данные из ведущего (выход MOSI Arduino) передаются первому в цепочке ведомому 74HC595 на вход последовательных данных DS, тот в свою очередь из последовательного порта Q7′ передаёт данные следующему ведомому на последовательный вход DS, и так далее. Последний ведомый из своего порта Q7′ передаёт данные ведущему в линию MISO, но в нашем случае это не обязательно. Остальные выводы сдвиговых регистров подключены так же, как на предыдущей схеме. У Arduino же используются те же 4 стандартных пина SPI, что и при подключении к единственному регистру сдвига.
Соберём в соответствии с этим нашу схему. У меня получилось как-то так:
Каскадное подключение трёх сдвиговых регистров к Arduino – вид со стороны параллельных выходов 74HC595 Каскадное подключение трёх сдвиговых регистров к Arduino – вид со стороны пинов управления 74HC595
Теперь напишем скетч для «бегущей волны», но теперь она будет немного длиннее. В моём случае – из 19-ти светодиодов, каждый из которых будет представлять один из разрядов параллельных выходов (на все 24 не хватило места на монтажке).
#include <SPI.h> void setup() { pinMode(PIN_SPI_SS, OUTPUT); SPI.begin(); Serial.begin(9600); } void loop() { for (int i=0; i<20; i++) { //вообще, тут нужно писать i<25, т.к. всего параллельных выходов у трёх регистров 24 unsigned long num = (long)1<<i; // "гоним" горящий огонёк по разрядам, сдвигая единицу на 1 разряд влево каждую итерацию /* * 19 (или 24) разрядов числа поместятся только в беззнаковый long * unsigned long может хранить до 32-х разрядов. * Т.к. у нас три сдвиговых регистра или 3*8=24 бит, то используем этот тип данных */ /* * Реализация SPI в Arduino такова, что можно передавать числа либо байтами, либо словами по 2 байта. * Поэтому делим наше число на байты, их получается 3, как и регистров сдвига: */ byte a = (byte)num; //младшие 8 бит числа byte b = (byte)(num>>8);//средние 8 бит числа byte c = (byte)(num>>16); //старшие 8 бит числа digitalWrite(PIN_SPI_SS, LOW); // начинаем передачу по SPI SPI.transfer(c); //передаём старший байт числа SPI.transfer(b); //передаём средний байт числа SPI.transfer(a); //передаём младший байт числа digitalWrite(PIN_SPI_SS, HIGH); // завершаем передачу по SPI // Контрольный вывод в COM-порт: Serial.print((String)i + ": "); Serial.print(num, HEX); Serial.print("="); Serial.print(c, HEX); Serial.print(","); Serial.print(b, HEX); Serial.print(","); Serial.println(a, HEX); delay(100); // задержимся немного } }
Обратите внимание, мы обращались к параллельным выходам 3-х сдвиговых регистров как к большому 24-разрядному числу. Но что делать, если вы подключили к Arduino большее количество 74HC595? Такими большими числами Arduino, конечно же, оперировать не умеет
В таком случае придётся работать с байтами. То есть передавать в каждый регистр своё 8-разрядное значение.
А вот так это выглядит в действии:
Каскадное подключение трёх сдвиговых регистров к Arduino в действии
На видео в конце статьи результат наглядно показан в динамике. К каждому из трёх сдвиговых регистров подключены светодиоды своего цвета – красные, зелёные и синие, и видно, как наше число «перескакивает» с регистра в регистр.
Таким образом, мы детально изучили вопрос информационного обмена между ведущим устройством, в роли которого выступил Arduino, и сдвиговым регистром 74HC595. Научились подключать сдвиговый регистр, записывать в него данные и считывать из него данные.
Как работает регистр сдвига?
Прежде чем мы начнем подключать чип, давайте рассмотрим, как этот процесс работает.
Первое, что нужно прояснить, — это понятие «биты» для тех из вас, кто не знаком с двоичным кодом. Когда мы говорим о «битах», мы имеем в виду одно из чисел, составляющих двоичное значение. В отличие от обычных чисел, мы обычно считаем, что первый бит является самым большим. Итак, если мы берем двоичное значение 10100010, первый бит на самом деле равен 0, а восьмой бит равен 1. Следует также отметить, если это не подразумевалось, каждый бит может быть только 0 или 1.
Чип содержит восемь контактов, которые мы можем использовать для вывода, каждый из которых связан с битом в регистре. В случае сдвигового регистра 74HC595 мы рассматриваем их от QA до QH.
Чтобы записать эти выходы через Arduino, мы должны отправить двоичное значение в регистр сдвига, и из этого числа сдвиговый регистр может определить, какие выходы использовать. Например, если мы отправили двоичное значение 10100010, контакты, выделенные зеленым цветом на изображении выше, будут активными, а выделенные красным цветом будут неактивными.
Это означает, что самый правый бит сопоставляется как QH, а левый бит сопоставляется с QA. Выход считается активным, когда бит, сопоставленный с ним, установлен на 1
Важно помнить об этом, так как иначе вам будет очень сложно узнать, какие контакты вы используете
Теперь, когда у нас есть основное понимание того, как мы используем смещение битов, чтобы указать, какие контакты использовать, мы можем начать подключать его к нашему Arduino.
Скетч для использования 74HC595
И теперь приведу код, который управляет нашей схемой, скачать его можно тут: скачать.
//Пин подключен к SH_CP входу 74HC595 int clockPin = 6; //Пин подключен к ST_CP входу 74HC595 int latchPin = 7; //Пин подключен к DS входу 74HC595 int dataPin = 8; void setup() { //устанавливаем режим OUTPUT pinMode(latchPin, OUTPUT); pinMode(clockPin, OUTPUT); pinMode(dataPin, OUTPUT); } void loop() { // зажигаем по одному светодиоды по порядку for (int numberPin = 0; numberPin < 8; numberPin++) { setShiftPin(numberPin); delay(500); } // зажигаем все светодиоды digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, 255); digitalWrite(latchPin, HIGH); delay(1000); // зажигаем светодиоды через один digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, B10101010); digitalWrite(latchPin, HIGH); delay(1000); // выключаем все светодиоды digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, 0); digitalWrite(latchPin, HIGH); delay(1000); } void setShiftPin(int numPin){ int arrayPins[] = {1, 2, 4, 8, 16, 32, 64, 128}; digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, MSBFIRST, arrayPins); digitalWrite(latchPin, HIGH); }
Что такое сдвиговый регистр
В электронике регистром называют устройство, которое может хранить небольшой объем данных для быстрого доступа к ним. Они есть внутри каждого контроллера и микропроцессора, включая и микроконтроллер Atmega328, который входит в состав платы Arduino Uno. Как правило регистры представляют собой сборку из D-триггеров — элементарных ячеек памяти. Записывать данные в регистр можно либо последовательно, либо параллельно. Регистры первого типа называются сдвиговыми, второго типа — параллельными.
Считывать данные из регистра можно одновременно из всех ячеек. Именно это его свойство помогает нам работать с кучей светодиодов.
Регистр называется сдвиговым, потому что при добавлении каждого нового бита в него, мы как бы сдвигаем все остальные в сторону. Вспомним, что один бит позволяет нам хранить ноль или единицу, истину или ложь. Посмотрим на диаграмме, как это происходит.
Пусть в начальном состоянии регистр уже заполнен какими-то восемью битами. Попробуем «задвинуть» в него восемь новых бит: 11011010.
Как видно, после двух итераций, в начале регистра оказалось два новых бита, а два бита в последних ячейках «вывалились» через край и пропали. На восьмом шаге весь регистр оказался заполнен новыми битами.
Регистры можно соединять в цепочку. В таком случае, вытесненный бит не будет пропадать без следа, а отправится в начало следующего регистра. При этом увеличивается число доступных выводов.
Преимущества использования сдвигового регистра 74HC595:
- не требует никакой обвязки кроме конденсатора по питанию;
- работает через широкораспостраненный интерфейс SPI;
- для самого простого включения достаточно двух выходов микроконтроллера;
- возможность практически неограниченного расширения количества выходов без увеличения занятых выходов микроконтроллера;
- частота работы до 100 МГц;
- напряжение питания от 2 В до 6 В;
- дешевый — стоит менее 5 центов;
- выпускается как в планарных корпусах (74HC595D удобен для производства), так и в DIP16 (74HC595N удобен для радиолюбителей и макетирования).
Для понимания работы регистра стоит взглянуть на функциональную схему. Она состоит из:
- 8-битного регистра сдвига,
- 8-битного регистра хранения,
- 8-битного выходного регистра.
Рассмотрим какие выводы есть у сдвигового регистра 74hc595.
Общего вывод и вывод питания объяснений не требуют.
- GND — земля
- VCC — питание 5 вольт
ШИМ
Как же использовать ШИМ, ведь мы же часто управляем при помощи регистра светодиодами, а выходы регистра могут иметь только 3 состояния — логический ноль LOW, логическая единица HIGH и высокоимпедансное состояние (пин не имеет физического контакта с электрической цепью). И действительно ШИМ сдвиговым регистром не поддерживается, но есть одна небольшая хитрость — мы можем использовать выход регистра OE (Output Enable input) — он отвечает за переключение из высокомного состояния в ноль. Выход OE — можно назвать логическим нолем для всех выходов. Таким образом, если мы подключим этот пин к ШИМ-выходу Arduino, то сможем таким образом смещать логический ноль, тем самым имитировать ШИМ на светодиодах.
Читайте на сайте Codius
Минус данного подхода заключается в том, что в этом случае регулируется яркость всех светодиодов, подключённых к одному сдвиговому регистру. А что же делать, если нам нужно показать разную яркость светодиодов, подключённых к одному сдвиговому регистру. Здесь снова нужно будет пойти на хитрость — создать карту яркостей светодиодов, и зажигать каждую группу со своей яркостью по очереди, так быстро, чтобы создавалось ощущение постоянного свечения:
Но если вы начнёте экспериментировать с задержками и большим количеством карт яркости, то столкнётесь с очень неприятным эффектом мерцания — это связно с большим временем исполнения стандартных для языка Arduino функций-обёрток типа digitalWrite, digitalRead, analogWrite, analogRead и т.д.
Другие регистры, например, STP16C596 могут управлять 16 светодиодами одновременно без использования дополнительных резисторов.
Пример 1: Использование одного сдвигового регистра
Сначала сдвиговый регистр нужно обеспечить питанием и включить. Для этого нужно подключить следующие контакты:
- GND (контакт 8) на регистре к «земле» на Arduino
- Vcc (контакт 16) на регистре к 5V на Arduino
- OE (контакт 13) на регистре к «земле» на Arduino
- MR (контакт 10) на регистре к 5V на Arduino
Это сделает все выходные контакты активными и всегда доступными. Впрочем, есть и один недостаток – до того, как скетч запустится, светодиоды получат значения, которые отправлялись им в самый последний раз, или даже произвольные значения. Решить эту проблему можно, выделив для OE и MR дополнительные контакты на Arduino, однако в этом случае свободных контактов на Arduino, что очевидно, станет на два меньше.
Затем к Arduino нужно подключить 3 «интерфейсных» контакта:
- DS (контакт 14) на регистре к цифровому контакту 11 на Arduino (синий провод)
- SH_CP (контакт 11) на регистре к цифровому контакту 12 на Arduino (желтый провод)
- ST_CP (контакт 12) на регистре к цифровому контакту 8 на Arduino (зеленый провод)
В скетчах эти контакты будут называться dataPin (контакт для данных), clockPin (тактовый контакт) и latchPin (контакт-защелка) соответственно
Обратите внимание, что к контакту-защелке подключен конденсатор на 0,1 фарад – он нужен для того, чтобы смягчить возможные колебания от импульсов.
Теперь подключаем светодиоды. Катод (короткая ножка) каждого светодиода подключается к общей «земле», а анод (длинная ножка) – к соответствующему выходному контакту сдвигового регистра. В результате получается, что регистр не только управляет светодиодами, но и питает их энергией, т.е. он является для них «источником тока». У некоторых регистров такой функции нет, они могут только «потребителями тока». Если вам попался именно такой регистр, то светодиоды к нему нужно подключать по-другому: аноды – к питанию, а катоды (т.е. заземляющие контакты светодиодов) – к выходным контактам сдвигового регистра. Если это чип, не принадлежащий к семейству «595», то лучше свериться с даташитом. И не забывайте про 220-омовые резисторы, чтобы защитить светодиоды от перегрузки.
Так будет выглядеть вся схема:
Код
Ниже – три скетча-примера. Первый – это «Простая передача битов», который просто выводит на светодиоды байт со значением от «0» до «255». Второй скетч одновременно зажигает все светодиоды. Третий циклами проходит по массиву.
Все эти скетчи базируются на информации из даташита – диаграмме синхронизации и таблицы с описанием логики (см. ниже)
В частности, таблица с логикой объясняет, что все самое важное происходит при переходе из LOW в HIGH. В частности, когда состояние на контакте clockPin переходит из LOW в HIGH, сдвиговый регистр считывает состояние с контакта данных
Попав в сдвиговый регистр, данные сохраняются во внутреннем регистре памяти. Кроме того, когда состояние переключается из LOW в HIGH на контакте latchPin, эти данные из регистра памяти перемещаются к выходным контактам, подключенным к светодиодам.
Вот диаграмма синхронизации:
Вот таблица, описывающая логику:
ВВОД | ВЫВОД | Функция | |||||
SH_CP | ST_CP | OE | MR | DS | Q7’ | Qn | |
X | X | L | L | X | L | б.и. | Состояние LOW на MR затрагивает только сдвиговый регистр |
X | ˄ | L | L | X | L | L | Пустой сдвиговый регистр загружается в регистр памяти |
X | X | H | L | X | L | Z | Сдвиговый регистр очищается; параллельные выходы переключаются в высокоимпедансное состояние |
˄ | X | L | H | H | Q6 | б.и. | 0-ой триггер сдвигового регистра получает значение HIGH; содержимое всех триггеров сдвигового регистра движется дальше; к примеру, предыдущее значение 6-го триггера (внутренний Q6) перемещается на последовательный выход (Q7’’) |
X | ˄ | L | H | X | б.и. | Qn | Содержимое триггеров сдвигового регистра (внутренние Qn) переходит в регистр памяти и в триггеры последовательного выхода |
˄ | ˄ | L | H | X | Q6 | Qn | Содержимое сдвигового регистра перемещается дальше; предыдущее содержимое сдвигового регистра перемещается в регистр памяти и триггеры параллельного выхода |
Условные обозначения:
H – уровень напряжения HIGH
L – уровень напряжения LOW
˄ – переход от LOW к HIGH
˅ – переход от HIGH к LOW
Z – высокоимпедансное состояние
б.и
– без изменений
X – не важно. Ниже – скетчи, которые можно использовать вместе с этой цепью:
Ниже – скетчи, которые можно использовать вместе с этой цепью:
- 1.1 – Простая передача битов
- 1.2 – Один за одним
- 1.3 – Использование массива
Datasheets
Sample &Buy ProductFolder Support &Community Tools &Software TechnicalDocuments SN54HC595, SN74HC595SCLS041I – DECEMBER 1982 – REVISED SEPTEMBER 2015 SNx4HC595 8-Bit Shift Registers With 3-State Output Registers1 Features 3 Description The SNx4HC595 devices contain an 8-bit, serial-in,parallel-out shift register that feeds an 8-bit D-typestorage register. The storage register has parallel 3state outputs. Separate clocks are provided for boththe shift and storage register. The shift register has adirect overriding clear (SRCLR) input, serial (SER)input, and serial outputs for cascading. When theoutput-enable (OE) input is high, the outputs are inthe high-impedance state. 1 8-Bit Serial-In, Parallel-Out ShiftWide Operating Voltage Range of 2 V to 6 VHigh-Current 3-State Outputs Can Drive Up to 15LSTTL LoadsLow Power Consumption: 80-ОјA (Maximum) ICCtpd = 13 ns (Typical)В±6-mA Output Drive at 5 VLow Input Current: 1 ОјA (Maximum)Shift Register Has Direct Clear …
Зачем нужен сдвиговый регистр 74HC595
Как всем известно, arduino имеет достаточно много пинов, которые можно использовать в разработке, но бывают проекты, для которых недостаточно существующих пинов, и тогда на помощь приходят сдвиговые регистры. Они дают возможность значительно увеличить количество выходов, так задействовав всего 3 штуки, на выходе мы получим 8 дополнительных. Не сложно подсчитать, что мы с помощью одного сдвигового регистра 74HC595 мы получим 5 дополнительных пинов. А так же у 74HC595 есть прекрасная возможность выстраивать каскады, то есть при подключении двух регистров получим уже 16 выходов, заняв всего 3 пина на ардуино. Каскады можно выстраивать и из большего количество сдвиговых регистров.
Чтобы понимать, куда реально можно использовать регистры, можно посмотреть готовый проект – «гоночки» из коллекции игр тетриса, его посмотреть можно в видео ниже. В качестве дисплея я использовал светодиодную матрицу размеров 8х8. Матрица имеет 16 выходов и с помощью двух сдвиговых регистров удалось сэкономить кучу пинов на ардуине, которые пригодились для обработки кнопок.
Анимация светодиодов
Другой скетч.
В path[] мы указываем последовательность включённых и выключенных светодиодов. Между этими последовательностями будет происходит анимация.
Для анимации бегущих огней можно реализовать задачу через функцию bitWrite().
Код попроще, чтобы лучше понять происходящее.
В методе setup() мы просто инициализируем режимы выводов и переменную светодиодов.
В методе loop() очищаем биты в переменной leds в начале каждой итерации, так что все биты устанавливаются в 0, так как мы хотим только включать один светодиод за раз. После этого мы увеличиваем или перезапускаем текущую переменную currentLed, чтобы затем опять включать правильный светодиод.
После этих двух операций мы переходим к смещению бит. Начинаем с вызова метода bitSet(), которому передаём байт, что хранит биты, и переменную currentLed.
Этот метод позволяет нам установить отдельные биты байта, указав их положение. Например, если мы хотим вручную установить байт в 10010, мы могли бы использовать следующие вызовы, поскольку биты, которые нам нужно установить в 1, являются вторыми справа (это позиция 1, когда мы начинаем в позиции 0) и пятый справа, который находится в положении 4:
Таким образом, каждый раз, когда мы увеличиваем текущую переменную currentLed и передаем ее методу bitSet(), мы каждый раз устанавливаем бит слева от предыдущего до 1 и, таким образом сообщаем сдвиговому регистру активировать вывод слева от предыдущего.
После установки бит мы записываем на контакт защёлки указание сдвиговому регистру, что собираемся отправить ему данные. Как только мы это сделаем, мы вызываем метод shiftOut(). Метод позволяет сдвигать биты за один вызов. Для этого мы передаём данные и синхронизацию в качестве первых двух параметров, затем передаём константу LSBFIRST, которая сообщает методу, что первый бит должен быть наименее значимым, а затем мы проходим через байт, содержащий биты, которые мы действительно хотим перенести в регистр сдвига.
Как только мы закончим смещение битов, мы снова обращаемся на контакт защёлки (используя HIGH в этот раз), чтобы указать, что мы отправили все данные. После того, как операция записи будет завершена, загорится соответствующий светодиодный индикатор, а затем задержится на 250 миллисекунд, прежде чем всё повторится.
Регистр сдвига (последовательный регистр)
Регистр сдвига или сдвиговый регистр (англ. Shift Register), представляет собой схему, в которой внутренние триггеры соединены последовательно. Схема работы сдвигового регистра заключается в следующем: по импульсу тактового сигнала происходит сдвиг на один разряд цифрового кода, который записан на входном выводе. У обычных сдвиговых регистров, сдвиг происходит от младших разрядов к старшим, но есть также и реверсивные сдвиговые регистры, у которых сдвиг идет, наоборот, от старших разрядов к младшим.
Схема сдвигового регистра от младших разрядов к старшим.
Большинство регистров сдвига имеют восемь разрядов, различаются режимами работы, режимами записи, чтения и сдвига, а также типом выходного каскада.
Регистры сдвига
Рассмотрим некоторые типы сдвиговых регистров. Первый из них это микросхема типа К555ИР8, которая представляет собой обычный регистр сдвига от младшего разряда к старшему. Она имеет два информационных входа объединённые по схеме 2И, вход сброса R, по отрицательному импульсу которого все выходы данного регистра устанавливаются в нуль. Сдвиг разрядов происходит по фронту импульса поступающего на тактовый вход регистра С.
Второй тип сдвигового регистра – это микросхема К555ИР9, как видно по изображению данной микросхемы она выполняет действия обратные микросхеме К555ИР8, то есть если ИР8 из последовательного кода преобразует в параллельный, то ИР9 преобразует входящий параллельный код в выходящий последовательный код. Микросхема К555ИР9 реализует следующий режим работы: при низком логическом уровне на входе разрешения записи WR происходит запись входного кода. Для осуществления сдвига необходимо перевести вход WR в высокий логический уровень и на один из тактовых входов С, объединённых по 2ИЛИ, подавать тактовые импульсы. Дополнительный информационный вход DR, позволяет с него записать информацию в младший разряд регистра сдвига.
И наконец, ещё один тип сдвигового регистра, которым является микросхема К555ИР13. Она является как бы объединением двух предыдущих регистров сдвига. Во-первых, данная микросхема имеет восемь параллельных входов и восемь параллельных выходов, причём сдвиг может осуществляться как в сторону увеличения разрядов (вход SR), так и в сторону уменьшения разрядов (вход SL) по фронту сигнала на входе С. При помощи информационных входов DR и DL есть возможность записать сигнал как в младший разряд так и в старший разряд. К555ИР13 является реверсивным регистром, Сдвиг битов от младшего разряда к старшему осуществляется по фронту сигнала на входе С при низком уровне на и высоком на SR входах, а в обратную сторону сдвиг идёт при единице на входе SL и нуле на входе SR. В случае же единичного уровня сигнала на входах SL и SR одновременно, данный регистр превращается в повторитель сигнала, то есть информация с входов микросхемы переносится на её выходы.
Главная сфера использования всех регистров сдвига является преобразование последовательного кода в параллельный код или из параллельного в последовательный, такая необходимость часто возникает, когда необходимо передать информацию на значительные расстояния, а вся обработка происходит параллельным кодом в микропроцессорных системах. Как известно быстрее всего обрабатывается информация в параллельном виде, а передавать на расстояния лучше всего в последовательном коде.
Теория это хорошо, но без практического применения это просто слова.Здесь можно всё сделать своими руками.