Что такое регистр сдвига. Реферат: Регистры сдвиги

Регистры сдвига или сдвиговые регистры (англ. shift register) представляют собой, как уже отмечалось, последовательно соединенную цепочку триггеров. Основной режим их работы - это сдвиг разрядов кода, записанного в эти триггеры, То есть по тактовому сигналу содержимое каждого предыдущего триггера переписывается в следующий по порядку в цепочке триггер. Код, хранящийся в регистре, с каждым тактом сдвигается на один разряд в сторону старших разрядов или в сторону младших разрядов, что и дало название регистрам данного типа.

В связи с названием направления сдвига в сдвиговых регистрах часто возникает путаница. Сдвиг бывает двух видов: вправо (основной режим, который есть у всех сдвиговых регистров) и влево (этот режим есть только у некоторых, реверсивных сдвиговых регистров). Названия эти отражают внутреннюю структуру регистров сдвига (рис. 8.14 ) и перезапись сигналов последовательно по цепочке триггеров. При этом триггеры, вполне естественно, нумеруются слева направо, например, от 0 до 7 (или от 1 до 8) для 8-разрядных регистров. В результате сдвиг информации регистром вправо представляет собой сдвиг в сторону разрядов, имеющих большие номера, а сдвиг информации регистром влево - это сдвиг в сторону разрядов, имеющих меньшие номера.

Однако, как известно, в любом двоичном числе слева расположены старшие разряды, а справа - младшие разряды. Поэтому сдвиг двоичного числа вправо будет сдвигом в сторону младших разрядов, а сдвиг влево - сдвигом в сторону старших разрядов. Это противоречие, не чей-то злой умысел, просто так исторически сложилось, и об этом надо помнить разработчику цифровой аппаратуры.

Рис. 8.14. Направление сдвига в сдвиговых регистрах

В стандартные серии цифровых микросхем входит несколько типов сдвиговых регистров, отличающихся возможными режимами работы, режимами записи, чтения и сдвига, а также типом выходных каскадов (2С или 3С). Большинство регистров сдвига имеет восемь разрядов. На рис. 8.15 представлены для примера четыре типа микросхем регистров сдвига.

Регистр ИР8 - наиболее простой из регистров сдвига. Он представляет собой 8-разрядную линию задержки, то есть имеет только один информационный вход, на который подается последовательная сдвигаемая информация (точнее, два входа, объединенных по функции 2И), и восемь параллельных выходов. Сдвиг в сторону выходов со старшими номерами осуществляется по переднему фронту тактового сигнала С. Имеется также вход сброса –R, по нулевому сигналу на котором все выходы регистра сбрасываются в нуль.

Рис. 8.15. Сдвиговые регистры

Регистр ИР9 выполняет функцию, обратную регистру ИР8. Если ИР8 преобразует входную последовательную информацию в выходную параллельную, то регистр ИР9 преобразует входную параллельную информацию в выходную последовательную. Однако суть сдвига не меняется, просто в ИР9 все внутренние триггеры имеют выведенные параллельные входы, и только один, последний триггер имеет выход (причем как прямой, так и инверсный). Запись входного кода в регистр производится по нулевому сигналу на входе -WR. Сдвиг осуществляется по положительному фронту на одном из двух тактовых входов С1 и С2, объединенных по функции 2ИЛИ. Имеется также вход расширения DR, сигнал с которого в режиме сдвига перезаписывается в младший разряд сдвигового регистра.

Рис. 8.16. Соединение регистров ИР8 для увеличения разрядности

Как и все остальные сдвиговые регистры, ИР8 и ИР9 допускают каскадирование, то есть совместное включение для увеличения разрядности.

Регистр ИР13 соединяет в себе возможности регистров ИР8 и ИР9. Он имеет как восемь входов для параллельной записи, так и соответствующие им восемь выходов параллельной информации. Сдвиг осуществляется по положительному фронту тактового сигнала С, причем сдвиг возможен как в сторону старших разрядов (вправо), так и в сторону младших разрядов (влево).

Регистр ИР24 обеспечивает сдвиг информации в обоих направлениях. Имеются входы расширения DR и DL, а также выходы расширения Q0 и Q7, что позволяет легко наращивать разрядность.

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

Для примера на рис. 8.19 показана простейшая схема передачи цифровой информации в последовательном коде по двум линиям: информационной и синхронизующей. Такая передача позволяет сократить количество соединительных проводов, а также упростить защиту передаваемых данных от действия внешних электромагнитных помех, правда, ценой снижения скорости передачи.

