Открыть Электронные книги
Категории
Открыть Аудиокниги
Категории
Открыть Журналы
Категории
Открыть Документы
Категории
Белов
Самоучитель
разработчика устройств
на микроконтроллерах AVR
Издание 2-е,
переработанное и дополненное
Книга + диск
ISBN 978-5-94387-808-4
Серия «Радиолюбитель»
Самоучитель раскрывает секреты микропроцессорной техники, затрагивает основы цифровой
логики, принципы программирования. Написан простым, понятным языком, снабжен схемами,
иллюстрациями и практическими примерами.
После популярной теоретической части автор переходит к практике реализации устройств на
микроконтроллерах. В качестве примера используются микроконтроллеры AVR фирмы Atmel.
Рассматриваются их принципы построения и особенности архитектуры.
После описания микросхем в книге дается ряд практических уроков по их применению. В них на
примерах читатель пошагово учится как способам построения электронных схем с применением
микроконтроллеров, так и приемам программирования.
Одновременно с разбором примеров идет изучение языков программирования. Все программные
примеры даны сначала на Ассемблере, а затем на СИ.
Самоучитель будет полезен начинающим разработчикам электронных устройств, радиолюбителям
и студентам технических ВУЗов. Книга сопровождается CD. Состав информации CD рассмотрен
на обложке.
От редактора. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Приложение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 523
Сергей Корякин-Черняк,
главный редактор издательства «Наука и Техника»
Модуль Порты
Процессор
памяти ввода/вывода
Определение.
Порт ввода — это специальное электронное устройство, на которое
извне поступают какие-либо электрические сигналы, предназначенные
для управления микропроцессорным устройством. Например, сигналы,
возникающие при нажатии клавиш на клавиатуре, сигналы, возникаю-
щие при срабатывании различных датчиков и т. п.
Определение.
Порт вывода выполняет обратную функцию. В них процессор записы-
вает различные числа, которые затем поступают на внешние устрой-
ства в виде электрических сигналов.
Эти сигналы используются для управления. Управлять можно любым
устройством, которое допускает электрическое управление, это индика-
торы, дисплеи, электромагнитные реле, электромоторы, электропневмо-
клапаны, электрические нагреватели и т. д.
Нужно только усилить управляющие сигналы до требуемой мощно-
сти. Кроме перечисленных выше команд в любой микропроцессор зало-
жен набор специальных команд, специфических для задач управления
процессом вычислений. В дальнейшем мы остановимся подробнее на
всех типах команд микропроцессора (см. раздел 2.2).
Итак, мы разобрались, что такое процессор. И вот такой простой
цифровой автомат способен вытворять все те чудеса, которые мы при-
выкли наблюдать в исполнении современных компьютеров. Как же это
возможно? Оказывается, все на свете можно описать цифрами. И текст,
и изображение, и звуки, и музыку, и даже целые видеофильмы.
Хорошо поработали ученые-математики. Они сумели разработать
математические модели всех этих процессов. Остальное оказалось делом
техники. Главное, чтобы процессор мог выполнять операции как можно
быстрее! А современные процессоры это могут!
Но обработка всех перечисленных выше процессов — это удел мощ-
ных микропроцессоров, применяемых в персональных компьютерах.
Однако настоящая книга не ставит перед собой задачи изучения этих
микропроцессоров. Предмет нашего изучения — небольшие специали-
зированные микропроцессорные схемы, предназначенные для управ-
ления конкретными устройствами автоматики, электронной и бытовой
техники. Подобные устройства управления имеют одно общее назва-
ние — микропроцессорные контроллеры.
Виды памяти
Различают несколько разных видов памяти. С точки зрения микро-
процессора все виды памяти идентичны. Это набор ячеек для хране-
ния информации. Однако в реальном микропроцессорном устройстве
применяют микросхемы памяти, изготовленные по разной техноло-
гии и имеющие различные свойства и назначение. В частности, для
хранения программ чаще всего используется специальный вид микро-
схем памяти — так называемые постоянные запоминающие устройства
(ПЗУ). По-английски это звучит как ROM (read only memory). Они
называются постоянными потому, что допускают лишь однократную
запись информации. После записи информации в ПЗУ она хранится там
постоянно и не может быть изменена, что исключает случайную порчу
или утерю программы.
Запись ПЗУ — это специальный процесс, выполняемый при помощи
так называемых программаторов. Существует несколько видов микро-
Правило 1.
Для представления чисел используются десять цифр, каждая из кото-
рых обозначается своим знаком. Любое число записывается при
помощи одной или нескольких рядом стоящих цифр, причем имеет зна-
чение как набор используемых цифр, так и их взаимное расположение.
Правило 2.
Для записи чисел в пределах первого десятка используется только одна
цифра. Эта цифра является младшим разрядом числа.
Правило 3.
Для чисел следующего десятка вводится дополнительный разряд. Это еще
одна цифра (следующий разряд числа), которая ставится впереди предыду-
щего разряда. Цифра, стоящая в этом разряде, означает количество десят-
ков. Двухразрядные числа используются в пределах первой сотни.
Правило 4.
При переполнении очередного разряда вводится следующий разряд, и
так до бесконечности.
Пример.
Число восемь в десятичной системе записывается так — 810. А то же
число в восьмиричной системе записывается следующим образом — 108.
нения второго разряда появляется третий (после 778 идет 1008). После
третьего — четвертый, и так далее.
Пример.
Так записываются числа в двух разных системах исчисления:
3210 = 408, 13110 = 2038, 4210 = 528, 125410 = 23468, 34810 = 5348 и т. д.
Примеры.
Вот еще несколько примеров шестнадцатиричных чисел:
1710 = 1116, 20610 = 0CE16,
2510 = 1916, 69810 = 2BA16,
2610 = 1A16, 123510 = 4D316.
Совет.
Если у вас есть компьютер, на котором установлен Windows, вы сами
легко можете поэкспериментировать с переводом чисел из одной
системы исчисления в другую. Для этого запустите стандартный
калькулятор, входящий в Windows. Обычно он запускается через меню
Пуск / Стандартные / Калькулятор. Поэкспериментируйте с калькуля-
тором для более полного усвоения материала.
Примеры.
Запись чисел с использованием букв:
23D то же, что и 2310;
03FH то же, что и 03F16;
01101B то же, что и 011012;
375O то же, что и 3758.
Примеры.
Вот варианты записи десятичного, шестнадцатиричного и двоичного
чисел.
12342 0x12C4D0 0b001101011
Пример.
Число 0x12C4D0 можно записать как $12C4D0.
Правило 1.
Ноль плюс ноль — получится, естественно, ноль.
Правило 2.
Один плюс ноль и ноль плюс один дадут в результате единицу.
Правило 3.
При сложении двух единиц мы получим ноль в текущем разряде и еди-
ницу переноса в следующий разряд.
10011001110
x
1011
10011001110
+ 10011001110
10011001110
11010011011010
Выходы
Входы
D3 D3 D3
D4 D4 D4
D5 D5 D5
D6 D6 D6
D7 D7 D7
Пример.
Для того, что бы передать по шине число 25 (110012), нужно выставить
на шине следующие значения: на трех выходах D0, D3 и D4 должен быть
единичный сигнал, на всех остальных выходах должен быть ноль.
Правило.
По восьмиразрядной шине можно передавать числа от 0 до 255 (то
есть 256 разных значений). Это важно знать, так как восьмиразрядная
шина является своего рода стандартом в вычислительной технике.
Более подробно к описанию шин мы вернемся, когда перейдем к опи-
санию микропроцессорной системы.
Двухуровневый сигнал
А сейчас остановимся подробнее на двухуровневом сигнале, имити-
рующем двоичный разряд числа. Каждый из этих уровней имеет свое
название. Различают сигнал логического нуля и сигнал логической еди-
ницы. Другое название — высокий логический уровень и низкий логи-
ческий уровень. Эти термины в дальнейшем будут часто встречаться в
книге.
Для получения сигналов логической единицы и логического нуля
используются так называемые триггерные схемы, или схемы с двумя
устойчивыми состояниями. Напряжения на выходе любого реального
устройства неидеальны и имеют разброс в значениях.
Пример.
Сигнал для микросхем, выполненных по так называемой ТТЛ-технологии
(транзисторно-транзисторная логика), допускают следующие откло-
нения (при напряжении питания 5 В):
w для логического нуля на выходе допускается присутствие напряже-
ния до 0,4 В;
w для логической единицы напряжение на выходе должно быть не менее
2,4 В.
Правило.
Cуществует правило, верное для любых типов цифровых микросхем:
если напряжение на выходе цифровой микросхемы соответствует
логическому нулю (входит в соответствующий диапазон), то другая
микросхема, на которую приходит данный цифровой сигнал, надежно
распознает его как ноль. Если сигнал на выходе соответствует логи-
ческой единице (входит в эти допустимые пределы), то принимающее
устройство всегда распознает его как единицу.
& 1 1
Таблица истинности
Для отображения логики работы того или иного элемента принято
составлять так называемые таблицы истинности. Таблица истинности —
это такая таблица, которая имеет столбцы для всех входов и выходов
конкретного элемента. В строках таблицы отображаются все возможные
состояния элемента. Каждая строка соответствует одному из возможных
состояний. На рис. 1.5 приведены таблицы истинности для трех основ-
ных логических элементов. Для наглядности использованы трехвходо-
вые варианты элемента «И» и элемента «ИЛИ».
X1 & X1 1 1
X2 Y X2 Y X1 Y
X3 X3
1 &
&
D1
X1 X1 == X1 1
YY D4
X2 X2 &
X2
Y
Входы Вых. D2 D3
& 1
Входы
X2 X3 Вых.
Y
X2 0 X30 Y0
0 0 0 1 01
1 0 1
0 1 1
1 1 0
1 0 1
Рис. 1.8.
1 Элемент
1 0 Рис. 1.9. Одно из возможных схемных решений
«Исключающее ИЛИ» элемента «Исключающее ИЛИ»
Входы Выходы
XP X1 X2 Y P
0 0 0 0 0
0 0 1 1 0
X1 0 1 0 1 0
P 0 1 1 0 1
X2 1 0 0 1 0
Y 1 0 1 0 1
XP 1 1 0 0 1
1 1 1 1 1
S &
Q
S TT
Q
&
Q Q
R R
Вывод.
RS-триггер можно считать простейшим устройством для хранения
одного бита цифровой информации.
Один бит — это один двоичный разряд или величина, которая может
принимать только два значения (0 и 1). Логично, что для хранения еди-
ницы триггер переводится в единичное состояние. Для хранения нуля —
в нулевое.
Обратите внимание на обозначение входов сброса и установки на
рис. 1.12. Оба входа снабжены кружочками, а их имена снабжены чер-
той. Это означает, что входы инверсные. RS-триггер имеет не только
инверсный выход, но и оба его входа также инверсные. Входы считаются
инверсными потому, что активный сигнал для каждого из них — это
низкий логический уровень. Такое обозначение достаточно условно. В
RS-триггере допускается обозначение входов как с инверсией, так и без.
Оба варианта будут верны.
Параллельный регистр
Для хранения двоичного числа, состоящего из большего количества
разрядов, используют несколько параллельно соединенных D-триггеров.
На рис. 1.16 показана схема, предназначенная для хранения четырехраз-
рядного двоичного числа.
Q0—Q3. S TT
Q3
В схеме регистра присутствует также вход D3 D
C
возможностями C Q7
1.7. Счетчики
Пример.
Соединенные последовательно два делителя позволят получить сиг-
нал с частотой в четыре раза меньшей, чем входная. Трехкаскадный
делитель (три последовательно соединенных D-триггера) дадут деле-
ние на восемь. Четыре каскада будут делить на шестнадцать. И так
далее.
TT TT TT TT
D D D D
C C C C
Вход
D0 D1 D2 D3
Q0 Q1 Q2 Q3
Q3
D2
D3
Q2
Q3
циентом деления на основе ревер- CS PE
R Ј0
используется специальный четырех- Тактовые Выход
Таймеры
Подобную схему можно использовать также для формирования
различных интервалов времени. Если на вход «–1» подавать тактовые
импульсы фиксированной частоты, а в качестве управляющего входа
использовать вход R, то на выходе мы можем получать импульс задан-
ной длительности. И эту длительность можно программировать, записы-
вая в регистр D1 различные коэффициенты.
Определение.
Схемы, предназначенные для формирования различных интервалов
времени, называются таймерами.
Пример.
Микроконтроллеры серии AVR имеют от одного (в микросхеме
AT90S1200) до четырех (в микросхеме ATmega128) встроенных тайме-
ров/счетчиков. Это позволяет при формировании временных интер-
валов обойтись без внешних таймеров.
1.8. Дешифраторы
Устройство и прицип действия дешифратора
Еще один элемент, без которого не обойтись при изучении микропро-
цессорной техники, — это дешифратор цифровых сигналов. Существует
много разных типов дешифраторов. В общем случае дешифратор — это
устройство, преобразующее цифровой сигнал, представленный в какой-
либо одной из кодировок, в другую, незакодированную форму. Нас в
данном случае будет интересовать классический линейный дешифратор.
Схемное обозначение одного из вариантов такого дешифратора приве-
дено на рис. 1.25. Описываемый дешифратор имеет три входа данных
D0, D1 и D2, вход выбора микросхемы CS , а также восемь выходов,
обозначенных цифрами от 0 до 7.
DS
Логика работы микросхемы такова: на входы 7
D2 6
данных микросхемы подается цифровой код. В 5
D1
данном случае — это любое трехразрядное двоич- D0 4
ное число. Смысл работы такого дешифратора — 3
выдать активный сигнал только на одном из своих 2
1
выходов. На том выходе, номер которого соответ-
CS 0
ствует двоичному коду, присутствующему на его
входах D0—D2. Рис. 1.25. Простейший
дешифратор
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q8
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q8
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q8
Q1
Q2
Q3
Q4
Q5
Q6
Q7
Q8
DD2
DD5
DD4
DD3
RG
RG
RG
RG
CS
CS
CS
CS
OE
OE
OE
OE
D1
D2
D3
D4
D5
D6
D7
D8
D1
D2
D3
D4
D5
D6
D7
D8
D1
D2
D3
D4
D5
D6
D7
D8
D1
D2
D3
D4
D5
D6
D7
D8
C
C
C
C
Q1
Q3
A0 DS Q0
Q2
DD1
CS
A1
LD1
LA1
LD3
LD0
LD2
LD5
LD6
LA0
UPR
READ
LD7
LD4
WRITE
Рис. 1.26. Схема простейшего модуля ОЗУ
Каскадирование дешифраторов
Прежде, чем покончить с дешифраторами хочу рассмотреть вопрос
их каскадирования. Благодаря наличию входа CS , несколько дешифра-
торов можно объединять вместе, образуя составной дешифратор, име-
ющий большее число входов и выходов. Пока мы имели дело с двумя
видами дешифраторов. Первый дешифратор (рис. 1.25) имел три входа
и восемь выходов. Дешифратор, который мы использовали в примере
схемы ОЗУ (рис. 1.26), имел всего два входа и четыре выхода. Логика
работы любого такого дешифратора одна и та же. Различие состоит
лишь в количестве входных и выходных разрядов.
Для того, чтобы в краткой форме обозначить характеристики кон-
кретного дешифратора, иногда применяют следующее обозначение:
«Дешифратор 2Х4» или «Дешифратор 3Х8». На рис. 1.27 показан способ,
как при помощи каскадного соединения нескольких дешифраторов соз-
дать новый дешифратор с формулой «5Х32». Первый каскад состоит из
одного дешифратора (DD1). Этот дешифратор управляет четырьмя дру-
гими дешифраторами (DD2—DD5), которые составляют второй каскад.
Все дешифраторы, рассмотренные нами до сих пор, относятся к раз-
ряду полных дешифраторов. Поясню, что это такое. Если дешифратор
имеет пять входов, то максимальное число значений, которые могут
DD3
DD2
DD5
DD4
1
1
3
2
3
2
1
3
2
3
2
7
7
8
7
8
8
6
6
5
4
5
4
5
4
5
4
DS
DS
DS
DS
CS
CS
CS
CS
D2
D2
D1
D1
D2
D0
D0
D2
D1
D1
D0
D0
1
3
2
4
DD1
DS
CS
D1
D0
CS
D4
D3
D2
D1
Рис. 1.27. Каскадная схема включения дешифраторовD0
принимать эти входы, равно 32. Если при этом дешифратор имеет 32
выхода, то при подаче на его входы любого возможного числа, на одном
из выходов обязательно появится активный уровень сигнала. В некото-
рых случаях наличие всех возможных выходов не обязательно.
Пример.
Дешифратор для работы с так называемыми двоично-десятичными
числами. Двоично-десятичное число — это число, записанное в дво-
ичной форме, но принимающее значение от 0 (00002) до 10 (10102). При
работе с такими числами используют неполный дешифратор 4X10.
Такой дешифратор имеет четыре входа и всего десять выходов. При
подаче на входы такого дешифратора двоичных чисел в диапазоне от
00002 до 10102 активизируются выходы «0» — «9».
При этом подразумевается, что числа выше чем 10102, на входы дешиф-
ратора подаваться не будут. Однако ничего не мешает подать на
входы дешифратора эти числа. Как будет вести себя неполный дешиф-
ратор в таком случае, определяется его разработчиком. Чаще всего
в этом случае все выходы дешифратора остаются неактивными.
Промышленность выпускает несколько видов неполных дешифрато-
ров. Например, К555ИД1, К555ИД6, К555ИД10.
1.9. Мультиплексоры
Ну и последний элемент, на котором я хотел бы остановиться, — это
мультиплексоры. Мультиплексор — это устройство, обратное простому
ROM (Read Only Memory) — память только для чтения, или посто-
янное запоминающее устройство (ПЗУ).
Port I/O (Port Input/Output) — порт ввода-вывода.
Теперь рассмотрим все эти элементы подробнее. Что такое процессор
и для чего он нужен, вы уже немного знаете из первой главы нашей книги.
Замечу только, что процессор не всегда был МИКРОпроцессором. Были
времена, когда процессор представлял собой одну или даже несколько
электронных плат, набитых радиоэлементами.
Виды памяти
Два вида памяти (ОЗУ и ПЗУ) предназначены для хранения инфор-
мации (данных и программ). Оба вида памяти представляют собой
набор ячеек, в каждой из которых может храниться одно двоичное
число. Деление на постоянную и оперативную память достаточно
условно. С точки зрения процессора, оба эти вида памяти практически
идентичны. Однако все же между ними есть одно довольно существен-
ное различие.
После того, как информация записана в ОЗУ, она хранится там лишь
до тех пор, пока подано напряжение питания. Как только питание будет
отключено, информация, записанная в ОЗУ, тут же теряется. Об этом
мы уже говорили выше. Классический пример ячейки ОЗУ — это про-
стейший регистр, построенный на D-триггерах (см. рис. 1.26).
В такой регистр можно записывать информацию и читать ее оттуда.
Однако если отключить, а затем включить питание, то все триггеры, из
которых состоят регистры ОЗУ, установятся в случайное состояние.
Информация будет утеряна. Современные микросхемы памяти стро-
ятся на основе совсем других технологий. Но и по сей день не приду-
мано достаточно быстродействующее устройство памяти, не теряющее
информации при выключении питания.
Самая распространенная на сегодняшний день технология построе-
ния ОЗУ — это так называемая динамическая память. Хранение инфор-
мации в микросхемах динамической памяти осуществляется при помощи
динамически подзаряжаемых миниатюрных емкостей (конденсаторов),
выполненных интегральным способом на кристалле кремния.
Каждый конденсатор хранит один бит информации. Если значение
бита должно быть равно единице, то схема управления заряжает кон-
денсатор. Если в ячейке должен быть логический ноль, то конденсатор
разряжается. Заряженный конденсатор может хранить свой заряд, а,
значит, и записанную в него информацию в течение всего нескольких
миллисекунд. Для того, что бы информация не потерялась, используют
регенерацию памяти.
Порты ввода-вывода
Определение.
Порты ввода-вывода — это специальные устройства, при помощи
которых микропроцессорная система может общаться с внешним
миром.
ЦПУ
Порт ВВ Порт ВВ Порт ВВ
(CPU) ОЗУ ПЗУ
Port I/O Port I/O Port I/O
(RAM) (ROM)
ШД
ША
ШУ
Рис. 2.1. Структурная схема типовой микропроцессорной системы
Шина данных
Определение.
Двоичное число, имеющее восемь разрядов, называется байтом.
Шина адреса
Как и шина данных, шина адреса представляет собой набор прово-
дников, по которым происходит передача двоичных чисел в электрон-
Пример.
Микропроцессор серии К580ИК80 имеет 16 разрядов адреса. Это
можно считать минимальным количеством для микропроцессора.
Процессор Intel 8086, на котором собран компьютер IBM PC-XT, родо-
начальник всех PC-совместимых персональных компьютеров, имеет
20 разрядов шины адреса. Современные процессоры имеют до 32 раз-
рядов и больше.
Внимание.
Один килобайт в вычислительной технике не равен 1000 байтов,
как этого можно было бы ожидать. Число 1000 не является кру-
глым числом в двоичной системе. В двоичной системе круглыми чис-
лами удобнее считать степени числа 2. Например, 4, 8, 16, 32, 64 и
т. д. Ближайшей степенью двойки для числа 1000 будет 210, то есть
число 1024. Поэтому 1 килобайт равен 1024 байтам. Точно так же
1 мегабайт равен 1024 килобайтам. А один гигабайт равен
1024 мегабайтам.
Пример.
Для адресации 1024 ячеек памяти нужна шина адреса, имеющая ровно
10 разрядов. То есть к адресной шине в 10 разрядов максимально можно
подключить 1024 ячейки памяти. Если бы мы подключили 1000 ячеек, то
нам все равно пришлось бы использовать 10 разрядов адреса, которые,
в этом случае, использовались бы не полностью. Поэтому вы никогда не
встретите микросхему памяти, имеющую 1000 ячеек. Именно по этой
причине реальный объем памяти любой микропроцессорной системы,
даже если она меньше максимально возможной для данной разрядно-
сти шины адреса, всегда будет кратным степени двойки.
Для адресации портов ввода-вывода используется та же самая шина
адреса. Но микропроцессору обычно не требуется так много портов,
как ячеек памяти. Поэтому чаще всего для адресации портов исполь-
зуется не вся шина данных, а только несколько его младших разрядов.
Например, в микропроцессоре К580ИК80 для адресации портов исполь-
зуется только 8 младших разрядов шины адреса.
Шина управления
Шина управления в строгом понимании не является цельной циф-
ровой шиной. Просто для управления процессами обмена информации
микропроцессорная система должна иметь некий набор линий, переда-
ющих специальные управляющие сигналы. Эти линии и принято объе-
динять в так называемую шину управления. Что же это за линии и что за
сигналы? Ниже приведен примерный набор линий шины управления.
RD (Read) — сигнал чтения.
WR (Write) — сигнал записи.
MREQ — сигнал инициализации устройств памяти (ОЗУ или ПЗУ).
IORQ — сигнал инициализации портов ввода-вывода.
Кроме того, к сигналам шины управления относятся:
READY — сигнал готовности;
RESET — сигнал сброса.
И еще несколько специальных сигналов, о которых мы поговорим
позже (разделы 2.3 и 2.4).