1. История
В 1642 Паскаль изобрел механическую счетную машину(+,-). 30 лет спустя
Лейбниц сделал машину , которая могла умножать, делить , плюсовать и
вычитать. В начале 19в Беббидж сконструировал разностную машину, которая
могла складывать и вычитать. Потом сделал аналитическую машину, ее можно
было программировать. Программист на этой машине – Ада Августа Ловлейс. В
30 годы 20 в в Гарварде Айкент сделал машину Беббиджа на электрических
реле. 1943 – Моушли создал электронный компьютер ENIAC (он имел 20
регистров , 1 регистр – 10-разрядное десятичное число). Джон фон Нейман:
«Машина должна состоять: АЛУ, память, устройство ввода-вывода, устройство
управления ». 1953 IBM построила первый компьютер – IBM 701. 1956 –
изобретен транзистор. 1961 – фирма DEC выпустила комп. PDP-1(120 тыс.
долларов). PDP-8 был 12 битным и имел шинную архитектуру(16 тыс. дол.).
1964 – выпуск IBM 360. В начале 80-х изобретена БИС. 1981 – INTEL 8088, на
этом проце сделан IBM PC.
4. АРХИТЕКТУРА МИКРОКОНТРОЛЛЕРА
Контроллером в технике регулирования считается управляющее устройство,
осуществляющее регулирующие или контролирующие функции в системе.
Контроллер, реализованный на одном кристалле, называется микроконтроллером.
Современный микроконтроллер является большой цифровой интегральной схемой,
объединяющей миллионы, выполненных по микронным технологиям, транзисторов.
Типовая структура микроконтроллера изображена на рис. 1.1. Микроконтроллер
состоит из трех, связанных системными шинами, элементов: процессорного
ядра, памяти и набора программируемых функциональных блоков различного
назначения.
Рис. 1.1. Структура микроконтроллера
Процессорное ядро (MCU - Microprocessor Com Unit) является основой
микроконтроллера. Оно выполняет все вычислительные операции и одновременно,
управляет работой всех остальных элементов схемы. По системным шинам
процессорное ядро обменивается данными с памятью и всеми функциональными
(ннж.ши Разрядность процессорного ядра определяет разрядность
микроконтроллера Наиболее распространены в настоящее время 8-битные (8-
разрядные) микроконфолперы Вместе с тем, широкое применение в простых
задачах находят и 4-битные издания, а в сложных высокопроизводительных
системах 16- и 32-битные
В памяти (Memory) хранится программа работы микрокош рол лора, исходные
данные и все промежуточные результаты вычислений. Память состоит из
множества многоразрядных ячеек, каждая из которых имеет свой адрес По этому
адресу процессорное ядро находит конкретную ячейку памяти в процессе
обмена. Память микроконтроллера обычно разделена на две части: память
данных (Data Memory) и память программ (Program Memory).
Функциональные блоки различных типов обеспечивают взаимодействие
микроконтроллера с внешним миром. Эти блоки могут выполнять самые различные
функции: ввод и вывод информации, подсчет внешних событий и интервалов
времени, передача внешних запросов на процессорное ядро, аналого-цифровые и
цифроаналоговые преобразования сигналов, сравнение различных величин,
контроль за напряжением питания и др. Для процессорного ядра любой
функциональный блок представляется в виде одного или нескольких регистров.
Каждый регистр имеет свой оригинальный адрес, по которому процессорное ядро
находит его в процессе работы.
Программа работы микроконтроллера хранится в памяти в виде
последовательности команд (инструкций). 8 процессе работы процессорное ядро
последовательно извлекает из памяти инструкции, расшифровывает и выполняет
их. В зависимости от инструкции в ядре выполняются различные арифметические
и логические операции, пересыпки данных. При необходимости, в процессе
выполнения инструкции, процессорное ядро обращается за данными к ячейкам
памяти и функциональным блокам, либо пересыпает в них результаты
вычислений. Множество инструкций, которые понимает процессорное ядро,
образует систему команд микроконтроллера.
Практически все ведущие производители разрабатывают целые семейства
микроконтроллеров с так называемой модульной структурой. При этом
процессорное ядро для всего семейства неизменно, а память и состав
функциональных блоков у каждого микроконтроллера различны. Процессорное
ядро всегда имеет свою оригинальную схему и, обязательно, оригинальное имя.
Например, микроконтроллеры фирмы Motorola построены на базе ядра НС05 и
НС08, фирма Intel создала ядро MCS-51 и мг.8-96, контроллеры фирмы
Microchip строятся на базе ядра PIC12, PIC16, PIC17. 1'К'Ш фирма Л/me/
усиленно развивает семейство микроконтроллеров с ядром AVR
Процессорное ядро на основе известных схемотехнических решений, технологий
проектирования и производства цифровых схем реализует определенную
архитектуру системы. Для микропроцессорной системы понятие «архитектура»
включает в себя множество её структурных особенностей, основными из которых
считаются: организация памяти и система команд. В настоящее время известны
четыре общих архитектурных принципа в той или другой мере, реализуемые в
любом процессорном ядре.
По организации памяти различаются:
° Неймановская архитектура - характеризуется общим пространством памяти для
хранения данных и программы. При этом разрядность памяти зафиксирована (как
правило, равна одному байту). Такую архитектуру имеют, например,
микроконтроллеры НС05 и НС08 фирмы Motorola, в которых общий массив 8-
битных ячеек памяти включает в себя как память программ, так и память
данных [5].
0 Гарвардская архитектура - отличается разделением памяти программ и памяти
данных. При этом разрядность памяти программ и памяти данных, а также шины
доступа к ним, различны. В частности, все микроконтроллеры PIC12, PIC16
фирмы Microchip имеют 8-битную память данных, а разрядность памяти программ
у них различна: PIC12 имеют 12 битную память программ, а РЮШ - 14 битную
[3]. По системе команд различаются:
0 CISC-архитектура (Complicated Instruction Set Computer) - архитектура с
развитой системой команд. Система команд процессорного ядра имеет
инструкции разного формата: однобайтовые, двухбайтовые, трехбайтовые.
Различные инструкции при этом имеют и существенно разное время исполнения.
0 RISC-архитектура (Reduced Instruction Set Computer) - архитектура с
сокращенным набором команд. Одна инструкция, как правило, занимает только
одну ячейку памяти, и все инструкции имеют равное время исполнения.
Микроконтроллеры с RISC-архитектурой имеют сравнительно более высокую
производительность при той же тактовой частоте сигнала синхронизации и в
настоящее иремя более распространены.
Разные производители в своих изделиях используют зачастую различные
архитектурные принципы. Поэтому приведенное выше деление довольно условно
Например, AVR-микроконтроллеры фирмы Atmel, по мнению ее создателей (Alf
Bogen и Vergard Wollan), имеют улучшенную RISC (enhanced RISC) архитектуру.
В соответствии с принципами RISC - архитектуры практически все команды
микроконтроллера (исключая те, у которых одним из операндов является 16-
разрядный адрес) занимают только в одну ячейку памяти программ. Но сделать
это разработчикам удалось за счет одновременного использования принципов
Гарвардской архитектуры и расширения ячейки памяти программ до 16 разрядов.
Поэтому в системе команд AVR-микроконтроллеров целых 130 различных команд,
что значительно больше, чем у большинства современных RISC - архитектур.
Для сравнения, контроллеры фирмы Microchip с ядром PIC12. PIC16, PIC17
имеют всего 33 команды [3].
5. Архитектура микропроцессора КР580ВМ80А
Микросхема КР580ВМ80А — функционально законченный однокристальный
параллельный 8-разрядный микропроцессор с фиксированной системой команд,
применяется в качестве центрального процессора в устройствах обработки
данных и управления. Микропроцессор имеет раздельные 16-разрядный канал
адреса и 8-разрядный канал данных. Канал адреса обеспечивает прямую
адресацию внешней памяти объемом до 65536 байт, 256 устройств ввода и 256
устройств вывода.
Восьмиразрядное арифметико-логическое устройство микропроцессора
обеспечивает выполнение арифметических и логических операций над двоичными
данными, представленными в дополнительном коде, а также обработку двоично-
десятичных упакованных чисел.
В состав блока регистров входят: 16-разрядный регистр адреса команды (IP),
16-разрядный регистр указателя стека (SP), 16-разрядный регистр временного
хранения (WZ), 16-разрядная схема инкремента-декремента и шесть 8-разрядных
регистров общего назначения (B, С, D, Е, Н, L), которые могут
использоваться и как три 16-разрядных регистра (ВС, DE, HL).
Микропроцессор выполняет команды по машинным циклам. Число циклов,
необходимое для выполнения команды, зависит от ее типа и может быть от
одного до пяти. Машинные циклы выполняются по машинным тактам. Число тактов
в цикле определяется кодом выполняемой команды и может быть от трех до
пяти. Длительность такта равна периоду тактовой частоты и при частоте 2,0
МГц составляет 500 нс.
6. Определение микроконтроллера.
Контроллером в технике регулирования считается управляющее устройство,
осуществляющее регулирование или контролирующие функции в системе.
Контроллер, реализованный на одном кристалле, называется микроконтроллером.
Современный микроконтроллер является большой цифровой интегральной схемой,
объединяющей миллионы, выполненных по микронным технологиям, транзисторов.
Типовая структура МК изображена на рис. МК состоит из трех, связанных
системными шинами, элементов: процессорного ядра, памяти и набора
программируемых функциональных блоков различного назначения.
Процессорное ядро является основой МК.
Оно выполняет все вычислительные операции и, одновременно, управляет
работой всех остальных элементов схемы.
По системным шинам ПрЯд обменивается данными с памятью и всеми
функциональными блоками. Разрядность ПЯ определяет разрядность МК
(4,8,16,32-битные).
В памяти хранится программа работы МК, исходные данные и все промежуточные
результаты вычислений. Память состоит из множества многоразрядных ячеек,
каждая из которых имеет свой адрес. Память МК обычно разделена на две
части: память данных и память программ.
Функциональные блоки различных типов обеспечивают взаимодействие МК с
внешним миром. Эти блоки могут выполнять самые различные функции: ввод и
вывод информации, подсчет внешних событий и интервалов времени, передача
внешних запросов на ПЯ, анолого-цифровые и цифроанологовые преобразования
сигналов. Для ПЯ любой функциональный блок представляется в виде одного или
нескольких регистров. Каждый регистр имеет свой оригинальный адрес, по
которому ПЯ находит его процессе работы.
Программа работы МК хранится в памяти в виде последовательности команд. В
процессе работы ПЯ последовательно извлекает из памяти инструкции,
расшифровывает и выполняет их. В зависимости от инструкций в ядре
выполняются различные арифметические и логические операции, пересылки
данных. При необходимости, в процессе выполнения инструкций, ПЯ обращается
за данными к ячейкам памяти и функциональным блокам, либо пересылает в них
результаты вычислений. Множество инструкций, которые понимает ПЯ, образуют
систему команд МК.
В настоящее время известны четыре общих архитектурных принципа в той или
иной мере, реализуемых в любом ПЯ.
По организации памяти различаются:
- Неймановская архитектура – характеризуется общим пространством памяти
для хранения данных и программы. При этом разрядность памяти зафиксирована
(как правило 1 байт)
- Гарвардская архитектура – отличается разделением памяти программ и памяти
данных. При этом разрядность памяти программ и памяти данных, а также шины
доступа к ним, различны.
По системе команд различаются:
- CISC архитектура – архитектура с развитой системой команд. Система команд
ПЯ имеет инструкции разного формата: однобайтовые, двухбайтовые,
трехбайтовые. Различные имеют разное время исполнения.
- RISC архитектура – архитектура с сокращенным набором команд. Одна
инструкция как правило занимает одну ячейку памяти, и все инструкции имеют
равное время исполнения.
7. Процессорное ядро.
Каждый производитель МК для серии выпускаемых им изделий разрабатывает и
патентует свое оригинальное процессорное ядро. Однако в большинстве из них
присутствуют одни и те же элементы: регистр инструкций, программный
счетчик, арифметико-логическое устройство, регистры общего назначения,
регистр состояния, регистры ввода/вывода, стек.
Программный счетчик: регистр предназначенный для хранения адреса ячейки
памяти программ, в которой находится выполняемая в данный момент
инструкция. Разрядность программного счетчика определяется количеством
ячеек в памяти программы. При выполнении команды содержимое ПС изменяется.
В простейшем случае оно увеличивается на 1. Но некоторые команды способны
сами записывать данные в ПС. В этом случае новое содержимое ПС и
определяется данными, заложенными в выполняемой инструкции.
Регистр инструкций: регистр, предназначенный для хранения считанной из
памяти программ инструкции. Считанная из памяти программ инструкция
декодируется дешифратором команд и исполняется микропрограммным автоматом
ядра. Разрядность регистра инструкций определяется разрядностью памяти
программ.
Арифметико-логическое устройство: логическая схема, непосредственно
осуществляющая преобразование одной или двух переменных в соответствии с
инструкцией занесенной в регистр команд. Стандартное АЛУ способно выполнять
простейшие арифметические или логические операции над одной или двумя
переменными (сложение, вычитание, инкремент, декремент, NOT, AND, OR,
exclusive OR). Некоторые производители интегрируют на кристалл также
встроенный умножитель двух переменных.
Регистры общего значения: Регистры общего значения предназначены для
временного хранения данных в процессе вычислений. Разрядность регистров
определяет разрядность вычислений и разрядность самого МК. Количество
регистров может быть произвольным. Обычно в этих регистрах хранится
информация, обрабатываемая АЛУ и полученный в нем результат вычислений. На
некоторые из регистров могут быть возложены дополнительные функции. В
большинстве архитектур один из регистров отличается от других большими
возможностями. Он обычно называется аккумулятор или рабочий регистр. В этом
регистре может храниться одна из переменных, обрабатываемых в АЛУ, и туда
же помещается результат операции.
Регистры ввода/вывода: предназначены для управления функциональными блоками
МК, энергозависимой памятью данных и программ. В различных операциях
регистры могут участвовать целиком или отдельными битами. Отдельный бит
регистра именуется флагом. Обращение к регистрам в различных архитектурах
организуется различным образом. Обычно обращение к ним осуществляется как к
элементам процессорного ядра по присвоенным в архитектуре именам и адресам,
в ряде случаев к ним обращаются с помощью специальных команд ввода/вывода.
Регистр состояния: предназначен для хранения отдельных признаков
результата, полученного при выполнении различных арифметических и
логических операций в АЛУ. Регистр обычно рассматривается состоящим из
отдельных бит (флагов), каждый из которых несет в себе определенную
информацию о каком либо одном признаке результата. Типовыми флагами
регистра состояния являются:
- флаг переноса: устанавливается при возникновении переноса из старшего
разряда результата.
- флаг переполнения: устанавливается при переполнении разрядной сетки.
- флаг отрицательного результата: устанавливается, когда результат является
отрицательным числом.
- флаг нулевого результата: устанавливается, когда результат операции равен
нулю.
- флаг полупереноса: устанавливается при возникновении переноса из младшей
тетрады 8-битного числа в старшую (из третьего разряда в четвертый).
Стек: память данных, организованная по принципу: последний зашел - первый
вышел. Такая память предназначается, обычно, для оперативного сохранения
содержимого отдельных регистров при переходах к подпрограммам. Одним из
таких регистров является программный счетчик. Извлечение из стека
содержимого регистров производится в порядке, обратном порядку записи.
Запись в стек и извлечение из стека не требует знания адреса ячеек памяти,
в которые записываются данные. Стек может быть организован либо в
специально созданных в ядре ячейках памяти, либо в области SRAM. В
последнем случае в ядре предусматривается специальный регистр – указатель
стека. Указатель стека хранит адрес последней записанной ячейки памяти в
области стека. Количество ячеек памяти, которые используются в стеке для
хранения данных, именуется глубиной стека. Глубина стека в различных
архитектурах ядра может быть различна: от 2-х ячеек до размера SRAM.
классификация команд
Множество инструкций микроконтроллера образует систему команд. Система
команд, как правило, не меняется для всех микроконтроллеров одного
семейства. В полном списке инструкций при описании системы обычно
выделяются отдельные группы, родственных по применению инструкций,
например, арифметические и логические команды, команды пересылки и др. Это
деление довольно условно и полностью определяется политикой разработчика.
При описании системы команд приводится полная информация о каждой
инструкции: способах адресации, использовании флагов регистра состояния,
времени исполнения.
В качестве примера рассмотрим систему команд микроконтроллера А Ттеда 163
Система команд микроконтроллера содержит 130 команд, условно разделенных на
четыре группы:
команды пересылки данных (data transfer instructions), 0
арифметические и логические команды (arithmetic and logic instructions), ° команды работы с битами (bit and bit-test instructions), ° команды
ветвления (branch instructions).
При описании системы команд использованы следующие обозначения:
Rd - регистр-приемник результата (0 < d < 31),
Rd* - регистр-приемник результата с номером более 16 (16 < d < 31),
Rr-регистр-источник (0 < г < 31),
Rdl: регистры R24, R26, R28, R30 (для инструкций ADIW и SBIW),
Р- адрес регистра ввода/вывода, Р*- адрес побитно адресуемого регистра
ввода/вывода ($00-$1F)
К - символьная или численная константа (8 бит) к - адресная константа
b - номер бита в регистре (3 бита)
0 s - номер бита в регистре статуса (3 бита)
0 X, Y, Z - регистры косвенной адресации (X=R27:R26, Y=R29:R28; Z=R31
:R30 Команды пересылки
Команды пересылки осуществляют перемещение данных между ячейками памяти и
регистрами процессорного ядра. Один из операндов, участвующих в инструкции,
является источником данных, второй - приемником. При пересылке из источника
в приемник копия данных всегда остается в источнике. Таким образом, все
команды пересылки практически осуществляют копирование данных.
Одним из операндов в любой команде пересылки обычно является регистр общего
назначения процессорного ядра. Вторым может быть любой регистр или ячейка
памяти.
Инструкции, как правило, не влияют на флаги в регистре состояния
процессорного ядра.
В системе команд микроконтроллеров AVR предусмотрено 34 инструкции,
осуществляющие пересылку данных. В инструкциях используются все, за
исключением битовых, способы адресации данных; одним из операндов в любой
инструкции является регистр общего назначения. Инструкция Idi (toad
immediate), использующая непосредственную адресацию, может быть
использована только в старшей половине файла регистров общего назначения
(R16....R31), остальные команды работают с любым из регистров файла.
Инструкцию spm (store program memory), осуществляющую запись когда в память
программ, можно использовать только в Boot Program Section памяти программ;
Время выполнения инструкций, работающих с регистрами, равно 1 такту.
Инструкции, обращающиеся к ячейкам памяти данных, выполняются за 2 такта, а
'вращающиеся к ячейкам памяти программ - за 3 такта.
Арифметические и логические команды
В группу арифметических команд входит команды выполняющие сложение,
вычитание, декремент и инкремент данных, логическое умножение логическое
сложение, операцию ИСКЛЮЧАЮЩЕЕ ИЛИ, инверсию переменной. Обычно к этои
группе относят также инструкции сравнения данных. В микроконтроллере Aтmegа
163реализованы также функции арифметического умножения целых чисел и
дробных чисел, без знака и со знако3м
Все инструкции этой группы, как правило, приводят к изменению состояния
флагов регистра состояния в соответствии с резулыа1ами, выполняемой
операции.
В микроконтроллерах с архитектурой AVR предусмотрено довольно много (31)
инструкций, выполняющих арифметические и логические преобразования данных.
Инструкции используют исключительно прямую регистровую или непосредственную
адресацию данных. Операнды хранятся в регистрах общего назначения, в один
из них (регистр-приемник) всегда направляется и результат вычислений.
В результате выполнения инструкций изменяются флаги регистра SREG (Status
Register), а флаг переноса С (Сапу), кроме того, непосредственно участвует
в выполнении ряда операций.
Арифметические команды сложения и вычитания выполняют сложение и вычитание
одно- и двухбайтных операндов. Команды adc (add with сапу two registers) и
sbc (subtract with carry two registers) используют при вычислениях флаг
переноса С.
Инструкции логического умножения (and) и логического сложения (or) ,
ИСКЛЮЧАЮЩЕЕ ИЛИ (вот) преобразуют только однобайтные данные.
Инструкция дополнения до единицы com (one's complement), фактически
выполняет операцию инверсии, а инструкция дополнения до двух neg (two's
complement) - меняет знак числа
Инструкции установки (set) позволяют установить как отдельные, так и все
биты выбранного регистра в единичное состояние, а команды очистки (dear) -
в нулевое.
Инструкции инкремента регистра inc (increment) и декремента регистра dec
(decrement) используют прямую адресацию одного выбранного регистра.
Тест на нуль или минус tst (test for zero or minus) фактически не меняет
содержимого регистра, но устанавливает соответствующие флаги при равенстве
операнда нулю или при его отрицательном значении.
Команды сравнения (compare) также не меняют содержиМ°го РегистР°в' а
оценивают разность операндов и устанавливают соответствующие Флаги в
регистре состояния.
Шесть инструкций умножения (multiply выполняют умножение |-1ель|Х и Дробных
операндов с учетом и без учета знака. 16-битный результат /1^ножения всегда
описывается в регистры общего назначения RO:R1.
Большинство арифметических и логических команд выполня!0^ за°Дин такт-
Исключение составляют только команды с непосредственной адресац^.'
Ра2?таюи^ ° двухбайтными словами: adiw (add immediate to word) и sbiw
(subtract im^196 m vvo/")- и команды умножения, выполняющиеся за два такта.
Битовые команды
Битовые команды (Вit And Bit-Test Instructions) позволяют обращаться
непосредственно к отдельным битам регистров процессорного ядра и выполнять
с выбранными битами простейшие операции пересылки, установки и сброса.
Операндами команд могут быть как биты регистров общего назначения, так и
биты регистров ввода/вывода. Битовые команды могут влиять на отдельные
флаги регистра признаков.
Битовые команды микроконтроллером семейства AVR работают с отдельными
битами регистров общего назначения и регистров ввоода/вывода Биты регистров
ввода/вывода могут быть установлены или сброшены. Биты регистров общего
назначения могут быть сдвинуты в соседние ячейки, как влево (в сторону
старших разрядов), так и вправо (в сторону младших разрядов). В операциях
сдвига, кроме разрядов регистров, может участвовать и бит переноса.
Специальные команды предусмотрены дли установки и сброса отдельных флагов
регистра состояния.
Команда swap меняет местами тетрады (полубайты) регистров общего
назначения.
10. Микроконтроллер Atmega и его внешние подключения.
Контроллером в технике регулирования считается управляющее устройство,
осуществляющее регулирующие и контролирующие функции в системе. Как правило
это вычилительная машина. С развитием технологий различные компоненты этой
машины, такие как процессорное ядро, различные виды памяти, АЦП, таймеры и
др. становились миниатюрнее и стало возможным включать их в одну
интегральную микросхему или их малый набор. Микроконтроллер – контр.,
реализованный на одном кристалле.
AVR микроконтроллеры фирмы Atmel имеют улучшенную RISС архитектуру.
Микроконтроллер состоит из трех элементов: процессорного ядра, памяти и
набора функциональных блоков различного назначения, связанных системными
шинами.
Процессорное ядро является основой микроконтроллера. Оно выполняет все
арифметические операции, управляет работой всех остальных элементов
системы.
В памяти хранится программа работы микроконтроллера, исходные данные и все
промежуточные результаты вычислений.
Функциональные блоки обеспечивают связь микроконтроллера с внешним миром.
Для процессорного ядра любой функ. блок представляется в виде одного или
нескольких регистров. Каждый регистр имеет свой оригинальный адрес.
Внешние подключения условно можно разделить на выводы питания и
информационные выводы. Информационные выводы включают в себя 4 порта ввода-
вывода, выводы подключения кварцевого резонатора, вывод сброса. Контакты
портов ввода-вывода могут быть использованы в качестве параллельных портов
либо другими функциональными блоками, контакты которых объединены с
контактами портов. Все выводы портов имеют индивидуальные подтягивающие
резисторы. Для подключения этих резисторов с регистре SFIOR предусмотрен
бит PUD.
Для повышения стабильности используется внешний тактовый генератор. Схема
подключении приведена на рисунке.
Емкость С=13,,43пФ. Для выбора синхронизации используются биты CRSEL0-3.
12. Сторожевой таймер
Сторожевой таймер синхронизирован от отдельного внутреннего генератора на
кристалле, работающего с частотой 1МГц (при напряжении питания 5В).
Задержка сброса устанавливается с помощью предделителя (Prescaler).
Настройка предделителя осуществляется установкой или сбросом битов
WDP0…WDP2 регистра управления сторожевым таймером WDTCR. По истечении
установленного времени задержки сторожевой таймер подает сигнал сброса на
микроконтроллер.
Интервалы задержки сторожевого таймера
|WDP2|WDP1 |WDP0|Количест|Задержк|
| | | |во |а |
| | | |циклов |сброса |
|0 |0 |0 |16К |15ms |
|0 |0 |1 |32К |30ms |
|0 |1 |0 |64К |60ms |
|0 |1 |1 |128К |0,12s |
|1 |0 |0 |256К |0,24s |
|1 |0 |1 |512К |0,49s |
|1 |1 |0 |1,024К |0,97s |
|1 |1 |1 |2,048К |1,9s |
Сброс может быть предотвращен инструкцией wdr.
Бит WDE в регистре WDTCR позволяет подключить или отключить сторожевой
таймер. При разрешении работы сторожевого таймера его состояние не
определено и прежде, чем разрешать его включение, необходимо выполнить
инструкцию wdr. В ином случае контроллер может быть сброшен прежде, чем
будет выполнена команда wdr, прописанная после разрешения. Для
предотвращения случайных ошибок запрет сторожевого таймера должен
оформляться специальной процедурой выключения.
13. Програмно_управляемый_обмен
Порты ввода - предназначены для связи микроконтроллера с различными
объектами и могут реализовывать различные алгоритмы обмена данными :
асинхронный программный обмен , синхронный обмен , ввод - с сигналами
квитирования . Обмен данными между портами и объектами обеспечивается
специальными подпрограммами – драйверами , создаваемыми индивидуально для
каждого объекта .
АСИНХРОННЫЙ ОБМЕН
В режиме асинхронного программного обмена ввод и вывод данных производится
по программе в моменты выполнения инструкций ввода и вывода данных.
Предполагается, что объект всегда готов к обмену: при вводе – данные в
момент выполнения инструкции in присутствуют на линиях порта, при выводе –
данные будут прочитаны с линий порта до следующего вывода. Например ,
микроконтроллер ATmega 63 осуществляет асинхронный вывод данных при
выполнении фрагмента программы:
.equ porta = $B ;
.equ ddra = $A ;
.cseg
ldi r 6,$FF ; $FF в r 6
out ddra, r 6 ; порта А на вывод
out porta, r0 ; данных из регистра r0 в порт A.
Время выполнения команды вывода равно двум периодам тактового сигнала . Тот
же микроконтроллер в течении двух тактов введет данные с линий порта при
выполнении фрагмента программы :
.equ pina = $9 ;
.cseg
in r0, pina ; ввод данных из порта pina в регистр r0.
По адресу $9 в пространстве ввода - микроконтроллера размещен регистр
pina, с входных линий которого и будут взяты данные во время выполнения
инструкции .
СИМПЛЕКСНЫЙ ОБМЕН
Симплексным считается однонаправленный обмен данными . Такой обмен обычно
является синхронным . В этом случае каждое изменение данных на линиях порта
сопровождается сигналом синхронизации (). Строб генерируется источником
данных и предназначается для задания момента записи данных в регистр
приемника . При выводе данных сигнал строба должен сформировать
микроконтроллер , используя для этого специальные линии шины управления или
отдельные биты портов ввода -. На рис . 9.2 показан вариант соединения
микроконтроллера ATmega 63 c посимвольным принтером , имеющим 8-битный вход
для приема данных DATA, выход сигнала готовности READY и вход стробирования
#STB. Активным на входе стробирования является сигнал низкого уровня . Порт
PORTA микроконтроллера и бит PB6 порта PORTB программируются на вывод
данных , бит PB2 порта PORTB на ввод . Подпрограмма вывода должна :
осуществить проверку готовности принтера ( сигнала готовности принтера
READY и его анализ ), при обнаружении сигнала READY=1 вывести данные в порт
PORT , подтвердить вывод данных выводом сигнала стробирования #STB=0 для
записи данных в принтер . Если принтер не готов к обмену микроконтроллер
через заданный интервал времени повторяет операцию.
Рис . 9.2. Подключение принтера к микроконтроллеру
Режим синхронного ввода позволяет точно задать момент считывания данных с
объекта . В этом режиме сигнал стробирования , подтверждающий готовность
данных , поступает с объекта на микроконтроллер . При появлении строба
микроконтроллер должен осуществить ввод данных с порта.
ПОЛУДУПЛЕКСНЫЙ ОБМЕН
Полудуплексным считается двунаправленный синхронный обмен , при котором в
любой момент времени передача данных может производиться только в одном
направлении . Направление передачи данных порта меняется в процессе работы
в зависимости от решаемой в текущий момент задачи . На рис . 9.3 изображен
вариант соединения микроконтроллера ATmega 63 с объектом для обмена данными
в полудуплексном режиме . В схеме на рис . 9.3 передача данных в
параллельном формате осуществляется по линиям порта PORTA. Для выдачи и
приема четырех сигналов управления обменом ( квитирования ): строб ввода
#STB IN (Strobe Input), строб вывода #STB OUT (Strobe Out), подтверждение
ввода #ACK IN (Acknowledge Input) и подтверждение вывода #ACK OUT
(Acknowledge Out), использованы две линии порта PORTB и входы запросов на
прерывания INT0 и INT . При поступлении сигнала #STB IN = 0 контроллер
должен выставить сигнал подтверждения #ACK IN = 0 и осуществить запись во
входной регистр порта PORTA.. При низком уровне сигнала ASK IN объекту
запрещается формировать новый сигнал #STB IN. По окончании записи
контроллер снимает сигнал #ACK IN, разрешая повторную передачу данных .
Работа микроконтроллера в режиме вывода аналогична . Микроконтроллер
выводит данные в порт PORTA, подтверждая вывод сигналом #STB OUT = 0.
Объект формирует сигнал подтверждения #ACK OUT = 0, сообщая контроллеру о
готовности к приему данных . При снятии сигнала #ACK OUT контроллер должен
снять сигнал #STB OUT и может вновь перейти к выводу данных . Одновременная
передача данных в двух направлениях при полудуплексном обмене невозможна .
ДУПЛЕКСНЫЙ ОБМЕН
Дуплексным считается двунаправленный синхронный обмен , при котором в любой
момент времени возможна передача данных в двух направлениях . В этом случае
для передачи данных в каждом направлении выделяется свой однонаправленный
порт . На рис . 9.4 изображен вариант соединения микроконтроллера ATmega 1
63 с объектом для обмена данными в дуплексном режиме
Рис . 9.3. Подключение микроконтроллера при полудуплексном обмене
Рис . 9.4. Подключение микроконтроллера при дуплексном обмене В схеме на
рис . 9.4 порт PORTA работает на ввод данных , порт PORT – на вывод , а
линии PC0 и PC порта PORTC использованы для вывода сигналов квитирования
#ACK IN и #ACK OUT. Для ввода сигналов квитирования от объекта #STB IN и
#ACK OUT использованы входы запросов на прерывания INT0 и INT . При таком
подключении задача ввода данных в микроконтроллер получает больший
приоритет чем задача вывода .
14.Порты ввода-вывода предназначены для связи микроконтроллера с различными
объектами и могут реализовывать различные алгоритмы обмена данными:
1)Асинхронный программный обмен 2)Синхронный обмен 3)Ввод-вывод с сигналами
квитирования.
Обмен данными между портами и объектами обеспечивается специальными
подпрограммами – драйверами, создаваемыми индивидуально для каждого
объекта.
Асинхронный обмен.
В режиме асинхронного программного обмена ввод и вывод данных производится по программе в моменты выполнения инструкций ввода и вывода данных. Предполагается, что объект всегда готов к обмену: при вводе – данные в момент выполнения инструкции in присутствуют на линиях порта, при выводе – данные будут прочитаны с линий порта до следующего вывода.
Пример программы для осуществления асинхронного вывода данных для
Atmega163:
.equ porta=$1B; .equ ddra=$1A; .cseg; ldi r16,$FF;запись $FF в r16
out ddra,r16 ; включение порта А на вывод out porta,r0 ;
вывод данных из регистра r0 в порт А.
Ввод данных с линий порта.
.equ pina=$19 .cseg in r0pina
; ввод данных из порта pina в регистр r0.
По адресу $19 в пространстве ввода – вывода микроконтроллера размещен
регистр pina, с входных линий которого и будут взяты данные во время
выполнения инструкции.
Симплексный обмен.
Симплексным считается однонаправленный обмен данными. Такой обмен обычно
является синхронным. В этом случае каждое изменение данных на линиях порта
сопровождается сигналом синхронизации (стробом). Строб генерируется
источником данных и предназначен для задания момента записи данных в
регистр приемника.При выводе данных сигнал строба должен сформировать
микроконтроллер, используя для этого специальные линии шины управления или
отдельные биты портов ввода – вывода.
Вариант соединения Atmega163 с посимвольным принтером, имеющим 8-битный
вход для приема данных DATA, выход сигнала готовности READY и вход
стробирования #STB. Активным на входе стробирования является сигнал низкого
уровня. Порт А микроконтроллера и бит РВ6 порта PORTB программируются на
вывод данных, бит PB2 порта PORTB на ввод. Подпрограмма вывода должна:
осуществлять проверку готовности принтера, при обнаружении сигнала READY=1
вывести данные в порт PORTА, подтвердить вывод данных выводом сигнала
стробирования #STB=0 для записи данных в принтер. Если принтер не готов к
обмену микроконтроллер через заданный интервал времени повторяет операцию.
Режим синхронного ввода данных позволяет точно задать момент считывания
данных с объекта. В этом режиме сигнал стробирования, подтверждающий
готовность данных поступает с объекта в микроконтроллер. При появлении
строба микроконтроллер должен осуществить ввод данных с порта.
Полудуплексный обмен.
Полудуплексным считается двунаправленный синхронный обмен, при котором в
любой момент времени передача данных может производится только в одном
направлении. Направление передачи данных порта меняется в процессе работы в
зависимости от решаемой в текущий момент задачи. Пример: передача данных в
параллельном формате осуществляется по линиям порта PORTA. Для выдачи и
приема четырех сигналов управления обменом (сигналы квитирования):
использованы две линии порта PORTB и входы запросов на прерывания INTO и
INT1. При поступлении сигнала #STB IN=0 контроллер должен выставить сигнал
подтверждения #ACK IN=0 и осуществить запись во входной регистр порта
PORTA. При низком уровне сигнала #ACK IN объекта запрещается формировать
новый сигнал #STB IN. По окончании записи контроллер снимает сигнал #ACK
IN, разрешая повторную передачу данных. Работа микроконтроллера в режиме
вывода аналогична. Микроконтроллер выводит данные в порт PORTA, подтверждая
вывод сигналом #STB OUT=0. Объект формирует сигнал подтверждения #ACK
OUT=0, сообщая контроллеру о готовности к приему данных. При снятии сигнала
#ACK OUT контроллер должен снять сигнал #STB OUTи может вновь перейти к
выводу данных.
Одновременная передача данных в двух направлениях при полудуплексном обмене
невозможна.
Дуплексный обмен.
Дуплексным считается двунаправленный синхронный обмен, при котором в
любой момент времени возможна передача данных в двух направлениях. В этом
случае для передачи данных в каждом направлении выделяется свой
однонаправленный порт. Порт PORTA работает на ввод данных, порт PORTB – на
вывод, а лини