Рис. 8.19. Последовательная передача информации с помощью регистров сдвига

На передающем конце (слева на рисунке) с помощью сдвигового регистра ИР9 входной параллельный 8-разрядный код преобразуется в последовательность разрядов данных, следующих с частотой тактового сигнала. На приемном конце (справа на рисунке) с помощью сдвигового регистра ИР8 эта последовательность разрядов данных снова преобразуется в параллельный код. Оба регистра тактируются одним и тем же тактовым сигналом, который передается по линии связи параллельно с последовательностью данных. Для увеличения надежности передачи информационный сигнал дополнительно задерживается относительно фронта тактового сигнала с помощью цепочки из двух инверторов.

Первый бит последовательного входа (со входа 7 регистра ИР9) начинает передаваться с началом сигнала записи -Зап. Следующие разряды передаются с каждым следующим положительным фронтом тактового сигнала С. Последним передается сигнал со входа 0. В регистр ИР8 разряды последовательного кода записываются в том же самом порядке, в каком они были в регистре ИР9. По окончании передачи первый переданный сигнал данных окажется в разряде 7 шины данных регистра ИР8, а последний переданный сигнал данных - в разряде 0.

Следующее применение сдвиговых регистров состоит в организации всевозможных линий задержек, особенно имеющих значительное количество каскадов. С помощью сдвиговых регистров можно обеспечить задержку любого входного сигнала на целое число тактов. Правда, надо учитывать, что длительность входного сигнала (и любого его элемента) будет также передаваться по линии задержки с точностью до одного такта. Такие линии задержки могут применяться для сравнения нескольких последующих тактов входного сигнала, для выполнения арифметических операций с несколькими тактами входного сигнала и для других подобных целей. Работа линии задержки на регистре сдвига иллюстрируется рис. 8.20 .

Рис. 8.20. Линия задержки входного сигнала на регистре сдвига

Сдвиговые регистры могут также использоваться для формирования импульсов заданной длительности, причем длительность импульса может задаваться управляющим кодом, то есть быть программно управляемой. На рис. 8.21 приведена возможная схема такого формирователя.

Рис. 8.21. Формирователь импульсов с длительностью, задаваемой управляющим кодом

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

Пусть управляющий код равен 5. Тогда в тот момент, когда на выходе 5 сдвигового регистра появится единица, она будет передана на выход мультиплексора КП7 с инверсией. При этом нулевой сигнал на входе –R триггера сбросит триггер в нуль, то есть выходной сигнал закончится.

Таким образом, длительность выходного сигнала будет определяться управляющим кодом. Погрешность установки этой длительности равна одному периоду тактового сигнала и зависит от временного сдвига между фронтом входного сигнала и фронтом ближайшего к нему тактового импульса. Чем больше длительность выходного сигнала, тем меньше относительная погрешность установки его точности. Например, при управляющем коде 0 длительность выходного сигнала может быть от 0 до Т, где Т - период тактового сигнала. А при управляющем коде 7 длительность выходного сигнала будет от 7Т до 8Т. При этом мы не учитываем задержек триггера, сдвигового регистра и мультиплексора.

Сдвиговые регистры могут также использоваться для умножения и деления двоичных чисел на 2 n , где n - целое число, большее нуля. Сдвиг двоичного числа вправо (в сторону младших разрядов) на один разряд равносилен делению на 2. Сдвиг двоичного числа влево (в сторону старших разрядов) на один разряд равносилен умножению на 2. Для того чтобы сдвиговый регистр умножал и делил двоичный код, надо всего лишь записать этот код в регистр и сдвинуть его нужное количество раз вправо или влево. Наиболее удобен для этого регистр ИР13. При этом необходимо, чтобы в освободившиеся разряды вдвигались нули, то есть на входы расширения DR и DL регистра надо подать нулевые сигналы.

Наконец, последнее применение сдвигового регистра, которое мы рассмотрим, - это генератор случайной последовательности сигналов или случайной последовательности кодов. Строго говоря, последовательности будут не полностью случайные, а квазислучайные, то есть будут периодически повторяться, но период этот довольно большой. Случайные последовательности сигналов и кодов широко применяются в тестирующей аппаратуре, в генераторах шума, в логических игровых устройствах.

Задача состоит в том, чтобы выходной сигнал или код менял свое состояние случайно (или почти случайно). Сигнал должен случайно переключаться из 0 в 1 и из 1 в 0, а код должен случайно принимать значения из диапазона от 0 до (2 N–1), где N - число разрядов кода (например, от 0 до 255 при 8-разрядном коде). Псевдослучайные последовательности имеют то преимущество перед истинно случайными, что они - предсказуемые и периодические, но в этом же и их недостаток.

Структура генератора квазислучайной последовательности на сдвиговом регистре очень проста (рис. 8.22 ). Она представляет собой регистр сдвига с параллельными выходами (например, ИР8), несколько (минимум два) выходных сигналов которого объединены с помощью элемента Исключающее ИЛИ, с выхода которого сигнал подается на вход регистра, замыкая схему в кольцо. Схема тактируется сигналом с частотой f T .

Рис. 8.22. Структура генератора псевдослучайной последовательности

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

Выгоднее брать число разрядов не кратное 8, например, 7, 15 или 31. В этом случае для обратной связи используются всего лишь два выхода, то есть достаточно одного двухвходового элемента Исключающее ИЛИ.

Период выходной последовательности генератора составляет (2 N -1) тактов, где N - количество разрядов регистра сдвига. За это время каждое из возможных значений выходного кода (кроме одного) встречается один раз. Количество единиц в выходном сигнале больше количества нулей на единицу.

Выходной код 000…0 представляет собой запрещенное состояние, так как он блокирует работу генератора, воспроизводя сам себя снова и снова. Но в то же время получиться такой нулевой код может только сам из себя, поэтому достаточно обеспечить, чтобы его не было при включении питания схемы.

Частоты в спектре выходного сигнала будут следовать с интервалом (f T /2 N –1), а огибающая спектра будет практически постоянной до частоты 0,25f T , то есть шум до этой частоты можно считать белым (спад в 3 дБ происходит на частоте 0,45 f T).

Такой генератор использовала известная фирма Hewlett–Packard в своем генераторе шума.

Одной из проблем, возникающих при разработке микроконтроллерных устройств часто становится необходимость экономии линий портов ввода/вывода. Многие периферийные устройства, которые могут работать в связке с процессором, требуют для передачи информации большого количества соединительных проводников. Актуальность этой задачи не снизилась даже с появлением процессоров с большим количеством выводов, так как одновременно усложнились и периферийные устройства. Для устройств индикации, одним из вариантов снижения количества требуемых линий может стать использование регистров сдвига (Shift register).

Регистр сдвига представляет собой цепочку из нескольких, последовательно соединенных D-триггеров. На первый триггер подключается информационный выход микроконтроллера. С каждым импульсом тактового сигнала, передаваемого по отдельной линии, уровень на входе каждого из триггеров записывается на выход. В итоге происходит сдвиг сигнала от начала к концу цепочки. Если использовать подключить выходные линии после каждого из триггеров, то сдвиговый регистр будет представлять собой последовательно-параллельный преобразователь. Это значит, что для организации каких-либо индикаторов, будет минимально необходимо использовать только два вывода микроконтроллера.

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

Использование регистра 74164

Регистр сдвига

Одной из наиболее простых и распространенных микросхем, реализующих функцию регистра сдвига, считается модель 74164 (555ИР8) и ее технологические варианты. Данная микросхема представляет собой 8-ми разрядный регистр с последовательной загрузкой и параллельным выходом. Используя 74164 можно сравнительно просто получить линейный индикатор из 8-ми светодиодов или односимвольный семисегментный индикатор. При необходимости, допускается последовательное соединение нескольких микросхем, что увеличит количество выходных линий, и подключенных к ним индикаторов.

Выходной ток каждой линии современных вариантов 74ACT164 и 74HCT164 составляет 25мА, что позволяет напрямую подключать маломощные одиночные светодиоды или семисегментные индикаторы. Время цикла этих микросхем может находиться на уровне 15нС, что соответствует возможности работы на частоте 66МГц. Учитывая, что подобная или более высокая частота работы процессоров встречается редко, для формирования тактовых импульсов достаточно просто включить и выключить выход контроллера, без какой-либо задержки.Для загрузки данного регистра сдвига достаточно двух линий: DATA и CLK. Это позволяет задействовать только две линии микроконтроллера, для управления устройством индикации. При этом во многих случаях может оказаться не важно, сколько микросхем будет соединено последовательно, и соответственно сколькими индикаторами управляет контроллер.

Вариантов использования 74164 существует множество. Можно выделить несколько из них. Первый, вышеназванный индикатор на основе нескольких светодиодов. Второй – одиночный семисегментный индикатор или линейка из них. Пример линейки индикаторов показан в статье – Термометр на микроконтроллере PIC12F629 .

Программирование индикации с использование регистра сдвига также не отличается высокой сложностью. Особенно если в микроконтроллере реализована такая операция, как сдвиг байта через бит переноса. Проверкой данного бита можно определить уровень, который требуется установить на линии данных. Циклически повторяя такой сдвиг и формируя тактовые импульсы можно полностью загрузить регистр сдвига.Следующим вариантом использования может стать схема динамической индикации, когда для снижения количества используемых линий микропроцессора, параллельный вывод на отдельные сегменты, заменяется на последовательный, с использованием последовательно-параллельного преобразователя. Этот же преобразователь может использоваться в схеме включения ЖК-индикатора на базе HD44780.

Использование регистров 74595 и 4094

Применение регистров сдвига позволяет строить большие схемы с использованием светодиодных индикаторов. Но в случае, если индикаторы потребляют большой ток (состоят из множества отдельных светодиодов), выходного сигнала регистра становится недостаточно. Для усиления сигнала можно применять различные схемы, состоящие из отдельных транзисторов, или сборок. Наиболее просто и выгодно в этом случае использовать микросхему ULN2803, содержащую 8 транзисторных ключей. Каждый ключ способен коммутировать ток до 500мА при напряжении до 50В, что позволяет подключать к нему до нескольких десятков отдельных светодиодов, маломощных ламп накаливания, либо сегменты крупногабаритных матричных индикаторов. Единственным отличием от вышеприведенных схем, будет использование светодиодных индикаторов с общим анодом, так как ULN2803, по сути, представляет собой ключ нижнего плеча.При всех своих достоинствах, микросхема 74164 имеет некоторые недостатки. В первую очередь к ним следует отнести непосредственное подключение выходов схемы к выходным линиям триггеров. В медленных системах светодиодной индикации, при загрузке регистра, можно наблюдать движение информации от входа к выходу в виде посторонней засветки сегментов. В случае частого обновления информации, подобная засветка вызывает несколько неприятные ощущения. Для ее устранения следует применять регистры, оснащенные выходной защелкой. Примером таких элементов служат микросхемы 74595 и 4094. Каждая из них имеет дополнительный вход стробирования SCLK. При неизменном принципе загрузки, информация на выходе этих устройств сможет появиться только после прохождения импульса по данному входу. Такое решение требует использования дополнительного вывода микроконтроллера, но позволяет строить индикаторы с большим количеством сегментов, без появления различных неприятных эффектов. Особенно полезно использование регистров, оснащенных защелками совместно с микроконтроллерами, работающими на пониженных частотах или от внутренних генераторов.

Применение регистров сдвига несколько усложняет схему готового устройства, но позволяет использовать минимум выходов микроконтроллера и имеет множество других достоинств. Помимо прочего использование вышеприведенных решений позволяет упростить программирование и создавать без больших затрат многоразрядные индикаторы.

You have no rights to post comments

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

Сдвиговые регистры реализуются на СИС – устройствах, выполненных с применением RS-, JK-, или D – триггеров, и различия между ними главным образом связаны с методом обработки входных и выходных данных. В данном разделе описываются основные типы этих регистров.

Рис. 2.29. Типичный 4 х разрядный регистр с последовательным входом.

Рис. 2.30. Временная диаграмма работы 4 х разрядного сдвигового регистра.

Сдвиговый регистр с последовательным входом.

Сдвиговый регистр с последовательным входом – это устройство, в котором данные последовательно поступают на вход, как показано на рис. 2.29 для 4 х разрядного сдвигового регистра. В данном случае используются D – триггеры. Работает регистр следующим образом. В исходном положении импульс сброса (логический 0) подается на вход «Установка в 0», устанавливая выходы Q 0 -Q 3 в 0. Дале первый бит данных подается на последовательный вход. При воздействии переднего фронта первого тактового импульса Q 0 принимает значение равное D 1 . Затем на последовательный вход подается D 2 . При воздействии переднего фронта второго тактового импульса Q 0 =D 2 и Q 1 =D 1 . Продолжается этот процесс, после четырех тактовых импульсов имеем Q 0 =D 4 , Q 1 =D 3 , Q 2 =D 3 , Q 3 =D 1 . Временная диаграмма для последовательно поступающих входных данных показана на рис. 2.30.

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

Сдвиговый регистр с параллельным входом

Сдвиговый регистр с параллельным, входом - это устройство, в котором входные данные поступают одновременно по параллельным информационным каналам (рис. 2.31).. Запись данных в регистр осуществляется следующим образом. Сначала производится сброс содержимого регистра подачей импульса (логического 0) на вход «Установка в 0». Далее D 1 -D 4 подаются на входы и импульс (логическая 1) .поступает на вход записи. Это приводит к записи информации во все регистры с использованием входов предустановки. После этого при появлении каждого тактового импульса информация сдвигается на один разряд вправо. Выход данных может быть как последовательным, так и параллельным. Многие сдвиговые регистры, выполненные в виде ИС, имеют параллельный вход и последовательный выход. Эти устройства известны как параллельно-последовательные преобразователи.

В описанных выше сдвиговых регистрах сдвиг производился в одном направлении при появлении каждого тактового импульса. Во многих случаях, однако, желательно иметь возможность сдвигать информацию и влево, и вправо. Регистры, обладающие этой способностью, называются реверсивными сдвиговыми регистрами. Управление сдвигом в таких регистрах осуществляется путем подключения выходов триггеров к соответствующим входам при сдвиге влево или вправо. Направление сдвига регулируется входом «Способ работы». Реверсивные сдвиговые регистры с последовательными и параллельными входами и выходами называют универсальными сдвиговыми регистрами.

Рис. 2.31. Типичный 4-разрядный сдвиговый регистр с параллельным выходом.

Пример регистра

В микросхеме ИР1 каждый разряд образован синхронным двухступенчатым триггером RS с логикой на входе (рис. 2.32). Регистр сдвига позволяет реализовать следующие режимы работы: запись информации параллельным кодом; сдвиг вправо; сдвиг влево. Управление режимом работы регистра осуществляется по входам VI, V2, С1, С2 (выводы 1, 6, 9, 8).

Рис. 2.32. Логическая структура микросхемы ИР1

Для записи в регистр информации параллельным кодом следует на вход управления режимом V2 подать напряжение высокого уровня, на вход С2 напряжение низкого уровня, а информационные сигналы на входы D1 - D8. Напряжение на входах С1, VI может быть любым. Для сдвига за писанной параллельным кодом информации вправо тактовые импульсы подаются на вход С2 (вывод 8). При этом на входе V2 (вывод 6) следует поддерживать напряжение высокого уровня. При операциях с данными, представленными в последовательном коде, входную информацию в виде последовательности импульсов подают на вход информации VI (вывод 1), тактовые импульсы на вход синхронизации С1 (вывод 9), а на входах V2, D1 - D8 поддерживают напряжение низкого уровня. Режимы работы ИС ИР1 при различных видах записи информации представлены в табл. 2.11.

При сдвиге влево на вход выбора режима V2 подается напряжение высокого уровня, которое блокирует прохождение тактовых импульсов, для сдвига вправо. Если при этом на входы параллельного кода разрядов D1 - D8 не подавать параллельный код числа, а выход последнего разряда соединить с входом параллельного кода предыдущего разряда, его выход с аналогичным входом предшествующего ему разряда и т. д. то получим регистр сдвига влево. Входом последовательного кода в этом случае служит вход параллельного ко­да последнего разряда регистра сдвига.

Микросхемы ИР1 могут быть использованы в качестве основного элемента в арифметических устройствах буферной памяти, элемента задержки на n тактов, преобразователя последовательных кодов в параллельные и наоборот, делителя частоты, закольцованного распределителя импульсов и т. д.

по тактовому сигналу содержимое каждого предыдущего триггера переписывается в следующий по порядку в цепочке триггер . Код, хранящийся в регистре, с каждым тактом сдвигается на один разряд в сторону старших разрядов или в сторону младших разрядов, что и дало название регистрам данного типа.

В связи с названием направления сдвига в сдвиговых регистрах часто возникает путаница. Сдвиг бывает двух видов: вправо (основной режим, который есть у всех сдвиговых регистров ) и влево (этот режим есть только у некоторых, реверсивных сдвиговых регистров ). Названия эти отражают внутреннюю структуру регистров сдвига (рис. 8.14) и перезапись сигналов последовательно по цепочке триггеров. При этом триггеры, вполне естественно, нумеруются слева направо, например, от 0 до 7 (или от 1 до 8) для 8-разрядных регистров. В результате сдвиг информации регистром вправо представляет собой сдвиг в сторону разрядов, имеющих большие номера, а сдвиг информации регистром влево - это сдвиг в сторону разрядов, имеющих меньшие номера.

Однако, как известно, в любом двоичном числе слева расположены старшие разряды, а справа - младшие разряды. Поэтому сдвиг двоичного числа вправо будет сдвигом в сторону младших разрядов, а сдвиг влево - сдвигом в сторону старших разрядов. Это противоречие, не чей-то злой умысел, просто так исторически сложилось, и об этом надо помнить разработчику цифровой аппаратуры.


Рис. 8.14.

В стандартные серии цифровых микросхем входит несколько типов сдвиговых регистров , отличающихся возможными режимами работы, режимами записи, чтения и сдвига, а также типом выходных каскадов (2С или 3С). Большинство регистров сдвига имеет восемь разрядов. На рис. 8.15 представлены для примера четыре типа микросхем регистров сдвига .

Регистр ИР8 - наиболее простой из регистров сдвига . Он представляет собой 8-разрядную линию задержки, то есть имеет только один информационный вход, на который подается последовательная сдвигаемая информация (точнее, два входа, объединенных по функции 2И), и восемь параллельных выходов. Сдвиг в сторону выходов со старшими номерами осуществляется по переднему фронту тактового сигнала С. Имеется также вход сброса –R, по нулевому сигналу на котором все выходы регистра сбрасываются в нуль. Таблица истинности регистра ИР8 приведена в табл. 8.5 .


Рис. 8.15. Таблица 8.5. Таблица истинности регистра сдвига ИР8
Входы Выходы
-R C D1 D2 Q0 Q1 Q7
0 X X X 0 0 0
1 0 X X Не меняются
1 1 Х Х Не меняются
1 0 1 1 1 1 Q0 Q6
1 0 1 0 Х 0 Q0 Q6
1 0 1 Х 0 0 Q0 Q6

Регистр ИР9 выполняет функцию, обратную регистру ИР8. Если ИР8 преобразует входную последовательную информацию в выходную параллельную, то регистр ИР9 преобразует входную параллельную информацию в выходную последовательную. Однако суть сдвига не меняется, просто в ИР9 все внутренние триггеры имеют выведенные параллельные входы, и только один, последний триггер имеет выход (причем как прямой , так и инверсный). Запись входного кода в регистр производится по нулевому сигналу на входе -WR. Сдвиг осуществляется по положительному фронту на одном из двух тактовых входов С1 и С2, объединенных

Из этого руководства вы узнаете, как управлять 16 светодиодами используя всего 3 линии управления. Мы осуществим это путем последовательной передачи данных в сдвиговые регистры .

Микросхема 74HC595 содержит 8 битный регистр хранения и 8 битный сдвиговый регистр. Данные последовательно передаются в сдвиговый регистр, затем фиксируются в регистре хранения. К регистру хранения подключены 8 выходных линий. На картинке ниже показано расположение выводов микросхемы 74HC595.

Вывод 14 (DS) это вывод данных. В некоторых описаниях он обозначается как «SER».

Когда уровень на выводе 11 (SH_CP, иногда обозначается как SRCLK) переходит из низкого в высокий, значение на выводе DS сохраняется в сдвиговом регистре, при этом данные сдвигаются на один разряд, чтобы предоставить место для нового бита.

Пока на выводе 12 (ST_CP, иногда обозначается как RCLK) низкий уровень, данные записываются в регистр сдвига. Когда уровень переходит в высокий, данные из сдвигового регистра фиксируются в регистре хранения, из которого поступают на выводы Q0…Q7.

На представленной ниже временная диаграмме, показано, каким образом можно установить на выходах Q0…Q7 микросхемы значение 11000011, учитывая что изначально там было значение 00000000.

Ниже показана схема, которую мы соберем в несколько шагов.

Мы используем перфорированную макетную плату с контроллером Atmega8 , которую использовали во многих наших проектах. Добавим еще 2 пустых макетных платы и подведем к ним питание.

Установим микросхему регистра сдвига и подключим к ней питание +5 В и общий провод.

Теперь проведем 3 линии управления между микроконтроллером и регистром сдвига, для чего подсоединим:

  • PC0 к DS
  • PC1 к ST_CP
  • PC2 к SH_CP

Этими линиями являются 3 синих провода на картинке ниже.

Затем подключим светодиоды и резисторы. Я использовал резисторы сопротивлением 510 Ом, но допустимы и другие номиналы.

Для демонстрации работы схемы я написал , которая выводит перемещающийся из стороны в сторону огонек на 8 светодиодах.

Все это конечно впечатляет, но разве я не говорил, что мы будем управлять 16 светодиодами? Чтобы сделать это, нам потребуется еще один сдвиговый регистр 74HC595, больше светодиодов, больше резисторов и больше оранжевых и голубых проводов.

Мы используем вывод Q7, чтобы соединить регистры сдвига в одну цепочку.

Модифицированная схема показана ниже.

Мы остановились на 16 светодиодах, но можно соединить в одну цепочку еще больше регистров сдвига. Эта методика конечно не ограничивается управлением светодиодами, ее можно использовать для увеличения числа портов вывода, чтобы управлять другими видами устройств.

Одно предупреждение касательно этой методики. Когда вы включаете схему, на выходах регистров наблюдаются некоторое произвольное значение. Для того чтобы записать требуемое значение, требуется меньше микросекунды, но для некоторых схем это может стать причиной проблем. В этом случае вы должны использовать выводы MR и OE, для сброса регистров хранения.

Исполнение: SO16-150. Логика стандартная: Тип корпуса: SO16-150 Логическая ИС 74HC595D.118. Описание в формате PDF

  • В програмке на 8 светодиодах есть ошибки... Исправьте, плиз...
  • А вы знаете какие именно ошибки в программе. Или пробовали компилировать и получили ошибки при компиляции? Как таковых ошибок в программе нет, но есть один нюанс, который был задуман автором, с целью использовать данный пример на разных контроллерах. Всего навсего... Так же один момент - не указана тактовая частота в программе, но я не считаю что это ошибка, а даже наоборот, с этим параметром можно "поиграться" и увидеть результаты и изменения. Единственное, в тексте описания не говорится о том, что мега настроена на работу от внутреннего осциллятора. У меня скомпилировать получилось, все без ошибок (AVRStudio).
  • Я компелировал в CodeVisionAVR. Ошибки в delay_ms это мелочи, компилятор не понимает _BV() и bit_is_set. Схему тестирую в протеусе. А как в АВРстудио писать на С++, там же вроде ассемблер...
  • AVRStudio + компилятор WinAVR и пишем на Си в студии.
  • Поставил WinAVR, не понимает delay.h Какая библиотека в аврстудио для паузы?
  • Используем: include и include
  • ../new.c:2:26: util/delay.h: No such file or directory:confused: текст программы в АВРСтудио 4: #include #include #define DS_PORT PORTC #define DS_PIN 0 #define ST_CP_PORT PORTC #define ST_CP_PIN 1 #define SH_CP_PORT PORTC #define SH_CP_PIN 2 #define DS_low() DS_PORT&=~_BV(DS_PIN) #define DS_high() DS_PORT|=_BV(DS_PIN) #define ST_CP_low() ST_CP_PORT&=~_BV(ST_CP_PIN) #define ST_CP_high() ST_CP_PORT|=_BV(ST_CP_PIN) #define SH_CP_low() SH_CP_PORT&=~_BV(SH_CP_PIN) #define SH_CP_high() SH_CP_PORT|=_BV(SH_CP_PIN) //Define functions //====================== int i; void ioinit(void); void output_led_state(unsigned char __led_state); //====================== void ioinit (void) { DDRC = 0b00000111; //1 = output, 0 = input PORTC = 0b00000000; } void output_led_state(unsigned char __led_state) { SH_CP_low(); ST_CP_low(); for (i=0;i<8;i++) { if (bit_is_set(__led_state, i)) DS_high(); else DS_low(); SH_CP_high(); SH_CP_low(); } ST_CP_high(); } int main (void) { ioinit(); //Setup IO pins and defaults while(1) { for (i=7; i>0; i--) { output_led_state(_BV(i)); _delay_ms(100); } for (i=0; i<8; i++) { output_led_state(_BV(i)); _delay_ms(100); } } } Запускаю в протеусе. Один огонек горит =(((
  • Разобрался с регистром или проблемы остались (а то был занят, поэтому не отвечал). Если чего, выложи проект в протеусе, гляну.