Микропроцессорные системы
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Федеральное государственное бюджетное образовательное учреждение
высшего профессионального образования
Национальный исследовательский университет «МЭИ»
КОНСПЕКТ ЛЕКЦИЙ
дисциплины базовой части профессионального цикла Б3.14
«Микропроцессорные системы»
Направление подготовки 230100 Информатика и вычислительная техника
Профили Вычислительные машины, комплексы, системы и сети,
Семестр – 7
Авторский коллектив:
Доцент кафедры ВМСиС
Москва
А.В. Иванов
2012
НИУ «МЭИ»
1
Содержание
Лекция 1.......................................................................................................................................... 4
1. Однокристальные микро-ЭВМ (микроконтроллеры). Основные характеристики
микроконтроллеров ....................................................................................................................... 4
Лекция 2.......................................................................................................................................... 6
2. Микроконтроллеры (МК) семейства MCS – 51 ..................................................................... 6
2.1. Структурная схема микроконтроллера семейства MCS51 .............................................6
2.2. Организация памяти программ ...........................................................................................8
2.3.Организация памяти данных .............................................................................................9
2.4.Регистры специальных функций (SFR) ...........................................................................11
Лекция 3........................................................................................................................................ 13
3. Программирование на языке Ассемблера для микроконтроллеров семейства MCS – 51
....................................................................................................................................................... 13
3.1.Способы адресации ...........................................................................................................13
3.2. Система команд ................................................................................................................13
3.2.1. Команды передачи данных .......................................................................................13
Лекция 4........................................................................................................................................ 15
3.2.2 Команды обработки данных ......................................................................................15
3.2.3. Команды управления.................................................................................................17
3.2.4 Команды для выполнения операций с отдельными битами...................................19
3.3. Средства отладки программ ............................................................................................20
Лекция 5........................................................................................................................................ 23
4. Построение микропроцессорной системы на базе микроконтроллера семейства MCS51
....................................................................................................................................................... 23
4.1. Порты ввода/вывода .........................................................................................................23
4.1.1. Особенности выполнения команд при обращении к портам ввода/вывода ........24
4.2. Подключение внешних БИС памяти программ и данных ............................................26
4.2.1. Временные диаграммы выполнения машинного цикла в микроконтроллере ....26
4.2.2. Схема подключение внешних БИС памяти программ и данных ..........................29
4.2.3. Стирание и программирование РПЗУ .....................................................................31
Лекция 6........................................................................................................................................ 32
4.3. Таймер/счетчик .................................................................................................................32
Лекция 7........................................................................................................................................ 38
4.4. Организация прерываний ................................................................................................38
Лекция 8........................................................................................................................................ 42
5.1.2. Последовательный интерфейс RS232 ..........................................................................47
Лекция 9........................................................................................................................................ 51
5.2.1. Организация последовательного интерфейса I2C ......................................................51
5.2.2. Последовательный периферийный интерфейс SPI ....................................................53
Лекция 10...................................................................................................................................... 55
5.3. Организация последовательного интерфейса CAN .....................................................55
Лекция 11...................................................................................................................................... 57
5.4. Последовательный однопроводный интерфейс One Wire ............................................57
5.5. Универсальная последовательная шина.........................................................................60
Лекция 12...................................................................................................................................... 67
6. Массив программируемых счетчиков ................................................................................... 67
6..1. Назначение и состав массива программируемых счетчиков ......................................67
6.2. Режимы работы общего таймера/счетчика ....................................................................69
6.3. Режим захвата события ....................................................................................................71
6.4. Режим 16-разрядного программируемого таймера, высокоскоростного вывода и
сторожевого таймера ...............................................................................................................73
2
6.5. Режим генератора импульсов с заданной скважностью ...........................................75
6.6. Обработка прерываний от источников РСА ..................................................................77
Лекция 13...................................................................................................................................... 79
7. Микроконтроллеры с RISC архитектурой ............................................................................ 79
7.1. Микроконтроллеры AVR .................................................................................................79
7.1.1. Структурная схема микроконтроллера AVR ..........................................................79
7.1.2. Организация памяти ..................................................................................................80
7.1.3. Система команд .........................................................................................................82
7.1.4. Порты ввода/вывода ..................................................................................................87
7.1.5. Таймеры счетчики .....................................................................................................90
7.1.6. Сторожевой таймер ...................................................................................................90
7.1.8. Аналого-цифровой преобразователь и компаратор ...............................................92
7.1.9. Организация прерываний .........................................................................................93
7.1.10. Сброс микроконтроллера ........................................................................................95
Лекция 14...................................................................................................................................... 95
7.2.Микроконтроллеры PIC ....................................................................................................95
7.2.1. Семейства микроконтроллеров PIC .........................................................................95
7.2.2. Особенности архитектуры PIC16F74 ......................................................................97
7.2.3. Принцип "чтение-модификация-запись"...............................................................101
7.2.4. Особенности языка ассемблера и системы команд ..............................................103
7.2.5. Особенности ассемблера MPASM .........................................................................107
Лекция 15.................................................................................................................................... 110
8. Цифровая обработка сигналов ............................................................................................. 110
8.1. Общие сведения о цифровой обработке сигналов .....................................................110
Лекция 16.................................................................................................................................... 114
8.2. Сигнальные микропроцессоры .....................................................................................114
8.3. Сигнальные процессоры фирмы Texas Instruments .....................................................116
Лекция 17.................................................................................................................................... 119
9. Комплексная отладка МПС ................................................................................................. 119
3
Лекция 1
1. Однокристальные микро-ЭВМ (микроконтроллеры).
Основные характеристики микроконтроллеров
В настоящее время разработаны и выпускаются микропроцессорные БИС,
содержащие на одном кристалле все необходимые узлы микро-ЭВМ (ОЭВМ
– однокристальные микро-ЭВМ). Поскольку ОЭВМ получили широкое
применение в управляющих устройствах, системах передачи данных и
системах управления технологическими процессами, то их также называют
микроконтроллерами. Из них фирма Intel разработала микроконтроллер 8051,
который лѐг в основу семейства микроконтроллеров MSC51.
Разработка систем управления и контроля с использованием
однокристальных микроконтроллеров в настоящее время переживает
настоящий бум. Системы на базе микроконтроллеров используются
практически во всех сферах жизнедеятельности человека, и каждый день
появляются все новые и новые области применения этих устройств. В
последнее время в связи с бурным развитием электроники и схемотехники
расширились возможности и самих микроконтроллеров, позволяющие
выполнять многие задачи, ранее недоступные для реализации, такие,
например, как обработка аналоговых сигналов. Одним из наиболее ранних
микроконтроллеров, появившихся на рынке, является микроконтроллер 8051,
разработанный фирмой Intel более двадцати лет назад. Несмотря на столь
приличный возраст, классический 8051 и его клоны в настоящее время
остаются одними из наиболее популярных при разработке систем управления
и контроля. Хорошо продуманная архитектура и интуитивно понятная
система команд оказывают решающее влияние на выбор многих
разработчиков аппаратно-программных систем.
Да и сами микроконтроллеры линейки 8051 постоянно развиваются,
предлагая разработчику все новые и новые возможности. На основе базового
кристалла 8051 созданы и успешно применяются устройства с развитой
периферией и большими объемами памяти.
Программирование микроконтроллеров в настоящее время значительно
упростилось благодаря инструментальным средствам высокого уровня,
разработанным ведущими фирмами. Сегодня микроконтроллеры кроме
использования языка Ассемблера можно программировать на языках С,
Pascal и др., что во многом облегчает жизнь программистам, не знакомым с
аппаратной частью этих устройств.
Основными производителями клонов 51-го семейства в мире являются
фирмы Philips, Siemens, Intel, Atmel, Dallas, Temic, Oki, AMD, MHS, Gold
Star, Winbond, Silicon Systems и ряд других.
Все микроконтроллеры из семейства MCS-51 имеют общую систему
команд. Наличие дополнительного оборудования влияет только на
количество регистров специального назначения.
4
В СССР производство микроконтроллера 8051 осуществлялось в Киеве,
Воронеже (1816ВЕ31/51, 1830ВЕ31/51), Минске (1834ВЕ31) и Новосибирске
(1850ВЕ31). Микроконтроллеры данного семейства выпускаются в PLCC,
DIP и QFP корпусах и могут работать в следующих температурных
диапазонах:
• коммерческий (0°C — +70°C);
• расширенный (-40°C — +85°С):
• для военного использования (-55°C — +125°С).
Базовой моделью семейства микроконтроллеров MCS-51 и основой для
всех
последующих
модификаций
является
восьмиразрядный
микроконтроллер 8051.
Он построен с использованием Гарвардской
архитектуры. Обобщѐнная структурная схема микроконтроллера показана на
рис.1. В состав микроконтроллера входят:
– внутренний генератор тактовой частоты G;
– арифметико-логическое устройство ALU;
– внутренняя память программ ROM;
– внутренняя память данных RAM;
– четыре восьмиразрядных порта ввода/вывода PORT0 – PORT3;
– интерфейсные устройства IU.
Его основные характеристики следующие:
• восьмиразрядный ЦП, оптимизированный для реализации функций
управления;
• встроенный тактовый генератор;
• адресное пространство памяти программ - 64 К;
• адресное пространство памяти данных - 64 К;
• внутренняя память программ - 4 К;
• внутренняя память данных - 128 байт;
• дополнительные возможности по выполнению операций булевой алгебры
(побитовые
операции);
• 32 двунаправленные и индивидуально адресуемые линии ввода/вывода;
• 2 шестнадцатиразрядных многофункциональных таймера/счетчика;
• полнодуплексный асинхронный приемопередатчик;
• векторная система прерываний с двумя уровнями приоритета и шестью
источниками
событий [2-4,7,8].
5
Лекция 2
2. Микроконтроллеры (МК) семейства MCS – 51
2.1. Структурная схема микроконтроллера семейства MCS51
Структурная схема микроконтроллера (рис.2.) условно может быть
разделена на четыре узла:
- операционный узел ;
- узел внутренней памяти;
- узел управления и синхронизации;
- узел сопряжения с внешними устройствами, к которому относятся порты
ввода/вывода.
В состав операционного узла входят арифметико-логическое устройство
ALU, регистр аккумулятор АСС, буферные регистры временного хранения
операндов ТМР1 и ТМР2, регистр слова состояния программы (флагов) PSW,
регистр специального назначения В, участвующий в операциях умножения и
деления.
8-разрядное ALU выполняет арифметические операции сложения,
вычитания, умножения и деления; логические операции И, ИЛИ,
инвертирования, операции сдвига влево и вправо.
Важной особенностью ALU является его способность оперировать не только
байтами, но и битами. Возможность оперировать битами определяется тем,
6
что в микроконтроллере имеется специальный механизм, который в
некоторых описаниях называется логическим процессором.
Формирование признаков (флагов) производится при выполнении
команд, в которых участвует аккумулятор, а также при выполнении
некоторых команд побитной обработки. В табл.2.1 приведѐн формат регистра
PSW .
Таблица 2.1
Формат регистра PSW
7
С
6
АС
5
F0
4
RS1
3
RS0
2
OV
1
1
P
7
Старший седьмой разряд предназначен для хранения флага С переноса.
В шестом разряде записывается флаг АС промежуточного переноса (из
младшей тэтрады в старшую). Пятый разряд резервируется для записи бита
по усмотрению пользователя. Разряды 4 и 3 служат для выбора банков
регистров общего назначения. В микроконтроллере, начиная с нулевого
адреса внутренней памяти данных, 32 ячейки памяти функционально могут
быть использованы как регистры общего назначения РОН. Эти ячейки
разбиваются на четыре банка по восемь регистров в каждом банке. Внутри
каждого банка регистрам РОН присвоены номера от R0 до R7. При
включении питания или сбросе по умолчанию устанавливается нулевой
банк. Установка номера банка может быть изменено программно в
соответствии с табл.2.2.
Таблица 2.2
Выбор номера банка регистров РОН
RS1
Номер
RS0
банка
Имя
регистра
Адрес
регистров
R0 – R7
00H – 07H
1
1
R0 – R7
08H – 0Fh
1
2
R0 – R7
10H – 17H
1
1
3
R0 – R7
18H – 1FH
Во втором разряде записывается флаг арифметического переполнения
OV .Первый разряд не используется и в нѐм содержится единица. Нулевой
разряд используется для записи флага Р чѐтности единиц в байте результата.
Нулевой результат относится к чѐтному.
В узел внутренней памяти входят: встроенная память программ ROM,
встроенная память данных RAM: в память данных входят регистры РОН,
адреса которых соответствуют адресам, указанных в табл.1.2 ( BANK RAM) и
регистры специальных функций SFR.
2.2. Организация памяти программ
На рис. 2.3 показана организация памяти программ (для случая
внутренней программной памяти ѐмкостью 4Кх8). Число разрядов адреса
равно 16. Для формирования адреса служит 16-разрядный счѐтчик команд РС
(PROGRAM COUNTER). Программы пользователя записываются в память,
обычно начиная с последнего адреса области векторов прерывания. При
включении питания и формирования сигнала RST (сброс) устанавливается
адрес 0000Н По этому адресу должна быть записана команда безусловного
перехода (вектор сброса) для обхода зарезервированной области векторов
прерываний.
8
Если в системе предусмотрено расширение памяти программ с помощью
подключения внешних БИС памяти, то переход к выборке команд из
внешней памяти программ осуществляется автоматически при значении
FFFFH
1000H
0FFFH
Внешняя
память
программ
Внутренняя
Внешняя
область программ область
программ
0023Н
Вектора
0003Н прерываний
0000Н
Вектор
сброса
Вектора
прерываний
Адрес Вутренняя память
программ
ЕА=1
Внешняя память
программ
ЕА=0
Вектор
сброса
Рис.2.3. Организация памяти программ
адресов больше величины 0FFFH. В том случае, когда вся программа
размещается в пределах внутреннего ПЗУ и внешняя память отсутствует, по
адресам из диапазона 1000Н – FFFFH будет считываться неопределѐнная
информация. Режим работы с внутренней памятью обеспечивается
значением сигнала ЕА=1 на соответствующем вывода микроконтроллера.
Подача на вывод ЕА сигнала низкого уровня переводит к отключению
внутренней памяти программ выборке кодов команд только из внешней
памяти программ по всем адресам из диапазона 0000Н – FFFFH. Время
выборки команд из внешней и внутренней памяти одинаково.
2.3. Организация памяти данных
На рис.2.4 показана структура внутренней памяти данных.
Пространство адресов внутренней памяти данных ѐмкостью 128 байтов
складывается из адресов внутреннего ОЗУ 00Н – 7FH и адресов регистров
специального назначения SFR, размещѐнных в диапазоне 80Н – FFН. В
последних модификациях микроконтроллеров семейства MCS51 внутренняя
9
память данных может иметь ѐмкость 256 байтов и тогда еѐ диапазон адресов
возрастает до значения FFН.
Ячейки памяти ОЗУ из диапазона 20Н – 2FH (16 байтов) допускают
адресацию к каждому биту. В этом диапазоне 128 битов имеют свой
уникальный адрес от 0 до 127 (00Н – 7FH). Например, в ячейке памяти 2FH
по адресу 120 (78Н) в нулевой бит может быть записана/прочитана единица
или ноль.
Внутренняя память данных используется также для организации стека.
8-разрядный указатель стека SP (STACK POINTER) служит для указания
адреса последнего байта, записанного в стек. При заполнении стека адрес
увеличивается, а при считывании адрес уменьшается. Начальное значение
указателя стека SP после сброса соответствует величине 07Н и может
достигать максимального значения ѐмкости внутренней памяти данных.
Программное изменение содержимого указателя стека SP даѐт возможность
перемещения стека в любую область адресного пространства внутренней
памяти данных.
Если в системе предусмотрено расширение памяти данных с помощью
подключения внешних БИС, то выбор данных производится из диапазона
адресов 0000Н – FFFFH. Но обращение к внешней памяти данных
производится только командами типа MOVX, при выполнении которых
формируются сигналы чтения RD в цикле приѐма и WR в цикле записи
данных во внешнюю память данных. Указанные сигналы формируются на
выходах порта Р3 и не вырабатываются при обращении к памяти программ.
10
2.4.Регистры специальных функций (SFR)
Регистры специальных функций SFR имеют фиксированные адреса и
обращение к ним обеспечивается как к ячейкам внутренней памяти данных,
но с использованием только прямой адресации. Функционально регистры
SFR могут быть разделены на:
– арифметические регистры;
– регистры указатели;
– регистры управления для организации прерывания;
– таймеры/счѐтчики и регистры управления ими;
– порты ввода/вывода;
– регистры управления последовательным вводом/выводjм (UART).
В табл.2.3 перечислены регистры специальных функций.
В узел управления и синхронизации входит внутренний генератор OSC,
К внешним выводам Х1 и Х2 микроконтроллера подключается кварцевый
резонатор для стабилизации тактовой частоты сигналов синхронизации.
Устройство управления TIMUNG AND CONTROL на основе сигналов
синхронизации формирует машинный цикл фиксированной длительности,
равный 12 периодам тактовой частоты внутреннего генератора. В
зависимости от кода операции на выходе устройства управления
формируется сигнал выборки внешней памяти программ PSEN и сигнал
стробирования адреса ALE, фиксирующий момент выдачи адреса в порт Р0.
На устройство управления подаются также сигнал ЕА, назначение которого
описано выше и сигнал сброса RST. Сигнал RST служит для установки
микроконтроллера в исходное состояние. На вход RST необходимо подавать
высокий уровень в течение двух машинных циклов (не менее 24 тактов
синхронизации). Сигнал сброса настраивает порты Р0 – Р3 на ввод, регистр
указателя стека в состояние 07Н, а остальные регистры специальных
функций в – нуль.
Таблица 2.3
Регистры специальных функций
Функциональное назначение
Арифметические
регистры
Обознач
ение
Назначение регистра
АСС
В
Аккумулятор
Регистр В участвует в
операциях умножения и деления
PSW
Адрес
Е0Н
F0H
D0H
11
Регистры
указатели
Регистры
управления
прерываниями
Таймеры/счѐтчики
и регистры
управления ими
Порты
ввода/вывода
Регистры
управления
UART
SP
DPTR
DPH
DPL
Указатель стека
16-разрядный указатель памяти
Старший байт DPTR
Младший байт DPTR
81Н
IP
IE
Регистр приоритетов
Регистр разрешения прерываний
B8H
А8Р
Старший байт таймера/счѐтчика 0
Младший байт таймера/счѐтчика 0
Старший байт таймера/счѐтчика 1
Младший байт таймера/счѐтчика 1
Регистр управления таймерами
Регистр режимов таймеров
8CH
8Ah
8Dh
8BH
88H
89H
ТН0
TL0
ТН1
TL1
TCON
TMOD
83Н
82Н
Р0
Р1
Р2
Р3
Порт 0
Порт 1
Порт 2
Порт 3
80Н
90Н
А0Н
В0Н
SBUF
Буферный регистр
приемопередатчика
Регистр управления
приемопередатчика
99Н
SCON
98Н
Примечание к табл. 2.3. Для регистров, адреса которых кратны восьми,
разрешѐн побитный доступ.
Узел сопряжения с внешними устройствами содержит четыре
восьмиразрядных порта ввода/вывода или 32 линии ввода/вывода. Каждую
линию можно рассматривать как независимую друг от друга. Поэтому в
каждом порте часть линий может быть использована для ввода, а другая
часть – для вывода. Все порты кроме их прямого назначения для обмена
данными с внешними устройствами могут иметь и другое функциональное
назначение.
Двунаправленный порт Р0 может служить для перелачи информации
по шине данных, связывающей микроконтроллер с внешней памятью или
другими устройствами микропроцессорной системы (МПС). Через этот же
порт передаѐтся младший байт 16-разрядного адреса. Разделение данных от
адреса производится с помощью сигнала ALE. Старший байт адреса выводтся
через квазидвунаправленный порт Р2.
Квазидвунаправленный порт Р3 многофункциональный. Его линии
используются для ввода/вывода следующих управляющих сигналов:
12
–
–
–
–
–
–
–
–
Р3.0 последовательный ввод (приѐмник RXD);
Р3.1 последовательный вывод (передатчик TXD);
Р3.2 вход внешнего прерывания от источника 0 (INT0);
Р3.3 вход внешнего прерывания от источника 1 (INT1);
Р3.4 вход таймера/счѐтчика T0;
Р3.5 вход таймера/счѐтчика T1;
Р3.6 сигнал записи данных WR во внешнюю память данных;
Р3.7 сигнал чтения данных RD из внешней памяти данных.
Лекция 3
3. Программирование на языке Ассемблера для
микроконтроллеров семейства MCS – 51
3.1.Способы адресации
Система команд состоит из 111 базовых команд. Их машинные коды
могут быть записаны с помощью одного, двух или трех байтов. При
описании команд использованы следующие обозначения: Rr – один из
восьми регистров общего назначения текущего банка, номер которого задан в
регистре PSW; ad – адрес ячейки памяти внутреннего ОЗУ или регистра
специального назначения; bit – адрес бита, rel – смещение, которое
указывается в командах управления для вычисления адреса перехода.
Для обозначения косвенной адресации используется знак @
коммерческое «эт» (далее этот знак в тексте имеет вид - а), а для
непосредственной – знак #.
Все команды могут быть разделены на четыре группы: команды
передачи данных, команды обработки данных, команды управления,
команды выполнения операций с отдельными битами.
3.2. Система команд
3.2.1. Команды передачи данных
В группу команд передачи данных входит команда типа MOV, которая
применяется для пересылки операндов и имеет пять модификаций. При
выполнении команды содержимое источника сохраняется.
Команды типа MOV A, Rr и MOV Rr, A служат для пересылки
операнда из регистра Rr в ячейку внутренней памяти ОЗУ (или регистр
специального назначения), адрес которой указан в команде, и наоборот из
памяти или регистра специального назначения – в РОН. Вместо регистра Rr
может быть использован ACC.
13
Для этого случая в составе команд имеются две команды со следующей
мнемоникой MOV ad, A или MOV A, ad.
Команда с прямой адресацией MOV ad, ad типа память-память, служит
для пересылки содержимого одной ячейки внутренней памяти ОЗУ или
регистра специального назначения в другую ячейку внутренней памяти или
регистр специального назначения.
Команды с косвенной адресацией MOV A, a R0 или MOV A, a R1
служат для пересылки в аккумулятор содержимого ячейки внутренней
памяти данных (или регистра специального назначения), адрес которой
указан в регистре R0 или R1 и наоборот, команды с косвенной адресацией
MOV a R0, A и MOV a R1, A используются для пересылки содержимого
аккумулятора в ячейку памяти внутреннего ОЗУ (или регистра специального
назначения), адрес которой указан в регистре R0 или R1. К этому же типу
относятся команды MOV ad, a R0; MOV ad, a R1 и MOV a R0, ad; MOV a
R1, ad.
Команды: MOV A, #data; MOV Rr, #data; MOV ad, #data; - служат для
пересылки 8-разрядного операнда, который содержится в команде, в
аккумулятор или РОН или в ячейку внутренней памяти данных (регистр
специального назначения). При выполнении команд MOV a R0, #data и MOV
a R1, #data 8-разрядный операнд, содержащийся в команде, пересылается в
ячейку внутренней памяти (или регистр специального назначения), адрес
которой указан в регистре R0 или R1. Команда MOV DPTR, #data пересылает
в указатель данных DPTR 16-разрядный операнд, указанный в команде.
Причем в регистр DPL засылается младший байт операнда, а в регистр DPH –
старший байт операнда.
Команды типа MOVX служат для обмена операндами между
аккумулятором и ячейками внешней памяти данных.
Команды: MOV, a DPTR; MOVX A, a R0; MOVX A, a R1 –
применяются для пересылки операнда из внешней памяти данных в
аккумулятор. В этих командах используется косвенная адресация, причем,
если указаны регистры R0 или R1, то операнд выбирается из внешней памяти
данных, емкость которой не должна превышать 256 байт, а если в команде
приводится указатель данных DPTR, то емкость внешней памяти может
достигать 64 Кбайт.
Команды: MOVX a DPTR, A; MOVX a R0, A; MOVX a R1, A –
наоборот используются для пересылки содержимого аккумулятора в ячейки
внешней памяти данных.
Команды MOVC A, a A+DPTR и MOVC A, a A+PC с косвенной
адресацией по сумме базового и индексного регистров используются для
просмотра таблиц, записанных в памяти программ. В этих командах в
качестве базового регистра служит аккумулятор, а в качестве индексного –
указатель данных DPTR или счетчик команд PC. Содержимое ячейки памяти
программ, адрес которой определяется суммой содержимого аккумулятора и
DPTR (или PC), пересылается в аккумулятор.
14
Для работы со стеком служат две команды PUSH и POP. С помощью
команды PUSH ad в стек записывается содержимое ячейки внутренней
памяти данных (или регистра специального назначения), адрес которой
указан в команде. С помощью команды POP ad из стека выбирается операнд,
который засылается по адресу, указанному в команде.
К группе команд передачи данных могут быть также отнесены команда
XCH обмена операндами между аккумулятором и внутренней памятью
данных.
Команда XCH A, Rr служит для обмена содержимым аккумулятора и
POH. Команда XCH A, ad используется для обмена содержимым
аккумулятора и приема адресуемой ячейкой внутренней памяти данных (или
регистром специального назначения). Команда XCH A, a R0 и XCH A, a R1
аналогична предыдущей, но с косвенной адресацией.
Команды с косвенной адресацией: XCH DA, a R0 или XCH D A, a R1 –
служат для обмена младшими тетрадами между аккумулятором и внутренней
памятью данных.
Команда SWAP A служит для перестановки тетрад содержимого
аккумулятора (младшая тетрада записывается на место старшей, а старшая –
на место младшей).
Лекция 4
3.2.2. Команды обработки данных
Команды обработки данных можно разбить на команды
арифметических и логических операций. При выполнении команд
арифметических и логических операций формируются признаки, которые
записываются в регистр PSW.
К арифметическим командам относятся команды сложения, вычитания,
умножения и деления.
При выполнении команд сложения участвуют два операнда, один из
которых обязательно содержится в аккумуляторе. Результат сложения также
записывается в аккумулятор. Для записи команд сложения используется
15
мнемоника ADDC для случая учета признака C и мнемоника ADD для
случая, когда признак переноса в сложении не участвует. Каждая из
указанных команд имеет четыре модификации: сложение содержимого
аккумулятора с содержимым регистра общего назначения Rr; сложение
содержимого аккумулятора с содержимым ячейки внутренней памяти
(регистра специального назначения), адрес которой прямо указан в команде;
то же, но с использованием косвенной адресации; сложение содержимого
аккумулятора с операндом, содержащимся в команде (непосредственная
адресация). Запись команд сложения приведена в табл. П1.3.
В командах вычитания так же, как и в командах сложения участвуют
два операнда, один из которых содержится в аккумуляторе. Результат
вычитания записывается в аккумулятор. Вычитание производится с учетом
заема (содержимого разряда переноса), и команда имеет мнемонику SUBB. В
зависимости от использования того или иного способа адресации так же, как
и для команд сложения, могут быть использованы четыре модификации
(табл. П 1.3).
При выполнении команды умножения MUL AB перемножаются 8разрядные двоичные числа без знака, содержащиеся в аккумуляторе ACC и в
регистре специального назначения B. Младший байт двухбайтового
результата помещается в аккумулятор ACC, а старший байт результата – в
регистр B. Признак OV устанавливается в единицу, если произведение
больше 255 (FFH), иначе признак OV равен нулю.
Признак переполнения C сбрасывается в нуль в любом случае.
При выполнении команды DIV AB 8-разрядное целое двоичное число
без знака, содержащееся в аккумуляторе ACC, делится на 8-разрядное целое
число без знака, содержащееся в регистре B. После выполнения операции
деления в аккумулятор заносится целая часть частного от деления, а в
регистр B – остаток от деления. Признаки OV и С сбрасываются в нуль.
Если перед выполнением операции деления в регистре B содержится
значение 00H (деление на нуль), то результат деления будет неопределенным
и признак OV установится с единицу. Признак C сбрасывается в нуль в
любом случае.
Команда DA A десятичной коррекции применяется для коррекции
результата сложения двух операндов, представленных в двоично-десятичном
коде.
Команда инкремента INC служит для увеличения на единицу
содержимого аккумулятора регистров общего и специального назначения,
содержимого ячеек внутренней памяти данных, а также указателя данных
DPTR (табл. П 1.3).
Команда декремента DEC служит для уменьшения на единицу
содержимого тех же регистров и ячеек внутренней памяти данных,
перечисленных при описании команд INC, кроме указателя данных DPTR
(табл. П 1.3).
К командам логических операций относятся команды ANL
(поразрядного И), ORL
(поразрядного ИЛИ), XRL (поразрядного
16
исключения ИЛИ) и команды сдвига вправо или влево содержимого
аккумулятора ACC.
Команды ANL, ORL и XRL имеют одинаковые модификации и
выполняют поразрядно соответствующую логическую операцию над
операндами, один из которых содержится в аккумуляторе, а другой либо в
РОН, либо в ячейках внутренней памяти данных ( в регистрах специального
назначения) (табл. П 1.3).
Команда RL A служит для циклического сдвига влево содержимого
аккумулятора.
Команда RLC A служит для циклического сдвига влево 9-разрядного
значения, которое определяется восемью разрядами содержимого
аккумулятора и разрядом признака переноса С (сдвиг через разряд признака
переноса).
Такого же типа команды используются для сдвига вправо: RR A –
циклический сдвиг, вправо содержимого аккумулятора;
RRC A –
циклический сдвиг вправо содержимого аккумулятора через разряд переноса.
При выполнении команды CLP A
значение всех разрядов
аккумулятора сбрасывается в нуль, а при выполнении команды CPL A все
разряды аккумулятора инвертируются.
3.2.3. Команды управления
К командам управления относятся команды условного и безусловного
переходов, а так же команды вызова подпрограмм и возвращения из
подпрограмм.
Команда безусловного перехода LJMP addr 16 используется для
организации безусловного перехода по 16-разрядному адресу, указанному в
команде. Адрес перехода может быть любым адресом из 64 Кбайт памяти
программ.
Команда безусловного перехода AJMP addr 11 служит для организации
безусловного перехода по 11 разрядному адресу, причем три старших
разряда адреса (А10 – А8) указываются в старших разрядах (7 – 5) первого
байта команды, а оставшиеся разряды адреса (А7 – А0) указываются во
втором байте команды.
Команда SJMP rel выполняет безусловный переход по адресу, который
вычисляется путем сложения смещения rel, указанного в команде, со
значением РС+2, где содержимое счетчика команд РС соответствует
значению адреса первого байта команды SJMP. Смещение rel обеспечивает
изменение адреса относительно адреса команды SJMP на величину -128 –
+127 байтов. Если переход осуществляется в сторону увеличения адреса, то
значение смещения rel записывается в прямом коде. Если переход
осуществляется в сторону уменьшения адресов, то значение смещения rel
записывается в дополнительном коде. Ниже показаны фрагменты программы
с использованием команды SJMP.
17
Переход к началу программы Переход в конец программы
0010 7F25M1: MOV R7, #25H 0010 7F25M1: MOV R7, #25H
0012 FD
MOV R5, A
0012 FD MOV R5, A
0013 80FB SJMP M1
0013 8001 SJMP M3
0015 ED M2: MOV A, R5
0016 EE M3: MOV A, R6
С помощью команд JMP a A+DPTR осуществляется косвенный
переход по адресу, определяемому суммой содержимого аккумулятора А и
16-разрядного указателя данных DPTR. Сложение выполняется по модулю
216, причем содержимое А и DPTR не изменяется. Например, пусть в А
содержится 05H, а в DPTR – 001CH. Тогда после выполнения команды JMP
a A+DPTR осуществится переход к адресу 0021H.
Для организации перехода по нулевому значению результата,
получаемого после выполнения арифметических и логических операций
служит команда JZ rel, а по ненулевому значению результата – команда JNZ
rel. Значение смещения выполняется так же, как и в команде SJMP rel.
Обычно при организации циклов применяется следующая
последовательность команд: сначала производится загрузка счетчика циклов,
затем осуществляется декремент и анализ его содержимого на нуль. Если
содержимое счетчика не равно нулю, то производится переход к началу
цикла.
В системе команд ОМЭВМ51 декремент и анализ содержимого
счетчика выполняется с помощью одной двухбайтной команды DJNZ Rr, rel,
где Rr – один из РОН, а rel – смещение, которое вычисляется так же как и в
команде SJMP.
При выполнении трехбайтной команды DJNZ ad, rel уменьшается на
единицу содержимое прямоадресуемой ячейки внутренней памяти данных
(или регистра специального назначения) и, если оно не равно нулю, то
осуществляется переход по адресу (PC)+3+rel, где (РС) – значение адреса
первого байта команды DJNZ. Эта команда аналогична команде DJNZ Rr, rel.
Для организации сравнения двух операндов служат команды типа
CJNE (табл. 3.2.1).
В указанных командах один операнд содержится в аккумуляторе, место
другого определяется тем или иным способом адресации. Если сравниваемые
операнды не равны. От осуществляется переход по смещению rel. При этом,
если содержимое аккумулятора меньше второго операнда, то признак
переноса С=1, иначе С=0. Оба операнда, участвующих в сравнении, не
изменяются. Если оба операнда равны, то осуществляется переход к команде,
следующей за командой CJNE.
Для вызова подпрограмм служит команда LCALL addr 16 по 16разрядному адресу и команда ACALL addr 11 по 11-разрядному адресу. В
последней команде восемь младших разрядов адреса записываются во
втором байте команды, а три старших – в трех старших разрядах первого
байта команды.
18
Таблица 3.2.1
Команды сравнения
Запись
команды
Число
байтов
CJNE A, ad,
rel
3
CJNE A,
3
#data, rel
CJNE Rr,
3
#data, rel
CJNE aR0, 3
#data, rel
CJNE aR1,
#data, rel
Вычисление
адреса
перехода
(PC)+3+rel
(PC)+3+rel
(PC)+3+rel
(PC)+3+rel
Примечание
Второй операнд выбирается
прямо из адресуемой ячейки
внутренней памяти данных (или
регистра специального
назначения).
Второй операнд содержится в
команде.
Первый операнд содержится в
регистре, второй – в команде.
Первый операнд выбирается по
адресу, указанному в регистре
R0(R1),
второй
операнд
содержится в команде.
Для возврата из подпрограммы служит команда RET. В случае, когда
вызов подпрограмм производится по прерыванию, возврат из подпрограммы
осуществляется с помощью команды RETI.
3.2.4 Команды для выполнения операций с отдельными битами
При выполнении операций с отдельными битами в командах прямо
указывается адрес бита. Адрес бита признак переноса C указывается неявно.
Все команды побитовой обработки также можно разделить на команды
передачи, логических операций и управления.
К командам передачи относятся MOV C, bit и MOV C, bit, где C –
разряд переноса, а в поле bit записывается соответствующий адрес бита. С
помощью указанных команд пересылается значение бита в разряд переноса
или наоборот.
К командам логических операций относятся команда ANL – логическое
«И» и команда ORL – логическое «ИЛИ».
С помощью команды ANL C, bit осуществляется логическое «И»
признака переноса и значение прямоадресуемого бита, а с помощью команды
ANL C,/bit выполняется логическое И инвертированного значения
прямоадресуемого бита со значением разряда признака переноса.
Аналогично выполняются команды логического ИЛИ ORL C, bit и ORL
C,/bit.
К командам управления относятся команды установки в единицу,
сброса, инвертирования соответствующих битов, а также команды для
19
организации условного перехода к значению бита, адрес которого указан в
команде.
Для установки в единицу используются команды SETB C и SETB bit,
для сброса в нуль используются команды CLR C и CLR bit, а инвертирования
– CPL C и CPL bit.
При выполнении команды JC rel осуществляется переход по значению
признака переноса С=1. Адрес перехода вычисляется сложением
содержимого счетчика команд и смещения rel. Аналогично вычисляется
команда JNC rel, но переход осуществляется по значению С=0.
При выполнении команды JB bit, rel осуществляется переход, если
значения прямоадресуемого бита равно единице. Адрес перехода
вычисляется сложением содержимого счетчика команд и смещением rel.
Аналогично выполняется команда JNB bit, rel, но переход осуществляется по
значению прямоадресуемого бита, равного нулю. Значение бита при
выполнении указанных команд не изменяется. Команда JBC bit, rel, но
значение бита, участвующего в операции, сбрасывается в нуль.
3.3. Средства отладки программ
В настоящее время для отладки программ микроконтроллеров
семейства MCS-51 имеются следующие средства:
– интегрированная отладочная среда mVision2;
– FLIP – гибкий внутрисистемный программатор (Flexible In-system
Programmer) микроконтроллеров ATMEL с флэш памятью;
– дизассемблеры для MCS-51;
– компиляторы с языка ассемблера для микроконтроллеров семейства
MCS-51.
Интегрированная отладочная среда mVision2mVision2 - новая
отладочная среда фирмы Keil Software для микроконтроллеров семейства
MCS-51. Она включает средства управления проектами, мощный текстовый
редактор и многофункциональный отладчик в удобной программной
оболочке. В комплект входит подробное руководство, в котором есть
справочная информация по всем вопросам и раздел для быстрого освоения
программы.
Поддерживаются микроконтроллеры фирм: Analog Devices, AMD,
Atmel, Dallas Semiconductor, Philips.
FLIP (гибкий внутрисистемный программатор) – программа для
Windows 9x/Me/NT/2000/XP или Linux. FLIP поддерживает внутрисистемное
программирование флэш- микроконтроллеров C51 через интерфейс RS232
(Windows и Linux), порты USB или CAN (Windows). USB-драйвер для
Windows WinDriver поставляется Jungo. Отличительные особенности и
преимущества:
20
– Поддерживает внутрисистемное программирование (ISP) флэш-–
микроконтроллеров семейства С51 фирмы Atmel через интерфейсы RS232,
USB и CAN;
– Работает под платформами Windows и Linux;
– Не требуются дополнительные аппаратные средства;
– Мощный набор динамически загружаемых библиотек (DLL);
– Доступна версия под DOS (BatchISP);
– Вводит ISP-режим без ручных установок на целевой плате (AutoISP);
– Поддерживает основные CAN-интерфейсы (PEAK, IXXAT® и
Vector);
– Отладочный режим для визуализации и проверки трафика между
FLIP и целевым аппаратным обеспечением;
– Расширенная оперативная помощь;
– Свободно распространяемое инструментальное средство.
FLIP – свободно распространяемое программное инструментальное
средство.
FLIP – мощный набор инструментальных средств, который дает
возможность пользователю легко внедрить библиотеки функций
внутрисистемного программирования в его приложение без необходимости
вникать в особенности протокола программирования. FLIP позволяет
увеличить
гибкость,
мощность
и
простоту
внутрисистемного
программирования флэш-микроконтроллеров Atmel семейства C51.
Дизассемблер предназначен для преобразования исполняемого кода
микроконтроллеров MCS-51 в текст программы на языке ассемблера.
Форматы входных данных: HEX, OBJ, BIN.
Компиляторы с языка ассемблера для микроконтроллеров семейства
MCS-51 позволяют преобразовывать исходный текст программы на языке
ассемблера в объектный код и код микроконтроллера для ПЗУ. Программы
для разных модификаций микроконтроллеров следует писать с учетом
особенностей конкретного кристалла и его периферийных модулей.
Рассмотрим примеры разработки программ, написанных на языке
Ассемблера, в интегрированной отладочной среде mVision2
Микроконтроллеры семейства MCS51 имеют специфические области
памяти: память программ (внутренняя и внешняя), внутренняя и внешняя
память данных.
Памяти программ соответствует сегмент кода CSEG, причем он может
быть объявлен для любой доступной области внутренней или внешней
памяти программ с помощью директивы AT. Например
cseg at 200h
Если директива AT не указана, то по умолчанию сегмент кода
начинается с нулевого адреса.
21
Код может содержать область констант (например, строку символов).
Тогда для удобства чтения программы код может быть разбит на несколько
сегментов: сегменты кода и сегменты констант. В этом случае сначала
присваиваются имена сегментам с помощью директивы SEGMENT, а затем
указывается их место в программе с помощью директивы RSEG. Например,
prog segment code ; prog - имя сегмента
const segment code ; const - имя сегмента
cseg at 0
jmp start
org 40h
rseg prog
;текст программы
rseg const
string: db ‗ТЕМПЕРАТУРА‘
end
Внутренняя память данных может содержать сегменты данных и
сегмент области памяти с побитным доступом. Сегментам данных
объявляется с помощью директивы DSEG для доступа к данным с любым
способом адресации и ISEG для доступа к данным, размещенным по адресу,
превышающим значение 7Fh(127), с косвенным способом адресации.
Резервирование ячеек внутренней памяти данных осуществляется с помощью
использования директивы ds. Например, с помощью следующей записи
dseg at 30h
var: ds 1
mass: ds 20
во внутренней памяти данных для переменной с именем var резервируется
один байт, начиная
с адреса 30h, и для массива с именем mass резервируется 20 байтов, начиная
с адреса 31h. Сегмент данных с побитным доступом обозначается как BSEG.
Стек размещается в любом месте внутренней памяти данных. Наиболее
распространенным способом стек задается с помощью использования имени
stack и резервирования для него необходимого числа байтов (глубины стека).
Адрес дна незаполненного стека записывается в указатель стека SP командой
mov в начале сегмента кода. Например,
dseg at 60h
stack: ds 30
cseg
jmp start
org 40h
start: mov sp,#stack-1
end
Сегмент внешней памяти данных обозначается как ХSEG.
22
Лекция 5
4. Построение микропроцессорной системы на базе
микроконтроллера семейства MCS51
4.1. Порты ввода/вывода
Квазидвунаправленный порт Р1 применяется как обычный порт
ввода/вывода данных (в более поздних модификациях также может быть
многофункциональным).
Порт Р0 (рис.4.1) содержит фиксатор LATCH (защѐлку) на триггерах Т,
два буфера 1 и 2,мультиплексор MUX и два выходных транзистора.
При работе с внешней памятью (или другими устройствами,
подключѐнными к шинам адреса и данных) адрес или данные преобразуются
в парафазный код, сигналы которого управляют затворами транзисторов.
Если передаѐтся единица, то верхний транзистор открыт, а нижний закрыт.
Когда передаѐтся нуль, то наоборот верхний транзистор открыт, а нижний
закрыт. Адрес или данные сопровождаются разрешающим сигналом
«управление». Этот сигнал управляет мультиплексором и верхним
транзистором. Чтение данных с внешнего вывода производится через буфер
2. Оба транзистора в этом случае закрыты.
Если порт Р0 применяется как обычный порт ввод/вывода, то данные
записываются в фиксатор с внутренней шины микроконтроллера. Инверсный
выход Q триггера через мультиплексор подключѐн к нижнему транзистору,
верхний транзистор всегда закрыт. Следовательно, состояние нижнего
транзистора полностью определяется состоянием фиксатора. Ввод данных в
этом случае возможен только при закрытом нижнем транзисторе и
23
осуществляется через буфер 2. Запись единицы в фиксатор обеспечивает
закрытие нижнего транзистора. Состояние фиксатора может быть опрошено
через буфер 1.
Поскольку верхний транзистор в режиме использования порта Р0 как
обычного порта ввода/вывода всегда закрыт, то при выводе единицы оба
транзистора закрыты, что эквивалентно третьему состоянию, т.е. выходной
ток высокого уровня равен нулю. Чтобы освободится от третьего состояния в
этом случае, необходимо каждый вывод порта через внешний резистор
подключать к источнику электропитания (рис. 4.2).
Рис. 4.2. Подключение внешних резисторов к порту Р0
Как уже упоминалось, при обычном вводе через порт Р0 необходимо следить
за состоянием фиксатора, который должен находиться в состоянии единицы.
В режиме работы с внешней памятью следить за состоянием фиксатора нет
необходимости. Поэтому порт Р0 называется двунаправленным.
В квазидвунаправленном порту (рис. 4.1. б) имеется фиксатор и один
транзистор на выходе с встроенным резистором нагрузки. (В современных
модификациях роль резистора выполняет управляемый транзистор). Работа
квазидвунаправленного порта аналогична работе порта Р0 в обычном режиме
ввода/вывода, в котором необходимо следить за состоянием фиксатора при
вводе информации. Поэтому порты Р1, Р2, Р3 называются
квазидвунаправленными.
Сигнал сброса RST устанавливает фиксаторы всех портов в состояние
единицы.
4.1.1. Особенности выполнения команд при обращении к портам
ввода/вывода
Работа с портами имеют некоторые особенности. Они касаются команд
ввода данных с порта, в которых порт является одновременно операндом и
местом размещения результата операции. В этих случаях реализуется
специальный режим, который называется «чтение-модификация-запись». В
этом режиме считывание содержимого порта осуществляется не с внешних
24
выводов, а из фиксатора (защѐлки). Рассмотрим следующий пример. Пусть
имеется следующая схема, показанная на рис.4.1.1 и выполняется следующая
последовательность команд:
MOV A,#10101010B
MOV P!,A
ANL P!,#00101010B
Рассмотрим два случая:
1. Ключ Sw разомкнут, тогда после выполнения команды ANL состояние
фиксатора и внешних выводов Pins совпадают.
Разряды
7
6
5
4
3
2
1
Фиксатор Р1 0
1
1
1
Pins
1
1
1
2. Ключ Sw замкнут, тогда состояние внешних выводов отличается от
состояния фиксатора.
Разряды
7
6
5
4
3
2
1
Фиксатор Р1 0
1
1
1
Pins
1
1
В режиме
«чтение-модификация-запись» ввод
правильным не с внешних выводов, а из фиксатора.
данных
считается
MCS51
Pins
PORT
P1
P1.0
P1.1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7
+
R
Sw
Рис. 4.1.1. Выполнение альтернативной команды ANL P1,#data
P1,#00101010B
Ниже приведены команды, работающие в режиме «чтениемодификация-запись»:
– ANL поразрядное И;
– ORL поразрядное ИЛИ4
– XRL исключающее ИЛИ;
25
– JBC переход на метку, если бит равен 1;
– CPL инверсия бита;
– INC инкремент содержимого порта;
– DEC декремент содержимого порта;
– DJNZ декремент и переход на метку, если содержимое порта не ноль;
– MOV PX,Y пересылка бита переноса в бит Y порта X;
– CLR PX,Y очистка бита Y порта X;
– SETB PX,Y установка бита Y порта X.
4.2. Подключение внешних БИС памяти программ и данных
4.2.1. Временные диаграммы выполнения машинного цикла в
микроконтроллере
Устройство управления микроконтроллера формирует машинный цикл,
длительность которого равна 12 периодам тактовой частоты внутреннего
генератора. Машинный цикл делится на шесть состояний S1 – S6 (рис. 4.2..1),
причѐм каждое состояние состоит из двух тактов Р1 и Р2.
Команды выполняются либо за один машинный цикл, либо за два
машинных цикла. Только команды умножения и деления выполняются
каждая за четыре машинных цикла. Рассмотрим выполнение команд с
помощью четырѐх примеров: выполнение однобайтовой одноцикловой
команды; выполнение духбайтовой одноцикловой команды; выполнение
однобайтовой двухцикловой команды; выполнение команды обращения к
внешней памяти.
Выполнение любой команды начинается с чтения кода операции. С
этой целью микроконтроллер вырабатывает в состояниях S1 и S2 сигнал ALE
независимо от того во внутренней или внешней памяти содержится команда.
Если команда содержится во внешей памяти программ, то вырабатывается
также сигнал PSEN (рис. 4.2.2), который отсутствует при чтении команд из
внутренней памяти программ.
Если выполняется однобайтовая одноцикловая команда, то еѐ чтение и
выполнение осуществляется в течение трѐх состояний S1 – S3. Во время
состояний S4 – S6 производится холостое чтение кода следующей команды
(игнорируется), которая в микроконтроллере не выполняется.
Если во время состояния S1 – S3 был принят код операции двух
байтовой команды, то второй байт команды читается во время действия
состояний S4 – S6. Таким образом, двухбайтовая команда выполняется за
один машинный цикл.
Некоторые команды, например, команда инкремента указателя данных
INC DPTR, являются однобайтовыми, но выполняются за два машинных
цикла. В этом случае в первом машинном цикле во время действия
состояний S1 – S3 читается код операции, а в остальное время производится
26
инкремент указателя DPTR. Поскольку во время состояний S4 – S6 первого
машинного цикла и во время состояний S1 – S3 и S4 – S6 второго машинного
цикла вырабатывается сигнал ALE, то происходит холостое считывание кода
операции команды ,следующей за командой INC DPTR.
При выполнении команды выборки данных из внешней памяти данных (рис.
4.2.2 – 4.2.3) с помощью команды MOVX A, @DPTR или команды MOVX
@DPTR,A в первой половине первого машинного цикла осуществляется
чтение кода операции команды MOVX. Во второй половине первого
машинного цикла производится холостое считывание кода операции
следующей команда. А в первой половине второго машинного цикла в
режиме (цикле) чтения по сигналу RD считываются данные из внешней
памяти или в режиме записи (цикле) по сигналу WR данные записываются
во внешнюю память данных. Во втором машинном цикле во время действия
сигнала RD или WR сигнал ALE не вырабатывается.
Следует помнить, что если не используется внешняя память данных, то
сигнал ALE генерируется во всех машинных циклах дважды и поэтому может
быть использован как сигнал синхронизации для устройств, входящих в
микропроцессорную систему.
27
28
4.2.2. Схема подключение внешних БИС памяти программ и данных
В микропроцессорных системах, построенных на базе микроконтроллера
семейства МСS51, доступ к внешней памяти программ осуществляется с
помощью управляющего сигнала
PSEN, выполняющего функцию
стробирующего сигнала для выбора внешней микросхемы ПЗУ (рис. 4.2.4).
При обращении к внешней памяти устанавливается 16-разрядный адрес.
Напомним, что старший байт адреса выводится с порта Р2, а младший байт
адреса с порта Р0, причем вслед за младшим байтом адреса следует код
команды. Разделение адреса от кода команды производится по времени с
использованием сигнала ALE, во время действия которого младший бай
адреса защѐлкивается во внешнем регистре адреса RGA. Старший байт
адреса запоминается и сохраняется неизменным в портеР2 в течение цикла
обращения к памяти программ.
Доступ к внешней памяти данных возможен с использованием как 16разрядного адреса (команды MOVX A, @DPTR, MOVX @DPTR,A), так и 8разрядного адреса (команды MOVX A,@R0,
MOVX @R0,A). При
использовании 18-разрядного адреса старший бай устанавливается в порте
Р2, а младший байта адреса защѐлкивается во внешнем регистре адреса RGA.
При использовании 8-разрядного адреса порт Р2 может быть использован как
обычный порт ввода/вывода. Если на вход W/R БИС внешней памяти данных
поступает сигнал низкого уровня, то осуществляется циел записи, иначе –
цикл чтения. Формирование циклов записи или чтения производится с
помощью команд типа MOVX, во время выполнения которых с выводов
порта Р3 снимаются сигнал записи WR или сигнал чтения RD. Поскольку
29
сигналы записи и чтения взаимоисключающие то во время цикла чтения на
выводе Р3.6 (вывод WR) формируется сигнал высокого уровня, и поэтому на
вход W/R БИС внешней памяти данных поступает сигнал высокого уровня,
который служит для формирования режима чтения ОЗУ.
В тех случаях, когда необходимо подключать другие микросхемы, например,
внешние порты, реализованных на регистрах, то используется дешифратор
адреса DC, с помощью которого могут быть выбраны различные
микросхемы, входящие в состав микропроцессорной системы (МПС).
В командах, которые изменяют значения в защѐлках, портов Р0 – Р3, новые
данные фиксируются в фазе S6P2 последнего машинного цикла. На выводе
эти данные появляются в фазе S1P1 следующего цикла (рис. 4.2.5).
Рис. 4.2.5. Данные на выводах порта
В некоторых МПС имеет смысл совместить адресное пространство
внешней памяти программ и памяти данных. В этом случае в качестве
внешней памяти используется только микросхема ОЗУ, в одной части
которой записана программа, а в другой данные, тогда с помощью схемы
(рис.4.2.6) объединения сигналов чтения RD и PSEN из микросхемы ОЗУ
могут быть прочитаны как коды команд так и данные.
30
RAM
MCS51
A
PSEN
&
RD
OE
WR
WR
CS
Рис. 4.2.6. Формирование сигнала чтения совмещѐнной внешней
памяти
4.2.3. Стирание и программирование РПЗУ
В ранних модификациях память программ микроконтроллеров
изготавливалась
электрически
программируемой
со
стиранием
ультрафиолетовым излучением. Поэтому микроконтроллер необходимо
оберегать от солнечного и комнатного освещения. При солнечном освещении
содержимое РПЗУ стирается через 1 неделю, а при комнатном – через 3 года.
Если необходимо стереть содержимое РПЗУ, то ОМЭВМ выдерживается под
ультрафиолетовой лампой с излучением мощностью 12000 мкВт/см2 в
течение 20 – 30 минут на расстоянии примерно 2,5 см.
В режиме программирования РПЗУ тактовый генератор должен работать с
частотой 4 – 6 МГц. Коды адреса ячеек РПЗУ (рис. 4.2.7) подаются на
выводы порта Р1 и выводы Р2.0 – Р2.3 порта Р2 (рис. 4). Коды данных
должны поступать на входы порта Р0. На выводы Р2.4 – Р2.6 и вывод
подается низкий уровень, а на вывод Р2.7, , ALE высокий уровень. На
вывод RST подается напряжение +2.5 В.
Программирование выполняется в следующей последовательности. На
вывод ЕА подается напряжение 21 В. Затем на вывод ALE, который имел
высокий уровень, подается низкий уровень длительностью 50 мс. После на
выводе
восстанавливают высокий ТТЛ-уровень. Следует помнить, что на
выводе
недопустимо даже мгновенно превысить напряжение выше
значения 21,5 В. Короткие выбросы напряжения выше указанного уровня
могут привести к необратимым разрушениям БИС ОМЭВМ. Поэтому
необходимо предпринимать дополнительные меры к стабилизации источника
питания 21 В, чтобы защитить БИС ОМЭВМ от выбросов напряжения во
время программирования.
31
A0 – A11
D0 – D7
ПортР1
ПортР0
Порт Р2.0-Р2.3
ALE
EA
RST
P2.4 – Р2.6
PSEN
Рис. 4.2.7. Схема программирования внутренней памяти
программ
После программирования необходимо проверить правильность кодов команд
в РПЗУ. Адрес подается на выводы порта Р1 и Р2.0 – Р2.3 порта Р2. На
выводах Р2.4 – Р2.6 и
поддерживается низкий уровень, а на выводах
ALE и – высокий. На вывод RST тоже должен быть подан уровень +2,5 В.
С выводов порта Р0 считываются коды содержимого РПЗУ. Вывод Р2.7
используется для управления. Если на вход Р2.7 подать высокий уровень, то
считывается неопределенная информация. Если на вход Р2.7 подать низкий
уровень, то с выводов порта Р0 считывается содержимое ячейки памяти,
адрес которой подается на входы портов Р0 и Р2. В режиме проверки РПЗУ к
выводам порта Р0 требуется подключать внешние нагрузочные резисторы 10
кОм.
Лекция 6
4.3. Таймер/счетчик
В состав ОМЭВМ51 входят два 16-разрядных многорежимных
таймера/счетчика. Регистры таймера/счетчика 0 обозначаются ТН0 и TL0, а
регистры таймера/счетчика 1 – TH1 и TL1. Каждая пара регистров
независимо одна от другой может работать либо как таймер, либо как
счетчик. Режим таймера используется для задания интервалов времени, а
режим счетчика – для счета внешних событий (счет входных импульсов,
поступающих на входы порта Р3 от внешнего источника).
С помощью таймера могут быть заданы интервалы времени в
диапазоне от длительности выполнения одного машинного цикла до
длительности выполнения 65536 циклов. При тактовой частоте внутреннего
32
генератора 12 МГц диапазон изменения интервала времени таймера
составляет 1 – 65536 мкс.
Максимальная частота входных сигналов для их счета в режиме
счетчика составляет1/24 тактовой частоты внутреннего генератора, что
составляет – 500 кГц, если fт=12 МГц.
Выбор режимов осуществляется с помощью регистра TMOD (адрес
89H), а управление таймером/счетчиком – с помощью регистра TCON (адрес
88H). В табл. 4.3.1 приведен формат слова TMOD для задания режимов.
Таблица 4.3.1
Формат слова TMOD
Номер разряда
7
6
5 3
2
1
4
Обозначение разряда
GATE /C
M1 GATE
/C
M1
M0
M0
Номер таймера
Таймер/счетчик 1
Таймер/счетчик 0
В табл. 4.3.2 приведен формат слова TCON для выбора значений
разрядов управления таймером/счетчиком. Назначение младших четырех
разрядов рассматривается в параграфе, в котором описывается организация
прерывания.
Таблица 4.3.2
Формат слова TCON
Номер разряда 7
6
5 1
2
3
4
4
Обозначение
TF1
TR1
TF0 IE1 IT1 IE0
IT0
разряда
TR1
Используются
для
организации прерываний
Выбор режимов работы таймера/счетчика 0 осуществляется с помощью
установки в нуль или единицу разрядов 0 – 3 регистра TMOD, а
таймера/счетчика 1 – с помощью разрядов 4 – 7.
Значение GATE (TMOD 7 или TMOD 3) служит для разрешения
запуска таймера/счетчика. Если разряд GATE установлен в единицу, то
таймер/счетчик запускается в том случае, когда на входах P3. 3 для
(таймера/счетчика 1) и P3. 2 (для таймера/счетчика 0) порта P3 поступает
сигнал высокого уровня и значение разряда TR1 (TR0) регистра TCON равно
единице. Если разряд GATE установлен в нуль, то таймер/счетчик
запускается в том случае, когда значение разряда TR1 (TR0) установлено в
единицу, а значение уровня сигнала на входе P 3. 3 (P3. 2) может быть
любым.
Значение /C (TMOD . 6 TMOD . 2) определяет работу в режиме
таймера/счетчика. Если разряд /C установлен в единицу, то выбирается
режим счетчика и внешние сигналы, предназначенные для счета, должны
быть подключены к входам P 3. 5 (P 3. 4) порта P3. Если разряд /C в нуль,
33
то выбирается режим таймера и сигналы на вход таймера поступают от
внутренних схем синхронизации.
С помощью разрядов М1 и М0 задаются четыре варианта загрузки
регистров TH и TL и управления ими. Каждый из вариантов соответственно
называется режимом 0, 1, 2 или 3.
Режим 0 (13-разрядный таймер/счѐтчик) устанавливается при значении
разрядов М1=0 и М0=0. В этом режиме (рис. 4.3.1) в регистре TL1 (TL0) 3
значения трѐх старших битов неопределенны и значащими являются только 5
младших битов. В регистр TH1 (TH0) загружается 8-разрядное значение.
При переполнении регистра TH1(TH0) в единицу устанавливается разряд TF1
(TF0) регистра управления TCON. Признак TF1 (TF0) может быть опрошен
программно
либо
использован
как
источник
прерывания
от
таймера/счетчика. Таким образом могут быть заданы интервалы времени в
диапазоне [8192 – (начальное значение)] ∙ Tмц, где Tмц – длительность
машинного цикла или произведен счет внешних сигналов в диапазоне от 1 до
213. Следует заметить, что режим 0 совпадает с режимом работы
таймера/счетчика ОМЭВМ К1816ВЕ48.
Режим 1 устанавливается при значении разрядов М1=0 и М0=1. В
режиме 1 (рис.4.3.2) таймер/счетчик работает как 16-разрядное устройство.
Старший байт начального 16-разрядного значения заносится в регистр TH1
(TH0), а младший байт – в регистр TL1 (TL0). Разряд TF1 (TF0)
устанавливается в единицу после переполнения 16-разрядного регистра,
составленного из регистров TH и TL.
34
Режим 2 (рис.4.3.3) устанавливается при значении разрядов М1=1 и
М0=0. В режиме 2 таймер/счетчик является 8-разрядным и автоматически
перезагружается при каждом переполнении. В этом режиме начальное
значение загружается в регистр TH1 (TH0), которое переписывается в TL1
(TL0) при каждом переполнении. Перезагрузка не меняет содержимое TH1
(TH0).
Режим 3 устанавливается при значении разрядов М1=1 и М0=1. В
режиме 3 (рис.4.3.4) таймер/счетчик 1 и таймер/счетчик 0 работают поразному. В этом случае таймер/счетчик 0 работает как 8-разрядный таймер с
использованием регистра ТН0 и разряда и разряда переполнения TF1 и как 8разрядный счетчик с использованием регистра TL0 и разряда переполнения
TF0. Запуск таймера 0 производится при установке в единицу разряда TR1.
Запуск счетчика 0 производится сигналами TR0, GATE и
.
Если таймер/счетчик 0 настроен на режим 3, то таймер/счетчик 1 может
быть использован в любом из режимов, но без анализа разряда переполнения.
Запуск таймера/счетчика 1 в этом случае производится автоматически после
загрузки слова в регистр TMOD. Когда таймер/счетчик 0 работает в режиме
3, таймер/счетчик 1 может быть использован, например, как генератор,
задающий скорость передачи последовательного порта.
35
В качестве примера рассмотрим использование таймера 0 в режиме 2
для формирования импульса на выводе Р1.0 порта Р1.
Программа имеет следующий вид:
MOV TMOD, #02; установка режима 2 таймера/счетчика 0
MOV TH0, #0FCH; загрузка начального значения таймера
M2: SETB TCON . 4; запуск таймера
CLR P1 . 0; сброс в «0» разряда 0 порта P1
M1: JNB TCON . 5, M1; проверка переполнения регистра TH0
SETB P1 . 0; установка в «1» разряда 0 порта P1
CLR TCON . 5; сбор признака переполнения
JNB P1 . 1, M2; проверка состояния разряда 1 порта P1.
Первая команда программы загружает в регистр TMOD слово,
соответствующее режиму 2 таймера/счетчика (М1=1, М0=0). Разряд 2
регистра TMOD устанавливается в нуль, поскольку выбирается режим
таймера. Разряд 3 также устанавливается в нуль, чтобы осуществлять запуск
таймера программно, не используя управление по сигналу
.
Таймер/счетчик 1 не используется и поэтому остальные разряды регистра
ТМ0 не определяются и в данном примере установлены в нули.
Вторая команда устанавливает регистр ТН0 в состоянии 0FCH, и,
следовательно, при запуске таймера его переполнение наступит через 4
машинных цикла или через 4 мкс при длительности машинного цикла 1мкс.
Третья команда запускает таймер и с этого момента начинается отсчет
длительности интервала, заданной в регистре ТН0.
С помощью четвертой команды CLR P1 . 0 разряд P1 . 0 порта Р1
устанавливается в нуль. При условии, что предварительно этот разряд был
установлен в единицу. Например, после начальной установки при включении
питания системы или после подачи сигнала СБРОС (RST).
При выполнении пятой команды осуществляется программная
проверка признака переполнения TF0. Как только переполнение наступает,
то осуществляется переход к следующей команде SETB P1 . 0, которая
установит разряд Р1 . 0 порта Р1 в единицу. Таким образом, на выводе Р1 . 0
сформируется импульс низкого уровня длительностью в 4 машинных цикла.
Если потребуется повторить формирование импульса, то это может быть
выполнено, если использовать проверку состояния разряда Р1 . 1 порта Р1.
Если внешнее устройство (например, объект управления) сформирует на
указанном выводе порта Р1 сигнал низкого уровня, то с помощью команды
JNB P1 . 1, M2 можно осуществить возврат на метку М2 и формирование
импульса на выводе Р1 . 0 повторится. В этом случае необходимо сбрасывать
признак переполнения TF0 командой CLR TCON . 5. Если на выводе Р1 . 1
окажется сигнал высокого уровня, то осуществится выход из цикла.
Указанная программа имеет один недостаток, заключающийся в том,
что в течение всего времени формирования импульса необходимо проверять
состояние признака TF0 и процессор не может выполнять другие операции.
Этот недостаток может быть преодолен, если использовать выход из цикла
36
по прерыванию, возникающему при переполнении таймера. Организация
прерываний рассматривается в следующем параграфе.
Укажем, что установка разряда GATE в единицу регистра TMOD
позволяет организовать запуск таймера аппаратно по наличию высокого
уровня на входе INT порта P3. В этом случае с помощью таймера может быть
измерена длительность сигнала, поступающего на вход INT.
Рассмотрим случай формирования интервала времени более, чем
65535*ТМЦ , где ТМЦ длительность машинного цикла.Например, пусть
требуется сформировать интервал времени длительностью 1сек. Разобьѐм
интервал 1сек на 20 участков, длительностью 50000мкс. Полученная
длительность одного участка может быть сформирована с помощью таймера
в режиме 1. С этой целью необходимо в регистры ТН и ТL загрузить
начальное значение (65536-N), где N=50000/ ТМЦ . число импульсов, которые
необходимо подать на вход таймера, чтобы получить его переполнение через
50000мкс. Время машинного цикла равно
ТМЦ = 12/ Ft,
где Ft – частота внутреннего тактового генератора. Тогда для Ft=12Мгц
время машинного цикла равно ТМЦ =1мкс и N=50000 (для Ft=11,0592Мгц
N=46083). Чтобы получить время 1сек необходимо повторить загрузку
таймера 20 раз и каждое переполнение таймера запоминать в памяти
данных. Ниже приведѐн пример текста программы формирования интервала
времени 1сек.программы
repit equ 20
N equ 50000
N_sec equ 60
dseg at 30h
sec: ds 1
cseg
jmp begin
org 0040h
begin:
mov r2,#0
mov r3,#0
mov tmod,#00000001b ; режим 1 таймера 0
mov th0,#high(65536-N);загрузка старшего байта начального
;значения
mov tl0,#low(65536-N) );загрузка младшего байта начального
;значения
setb tr0
;запуск таймера
clock:
jnb tf0,clock
; программная обработка переполнения
clr tf0
mov th0,#high(65536-N)
mov tl0,#low(65536-N)
inc r2
;накопление двадцати повторений по 50000мкс
cjne r2,repit,end_clock
37
mov r2,#0
inc r3
;накопление секунд
cjne r3,#n_sec, end_clock
mov sec,r3
mov r3,#0
jmp exit
;выход через n секунд (в данном примере через
;минуту)
end_cloc: jmp clock
; обработка интервала времени, заданного числом n_sec
exit:
Лекция 7
4.4. Организация прерываний
В микроконтроллере могут быть обработаны сигналы от пяти
источников
прерываний:
два
по
переполнению
встроенных
таймеров/счетчиков, два от внешних источников прерывания и один по
состоянию последовательного порта. Прерывания от каждого из указанных
источников могут быть независимо друг от друга разрешены или запрещены,
причем каждому источнику может быть присвоен соответствующий
приоритет. Источник с более высоким приоритетом может прервать
программу обслуживания прерывания источника с более низким
приоритетом.
Для контроля состояния признаков прерываний служат два регистра
TCON (адрес 88Н) и SCON (адрес 98Н). Форматы слов, загружаемых в
регистры приведены в табл. 4.4.3. Управление системой прерывания
обеспечивается с помощью регистров IE (адрес А8Н) и IP (адрес 0В8Н).
Форматы слов, которые записываются в регистры, приведены в табл. 3.3.
Содержимое всех регистров может быть опрошено программно.
Обработка прерываний от внешних источников осуществляется при
поступлении сигналов на входы INT1 (INT0), причем формирование
признака прерывания IE1 (IE0) в регистре TCON производится либо по
уровню внешнего сигнала, либо по спадающему фронту внешнего сигнала.
Выбор уровня или фронта обеспечивается соответствующей установкой
разрядов IT1 (IT0) регистр TCON. Если разряды IT1 (IT0) установлены в
единицу, то обеспечивается формирование признака прерывания по
спадающему фронту сигнала, поступающего на вход порта Р3, иначе – по
уровню сигнала.
Таблица 4.4.3
Обозначение разрядов, необходимых для организации прерываний
Номер 7
6
5
4
3
2
1
разряда
Регистр
IE1
IT1
IE0
IT0
TCON
38
Регистр
SCON
Регистр
IE
Регистр IP
T1
R1
-
-
ES
ET1
EX1
ET0
EX0
-
-
PS
PT1
PX1
PT0
PX0
Разрешение обработки прерывания от внешних источников
осуществляется установкой в единицу разрядов EX1 (EX0) регистра IE. Если
прерывания разрешены, то обеспечивается переход к программе
обслуживания прерывания, адрес которой определяется в соответствии с
табл. 4.4.4.
Обработка прерываний по переполнению таймер/счетчик производится
в том случае, когда разряды TF1 (TF0) устанавливаются в единицу и
прерывания разрешены (разряды ET (ET0) регистра IE установлены в
единицу). Значения разрядов TF1 (TF0) автоматически сбрасываются в нуль
при выполнении первой команды подпрограммы обслуживания прерывания.
Формирование признаков RI и TI осуществляется по готовности
приемника или передатчика последовательного порта. Разрешение
прерывания от этого источника обеспечивается установкой в единицу
разряда ES регистра IE.
Таблица 4.4.4
Адрес подпрограммы обслуживания прерываний
Источник запроса прерывания Призна Позиция в Адрес
к
регистре подпрограммы
Внешний источник прерывания IE0
TCON.1
0003H
IE1
TCON.3
0013H
Внешний источник прерывания TF0
TCON.5
000BH
1
TF1
TCON.7
001BH
Встроенный таймер/счетчик 0
R1
SCON.0
0023H
Встроенный таймер/счетчик 1
TI
SCON.1
0023H
Приемник
последовательного
порта
Приемник параллельного порта
На рис. 4.4.1 показаны источники прерываний и их вектора.
Запрещение обработки Прерываний сразу от всех источников
выполняется с помощью установки в нуль разряда ЕА регистра IE. Установка
признака ЕА в единицу разрешает обработку прерываний от любого из пяти
источников в зависимости от состояния разрядов 0 – 4 регистра IE.
39
Приоритеты источников прерываний указывается с помощью установки в
соответствующее состояние разрядов 0 – 4 регистра IP (табл. 4.4.5).
Таблица 4.4.5
Обозначение
PX0
PT0
PX1
PT1
PS
Уровни приоритета прерываний
Позиция в
Источник запроса
регистре
прерываний
IP.0
Внешний источник 0
IP.1
Таймер/счетчик 0
IP.2
Внешний источник 1
IP.3
Таймер/счетчик 1
IP.4
Последовательный порт
IP.5 – IP.7
Резервные
Приоритет
0 (высший)
1
2
3
4 (низший)
Действие механизма приоритетов прерываний заключается в выборе
одного из источников при одновременном приходе нескольких запросов, а
также в принятии решения о прерывании текущей программы обслуживания
прерывания вновь поступившем запросом. Все источники прерываний
проверяются на наличие запроса во время фазы S5P2 каждого машинного
цикла (рис. 4.4.2). В течение следующего машинного цикла анализируются
биты регистра приоритетов IP и выполняется внутренний выбор (поллинг)
более приоритетного запроса.
40
Обработка прерываний начинается после выполнения текущей
команды прерываемой программы до конца и запоминание содержимого
счетчика команд (адреса возврата) в стеке. В счетчик команд загружается
один из адресов, указанных в табл. 4.4.4. В ячейке памяти по этому адресу
должна быть записана команда типа JMP безусловного перехода к
начальному адресу подпрограммы обслуживания прерываний. Подпрограмма
обслуживания прерываний должна начинаться командами записи в стек
слова состояния программы PSW, аккумулятора, указателя данных и всех
регистров, значение которых может быть изменено в процессе выполнения
подпрограммы, и заканчиваться командами POP восстановления из стека. В
конце подпрограммы обслуживания прерывания обязательно должна быть
записана команда RETI возврата из подпрограммы, после выполнения
которой в счетчик команд загружается из стека адрес возврата.
Минимальное время, необходимое на переход к обработчику
прерывания, составляет 38 тактов.
│
МЦ
│
МЦ │
МЦ
│
│
S5P2 S6│Поллинг │Переход к обработчику │
│ Запрос Т Т│ запросов│ (CALL или JMP) │
2Т
12Т
24Т
Максимальное время, необходимое на переход к обработчику
прерывания для случая завершения текущей команды умножения или
деления, составляет 86 тактов.
Следует учесть, что в случае обработки внешнего запроса прерывания
по спадающему фронту , бит IE в регистре TCON очистится после
выполнения первой команды обработчика. Если используется обработка
внешнего запроса прерывания по уровню, то его следует программно
сбросить до завершения программы обработчика, чтобы не было повторного
вызова обработчика.
Пример составления программы для обработки прерывания.
cseg
jmp begin
org 0003h
call prog1
reti
41
org 000bh
call prog2
reti
.
.
.
setb IE.x
;разрешение одного из источников прерываний
orl IE,#10000000b; разрешение прерываний
bgin:
Лекция 8
5. Организация последовательного ввода/вывода
5.1.Организация последовательного ввода-вывода в микроконтроллерах
семейства MCS – 51 (UART)
Порт последовательного ввода/вывода используется в асинхронном
режиме для связи со стандартными периферийными устройствами (дисплеем,
телетайпом, модемом и др.), а также для объединения нескольких
микроконтроллеров. Для организации последовательного ввода/вывода
используется регистр специального назначения SBUF (адрес 99Н), который
обеспечивает обмен данными между регистром SBUF и сдвигающими
регистрами приема и передачи информации. Запись байта в регистр SBUF
приводит к автоматической переписи байта в сдвигающий регистр
передатчика и последовательную передачу байта на внешнее устройство
через вывод Р3.1 порта Р3. Использование регистра SBUF при приеме
позволяет совмещать операцию чтения ранее принятого байта с приемом
очередного байта. Если к моменту окончания приема байта предыдущий байт
не был считан из регистра SBUF, то он будет потерян.
Программно могут быть заданы четыре режима работы
последовательного порта ввода/вывода. Для управления последовательным
обменом и задания режимов служит регистр SCON (адрес 98Н). В табл. 5.1.1
показан формат слова, которое необходимо загрузить в регистр SCON для
организации последовательного ввода/вывода.
Таблица 5.1.1
Формат слова SCON
Номер
7
6
5
4
3
2
1
разряда
Обозначение SM0
SM1
SM2
REN
TB8
RB8
T1
R1
разрядов
С помощью разрядов SM0 и SM1 устанавливаются режимы, которые имеют
наименование 0, 1, 2, или 3.
42
Режим 0 устанавливается при значении SM0=0 и SM1=0. Этот режим
используется для ввода и вывода последовательного 8-разрядного кода
данных через разряд Р3.0 (RXD) порта Р3. Через вывод Р3.1 (TXD) порта Р3
выдаются импульсы синхронизации, которые сопровождают каждый
переданный или принятый бит. Частота синхронизации равна 1/12 частоты
внутреннего генератора ОМЭВМ, т.е. за один машинный цикл
последовательный порт принимает или передает один бит данных.
Передача в режиме 0 начинается в следующем машинном цикле после
выполнения команды, по которой в регистр SBUF записывается байт данных.
Затем выполняется преобразование параллельного8-разрядного кода данных
в последовательный и на десятом машинном цикле, начиная с цикла записи
данных в регистр SBUF, признак Т1 регистра SCON устанавливается в
единицу.
Прием в режиме 0 обеспечивается при значении разрядов REN=1 и
RI=0 регистра SCON. После установки указанных разрядов со следующего
машинного цикла начинается формирование синхросигналов, которые
выдаются через вывод Р3.1 (TXD) порта Р3. В момент выдачи каждого
синхроимпульса вводится один бит данных и на десятом машинном цикле,
начиная с установки значений REN и RI в регистре SCON, признак RI
перебрасывается в состояние единицы.
Режим 0 обычно применяется для организации синхронного обмена
информацией. В этом случае используются внешние микросхемы для
реализации логических функций управления синхронным обменом.
43
Режим 1 устанавливается при значении разрядов SM0=0, SM1=1
(рис.5.1.1).
В этом режиме осуществляется асинхронная старт/стоповая передача через
вывод TXD или прием с вывода RXD десяти бит информации: стартового
бита, восьми разрядов данных (причем первым передается, принимается
младший разряд данных) стопового бита. Скорость передачи или приема
переменная и задается таймером 1, причем предварительно осуществляется
деление на 32 частоты внутреннего генератора.
Режим 2 (рис.5.1.2) устанавливается при значении разрядов SM0=1,
SM1=0. В этом режиме осуществляется асинхронная старт/стоповая передача
через вывод TXD или прием с вывода RXD одиннадцати бит информации.
Отличие от режима 1 состоит в том, что к восьми разрядам данных
добавляется разряд контроля четности. Скорость передачи/приема составляет
1/32 и 1/64 частоты внутреннего генератора или – в нуль для скорости 1/64
частоты внутреннего генератора.
Режим 3 устанавливается при значении разрядов SM0=1, SM1=1. Этот
режим полностью совпадает с режимом 2 за исключением правила выбора
скорости передачи/приема, которая устанавливается так же, как и в режиме 1.
44
Рассмотрим пример программирования таймера 1 для задания скорости
передачи 2400 бод в режиме 1 или 3 при тактовой частоте внутреннего
генератора 12МГц. Если fT=12МГц, то таймер работает с частотой счета 1
МГц и для получения скорости 2400 необходимо частоту 1 МГц разделить на
величину 32∙2400=76800. В этом случае для таймера получим коэффициент
деления, равный 13 (точнее 13,02). Поскольку таймер обнуляется при
переполнении, то для обеспечения деления на 13 (0DH) необходимо найти
величину начального значения таймера 1. Для его работы выбирается режим
2 перезагружаемого таймера. В этом случае в регистр ТН1 загружается
значение
F3H.
Программа
выбора
скорости
последовательной
передачи/приема имеет следующий вид:
MOV TCON,#0010xxxB; выбор режима 2 таймера 1, значения разрядов ;
;таймера/счетчика 0 не определены
MOV TH1, #0F3H
; загрузка в ТН1 коэффициента деления
SETB TR1
; запуск таймера 1
С помощью разряда SM2 регистра SCON может быть заблокирован прием
байта данных, в котором девятый бит имеет значение, равное нулю.
Содержимое разряда SM2 устанавливается/сбрасывается программно.
Разряд REN служит для управления приемом данных. Значение разряда REN
устанавливается/сбрасывается программно и разрешает (REN=1) или
запрещает (REN=0) последовательный прием данных.
45
Разряд ТВ8 служит для заполнения признака четности при передаче, а разряд
RB8 – при приеме. Добавление разряда четности при передаче может быть
осуществлено с помощью выполнения следующей последовательности
команд:
ADD A, 0
; содержимое А не меняется, но формируется признак Р
MOV C, P
; признак Р пересылается в разряд переноса С
MOV TB8, C
; признак С помещается в разряд 9 буфера передачи
MOV SBUF, A
; загрузка буфера передачи байтом данных и начало
;последовательной передачи.
Разряд Т1 используется как признак готовности передатчика
передавать следующий байт данных. Признак Т1 устанавливается в единицу
после окончания передачи байта данных и может быть опрошен программно
или служить запросом на прерывание. В любом случае бит Т1 сбрасывается
программно.
Для иллюстрации составления программы последовательной передачи
и приема данных рассмотрим два примера.
Программа передачи массива mass имеет следующий вид:
xseg
MASS: ds 128
MASS2: ds 128
ORL P3,#02
; установка вывода TXD в «1»
MOV SCON, #0100xx1xB ; режим 1, разряд Т1 установлен в «1»
MOV TMOD, #0010xxxxB ; установка таймера 1 в режим 2
MOV TH1, #0F3H
; установка скорости передачи 2400 бод
SETB TR1
; запуск таймера
MOV DPTR,#MASS
; загрузка в DPTR адреса массива MASS
MOV R3,#128
; загрузка в R3 числа пересылаемых байтов
; (например 128 байтов)
M1: MOVX A, a DPTR ; загрузка в аккумулятор байта из массива
;MАSS
M2: JNB T1, M2
;проверка состояния готовности передатчика
CLR TI
; сброс TI
MOV SBUF,A
; передача байта данных
INC DPTR
; инкремент DPTR
DJNZ R3,M1
; возврат к передаче пока R3 не обнулится
Программа приема данных и запись его в массив MASS2 имеет следующий
вид:
ORL P3,#01
MOV SCON,#50H
MOV TMOD,#20H
MOV TH1,#0F3H
SETB TR1
MOV DPTR, #MASS2
; установка вывода RXD в «1»
; установка режима 1 для последовательного ввода
; установка таймера 1 в режим 2
; установка скорости приема 2400 бод
; запуск таймера
; загрузка в DPTR адреса массива MASS2
46
MOV R3,#128
; загрузка в Р3 число пересылаемых байтов
M3: JNB RI, M3
; проверка готовности приемника
CLR RI
; сброс признака готовности
MOV A,SBUF
; пересылка в А содержимого буфера приемника
MOVX a DPTR, A ; пересылка содержимого А в массив В
INC DPTR
; инкремент DPTR
DJNZ R3, M3
; возврат к приему пока R3 не обнулится
Работа программ можжет быть проверена для двух микроконтроллеров
по следующей схеме (рис. 5.1.3).
TxD
RxD
RxD
TxD
MК1
MК2
Рис. 5.1.3. Последовательная передача и приѐм данных
Для выполнения указанных программ необходимо сначала запустить
программу приѐма микроконтроллера MК2, который переходит в состояние
ожидания, поскольку разряд RI регистра SCON установлен в нуль, только
после того, как из MК1 поступит байт данных со стартовым битом в начале,
разряд RI установится в единицу и осуществится преобразование
последовательного кода в параллельный.
5.1.2. Последовательный интерфейс RS232
Используя микроконтроллеры семейства MCS51, легко реализовать
интерфейс RS232 - популярный протокол, применяемый для связи
компьютеров с модемами и другими периферийными устройствами. Могут
быть использованы режимы синхронной и асинхронной передачи данных,
определяемые стандартом EIA RS-232-C и рекомендациями V.24 CCITT.
Изначально создавался для связи компьютера с терминалом. В настоящее
время используется в самых различных применениях. Интерфейс RS-232-C
соединяет два устройства. Интерфейс RS-232C предназначен для соединения
аппаратуры, передающей или принимающей данные (ООД – оконечное
оборудование данных или АПД – аппаратура передачи данных, иначе DTE –
47
Data Terminal Equipment). К АПД можно отнести компьютер и другое
периферийное оборудование. Тогда связь между ними может быть
обозначена как «DTE – интерфейс RS-232C – DTE». Если требуется
соединить устройства АПД через линию связи, то АПД подключаются к
оконечной аппаратуре каналов данных (АКД, иначе DCE – Data
Communication Equipment) В качестве АКД может быть использован модем.
В этом случае связь может быть обозначена как «DTE – интерфейс RS-232C –
DСE – линия связи – DСE– интерфейс RS-232C – DTE».
Стандарт интерфейса RS-232C описывает управляющие сигналы,
пересылку данных, электрическое соединение и типы разъѐмов. В
персональном компьютере (РС) интерфейс RS-232C реализован с помощью
COM-порта. На входе приѐмника логической единице соответствует сигнал
напряжением в диапазоне –12В…..–3В, логическому нолю – +3В…+12В.
Для формирования указанных сигналов передатчиком и преобразования их к
уровням ТТЛ в приѐмнике выпускаются специальные микросхемы
(например, ADM202, MAX202). На аппаратуре АПД (в том числе на выходах
COM-порта) принято устанавливать вилки (male – папа), а на аппаратуре
АКД (модемах) – розетки(female – мама ). Разъѐмы имеют 25 или 9
контактов. Все 9 сигналов интерфейса задействуются только при соединении
компьютера с модемом.
На рис.5.1.4 показано соединение типа DTE – DТE с помощью
минимального варианта нуль-модемного кабеля. В качестве устройства DTE
может быть подключена микропроцессорная система, построенная на основе
микроконтроллера.
Назначение выводов разъема СОМ следующие:
─ TD - данные, передаваемые компьютером в последовательном коде
(передатчик);
─ RD - данные, принимаемые компьютером в последовательном коде
(приемник);
─ DTR - готовность выходных данных;
─ DSR - готовность данных. Используется для задания режима модема;
─ RTS - сигнал запроса передачи. Активен во все время передачи;
─ CTS - сигнал сброса (очистки) для передачи. Активен во все время
передачи; ─DCD - обнаружение несущей данных (детектирование
принимаемого сигнала);
─ RI - индикатор вызова. Приеме модемом сигнала вызова по телефонной
сети;
─ SG - сигнальное заземление, нулевой провод.
48
Преобразование параллельного кода в последовательный для передачи
данных и обратное преобразование при приеме осуществляется с помощью
Обозначе- № контакта
ние вывода разъем разъем
9
25
TD
3
2
RD
2
3
DTR
4
20
DSR
6
6
RTS
7
4
CTS
8
5
DCD
1
8
RI
9
22
SG
5
7
MAX 202
TхD
RхD
Микроконтроллер
Рис. 5.1.4. Соединение типа DTE – DTE
устройства универсального синхронного асинхронного приемника
передатчика УСАПП (UART) Для реализации устройства UART выпускаются
специализированные микросхемы. В микроконтроллерах почти всегда
присутствует
последовательный
универсальный
асинхронный
приемопередатчик (UART). Его выход и вход можно соединить с
аналогичным входом и выходом другого микроконтроллера или
персонального компьютера и передавать данные (соблюдая согласование
сигналов по уровню и полярности).
Длина кабеля влияет на максимальную скорость передачи информации.
Более длинный кабель имеет большую емкость и соответственно для
обеспечения надежной передачи более низкую скорость. Большая емкость
приводит к тому, что изменение напряжения одного сигнального провода
может передаться на другой смежный сигнальный провод. Максимальным
расстоянием обычно считается равным 15 м, но это не установлено в
стандарте. К основным недостаткам интерфейса RS232 относятся низкая
скорость передачи данных и низкая помехоустойчивость сигнала и
соединение двух устройств (двухточечное соединение).
Для улучшения характеристик последовательного интерфейса RS232
существует ряд родственных стандартов: RS423, RS422, RS485. Лучшими
характеристиками обладает интерфейс RS485, в котором для передачи
сигнала используется дифференциальный метод.
Дифференциальный метод передачи обладает меньшей чувствительностью
к общим помехам, чем простая однопроводная схема. Дифференциальный
метод передачи использует двухпроводную схему соединения с
формированием перепадов инверсией тока или напряжения в отличие от
однопроводной простой схемы передачи информации. Достоинством
дифференциального метода является то, что шумы наводящиеся на
двухпроводной линии симметричны и не нарушают дифференциального
49
сигнала к которому чувствителен приѐмник. Дифференциальный метод так
же обладает меньшей чувствительностью к искажениям сигнала от внешних
магнитных полей. Для формирования дифференциального сигнала для
последующего передачи его в двухпроводную линию многие фирмы мира
выпускают микросхемы интерфейса RS485. Лидером в разработке и выпуске
новых микросхем интерфейса RS485 является известная фирма MAXIM
Интерфейс RS485 многоточечный и наиболее часто используется при
создании современных локальных сетей различного назначения в
промышленных изделиях. Основными преимуществами интерфейса
являются использование всего трех проводов (третий, общий, не всегда
является обязательным) и повышенную нагрузочную способность. Если
раннее большинство микросхем было насчитано на работу с 32 станциями, то
современные модели обеспечивают нормальное функционирование до 256
станций.
В настоящее время выпускаются микросхемы с высокой предельной
скоростью передачи. Это позволяет создавать высокоскоростные сети, и
снижает количество ошибок в сети за счет улучшения формы передаваемого
сигнала. На рис.5.1.5 показана структура сети с использованием микросхемы
MAX3443Е, назначение выводов которой следующие:
─ RO — Receiver Output — Выход приемника. Если на линии А сигнал
больше сигнала на линии B на 200mV, то RO=1, иначе RO=0;
─ RE — Receiver Output Enable — Разрешение выхода приемника при RE=0.
При RE=1 выход RO находится в высокоимпедансном состоянии;
─ DE — Driver Output Enable — Разрешение выходов передатчика. Если
DE=1 выходы активны, в противном случае они находятся в
высокоимпедансном состоянии;
─ DI — Driver Input — Вход передатчика;
─ GND — Ground — Общий провод питания;
─A — Noninverting Receiver Input and Driver Output — Линия для
неинвертирующего входа/выхода;
─ B — Inverting Receiver Input and Driver Output — Линия для
инвертирующего входа/выхода.
Рис. 5.1.5. Структура сети на базе интерфейса RS485
50
Развитие дифференциального метода получил в способе передачи
информации дифференциальными сигналами малых напряжений LVDS (Low
Voltage Differential Signaling). Это направление передачи данных использует
очень малые перепады дифференциального напряжения на двух линиях
печатной платы или сбалансированного кабеля со скоростью до сотен и даже
нескольких тысяч мегабит в секунду.
Лекция 9
5.2..Организация последовательных интерфейсов I2C, SPI
5.2.1. Организация последовательного интерфейса I2C
Разработанная фирмой Philips шина I2C (Inter-Integrated Circuit), - это
двунаправленная асинхронная шина с последовательной передачей данных и
возможностью адресации до 128 устройств. Физически шина I2C содержит
две сигнальные линии, одна из которых (SCL) предназначена для передачи
тактового сигнала, вторая (SDA) для обмена данными. Для управления
линиями применяются выходные каскады с открытым коллектором, поэтому
линии шины должны быть подтянуты к источнику питания +5В через
резисторы сопротивлением 1─10 кОм, в зависимости от физической длины
линий и скорости передачи данных. Длина соединительных линий в
стандартном режиме может достигать 2-х метров, скорость передачи до 400
кбит/с. Суммарная емкость линий должна быть не больше 400 пФ, входная
емкость на каждую ИС должна быть в пределах 5...10 пФ.
Все абоненты шины делятся на два типа устройств: ведущее (Master) и
ведомое (Slave) устройства. Тактовый сигнал SCL генерирует только ведущее
устройство. Оно может самостоятельно выходить на шину и обращаться по
адресу к любому ведомому устройству При обнаружении собственного
адреса и, распознав его, ведомые устройства выполняют предписываемую
операцию. Кроме того, возможен так называемый "Multi Master" – режим,
когда на шине установлено несколько ведущих абонентов, которые либо
совместно разделяют общие ведомые устройства, либо попеременно
являются то ведущим устройством, то ведомым. Режим "Multi Master"
требует арбитража и распознавания конфликтов. Естественно, он сложнее
для создания программного обеспечения и, как следствие, реже используется
в реальных изделиях.
В начальный момент времени (в режиме ожидания) обе линии SCL и SDA
находятся в состоянии логической единицы (рис.5.2.1). Затем формируется
старт условие, с которого начинается передача пакета информации,
состоящего из одгого или нескольких байтов. Передача пакета заканчивается
формированием стоп условия. Старт условие образуется при отрицательном
перепаде линии SDA, когда линия SCL находится в единичном состоянии, и
наоборот, стоп условие образуется при положительном перепаде линии SDA
при единичном состоянии линии SCL. Изменение бита данных на линии SDA
51
производится при нулевом состоянии линии SCL. Прежде чем передать
следующий бит ведущее устройства всегда должно проверять состояние
линии SCL, если ведомое устройство установит линию SCL в низкий уровень,
то ведущее устройство должно дождаться момента, когда на линии SCL
установится высокий уровень.
Рис. 5.2.1. Формирование старт и стоп условий на шине I2C
Обмен информацией осуществляется байтами. Каждый байт передается в
течении 9 тактовых периодов сигнала синхронизации на линии SCL. В
девятом такте устройство, передавшее байт (8 периодов сигнала SCL )
должно по линии SDA получить подтверждение ACK – низкий уровень на
линии SDA (рис.5.2.2).
Рис. 5.2.2. Прием байта и формирование подтверждения АСК
Если в девятом периоде на линии SDA установился высокий уровень, то
это свидетельствует о возникшей ошибке в приемнике (отсутствие
подтверждения NAK). Следует отметить, что передатчиком может быть как
ведущее, так и ведомое устройства и, следовательно, получатель информации
всегда должен формировать подтверждение ACK.
Протокол передачи данных покажем на примере использования
микросхемы памяти EEPROM AT24С16 фирмы Atmel с произвольным
доступом, емкостью 2к х 8. В режиме чтения обмен может быть осуществлен
со скорость до 400 кбит/с. В режиме записи после каждых 16 байтов
требуется время 10 мс для записи байтов во внутренние ячейки памяти
52
микросхемы. Если от микросхемы во время передачи данных не поступает
подтверждение ACK, то ведущее устройства должно подождать, пока данные
не запишутся в память. Память микросхемы разбита на восемь блоков по 256
байтов. Микросхеме присвоен 7-разрядный адрес, который состоит из 4разрядной последовательности 1010 и 3х-разрядного номера блока.
Чтобы начать запись данных в микросхему памяти AT24С16 (рис.5.2.3)
ведущее устройство должно в линию SDA выдать START условие, за которым
следует семиразрядный адрес ведомого устройства (DEVICE ADDRES).
Рис. 5.2.3. Запись данных в микросхему памяти AT24С16
Восьмой бит в байте адреса предназначен для указания последующей
операции записи или чтения. Низкий уровень ─запись, высокий уровень
─чтение. Далее в нашем примере следует запись данных и, следовательно,
устанавливается низкий уровень. В расширенной версии протокола I2C
адрес может быть 10-разрядным и, следовательно, состоять из двух
байтов. За байтом адреса следует адрес ячейки памяти внутри блока. Далее
передаются байты данных, предназначенных для хранения в ячейках
памяти, адрес которых после записи каждого байта увеличивается на
единицу. После приема каждого байта микросхема AT24С16 должна
ответить подтверждением ACK.
5.2.2. Последовательный периферийный интерфейс SPI
Последовательный периферийный интерфейс SPI (Serial Peripheral
Interface) обеспечивает высокоскоростной синхронный обмен данными
между микроконтроллерами и периферийными устройствами или между
несколькими
микроконтроллерами
(до
1,5
Мбит/с).
Один
из
микроконтроллеров или устройств должен быть ведущим (Master) другие
ведомыми (Slave). Для обеспечения обмена данными между устройствами
используются четыре линии (рис.5.2.4).
53
Тактовые
сигналы
по
MCS51
(MASTER)
MOSI
MISO
SCK
SS
линии
SCK
всегда
генерирует
ведущий
MCS51
(SLAVE)
MISO
MOSI
SCK
SS
Рис. 5.2.4. Соединение устройств по интерфейсу SPI
микроконтроллер или ведущее устройство MOSI (Master clock output, Slave
clock input). Данные от ведущего передаются по линии MOSI (Master data
output, Slave input), прием данных осуществляется по линии MISO (Master
data input, Slave output). Линия SS используется для ведомого устройства.
Если ведомым устройством является микроконтроллер, то его вывод, к
которому подключена линия SS, должен быть настроен как вход.
На рис.5.2.5 показана временная диаграмма обмена данными по
интерфейсу SPI для случая передачи байта (восемь циклов сигнала SCK)
старшими битами MSB (Most Significant Bit) вперед. В последнем восьмом
цикле передается младший бит LSB (Least Significant Bit). Полярность CPOL
сигналов SCK определяется параметрами конкретного ведомого устройства.
Рис. 5.2.5. Временная диаграмма обмена данными по интерфейсу SPI
В настоящее время во многих микроконтроллерах формирование
тактовых сигналов SCK, преобразование байта данных в последовательный
код MOSI при передачи и преобразование принятого последовательного кода
MISO в параллельный осуществляется аппаратным способом. Для
обеспечения указанных преобразований в микроконтроллерах имеются
регистры режимов и управления и регистры-буферы данных.
Например, фирма Atmel выпускает микроконтроллеры, в которых для
установки режимов и управления используется регистр SPCR (SPI Control
Register) и регистр данных SPDR (SPI Data Register).
54
Лекция 10
5.3. Организация последовательного интерфейса CAN
Внедрение микропроцессоров и микроконтроллеров в самые различные
распределенные системы управления потребовало построение сетей,
объединяющих многообразные электронные управляющие устройства. С
этой целью Робертом Бошем (Robert Bosch) в 80-х годах для автомобильной
промышленности была разработана сеть и соответствующий ей протокол
CAN (Controller Area Network). Сегодня большинство европейских
автомобильных гигантов (например, Audi, BMW, Renault, Saab, Volvo,
Volkswagen) используют сеть CAN в системах управления двигателем,
безопасности и обеспечения комфорта. В настоящее время протокол CAN
широко применяется в промышленности, энергетике и на транспорте. С его
помощью могут быть построены как высокоскоростные сети, так и системы с
дешевыми мультиплексными каналами.
Обмен информацией в сети CAN осуществляется по последовательной
шине дифференциальными сигналами по витой паре проводов (рис.5.3.1).
При скорости передачи 1 Мбит/с длина шины может достигать 30 м. При
меньших скоростях ее можно увеличить до километра. Если требуется
большая длина, то ставятся мосты или повторители. Теоретически число
подсоединяемых к шине устройств не ограничено, практически — до 64-х. В
узлах для поддержания протокола CAN могут быть использованы как
микроконтроллеры с встроенным
интерфейсом, так и внешние по
отношению к узлу контроллеры CAN.
55
Рис. 5.3.1 Соединение устройств по интерфейсу CAN
Если базироваться на семиуровневой модели сети OSI, то CAN
описывает передачу данных между узлами на двух нижних уровнях —
физическом и канальном. Битовый поток кодируется по методу NRZI (без
возвращения к нулю), что позволяет работать на меньших частотах, чем,
например, при других видах кодирования. Для повышения устойчивости
синхронизации используется вставка нулевого бита в случае следования
подряд шести единиц (Bit Stuffing).
Для протокола CAN существуют две версии: версия А задает 11-битную
идентификацию сообщений (т. е. в системе может быть 2048 сообщений),
версия B — 29-битную (536 млн. сообщений). Отметим, что версия В, часто
именуемая FullCAN, все больше вытесняет версию А, которую называют
также BasicCAN. стандартизована ISO (ISO 11898) и SAE (Society of
Automotive Engineers).
На рис. 5.3.2 приведен формат кадра для версии В (CAN 2.0В). Начало
S
O ARBITRATION
F
1
Версия А – 12
Версия В – 32
CTRL
6
DATA
0 – 64
CRC
15
d
e
l
1
A
C
K
1
d
e
l
1
EOF
7
≥3
Рис. 5.3.2. Формат кадра протокола CAN
кадра SOF отмечает начало кадра данных или кадра удаленного запроса
данных. Это поле состоит из одного разряда, равного нолю.
Поле арбитража ARBITRATION (Arbitration field) для версии А состоит из
11 разрядного идентификатора ID и RTR-бита. Для версии В идентификатор
ID
56
состоит из 29 разрядов. Коме того для версии В в поле арбитража добавлены
два бита SRR и IDE. Для различения версий служит бит IDE. Бит SRR
указывает на то, что за 11разрядами идентификатора будут следовать 18
разрядов его расширения. Назначение бита RTR для обеих версий одинаково.
Он определяет тип кадра (кадр данных или кадр удалѐнного запроса).
Поле управления CTRL (Control field) состоит из двух резервных битов и 4х разрядов DLC (Data length code), которые определяют число байтов в поле
DATA. В версии А один из резервных битов используется как бит IDE.
Пятнадцать разрядов поля CRC формируются циклическим кодом и служат
для обнаружения ошибок, возникающих при передачи кадра. Вычисление
контрольных разрядов поля CRC осуществляется с помощью полинома
Х15+Х14+Х10+Х8+Х7+Х4+Х3+1.
За полем CRC следует однобитный разделитель del. Узлы, вычислившие
последовательность CRC, совпадающую с переданной (ошибки отсутствуют)
сообщают об этом передатчику путем замены в поле подтверждения ACK
бита с единицы на ноль. Общая вероятность необнаруженной ошибки Рош
равна 4.7x10-11.
За полем ACK следует разделитель del.
Поле конца кадра EOF (End of frame) состоит из семи единиц. Между
кадрами имеется промежуток IFS (Inter Frame Spacing), состоящий из не
менее трех битов.
Протокол CAN использует оригинальную систему адресации сообщений.
Каждое сообщение снабжается идентификатором, который определяет
назначение передаваемых данных, но не адрес приемника. Любой приемник
может реагировать как на один идентификатор, так и на несколько. На один
идентификатор могут реагировать несколько приемников.
Лекция 11
5.4. Последовательный однопроводный интерфейс One Wire
Фирмой Dallas Semiconductor разработан последовательный интерфейс,
позволяющий обеспечивать обмен данными по одной линии (вторая линия –
общий провод). Этот интерфейс известен под названием MicroLAN. В
настоящее время устройства обменивающиеся данными по однопроводной
линии (шине) получили название 1-Wire интерфейс. К однопроводной шине
могут быть подключены несколько устройств, но только одно из них
является ведущим, а все остальные ведомыми. Обмен данными
осуществляется в полудуплексном режиме. Допускается питание устройств
по линии данных. В этом случае ведомые устройства к ведущему
подключаются по двум проводам: линия данных и земля.
Цикл обмена данными начинается с формирования ведущим
устройством
57
состояния сброса (рис. 5.4.1). Оно заключается в передачи сигнала низкого
15 – 60
Ждать не более 480 мкс
Бит ECF
регистра
CMOD
выход МПС (порт МПС активен)
Регистр IE
выход датчика DS1820 активен
EС
EА
&
& и подтверждения
Рис. 5.4.1. Состояние сброса
1
Регистр
CCON
уровня длительностью не мене 480мкс
CF CR и ожидания подтверждения от
ведомого устройства .
CCF4
В ответ каждое устройство,
подключенное к линии данных,
CCF3
CCF2
производит сброс своих внутренних цепей и через 15-60 мкс выдает низкий
CCF1
уровень сигнала подтверждения (presence
pulse) в течение 60-240 мкс.
CCF0
Обнаружив этот импульс, ведущий узел
передает 8-битный код из списка
Бит
команд выбираемого устройства. Все переполнен
устройства, адрес которых не совпал с
переданным, логически отключаются
от шины. Выбранному устройству
ия CF
передается код операции обмена данными.
общегоПо окончании операции ведущий
узел генерирует новый импульс сбросатаймера
и начинается новый цикл обмена.
&
На рис. 5.4.2 приведена временная диаграмма записи/чтения одного
Рис.
10.
бита в процессе обмена данными между
ведущим
и ведомым устройствами.
Формиров
Передача данных в ведомое устройство начинается с установки
ание уровня длительностью не менее
ведущим устройством на линии низкого
15мкс, затем устанавливается уровеньпрерыван
передаваемого бита. Приѐм данных из
ия
РСА
ведомого устройства также начинается сотустановки
ведущим устройством в
Биты
течении 15мкс на линии низкого уровня, а затем ведущее устройство
разрешения
устанавливает на линии высокий уровень
и не более чем через 15мкс
прерывания
ведомое устройство должно выдать уровень
ECCFn нуля или единицы.
&
&
&
&
&
модуль 4
модуль 3
модуль 2
модуль 1
60 – 240 мкс
58
60 – 120 мкс
15мкс
не
менее
1 мкс
Зона записи
/чтения 0
60 – 120 мкс
Зона чтения
15мк
с
Рис. 5.4.2. Запись/чтение бита в термодатчик DS1820
Рассмотрим обмен данными на примере применения датчика DS1820 для
измерения температуры.
Датчик температуры формирует два байта, в которых записан 9разрядный двоичный код из диапазона –55оС - +125оС с дискретностью 0,5оС.
отрицательные температуры кодируются дополнительным кодом.
Протокол обмена данными между МПС и датчиком DS1820
может быть задан последовательностью команд, указанной в табл.5.4.1.
Таблица 5.4.1
Последовательность команд для обмена данными между МПС и датчиком
Состояние МПС
Команда/данные
Коментарий
Передача
Состояние сброса
Прием
Состояние подтверждения
Передача
Команда ССН
Обращение к памяти данных
Передача
Команда 44Н
Запуск датчика
Прием данных
Прием одногобайта
Проверка готовности, прием
бит за битом пока все 8 не
будут равны 1
Передача
Состояние сброса
Прием
Состояние подтверждения
Передача
Команда ССН
Обращение к памяти данных
Передача
Команда ВЕН
Чтение памяти данных
Прием
Прием 2- 9 байтов данных
2 байта – данные измерений.
9 – байтов включают
содержимое регистров ТН и
TL, резерв и CRC
Передача
Состояние сброса
Прием
Состояние подтверждения
59
5.5. Универсальная последовательная шина
Универсальная последовательная шина USB была разработана
сравнительно недавно — в 1996 г. Она обеспечила разработчикам
относительно дешевый, высокоскоростной (до 12 и до 400 Мбит/с для
стандарта 2.0) и удобный в использовании интерфейс. Удобство применения
шины USB определяется следующими характеристиками:
1. Простая реализация расширения периферии персонального компьютера.
2. Высокая скорость от 1,5 Мбит/с до 480 Мбит/с (USB 2.0).
3. Простота кабельных подключений и дешевизна реализации.
4. Поддержка одновременной работы со многими устройствами (127 на
шине).
5. Надѐжность. (Обнаружение ошибок, идентификация неисправных и
неправильно подключены устройств).
6. Возможность простого обновления.
Хост – контроллер
Корневой хаб
Функция
Хаб
Функция
Функция
Хаб
Функция
Функция
Кт0
Кт1
КтN
Устройство (микроконтроллер)
Рис. 5.5.1. Состав шины USB
На рис. 5.5.1 показан состав шины USB в случае соединения персонального
компьютера (ПК) с периферийными устройствами.
Периферийные устройства (функции) подключаются к хостконтроллеру, причем соединение может быть по топологии многоярусной
60
звезды, но вершиной звезды должен быть корневой хаб. На шине USB
допускается только один хост.
Точкой подключения устройства является порт. Для обеспечения
подключения нескольких устройств к шине служит хаб (концентратор). Хаб
распознает подключение и отключение устройств к портам и может
управлять подачей питания на устройства.
Функция – периферийное устройство (device). В состав функции .
входят конечные точки, каждая из которых должна быть настроена на приѐм
или передачу данных. Любое USB устройство имеет конечную точку с
нулевым номером Кт0 (Endpoint Zero). Нулевая конечная точка
предназначена для инициализации и конфигурирования устройства и
доступна хосту сразу после подключения к шине USB.
Шина USB может быть построена и без ПК. В этом случае устройства
получили название OTG (устройства – On-The-Go). Например, подключение
фотоаппарата к принтеру.
Любое устройство должно поддерживать:
1. отзыв на присвоенный ему уникальный адрес, причѐм при каждом новом
подключении адрес может быть присвоен другой.
2. конфигурирование.
3. настройку на тип передачи и приѐма данных.
4. управление энергопотреблением.
5. приостановку (снижение тока потребления).
6. удалѐнное прбуждениеэ
Максимальная скорость передачи данных определена номером версии:
– High Speed (HS) – 480 Mbits/s (USB 2.0);
– Full Speed (FS) – 12 Mbits/s (USB 1.1);
– Low Speed (LS) – 1,5 Mbits/s (USB 1.0).
Для передачи данных по шине USB используется дифференциальный
метод передачи сигналов (рис. 5.5.2). Последовательность двоичных
разрядов, передаваемая по линии дифференциальными сигналами,
кодируется кодом NRZI. Хост или хаб определяет тип устройства по тому,
как подключен к линиям D+ и D- подтягивающий резистор. Если через
подтягивающий резистор напряжение 3.3 В подключено к D+, то
определяется высокоскоростное устройство, если напряжение 3.3 В
подключено к D-, то – низкоскоростное устройство.
Передача данных осуществляется кадрами и асинхронно. Кадр USB или
фрейм (рис.5.5.3) передаѐтся за фиксированный интервал времени (1мс ).
Логическая связь между хост-контроллером и конечной точкой образует
логический канал. Его пропускная способность определяется скоростью.
Каждый кадр начинается с посылки маркера SOF (Start Of Frame), который
является синхронизирующим сигналом для всех устройств, включая хабы. В
конце каждого кадра выделяется интервал времени EOF (End Of Frame), на
время которого хабы запрещают передачу по направлению к контроллеру. В
режиме HS маркеры SOF передаются в начале каждого микрокадра (период
125±0,0625 мкс).
61
Порт
хоста
или
хаба
D+
D+
D-
D-
Низкоскоростное
устройство (LS)
+3.3 В
а) подключение низкоскоростного устройства
Порт
хоста
или
хаба
D+
D+
D-
D-
Высокоскоростное
устройство (FS)
+3.3 В
б) подключение высокоскоростного устройства
Рис.5.5.2. Подключение к порту хаба:
а) низкоскоростного устройства, б) высокоскоростного устройства
SOF Данные кадра EOF
SOF Данные кадра EOF
Транзакция
(Обмен межу хостом
и устройством)
Транзакция
(Обмен межу хостом
и устройством)
Маркер ─ пакет
PID
Пакеты данных
Данные
SOF Данные кадра EOF
Транзакция
(Обмен межу хостом
и устройством)
Пакет подтверждения
CRC
Рис. 5.5.3. Структура кадра шины USB
Хост планирует загрузку кадров так, чтобы в них всегда находилось
место для обмена (транзакций) информацией, предназначенной для
управления и прерываний. Свободное время кадров может заполняться
передачами массивов (bulk transfers). В каждом (микро)кадре может быть
62
выполнено несколько транзакций, их допустимое число зависит от длины
поля данных в каждой из них. Транзакция состоит из
пакетов, причем сначала передается маркер – пакет, в котором указывается
идентификатор PID (назначение) пакета и контроль ошибок CRC с
использованием циклического кода.
Протокол USB, допускает четыре базовых типа передачи данных:
─ управляющие посылки (control transfers) используются для
конфигурирования устройств во время их подключения и для управления
устройствами в процессе работы. Протокол обеспечивает гарантированную
доставку данных.Длина 64 байта для FS и 8 байтов для LS. Гарантированно
выделение 10% внутри кадра;
─ передачи массивов данных (bulk data transfers) - это передачи без какихлибо обязательств по задержке доставки и скорости передачи. Передачи
массивов могут занимать весь кадр, свободный от передач других типов.
Приоритет этих передач самый низкий, они могут приостанавливаться при
большой загрузке шины. Доставка гарантированная - при случайной ошибке
выполняется повтор. Передачи массивов уместны для обмена данными с
принтерами, сканерами, устройствами хранения и т. п. Длина поля данных
8,16,32,64 байтов.
─ прерывания (interrupt) ─ короткие передачи, которые имеют случайный
характер и должны обслуживаться не медленнее, чем того требует
устройство. Прерывания используются, например, при вводе символов с
клавиатуры или для передачи сообщения о перемещении мыши.
─ изохронные передачи (isochronous transfers) - непрерывные передачи в
реальном времени, занимающие предварительно согласованную часть кадра
с гарантированным временем задержки доставки. В случае обнаружения
ошибки изохронные данные не повторяются. Пакеты с ошибками
игнорируются.
Все обмены (транзакции) с устройствами USB состоят из двух-трех
пакетов (рис 5.5.4). Каждая транзакция начинается по инициативе хост –
ХОСТ
OUT/SETUP
УСТРОЙСТВО
DATA
ACK
IN
DATA
Обработка маркера,
Прием и передача данных
данных, формирование
подтверждения,
ACK
Рис. 5.5.4. Обмен транзакциями между хостом и устройством
контроллера, который посылает пакет-маркер (token packet). Он описывает
тип и направление передачи, адрес устройства USB и номер конечной точки.
В каждой транзакции возможен обмен только между адресуемым
63
устройством (его конечной точкой) и хостом. Адресуемое маркером
устройство распознает свой адрес и готовится к обмену.
Источник данных (определенный маркером) передает пакет данных
(или уведомление об отсутствии данных, предназначенных для передачи).
После успешного приема пакета приемник данных посылает пакет
пдтверждения (handshake packet).
Каждый пакет начинается с поля синхронизации SYNC, за которым
следует четыре бита идентификатора PID и его побитной инверсии CHECK.
Идентификаторы PID делятся на четыре группы:
1 ─ маркеры пакетов (OUT, IN, SOF, SETUP);
2 ─ идентификаторы данных(DATA0, DATA1, DATA2);
3 ─ идентификаторы подтверждений (ACK, NAK, STALL);
4 ─ идентификаторы специальных пакетов (ERR и др.).
В поле данных первой группы OUT, IN и SETUP указывается адрес
функции FUNC(до 127 адресов), адрес конечной точки КТ (EndP) (до 16
конечных точек) и контрольная последовательность CRC, вычисленная
циклическим кодом с полиномом пятой степени. Для маркера SOF в поле
данных указывается номер кадра и контрольная последовательность.
В поле данных пакетов DATA может содержаться от 0до 1023байтов
данных и контрольная последовательность CRC, вычисленная циклическим
кодом с полиномом 16 степени.
Поле данных пакета подтверждения АСК пустое.
Работа USB устройства начинается с его конфигурирования. Хост
контроллер посылает стандартные запросы (дескрипторы хоста), в которых
должны быть переданы тип запроса, код запроса, параметр запроса, индекс и
число байт для передачи. На рис. 5.5.5 показана последовательность запросов
от хоста. В список дескрипторов устройства входят дескрипторы описания
USB устройства, параметры конфигурации и интерфейса, параметры
конечной точки и т.д. В данном примере хост запрашивает дескриптор
устройства (код 01).
Рис. 5.5.5. Стандартный запрос дескриптора от устройства
После получения подтверждения в ответ на стандартный запрос хоста
устройство отвечает дескриптором устройства (рис.5.5.6). В ответе
содержится число байтов дескриптора (12H=18 байтов), тип дескриптора 01,
версия USB 1.1(код 1001H), в поле данных для нулевой точки далее обмен
будет осуществляться не более чем по 8 батов.
64
Рис. 5.5.6. Ответ на стандартный запрос
В список стандартных дескрипторов устройства должны также входить
дескриптор конфигурации (код 02), дескриптор интерфейса (код 03) и
дескриптор конечной точки (код 04). После конфигурирования может быть
начат обмен данными.
В настоящее время выпускается большой набор микросхем,
позволяющих заменить некоторые выше описанные интерфейсы более
прогрессивным последовательным интерфейсом USB. Микросхемы делятся
на следующие группы:
─ преобразователи последовательного интерфейса COM в USB (Фирмы
FTDI, Maxim, Philips);
─ преобразование параллельного в USB;
─ микроконтроллеры с USB интерфейсом;
─ микросхемы хабов
─ микросхемы OTG.
В заключении рассмотрим структурную схему устройства USB,
встроенного в микроконтроллер AT89C5131 фирмы ATMEL (рис. 5.5.7).
Устройство может работать как с версией USB 1.1, так и с версией USB 2.0 FS
и включает 7 конечных точек. Управляющая коечная точка КТ0 имеет 32-х
разрядный буфер FIFO. Остальные конечные точки обеспечивают как прием
так и передачу данных в режимах передачи массивов данных (bulk data
transfers), прерывания (interrupt) и изохронной передачи (isochronous
transfers). Конечные точки КТ 1, 2, 3 имеют буфер FIFO 32 байта, КТ4, 5
имеют два буфера FIFO по 64 байта с возможностью их попеременной
загрузки, КТ6 тоже имеют два буфера FIFO, но емкостью 512 байтов.
65
Обнаружение
EOF
Обнаружение
SYNC
Обнаружение
SOF
D+
D-
Обнаружение
PID
Декодирование кода
NRZI, удаление
вставленного ―0‖
(Bit-Un-Stuffing),
счетчик кадров
Кодирование в код
NRZI, вставка―0‖
(Bit Stuffing),
Формирование CRC16
последовательности
Определение адреса,
преобразование из
последовательного
кода в параллельный
8
Обнаружение
ошибки кодом
CRC5 или CRC16
Преобразование
параллельного кода
в последовательный
8
Рис. 5.5.7. Структурная схема встроенного контроллера USB
Для передачи данных по шине USB используется дифференциальный
способ передачи сигналов по двухпроводным проводам D+ и D-. Для
обеспечения низкой скорости передачи данных линия D- подключается
(подтягивается) через резистор 1,5 кОм к напряжению 3,3 В, а для высокой
скорости передачи данных напряжение 3,3 В через резистор 1,5 кОм
подключается к линии D+.
Тактовые сигналы для всех узлов устройства USB 12 Мгц формируются
делением опорной
частоты 48 Мгц,
которая вырабатывается
микроконтроллером. В регистр DPLL заносится коэффициент деления,
который определяется в зависимости от тактовой частоты внутреннего
генератора микроконтроллера. Тактовые сигналы 12 Мгц синхронизируются
с принятыми по шине USB дифференциальными сигналами.
Все операции по преобразованию кодов при передачи и приеме кадров
осуществляется аппаратно. В микроконтроллере имеется набор регистров
специальных функции, с помощью которых устанавливаются режимы работы
внутреннего устройства USB и в которых сохраняются флаги,
сформированные аппаратно в узлах структурной схемы. Анализ флагов
может быть осуществлен программно или разрешено соответствующее
прерывание.
66
Лекция 12
6. Массив программируемых счетчиков
6.1. Назначение и состав массива программируемых счетчиков
В состав современных микроконтроллеров входят несколько таймеров,
позволяющих с высокой точностью формировать интервалы времени и
обрабатывать сигналы от различных внешних устройств. Однако, во многих
случаях для решения прикладных задач требуется либо усложнять
программу либо добавлять внешние микросхемы. Для расширения
возможностей микроконтроллера с целью обработки широкого набора
сигналов
внешнего
оборудования
и
генерирования
временных
последовательностей для управления внешним оборудованием в настоящее
время
в микроконтроллеры встраиваются массив программируемых
счѐтчиков РСА (Programmable Counter Array).
Рассмотрим (рис.6..1) несколько часто встречающихся задач обработки
сигналов. На рис. 6..1 приведены примеры измерения длительности
импульса, измерения периода последовательности импульсов, измерения
скважности и измерение фазового сдвига.
Из рис.6.1 видно, что в перечисленных случаях необходимо
фиксировать времена формирования начала и конца сигналов, поступающих
от внешних устройств. Переход напряжений от низкого уровня к высокому и
наоборот от высокого к низкому называется событием. Для обнаружения
событий используются детекторы захвата событий. Если зафиксировать
время захвата события, то могут быть получены все необходимые данные для
вычисления длительности импульса, периодичности поступления сигналов,
67
t
t1
t2
t=t1-t2
а) измерение длительности импульса t
t1
t3
Т=t3-t1
t3
Q=(t3-t1)/t2-t1
t2
б) измерение периода Т
t1
t2
в) измерение скважности Q
t1
φ t2
φ=t2-t1
г) измерение сдвига фазφ
Рис. 6.1. Измерение длительности импульса (а), периода (б),
скважности (в), сдвига фаз (г)
скважности, сдвига фаз и т.п. времени. Перечисленные случаи могут быть
реализованы с помощью встроенного в микроконтроллер массива
программируемых счѐтчиков РСА (рис.6.2).
В состав РСА входят пять модулей, двунаправленные выводы которых
могут быть использованы как входы внешних сигналов и как выходы
сигналов управления внешними устройствами. В микроконтроллерах
семейства MSC51 выводы модулей подключены к порту Р1. Каждый модуль
может работать в одном из следующих режимов:
– захвата события по фронту или спаду внешнего сигнала;
– использование модуля как программируемого таймера;
– скоростного вывода;
– генератора импульсов с заданной скважностью (генератор ШИМ);
Модуль 4 может быть использован как сторожевой таймер в тех
модификациях микроконтроллеров, в которых отсутствует его аппаратная
реализация.
Для формирования отсчетов времени используется общий для всех
модулей таймер/счетчик.
68
Обозна Вывод
чение порта
вывода
P1
модуля
Общий таймер/счетчик
для РСА
Модуль 0
СЕХ0
/ Р1.3
СЕХ0/P1/3
Модуль 1
СЕХ1/P1/4
СЕХ1 / Р1.4
Модуль 2
СЕХ2/P1/5
СЕХ2 / Р1.5
Модуль 3
СЕХ3/P1/6
СЕХ3
/ Р1.6
Модуль 4
СЕХ4/P1/7
СЕХ4
/ Р1.7
Рис. 6.2. Состав массива программируемых счетчиков (РСА)
6.2. Режимы работы общего таймера/счетчика
На рис.6.3 показана структурная схема общего РСА таймера/счетчика.
Шестнадцатиразрядный таймер/счетчик накапливающего типа состоит
из двух 8-разрядных регистров CH и CL. Счет тактовых сигналов может
осуществляться как от внутреннего генератора тактовой частоты, так и от
внешнего источника тактовой частоты. Выбор источника тактовой частоты
производится мультиплексором MUX. Если выбран внутренний источник
тактовой частоты, то используется режим таймера, если – внешний, то режим
счетчика.
В режиме таймера может быть использован один из трѐх вариантов:
1. На вход таймера поступают сигналы тактовой частоты от внутреннего
генератора, делѐнные на 12 (FT /12);
2. На вход таймера поступают сигналы тактовой частоты от внутреннего
генератора, делѐнные на 4 (FT /4);
3. На вход таймера поступают сигналы при каждом переполнении таймера 0;
4. На вход счѐтчика поступают внешние сигналы с входа Р1.2. Максимальная
69
частота в этом случае не должна превышать значения FT /8.
MUX
FT/12
A
FT/4
B
TF0
C
P1.2
D
CPS0
CPS1
1
CR
К модулям 0-4
&
CH
CL
CF
&
INT
ECF
&
CIDL
IDL
&
Рис. 6.3. Структурная схема общего таймера/счетчика РСА
Содержимое регистров CH и CL поступает на все модули. При переполнении
таймера/счетчика формируется флаг CF, который может быть обработан
либо программно, либо по прерыванию. В последнем случае должен быть
установлен бит разрешения прерывания ECF.
Таймер/счетчик запускается битом CR при условии, что режим IDLE
отключен. Если режим IDLE включен, то при значении бита CIDL=0 запуск
таймера/счетчика разрешен, а при значении бита CIDL=1 запуск
таймера/счетчика запрещен.
Для установки режимов работы таймера/счетчика служит регистр
CMOD, а для управления работой таймера/счетчика служит регистр CCON.
Формат содержимого регистра CMOD показан в табл.6.1.
Адрес регистра – D9H.
Содержимое регистра после сброса – 0XXXХ000В
Таблица 6.1
Регистр CMOD
Номер
бита
Мнемоническое
Обозначение
бита
Описание
70
7
CIDL
В режиме IDLE, если
CIDL=0 запуск
таймера/счетчика разрешен, иначе – запрещен
Бит управления сторожевым таймером модуля 4
6
5–3
2–1
WDTE
Зарезервировано
СPS1 – СPS0
код управления мультиплексором MUX:
00 – FT /12
01 – FT /4
10 – переполнение таймера 0
11 – вход Р1.2
ECF
Разрешение прерывания
Формат содержимого регистра CMOD показан в табл. 6.2.
Адрес регистра – D8H.
Содержимое регистра после сброса – 00XXXХ00В
Таблица 6.2
Регистр CCON
Номер
бита
7
Мнемоническое
Обозначение
бита
CF
Описание
6
5
4–0
CR
Зарезервировано
CСF4 – CСF0
Флаги обнаружения захвата событий модулями
Флаг
переполнения
таймера/счетчика.
Сбрасывается программно
Бит запуска таймера/счетчика
6.3. Режим захвата события
На рис. 6.4 показана структурная схема модуля РСА, работающего в
режиме захвата событий.
Сигнал, фронт или спад, которого следует захватить, поступает на один
из входов порта Р1.х (CEXn), где х принимает значение от 3 до 7, а n номер
модуля (рис.6.2).
Определение фронта или спада сигнала осуществляется в детекторах
захвата САР (capture). Обработка фронта или спада сигнала выбирается
битами CAPPn (positive) в случае перехода от низкого уровня к высокому и
CAPNn (negative) в случае перехода от высокого к низкому уровню.
Если фронт или спад обнаружен, то формируется флаг захвата события
CCFn, который может быть обработан программно или по прерыванию. Для
обработки захвата события должен быть установлен бит разрешения
прерывания ECCPn. Флаг CCFn сбрасывается программно.
Для измерения временных параметров сигнала используется общий для
71
CH
CL
CF
BF
BF
CAPPn
&
P1.x (CEXn)
CAP
D
D
OE
OE
1
CCAPnH
CAP
CCAPnL
&
CAPNn
ECCPn
CCFn
&
INT
Рис. 6.4. Структурная схема модуля в режиме захвата
всех модулей таймер/счетчик. С этой целью текущее содержимое регистров
CH и CL в момент захвата события защелкивается в регистрах CCAPnH и
CCAPnL модуля. Например, в случае измерения длительности импульса,
число защелкнутое в регистрах CCAPnH и CCAPnL будет соответствовать
началу счета тактовых сигналов таймера/счетчика от момента захвата
события (момент t1 на рис.6.6.1). До наступления захвата следующего
события содержимое регистров CCAPnH и CCAPLn должно быть переписано
в память микроконтроллера. После захвата следующего события в регистрах
CCAPHn и CCAPnL. Для измерения временных параметров сигнала
используется общий для CCAPnL будет защелкнуто число, соответствующее
моменту t2 (рис.6.1) Разность двух чисел будет соответствовать длительности
измеряемого импульса в тактах таймера/счетчика. Чтобы получить значение
длительности импульса в единицах времени, необходимо умножить
полученную разность в тактах на время периода тактовой частоты
таймера/счетчика.
72
6.4. Режим 16-разрядного программируемого таймера, высокоскоростного
вывода и сторожевого таймера
На рис.6.5 показана структурная схема модуля, работающего в режиме
16-разрядного программируемого таймера, высокоскоростного вывода и
сторожевого таймера. Основными узлами модуля в этом случае являются
регистры
CCAPHn,
CCAPLn
и
16-разрядный
узел
сравнения
СОМР(компаратор).
В режиме 16-разрядного программируемого таймера формирование
заданных интервалов времени осуществляется в следующем порядке.
Предварительно в регистре управления модулями ССАРМn устанавливается
бит МАТn для разрешения формирования флага CCFn. В регистры CCAPHn и
CCAPLn загружается 16-разрядное начальное значение и в регистре
управления модулями ССАРМn устанавливается бит ЕСОМn, который
разрешает сравнение содержимого основного таймера/счетчика (регистры
CH и CL) с содержимым регистров модуля (CCAPHn, CCAPLn). Когда
происходит совпадение содержимого основного таймера/счетчика и
содержимого регистров CCAPHn, CCAPLn модуля, формируется флаг CCFn,
который может быть обработан по прерыванию, если установлен бит ECCFn.
При каждом сравнении флаг CCFn должен быть сброшен программно. В
результате в интервале между каждым сравнением получим длительность
времени в тактах.
Если не менять начальное значение регистров CCAPHn, CCAPLn, то
получим режим перезагружаемого таймера. Интервалы между каждым
сравнением могут быть заданы переменными. В этом случае после сравнения
необходимо изменить содержимое регистров CCAPHn, CCAPLn. При каждой
загрузке нового начального значения автоматически сбрасывается бит
разрешения сравнения ЕСОМn и тем самым запрещается сравнение на время
обновления содержимого регистров CCAPHn и CCAPLn, что позволяет
избежать неверного сравнения.
В режиме работы скоростного вывода HSO (High Speed Output) в
модуле дополнительно к установленным битам МАТn и ЕСОМn должен быть
еще установлен бит TOGn. Устанавливая или сбрасывая этот бит,
пользователь в случае совпадения содержимого регистров таймера/счетчика
и содержимого регистров модуля может разрешить формирование на выводе
порта Р1.х (CEXn) выходного сигнала высокого или низкого уровня.
Режим скоростного вывода является более точным по сравнению
вывода сигнала на выход порта с помощью команд SETB bit или CLR bit,
поскольку на их выполнение требуется дополнительное время.
73
Четвертый модуль может работать в режиме сторожевого таймера
(WatchDog Timer). Работа в этом режиме возможна, если установлен бит
WDTE в регистре режимов CMOD. При совпадении содержимого регистров
таймера/счетчика CH и CL и содержимого регистров CCAPHn и CCAPLn
модуля сформируется сигнал сброса RESET микроконтроллера.
Предотвратить сброс можно тремя способами:
1. В программе пользователя, для которой требуется защита от сбоя,
необходимо периодически изменять содержимое регистров CH и CL так
чтобы никогда не было совпадений с содержимым регистров CCAPHn и
CCAPLn. Этот способ лучше применять, когда общий таймер/счетчик не
используется другими модулями.
2. В программе пользователя, для которой требуется защита от сбоя,
необходимо периодически изменять содержимое регистров CCAPHn и
CCAPLn так чтобы никогда не было совпадений с содержимым регистров
CH и CL.
3. В программе пользователя, для которой требуется защита от сбоя,
необходимо в нужный момент отключить режим сторожевого таймера
сбросом бита WDTE прежде, чем произойдет совпадение содержимого
регистров CCAPHn и CCAPLn и содержимого регистров CH и CL и затем
WDTE
CH
RESET
тольо для
n=4
&
CL
&
СОМР
TOGn
=
=
A
B
A
B
OE
OE
&
&
CCFn
P1.x (CEXn)
&
INT
ECOMn
ECCFn
MATn
CCAPnH
CCAPnL
Рис. 6.5. Структурная схема работы модуля в режимах 16разрядного таймера, высокоскоростного вывода и сторожевого
таймера
74
снова установить бит WDTE.
Для управления работой модулей служит регистр ССАРМn.
Формат содержимого регистра ССАРМn показан в табл.6.3.
Адрес регистра ССАРМ0 для модуля 0 – DАH.
Адрес регистра ССАРМ1 для модуля 1 – DВH.
Адрес регистра ССАРМ2 для модуля 2 – DСH.
Адрес регистра ССАРМ3 для модуля 3 – DDH.
Адрес регистра ССАРМ4 для модуля 4 – DЕH.
Содержимое регистра после сброса – Х0000000В
Таблица 6.3
Регистр CCАРМn
Номер
бита
7
6
5
4
3
2
1
Мнемоническое Описание
Обозначение
бита
Зарезервировано Флаг переполнения таймера/счетчика. Сбрасывается
программно
ЕСОМn
Бит разрешения работы компаратора
САРРn
Для сигнала на входе P1.x/CEXn разрешение работы
детектора CAPPn (positive).
1 – разрешено, 0 – запрещено
Для сигнала на входе P1.x/CEXn разрешение работы
детектора CAPNn (negative).
1 – разрешено, 0 – запрещено
МАТn
Разрешение формирования флага CCFn
1 – разрешено, 0 – запрещено
TOGn
Разрешение режима HSO
1 – разрешено, 0 – запрещено
PWMn
Разрешение режима ШИМ
1 – разрешено, 0 – запрещено
ECCFn
Разрешение прерывания
1 – разрешено, 0 – запрещено
6.5. Режим генератора импульсов с заданной скважностью
Любой из пяти модулей может быть использован как генератор
импульсов с заданной скважностью или как широтно импульсный модулятор
(ШИМ). Английская аббревиатура – PWM (Pulse Width Modulation). На
(рис.6.6) показана структурная схема модуля, работающего в режиме ШИМ.
75
CCAPnH
CCAPnL
―0―
=
CL
ECOMn
&
A
B
CL=CCAPnL
―1―
&
P1.x (CEXn)
&
PWMn
Рис. 6.6. Структурная схема работы модуля в режимtе генератора ШИМ
CCAPnL=C0H(192)
00
CCAPnL=80H(128)
FFH 00
CCAPnL=40H(64)
FFH 00
FFH 00
Рис. 6.7. Временная диаграмма формирования импульсов
ШИМ
В этом режиме компаратор модуля работает как 8-разрядное устройство и
производится сравнение содержимого регистра CL общего таймера/счетчика
с содержимым регистра ССРАLn модуля. Запуск режима ШИМ
осуществляется установкой битов ЕСОМn и PWMn в регистре CCАРМn
(табл.6.3).Предварительно в регистр ССРАНn должно быть загружено
начальное значение длительности импульса ШИМ. После каждого сравнения
в регистр ССРАLn пересылается содержимое регистра ССРАНn. Общий
таймер счетчик задает частоту (период) генерируемых импульсов.
Формирование импульсов ШИМ иллюстрируется временной диаграммой на
рис.6.7. Таймер/счетчик формирует период длительностью
256тактов (00 – FFH). Если CL< ССРАLn, то на выходе модуля P1.x (CEXn)
формируется сигнал низкого уровня. Если CL≥ ССРАLn, то на выходе модуля
P1.x (CEXn) формируется сигнал высокого уровня. Чтобы импульсы ШИМ
имели переменную длительность, нужно новое содержимое регистра
ССРАНn переписывать в регистр ССРАLn в момент перехода содержимого
CL из значения FFH в 00Н.
76
6.6. Обработка прерываний от источников РСА
На рис.6.8 показана структурная схема обработки прерываний от
различных источников массива программируемых счетчиков РСА. В
микроконтроллерах семейства MCS51 имеется регистр разрешения
прерываний IE, который существует с самых первых модификаций.
В регистре IE были зарезервированы два бита, один из которых IE.6
стал использоваться как бит ЕС для разрешения прерывания от РСА (от
таймера/счетчика и всех модулей). В этом же регистре IE имеется бит ЕА
(IE.7) запрещения прерывания от всех устройств микроконтроллера.
Назовем его глобальным. Следовательно, для разрешения обработки
прерываний от РСА необходимо установить оба бита ЕА и ЕС в регистре IE.
Разрешение прерывания от таймера/счетчика осуществляется установкой
бита ECF в регистре CMOD. Разрешение прерывания от модулей
осуществляется установкой битов ECCFn в регистрах CCАРМn. Если
прерывания от источников возникают одновременно, то определение
источника осуществляется программно, анализируя содержимое регистра
CCON.
77
Регистр CCON
CF CR
CCF4 CCF3 CCF2
модуль 0
&
модуль 1
&
модуль 2
&
CCF1
CCF0
1
&
&
модуль 3
&
модуль 4
&
EС
EА
INT
Регистр IE
Биты разрешения прерывания ECCFn
Бит ECF регистра CMOD
&
Бит переполнения CF общего таймера
Рис. 6.8. Формирование прерывания от РСА
78
Лекция 13
7. Микроконтроллеры с RISC архитектурой
7.1. Микроконтроллеры AVR
Компания Atmel выпускает 8-разрядные микроконтроллеры с высокой
производительностью и малым потреблением энергии. Для достижения
указанных свойств используются достижения микроэлектроники последних
лет. Микроконтроллер построен на основе RISC архитектуры, что позволяет
применить двухступенчатый конвейер команд, выполнение которых
осуществляется за один такт тактового генератора. 32 регистров общего
назначения универсальны, так как в них может быть записан результат
операции. Внутренняя память программ и данных имеют большой объем и
построены на основе Гарвардской архитектуры. Развитое встроенное
периферийное оборудование позволяет применять микроконтроллеры AVR
во многих областях техники.
7.1.1. Структурная схема микроконтроллера AVR
На рис.7.1.1 показана типовая структурная схема микроконтроллера
AVR. Структурная схема микроконтроллера состоит из АЛУ, внутренней
памяти программ и памяти данных и внутренних периферийных устройств.
Память
АЛУ
Внутренние
Программ
и память данных периферийные устройства
Рис. 7.1.1. Структурная схема микроконтроллера AVR
79
Внешние устройства могут быть подключены к четырем портам ввода
вывода (32 линии I/O).
7.1.2. Организация памяти
В
микроконтроллере
использована
концепция
Гарвардской
архитектуры, в соответствии с которой внутренняя память состоит их памяти
программ Program Memory и памяти данных Data Memory (рис.7.1.2).
Рис. 7.1.2. Организация памяти
В памяти программ содержатся 16-разрядные команды (инструкции),
причем пока команда выполняется в процессоре микроконтроллера,
следующая команда выбирается из памяти, в результате одна команда может
быть выполнена за один такт. Память программ реализована как флэш
память и может быть перепрограммирована (не менее 1000 циклов
записи/стирания), ее емкость зависит от конкретной модификации
микроконтроллера.
В состав микроконтроллера входят два типа внутренней памяти
данных: ОЗУ (RAM) и энергонезависимая память данных (EEPROM не менее
100000 циклов записи/стирания) каждая с собственным адресным
пространством.
Память данных ОЗУ состоит из трех областей: универсальных
регистров общего назначения (файл из 32 регистров), регистров для
обслуживания встроенных интерфейсных устройств (64 регистров I/O) и
внутреннего ОЗУ (SRAM).
На рис.7.1.3 показан состав регистров общего назначения. Регистры
имеют имена от R0 до R31, и вся область регистров общего назначения
поделена на две половины. Регистры R0 – R15 могут быть использованы во
всех командах кроме команд SBCI, SUBI, CPI, ANDI, ORI, в которых
использованы операнды константа и содержимое регистра, и команда LDI с
80
непосредственной адресацией. Перечисленные команды используются с
регистрами второй половины регистрового файла.
Рис. 7.1.3. Состав регистров общего назначения
Три пары регистров R26,R27 – X, R28,R29 – Y, R30,R31 – Z могут быть
использованы в командах с косвенной адресацией, разрядность операндов в
которых более восьми. Как показано на рис.3 каждый регистр кроме имени
также может быть ассоциирован с адресом внутренней памяти данных и
указан прямо по адресу. Далее на рисунках шестнадцатеричное значение
обозначается знаком $, стоящим перед шестнадцатеричной цифрой или
буквой.
Регистры I/O внутренних интерфейсных устройств пронумерованы от
$00 до $3F (0 – 64), но поскольку адресное пространство внутренней памяти
данных имеет сквозную нумерацию адресов ячеек памяти, то, как показано
на рис.4 адреса регистров I/O начинаются с адреса $0020 вслед за адресами
регистров общего назначения.
Соответствие адресов регистров в адресном пространстве внутренней
памяти данных показано на рис. 7.4.
Память SRAM начинается с адреса $0060. Стек может быть размещен в
любом месте памяти SRAM и его глубина ограничена только общим
адресным пространством SRAM. Регистр-указатель стека SP состоит из двух
регистров SPH и SPL с адресами $3E ($5E) и $3D ($5D) соответственно.
81
Рис. 7.1.4. Соответствие адресов регистров в адресном пространстве
внутренней памяти данных
Инициализация регистров должна быть произведена программистом после
сброса.
Для записи или чтения памяти EEPROM в области регистров I/O
имеются регистры адреса, регистр данных и регистр управления. В регистре
управления программист может установить режим записи или чтения и бит
разрешения прерывания по готовности памяти EEPROM. Время записи
лежит в пределах 2,5 – 4мс в зависимости от напряжения источника питания.
7.1.3. Система команд
Для выбора операндов в командах микроконтроллера используются
прямая, косвенная и непосредственная адресация. Далее при описании
команд применяются следующие обозначения:
Rd: R0-R31 or R16-R31 (в зависимости от используемой команды);
Rr: R0-R31;
b: константа для указания адреса или имени бита;
s: флаг в командах условного перехода и в командах побитных
операций;
P: адрес или имя регистра I/O;
K: 8-разрядная константа, может быть использовано выражение;
k: константа, разрядность которой зависит от используемой команды;
q: смещение в командах с косвенной адресацией;
При выполнении арифметических и логических команд, в командах битовых
операций формируются флаги, которые содержатся в регистре состояния
SREG (5Fh). Формат регистра SREG показан на рис.7.1.5.
82
Рис. 7.1.5. Формат регистра состояния SREG
С – флаг переноса;
Z – флаг нуля результата;
N – флаг отрицательного результата;
V – флаг арифметического переполнения;
S – флаг знака, причем S =N + V;
Н – Промежуточный перенос (из младшей тетрады в старшую);
Т – место для записи значения бита в командах побитных операций;
I – если I=0, то запрещены все прерывания, если I=1, то разрешены
прерывания только от тех источников, в регистрах управления которых
установлен соответствующий бит.
Система команд состоит из 118 базовых команд, объединенных в
четыре группы: группу команд арифметических и логических операций
(табл. 7.1.1), группу команд пересылок (табл. 7.1.2), группу команд передачи
управления (табл. 7.1.3) и группу команд побитных операций.
Таблица 7.1.1
Команды арифметических и логических операций
Мнемоника
ADD
ADC
ADIW
SUB
SUBI
SBC
SBCI
SBIW
AND
ANDI
OR
ORI
EOR
COM
NEG
SBR
CBR
INC
DEC
TST
CLR
SER
MUL
Опера
нды
Rd, Rr
Rd, Rr
Rd, k
Rd, Rr
Rd, K
Rd, Rr
Rd, K
Rd, k
Rd, Rr
Rd, K
Rd, Rr
Rd, K
Rd, Rr
Rd
Rd
Rd,K
Rd,K
Rd
Rd
Rd
Rd
Rd
Rd,Rr
Описание команды
Сложение без учѐта флага С
Сложение с учѐтом флага С
Сложение с 16-р. константой
Вычитание без учѐта заѐма С
Вычитание константы из Rd
Вычитании с учѐтом заѐма С
Вычитании К с учѐтом заѐма С
Вычитании 16-р. константы
Поразрядное логическое И
Поразрядное И с константой К
Поразрядное ИЛИ
Поразрядное ИЛИ
Исключающее ИЛИ
Обратный код
Дополнительный код
Установить бит(ы)
Обнулить бит(ы)
Инкремент
Декремент
Тест регистра
Обнулить (очистить) регистр
Установить разряды регистра
Умножение без знака
Операция
Флаги
Rd ¬ Rd + Rr
Rd ¬ Rd + Rr + C
Z,C,N,V,H
Z,C,N,V,H
Z,C,N,V
Z,C,N,V,H
Z,C,N,V,H
Z,C,N,V,H
Z,C,N,V,H
Z,C,N,V
Z,N,V
Z,N,V
Z,N,V
Z,N,V
Z,N,V
Z,C,N,V
Z,C,N,V,H
Z,N,V
Z,N,V
Z,N,V
Z,N,V
Z,N,V
Z,N,V
None
C
Rd+1:Rd ¬ Rd+1:Rd + k
Rd ¬ Rd - Rr
Rd ¬ Rd - K
Rd ¬ Rd - Rr - C
Rd ¬ Rd - K - C
Rd+1:Rd¬ Rd+1:Rd - k
Rd: Rd&Rr
Rd: Rd&K
Rd: Rd v Rr
Rd: Rd v K
Rd: Rd A Rr
Rd: $FF - Rd
Rd: $00 - Rd
Rd: Rd v K
Rd: Rd&($FF - K)
Rd ¬ Rd +
Rd ¬ Rd - 1
Rd ¬ Rd&Rd
Rd ¬ Rd - Rd
Rd ¬ $FF
R1, R0 ¬ Rd . Rr
Так
ты
1
1
2
1
1
1
1
2
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
83
Таблица 7.1.2
Команды пересылок
Мнемоника
MOV
LDI
LDS
LD
LD
LD
LD
LD
LD
LDD
LD
LD
LD
LDD
Опера
нды
Rd, Rr
Rd, K
Rd, k
Rd, X
Rd, X+
Rd, -X
Rd, Y
Rd, Y+
Rd, -Y
Rd,Y+q
Rd, Z
Rd, Z+
Rd, -Z
Rd, Z+q
STS
ST
ST
ST
ST
ST
ST
STD
ST
ST
ST
STD
LPM
IN
OUT
k, Rr
X, Rr
X+, Rr
-X, Rr
Y, Rr
Y+, Rr
-Y, Rr
Y+q,Rr
Z, Rr
Z+, Rr
-Z, Rr
Z+q,Rr
PUSH
POP
Описание команды
Операция
Флаги
Копирование регистра
Загрузить константу в регистр
Переслать содержимое SRAM
Косвенная адресация
Косвенная адресация с post Х+1
Косвенная адресация c pre X-1
Косвенная адресация
Косвенная адресация с post Y+1
Косвенная адресация c pre Y-1
Косвенная адресация + смещение
Косвенная адресация
Косвенная адресация с post Z+1
Косвенная адресация c pre Z-1
Косвенная адресация + смещение
Rd ¬ Rr
Rd ¬ K
Rd ¬ (k)
Rd ¬ (X)
Rd ¬ (X), X ¬ X + 1
X ¬ X - 1, Rd ¬ (X)
Rd ¬ (Y)
Rd ¬ (Y), Y ¬ Y + 1
Y ¬ Y - 1, Rd ¬ (Y)
Rd ¬ (Y + q)
Rd ¬ (Z)
Rd ¬ (Z), Z ¬ Z+1
Z ¬ Z - 1, Rd ¬ (Z)
Rd ¬ (Z + q)
None
None
None
None
None
None
None
None
None
None
None
None
None
None
Так
ты
1
1
3
2
2
2
2
2
2
2
2
2
2
2
Rd, P
P, Rr
Запомнить в SRAM
Косвенная запись в SRAM
Косвенная запись в SRAM
Косвенная запись в SRAM
Косвенная запись в SRAM
Косвенная запись в SRAM
Косвенная запись в SRAM
Косвенная запись в SRAM
Косвенная запись в SRAM
Косвенная запись в SRAM
Косвенная запись в SRAM
Косвенная запись в SRAM
Переслать из памяти программ
Переслать из порта (регистр I/O)
Переслать в порт (регистр I/O)
(k) ¬ Rr
(X) ¬ Rr
(X) ¬ Rr, X ¬ X + 1
X ¬ X - 1, (X) ¬ Rr
(Y) ¬ Rr
(Y) ¬ Rr, Y ¬ Y + 1
Y ¬ Y - 1, (Y) ¬ Rr
(Y + q) ¬ Rr
(Z) ¬ Rr
(Z)¬ Rr, Z ¬ Z + 1
Z ¬ Z - 1, (Z) ¬ Rr
(Z + q)¬ Rr
R0 ¬ (Z)
Rd ¬ P
P ¬ Rr
None
None
None
None
None
None
None
None
None
None
None
None
None
None
None
3
2
2
2
2
2
2
2
2
2
2
2
3
1
1
Rr
Rd
Запомнить в стеке
Извлечь из стека
STACK ¬ Rr
Rd ¬ STACK
None
None
2
2
Таблица 7.1.3
Команды передачи управления
Мнемо- Опера
Описание команды
ника
нды
RJMP
k
Относительный безусловный
переход
IJMP
Косвенный безусловный переход
JMP
k
Безусловный переход
Операция
Флаги
Такты
PC ¬ PC + k + 1
None
2
None
2
3
PC ¬ Z
PC ¬ k
84
RCALL k
ICALL
CALL
RET
RETI
CPSE
k
Rd,Rr
CP
CPC
CPI
SBRC
Rd,Rr
Rd,Rr
Rd,K
Rr, b
SBRS
Rr, b
SBIC
P, b
SBIS
P, b
BRBS
s, k
BRBC
s, k
BREQ
BRNE
BRCS
BRCC
BRSH
k
k
k
k
k
BRLO
BRMI
BRPL
BRGE
BRLT
BRHS
BRHC
BRTS
BRTC
BRVS
k
k
k
k
k
k
k
k
k
k
BRVC
BRIE
k
k
BRID
k
Относительный вызов
подпрограммы
Косвенный вызов подпрограммы
Вызов подпрограммы
Возврат из подпрограммы
Возврат из прерывания
Сравнить и пропустить команду,
если (Rd = Rr)
Сравнить
Сравнить с учѐтом флага С
Сравнить с константой
Пропустить команду, если в
регистре бит равен 0 (Rr(b)=0)
Пропустить команду, если в
регистре бит равен 1 (Rr(b)=1)
Пропустить команду, если в I/O
регистре бит равен 0 (I/O(P,b)=0)
Пропустить команду, если в I/O
регистре бит равен 1 (I/O(P,b)=1)
Переход, если флаг в регистре
SREG равен 1 (SREG(s) = 1)
Переход, если флаг в регистре
SREG равен 0 (SREG(s) = 0)
Переход, если равно (Z = 1)
Переход, если не равно (Z = 0)
Переход, если C = 1
Переход, если C = 0
Переход, если равно или больше
(C = 0)
Переход, если меньше (C = 1)
Переход, если N = 1
Переход, если N = 0
Переход, если N v V= 0
Переход, если N v V= 1
Переход, если H = 1
Переход, если H = 0
Переход, если T = 1
Переход, если T = 0
Переход, если V=1
PC ¬ PC + k + 1
None
3
PC ¬ Z
PC ¬ k
PC ¬ STACK
PC ¬ STACK
PC ¬ PC + 2 or 3
None
None
None
I
None
3
4
4
4
1, 2, 3
Rd - Rr
Rd - Rr - C
Rd - K
PC ¬ PC + 2 or 3
Z,C,N,V,H
Z,C,N,V,H
Z,C,N,V,H
None
1
1
1
1, 2, 3
Переход, если V = 0
Переход, если прерывание
разрешено (I = 1)
Переход, если прерывание
запрещено (I = 0)
PC ¬ PC + 2 or 3 None
1, 2, 3
PC ¬ PC + 2 or 3 None
1, 2, 3
PC ¬ PC + 2 or 3 None
1, 2, 3
PC ¬ PC+k + 1
None
1/2
PC ¬ PC+k + 1
None
1/2
PC ¬ PC + k + 1
PC ¬ PC + k + 1
PC ¬ PC + k + 1
PC ¬ PC + k + 1
PC ¬ PC + k + 1
None
None
None
None
None
1/2
1/2
1/2
1/2
1/2
PC ¬ PC + k + 1
PC ¬ PC + k + 1
PC ¬ PC + k + 1
PC ¬ PC+ k + 1
PC ¬ PC + k + 1
PC ¬ PC + k + 1
PC ¬ PC + k + 1
PC ¬ PC + k + 1
PC ¬ PC + k + 1
PC ¬ PC + k + 1
None
None
None
None
None
None
None
None
None
None
1/2
1/2
1/2
1/2
1/2
1/2
1/2
1/2
1/2
1/2
PC ¬ PC + k + 1
PC ¬ PC + k + 1
None
None
1/2
1/2
PC ¬ PC + k + 1
None
1/2
Таблица 7.1.4
Команды побитных операций
Мнемо- Опера Описание команды
ника
нды
LSL
Rd
Логический сдвиг
Операция
Флаги
Такты
Rd(n+1) ← Rd(n),Rd(0)
Z,C,N,V,H 1
85
влево
LSR
Rd
Логический сдвиг
вправо
ROL
Rd
Циклический сдвиг
влево через флаг С
ROR
Rd
Циклический сдвиг
вправо через флаг С
ASR
Rd
SWAP
Rd
BSET
BCLR
SBI
s
s
P, b
CBI
P, b
BST
Rr, b
BLD
Rd, b
Арифметический
сдвиг впрво
Поменять
местамитетрады
Установить флаг
Сбросить флаг
Установить бит в
регистре I/O
Сбросить бит в
регистре I/O
Переслать битна
место флага T
Переслать бит T на
место b в регистре Rd
Установить флаг С
Сбросить флаг С
Установить флаг N
Сбросить флаг N
Установить флаг Z
SEC
CLC
SEN
CLN
SEZ
CLZ
SEI
CLI
SES
CLS
SEV
CLV
SET
CLT
SEH
CLH
NOP
SLEEP
WDR
Сбросить флаг Z
Разрешить выбранные
прерывания
Запретить все
прерывания
Установить флаг S
Сбросить флаг S
Установить флаг V
Сбросить флаг V
Установить флаг T
Сбросить флаг T
Установить флаг H
Сбросить флаг H
Нет операции
Sleep
Сброс сторожевого
таймера
← 0,
C ← Rd(7)
Rd(n) ← Rd(n+1),Rd(7)
← 0,
C ← Rd(0)
Rd(0) ← C,Rd(n+1)
← Rd(n),
C ← Rd(7)
Rd(7) ← C,Rd(n)
← Rd(n+1),
C ← Rd(0)
Rd(n) ← Rd(n+1), n=0..6
Z,C,N,V
1
Z,C,N,V,H 1
Z,C,N,V
1
Z,C,N,V
1
None
1
SREG(s) ← 1 SREG(s)
SREG(s) ← 0 SREG(s)
I/O(P, b) ← 1
None
1
1
2
I/O(P, b) ← 0
None
2
T ← Rr(b)
T
1
Rd(b) ← T
None
1
C←
C←
N←
N←
Z←
1
1
1
C
C
N
N
Z
1
1
1
1
1
Z← 0
I← 1
Z
I
1
1
I← 0
I
1
S← 1
S← 0
V← 1
V← 0
T← 1
T← 0
H ←1
H← 0
S
S
V
V
T
T
H
H
None
None
None
1
1
1
1
1
1
1
1
1
1
1
Rd(3..0) ← Rd(7..4)
Рассмотрим две задачи как примеры выполнения команд. Задача номер
дин: пусть требуется разметить стек в памяти SRAM, начиная с адреса
86
0060h., Для решения задачи необходимо в указатель стека загрузить значение
0060h. Указатель стека состоит из двух регистров: SPH и SPL, которые
находятся в области I/O регистров, а команды с непосредственной
адресацией для этой области памяти отсутствуют. Поэтому сначала следует
использовать регистры общего назначения для загрузки адреса дна пустого
стека, а затем переслать их содержимое в регистры SPH и SPL.
LDI R16,0
OUT SPH,R16
LDI R16,60h
OUT SPL,R16
Задача номер два: пусть требуется переслать строку символов,
содержащуюся в памяти программ как константы, в память данных
SRAM,.начиная с адреса 0100h.
LDI R16,6
LDI R28,0
LDI R29,01
LDI R30,0
LDI R31,04
M1: LPM
адрес
ST Y+,R0
; счетчик циклов (в строке символов 6 букв)
; R28,R29 – указатель на Y
; R30,R31 – указатель на Z (адрес string)
; (R0)←( Z) содержимое ячейки памяти программ,
; которой содержится в Z, пересылается в R0
; содержимое R0 пересылается командой с косвенной
; адресацией в SRAM с пост инкрементом адреса Y
INC R30
DEC R16
BRNE M1
org 0400h
string: db ‘IVANOV’
7.1.4. Порты ввода/вывода
К внешним устройствам микроконтроллер подключается через порты
ввода вывода. Их в микроконтроллере четыре и обозначаются как порт А,
порт В, порт С и порт D.
Выводы порта А двунаправленные и имеют нагрузочную способность
выходного тока 20 mA, что позволяет непосредственно подключать к
выводам порта без всяких согласований светодиодные устройства
отображения информации (LED). Выводы порта могут служить аналоговыми
входами АЦП.
Выводы порта В имеют такие же характеристики как у порта А. В
табл.7.1.5 указаны дополнительные функции порта В.
87
Таблица 7.1.5
Дополнительные функции выводов порта В
Вывод
порта В
Дополнительная функция вывода порта В
РВ0
Т0 (вход внешних сигналов таймера/счетчика
Т/С0)
РВ1
Т1 (вход внешних сигналов таймера/счетчика
Т/С1)
РВ2
AINO (вход аналогового компаратора +)
РВ3
AIN1 (вход аналогового компаратора – )
РВ4
SS (выбор SPI Slave)
РВ5
MOSI (SPI Master Output Slave Input)
РВ6
MISO (SPI Master Input Slave Output)
РВ7
SCK (SPI синхроимпульсы)
Выводы порта С имеют такие же характеристики как у порта А.
Дополнительные функции имеют выводы РС6 и РС7, к которым может быть
подключен кварцевый резонатор для формирования внешних тактовых
сигналов таймера 2.
Выводы порта D имеют такие же характеристики как у порта А. В
табл.7.1.6 указаны дополнительные функции порта D.
Таблица 7.1.6
Дополнительные функции выводов порта D
Вывод порта D
РD0
РD1
РD2
РD3
РD4
РD5
РD6
РD7
RXD (вход приемника UART)
TXD (выход передатчика UART)
INT0 (вход сигнала от источника вешнего прерывания 0)
INT1 (вход сигнала от источника вешнего прерывания 1)
OC1B (выход канала сравнения В таймера/счетчика Т/С1)
OC1A (выход канала сравнения А таймера/счетчика Т/С1)
ICP (вход захвата события таймера/счетчика Т/С1)
OC2 (выход канала сравнения таймера/счетчика Т/С2)
На рис. 7.1.6 показана функциональная схема для одного из восьми
разрядов порта А, которая может служить типовой для объяснения работы
выводов всех портов кроме объяснения работы дополнительных функций.
88
Рис. 7.1.6. Функциональная схема порта А
Все порты имеют три адреса: адрес защелки порта PORTA(B,C,D),
адрес регистра для выбора направления передачи DDRA(B,C,D) и адрес
выводов в режиме ввода PINA(B,C,D). Выводы PIN не являются регистром,
поэтому значения сигналов в режиме ввода требуется запоминать в регистрах
общего назначения или в памяти SRAM. Для настройки порта на вывод
(output) в соответствующий разряд регистра DDR записывают 1, а в защелку
PORT записывают 0 для формирования выходного сигнала низкого уровня
или единицу для формирования выходного сигнала высокого уровня (табл.
7.1.7). Для настройки порта на ввод (input) в соответствующий разряд
регистра DDR записывают 0. Если в защелке записан 0, то вывод PINn
устанавливается в 3-е состояние. Чтобы обеспечить необходимый ток для
формирования внешнего сигнала низкого уровня, необходимо избавиться от
третьего состояния. С этой целью транзистор MOS используется как резистор
и перевод транзистора в режим резистора осуществляется установкой
защелки в единицу.
Таблица 7.1.7
Управление вводом выводом
Вывод порта В Дополнительная функция вывода порта В
РВ0
Т0 (вход внешних сигналов таймера/счетчика Т/С0)
РВ1
Т1 (вход внешних сигналов таймера/счетчика Т/С1)
89
РВ2
РВ3
РВ4
РВ5
РВ6
РВ7
AINO (вход аналогового компаратора +)
AIN1 (вход аналогового компаратора – )
SS (выбор SPI Slave)
MOSI (SPI Master Output Slave Input)
MISO (SPI Master Input Slave Output)
SCK (SPI синхроимпульсы)
7.1.5. Таймеры счетчики
В состав микроконтроллера входят три таймера/счетчика(Т/С0, Т/С1,
Т/С2). Таймеры/счетчики Т/С0 и Т/С2 – 8-разрядные, а таймер/счетчик Т/С1
16-разрядный. Тактовые сигналы на таймеры/счетчики Т/С0 и Т/С1 в режиме
таймера подаются от внутреннего генератора, частота которого с помощью
предделителя может быть разделена на 8. 64. 256, 1024. Коэффициент
деления выбирается программно. В режиме счетчика сигналы от внешнего
источника подаются на входы РВ0, РВ1 (табл. 7.1.5). Таймер/счетчик Т/С2
может работать как от внутреннего тактового генератора с коэффициентами
деления 8, 32, 64, 128, 256, 1024 так и от внешнего тактового генератора
(входы РС6, РС7). В таймере/счетчике имеется канал сравнения текущего
значения Т/С2 с заданным. При сравнении формируется выходной сигнал
OC2 на выводе РD7 (табл.6). Этот же вывод PD7 таймера/счетчика Т/С2
может быть использован как выход 8-разрядного широтно-импульсного
модулятора (PWM).
16-разрядный таймер счетчик Т/С1 имеет устройство для захвата
событий и в этом режиме может быть использован для измерения
длительности внешних сигналов (вход ICP табл.6). Таймер/счетчик Т/С1
также имеет возможность использования его как 8, 9, 10-разрядного
широтно-импульсного модулятора (PWM). В нем имеется два канала
сравнения текущего значении с заданным OC1А и OC1B (табл.6).
7.1.6. Сторожевой таймер
Сторожевой таймер (Watchdog Timer) предназначен для формирования
внутреннего сигнала сброса микроконтроллера (MCU RESET, (рис. 7.1.7)).
Таймер работает от собственного внутреннего генератора тактовых
импульсов с частотой 1 Мгц (период 1 мкс). Интервал времени между
сбросом в ноль таймера (WATCHDOG RESET) и формированием сигнала
MCU RESET может быть программно установлен со значениями 16, 32, 64,
128, 256, 512, 1024, 2048 мс (16000 тактов и т.д.) Бит WDE служит для
запрещения или разрешения формирования сигнала MCU RESET, а выбор
длительность интервала выбирается битами WDP0, WDP1, WDP2. Команда
90
WDR должна быть вставлена в текст программы, предназначенной для
защиты от сбоев. Если по какой либо причине команда WDR не будет
выполнена, то через интервал времени, заданный битами WDP, произойдет
общий сброс микроконтроллера и перезапуск системы.
Рис. 7.1.7. Сторожевой таймер
7.1.7. Организация последовательного ввода вывода
В микроконтроллере реализован дуплексный прием/передача данных.
С этой целью в UART введен регистр состояния USR, анализ битов которого
позволяет во время записывать и считывать данные из буфера UDR. Буфер
UDR имеет один и тот же адрес как для приемника так и для передатчика, но
физически имеются два буфера данных, один для приемника другой для
передатчика.
Последовательный ввод вывод данных осуществляется со скоростью
VBAUD, которая может быть задана программно в регистре UBRR.
VBAUD = fclk / 16(UBRR+1),
где fclk – тактовая частота внутреннего генератора;
UBRR – число, которое должно быть записано в регистр UBRR.
Например, при тактовой частоте fclk=11,0592 Мгц для обеспечения скорости
9600
бит/с
в
регистр
UBRR
следует
записать
число
71
(UBRR+1=11059200/16*9600=72).
Формат данных может быть задан без проверки на четность (8 бит) или
с проверкой на четность 9 (бит). Проверяется потеря стопового бита (Framing
Error detection), случай приема нового байта, если предыдущий еще не был
прочитан (Overrun detection). В регистре состояний USR формируются биты
готовности приемника, готовности передатчика и бит, когда регистр данных
передатчика пуст. Указанные биты могут быть обработаны программно или
по прерыванию. Кроме того аппаратно фильтруются шумы и осуществляется
обнаружение ложного старт-бита.
Интерфейс SPI (Serial Peripheral Interface) предназначен для обмена
данными между микроконтроллером и периферийными устройствами в
синхронном режиме со скоростью до 1,5 Мбит/с. Подключение
микроконтроллера (Master) к периферийному устройству (Slave) показано на
рис.7.1.8. В режиме, когда микроконтроллер работает как Master, сигналы
91
синхронизации (SCK) формируются на выводе РВ7 (табл.7.1.5). Если Master
передает данные, то после записи байта в регистр записи/чтения данных
(SPDR) на выводе SCK формируются сигналы синхронизации, а на выводе
MOSI (Master Output Slave Input – РВ5) сигналы данных. После передачи
байта генерация синхроимпульсов прекращается и в регистре управления
SPCR устанавливается флаг конца передачи (преобразования) SPIF, который
может быть обработан по прерыванию. Если Master принимает данные, то
они поступают на вход MISO (Master Input Slave Output – РВ6). Для выбора
устройства Slave формируется сигнал ss на выводе РВ4.
Рис. 7.1.8. Схема соединений между микроконтроллером и периферийным
устройством по интерфейсу SPI
На рис 7.1.9 показана временная диаграмма
микроконтроллера к периферийному устройству.
передачи
байта
от
Рис. 7.1.9. Временная диаграмма передачи байта
В регистре управления SPCR имеется возможность устанавливать режимы
интерфейса SPI: менять полярность и фазу синхроимпульсов, менять
последовательность передачи битов (начинать передачу со старшего бита
MSB или с младшего бита LSB), выбирать для микроконтроллера режим
Master или Slave,устанавливать скорость передачи (fclk /4, fclk/16, fclk/64,
fclk/128).
7.1.8. Аналого-цифровой преобразователь и компаратор
В микроконтроллер встроен 8-канальный 10-разрядный аналогоцифровой преобразователь (АЦП). Работа АЦП обеспечивается генератором
тактовой частоты в диапазоне 50 – 200кГц. Преобразование аналоговой
величины в дискретную осуществляется за 13 тактов и, следовательно,
92
минимальное время преобразования равно 65мкс. Частота тактового
генератора АЦП может быть задана установкой коэффициентов деления 2, 4,
8, 16, 32, 62, 128 в регистре управления. АЦП работает в двух режимах:
режим запуска АЦП программистом с помощью установки бита старта
преобразования (ADC Start Conversion) и режим постоянного
преобразования. Для АЦП используется внешний источник опорного
напряжения VREF, напряжение которого равно 2,7 – 6,0В.
Аналоговый компаратор сравнивает две аналоговые величины
(рис.7.1.10), причем если напряжение на входе РВ2, чем на входе РВ3, то
сигнал на выходе компаратора высокого уровня и бит сравнения АСО, равен
единице. При сравнении бит АСО сбрасывается в ноль. Бит АСО, может
быть использован в режиме захвата таймера/счетчика Т/C1. Момент
сравнения может быть обработан по прерыванию. Программист может
указать три способа формирования бита прерывания ACI; по уровню сигнала
на выходе компаратора, по возрастанию сигнала на выходе компаратора или
по спаду сигнала на выходе компаратора. Выбор способа формирования бита
ACI осуществляется установкой битов ACIS1, ACIS2.
Рис. 7.1.10. Аналоговый компаратор
7.1.9. Организация прерываний
В прерывания в микроконтроллере делятся на внешние и внутренние. К
внешним прерываниям относятся прерывания, которые формируются от
сигналов, поступающих от внешних источников прерывания. Для
организации внешних прерываний предназначены три регистра: глобальный
регистр GIFR, регистр разрешения/запрещения прерывания GIMSK, (регистр
маски) и регистр управления MCUCR. Сигналы от внешних источников
прерываний INT0, INT1 подаются соответственно на входы PD2, PD3 порта
D. Обработка сигналов INT0, INT1 может быть осуществлена по низкому
уровню сигнала либо по возрастанию или по спаду сигнала. Выбор типа
обработки сигнала производится установкой соответствующих битов в
93
регистре MCUCR. Запоминание запросов прерываний от внешних сигналов
INT0, INT1 осуществляется в регистре GIFR. Обработка прерываний от
внешних источников производится в том случае, если установлены
соответствующие биты в регистре GIMSK и бит I общего разрешения
прерываний в регистре SREG.
Внутренние прерывания формируются при переполнении таймеров,
при приеме или передаче байта последовательного ввода вывода, при
преобразовании аналоговой величины в дискретную, при сравнении
аналоговых величин с помощью компаратора. Для организации прерываний
от внутренних источников прерываний имеются соответствующие регистры
для маскирования прерываний, для запоминания битов запросов прерываний.
В микроконтроллере нет регистра для указания приоритета источника
прерывания. Если возникает прерывание, то автоматически сбрасывается
флаг I общего разрешения прерывания и программист должен сам выбрать
момент, когда его снова установить.
За каждым источником прерывания закреплен вектор прерывания.
Ниже
показан пример как может быть организован переход к
соответствующему обработчику прерываний.
Адрес
Команда
Комментарий
0000h
rjmp on_reset
;переход к программе после сброса
0001h
rjmp EXT_INT0 ;переход к обработчику внешнего прерывания
0002h
rjmp EXT_INT1 ;переход к обработчику внешнего прерывании
1
0003h
rjmp T2_COMP ;переход к обработчику канала сравнения
Т/С2
0004h
rjmp T2_OVF ;переход к обработчику по переполнению
Т/С2
0005h
rjmp T1_CAPT ;переход к обработчику захвата события
0006h
rjmp T1_COMPА ;переход к обработчику канала сравнения А
0007h
rjmp T1_COMPВ ;переход к обработчику канала сравнения В
0008h
rjmp T1_OVF ;переход к обработчику по переполнению
Т/С1
0009h
rjmp T0_OVF ;переход к обработчику по переполнению
Т/С0
000Ah
rjmp SPI
;переход к обработчику по готовности SPI
000Bh
rjmp UART_RxD;переход к обработчику по готовности RxD
000Ch
rjmp UART_DRE;переход к обработчику, если буфер UART
пуст
000Dh
rjmp UART_TxD;переход к обработчику по готовности TxD
000Eh
rjmp ADC
;переход к обработчику по готовности АЦП
000Fh
rjmp EE_RDY ;переход к обработчику по готовности
EEPROM
0010h
rjmp ANA_COMP;переход к обработчику компаратора;
0011h on_reset: <первая команда программы>
94
7.1.10. Сброс микроконтроллера
В микроконтроллере используются три способа сброса:
─ сброс при включении питания VCC;
─ сброс от внешнего источника, когда установлен низкий уровень на
входе RESET в течение времени более двух периодов тактовой частоты
внутреннего генератора;
─ сброс от сторожевого таймера.
Лекция 14
7.2. Микроконтроллеры PIC
7.2.1. Семейства микроконтроллеров PIC
В настоящее время фирмой Microchip выпускаются 8- и 16-битные
микроконтроллеры общего назначения семейства PIC, а также цифровые
сигнальные процессоры семейства dsPIC, 16- и 32-разрядные. Перечень
семейств микроконтроллеров приведен на рис. 7.2.1.
Рис. 7.2.1. Семейства микроконтроллеров PIC
95
Семейства 8-битных контроллеров PIC10 и PIC12 ориентированы на
применение в простых системах, использующих малое количество
управляющих сигналов, поэтому контроллеры этого семейства выпускаются
в корпусах малого форм-фактора (рис.7.2.2),зачастую всего с 6 или 8
выводами (до 14).
Рис. 7.2.2. Микроконтроллеры PIC в корпусах малого форм-фактора
Семейства PIC16 и PIC18 - это 8-битные микроконтроллеры общего
назначения в корпусах среднего форм-фактора с количеством выводов как
правило 40 или 44 (от 14 до 44).
Рис.7.2.3. Микроконтроллеры PIC в корпусах среднего форм-фактора
8-битные контроллеры PIC имеют систему команд RISC, разрядность слова в
памяти программ 12, 14 или 16 бит. Системы команд схожи, однако для
разных семейств не являются совместимыми ни на уровне кодов (разная
разрядность памяти программ), ни на уровне операций.
Назначение выводов в корпусах одного форм-фактора для
контроллеров PIC разных семейств как правило одинаковое, что позволяет с
появлением более современных моделей контроллеров модернизировать
существующие схемы на базе этих контроллеров без изменения схем путем
простой замены контроллера на более современный. К сожалению, в общем
случае это требует переписывания старого программного обеспечения для
контроллеров новых моделей. Фирмой Microchip разработаны и
предлагаются стандартные методики адаптации программ для контроллеров
новых версий, что в данном случае несколько упрощает задачу
программистов.
Семейство PIC24 - это 16-разрядные микроконтроллеры.
dsPIC30 и dsPIC33 относятся к классу цифровых сигнальных процессоров за
счет специальных расширений системы команд. Все 16-битные контроллеры
имеют одинаковую архитектуру, базовую систему команд и назначение
96
выводов корпусов. Архитектура и система команд этих контроллеров, также
относящаяся к классу RISC, оптимизированы для использования
компиляторов языка Си.
Для разработки и отладки программного обеспечения для всех
семейств выпускаемых микроконтроллеров фирма Microchip выпускает
интегрированную среду разработки и отладки MPLab. Бесплатная версия
среды включает ассемблер MPASM, программный эмулятор с моделями всех
микроконтроллеров PIC, отладчик кодов и интерфейсы к популярным
программаторам и внутрисхемным эмуляторам. Дополнительно у
пользователя имеется возможность приобрести компилятор языка Си.
В рамках данного курса будут рассмотрены 8-битные контроллеры
PIC16F74
как
классические
представители
контроллеров
PIC,
демонстрирующие особенности, достоинства и недостатки подходов, общих
для всех 8-битных контроллеров Microchip.
Следует заметить, что семейство PIC16 считается несколько
устаревшим, и на смену ему повсеместно приходят контроллеры семейства
PIC18. Основное отличие этих семейств -разрядность слова в памяти
программ, составляющая 14 бит и 16 бит соответственно. 14-разрядные слова
в памяти программ PIC16 создают для программиста некоторые неудобства
в силу отсутствия кратности привычным 8-разрядным байтам. Отчасти, в
силу этого для рассмотрения выбрано именно это семейство.
7.2.2. Особенности архитектуры PIC16F74
Архитектура микроконтроллеров семейства PIC16 типична для
большинства современных микроконтроллеров – они построены по
Гарвардской архитектуре с раздельными адресными пространствами для
ПЗУ программ и ОЗУ. На борту микросхемы имеется три таймера, АЦП, два
компаратора, синхронный и асинхронный последовательные порты,
сторожевой таймер, таймер начальной инициализации, устройство
параллельного
ведомого
порта,
пять
портов
ввода-вывода
с
мультиплексированными функциями выводов.
Архитектура микроконтроллера представлена на рис. 7.2.4.
97
Основными критериями, которыми руководствовались разработчики
семейства PIC16, были дешевизна и быстродействие. В жертву этим
принципам частично принесена полнота и понятность системы команд: среди
команд нет не только деления или умножения, но даже сложения с учетом
переноса, а восприятие логики условных переходов или вычитаний констант
требует от программиста существенных мысленных усилий – зато такая
система команд легко поддается аппаратной интерпретации.
Ниже перечислены основные особенности рассматриваемых
микроконтроллеров. Контроллер выполнен по технологии КМОП. Питание
5В. Все внутренние устройства хранения – статические, рабочие частоты – от
0 до 20 МГц. Выводы портов достаточно мощные и позволяют, например,
непосредственно управлять светодиодными индикаторами, как в режиме
нуля, так и в режиме единицы. Максимально допустимый выходной ток – 20
мА на вывод, при этом суммарный ток на микросхему в целом не должен
превышать 200 мА.
Память программ и память данных разделены, их адресные
пространства индивидуальны. По внутренним шинам одновременно могут
98
передаваться 14-разрядные коды команд и 8-разрядные данные. Каждая
команда занимает ровно одно слово в памяти команд (14 бит). Память
команд адресуется словами. Отсутствуют команды явного чтенияиз памяти
программ (например, чтения констант). Память программ встроенная,
объемом 4k слов, выполнена по технологии flash-ПЗУ. Память программ
разбита на 2 страницы по 2k слов, во избежание проблем с адресацией
рекомендуется размещать программу (если это возможно) в младших 2k
памяти программ. Ранее выпускались модификации этого микроконтроллера
с масочным и однократно программируемым ПЗУ программ, а также
отладочные варианты, снабженные ПЗУ сультрафиолетовым стиранием.
Подключение внешней памяти программ или данных по схеме, аналогичной
используемой в микроконтроллерах семейства MCS51, в контроллерах
семейства PIC не предусмотрено. Для организации вызовов подпрограмм и
прерываний имеется аппаратный стек глубиной 8 уровней. Стек программно
недоступен, т.е. отсутствуют команды, аналогичные PUSH и POP, а также
любая возможность явно обратиться к ячейкам стека. Стек не отображается
на адресное пространство памяти данных. Стек имеет кольцевую структуру,
то есть при переполнении стека ошибка не возникает, но происходит запись
поверх значений, лежащих на дне стека.
При включении питания микроконтроллер стартует с адреса 0000h. Так как
по адресу 0004h располагается вектор (единственного) прерывания, то по
адресу 0000h обычно размещают команду перехода, а основную программу
располагают с адреса 0005h или выше.
Память данных объемом 256 байт именуется "файлом регистров".Часть
ячеек имеет общее назначение (192 байта), 64 ячейки представляют собой
регистры специальных функций (РСФ). Все ячейки доступны побитно. В
системе команд способ адресации к ячейкам общего назначения и РСФ не
различается (формально для доступа к ячейкам памятиданных используется
регистровая адресация). Память данных разделена на два банка, выбор банка
осуществляется установкой определенного бита в управляющем регистре.
Карта адресов памяти данных представлена на рис. 7.2.5.
99
Рис. 7.2.5. Адреса регистров специальных функций и общего назначения в
файле регистров
В архитектуре контроллера предусмотрен специальный 8-разрядный
регистр аккумулятора. Его мнемоническое обозначение несколько необычно
– W (working register), а не A или Acc, что является более привычным.
Аккумулятор не отображается на адресное пространство памяти данных.
Аккумулятор используется при выполнении большинства арифметических
действий и операций пересылок. Вместе с тем, например, операции сдвига
возможны только над ячейками файла регистров, но не над аккумулятором;
также аккумулятор недоступен побитно.
Адресация к файлу регистров – прямая или косвенная. Для организации
косвенной адресации к файлу регистров используется прямое обращение к
псевдорегистру INDF (по адресу 00). При обращении к INDF производится
реальное косвенное обращение по адресу, содержащемуся в регистре FSR.
Контроллер имеет 5 портов ввода-вывода (33 линии):
100
PORTA – 6-разрядный, 5 из 6 выводов могут использоваться как входы АЦП;
PORTB – 8-разрядный, изменение состояние выводов этого порта может
приводить к прерыванию;
PORTC – 8-разрядный, входы со свойствами триггера Шмитта, выводы порта
могут использоваться как входы/выходы различных устройств, например –
имеющегося на борту контроллера асинхронного приемопередатчика
(UART), устройства ШИМ и т.д.;
D – 8-разрядный, входы со свойствами триггера Шмитта, может
быть
сконфигурирован как параллельный ведомый порт;
– 3-разрядный, входы со свойствами триггера Шмитта, линии
порта могут использоваться как входы АЦП или как управляющие для
параллельного ведомого порта.
Каждый вывод любого из портов может быть независимо от других
сконфигурирован для работы в режиме входа или выхода, для этого служат
регистры TRISA – TRISE. В режиме входа сопротивление вывода велико, и
его можно рассматривать как вывод, находящийся в третьем
(высокоимпедансном) состоянии.
На кристалле имеются следующие периферийные устройства, в качестве
выходов иливходов которых могут быть сконфигурированы выводы портов
PORTA – PORTE:
– три таймера/счетчика;
– два модуля компаратора/ШИМ;
– один универсальный синхронно/асинхронный приемник/передатчик;
– один синхронный последовательный порт, функционирующий в
режиме SPI или I2C;
– одно устройство 8-разрядного ведомого параллельного порта;
– быстродействующий 8-разрядный АЦП, который может быть
скоммутирован с любым из 8 возможных аналоговых входов;
– сторожевой таймер с собственным RC-генератором;
– устройство сброса при падении напряжения питания (brown-out reset).
ЦАП среди устройств микроконтроллера отсутствует.
В микроконтроллере реализован режим останова, в этом режиме
энергопотребление чрезвычайно низко.
7.2.3. Принцип "чтение-модификация-запись"
Типичная функциональная схема порта (в данном случае это PORTD,
другие порты могут иметь дополнительные особенности) показана на рис.
7.2.6. Данная схема показывает, что при чтении из регистра порта всегда
читается состояние ВЫВОДОВ порта (напряжение на ножках), а при записи
в регистр порта записываемое значение попадает в регистр-защелку.
101
Рис. 7.2.6. Функциональная схема вывода порта PORTD
Команды установки отдельных битов следует применять к портам
контроллера с осторожностью именно из-за особенностей реализации
подхода "чтение-модификация- запись". При выполнении команды
установки бита происходит следующее:
– в узел управления считывается состояние ВСЕХ выводов порта;
– состояние нужного бита в прочитанном значении изменяется;
– полученное значение заносится в регистр-защелку порта, который
непосредственно управляет состоянием всех выводов, сконфигурированных
как выходы.
Проблема может возникнуть при попытке последовательно изменить
два бита, например 1 и 2:
– результатом первой команды будет изменение бита 1 в регистре
защелке;
– если бит 1 сконфигурирован как выход, то время, за которое изменится
напряжение на соответствующем выводе порта, зависит от емкостной
нагрузки, изменение не происходит мгновенно;
– следующая команда, призванная изменить бит 2, произведет чтение
напряжений с выводов порта, при этом вывод 1 может оказаться в
переходном (предыдущем) состоянии;
– в прочитанном значении бит 2 будет модифицирован, но бит 1 окажется
таким, каким был до выполнения предыдущей команды;
– в результате последовательного выполнения двух этих команд бит 1
может оказаться не модифицированным.
Выход из такой ситуации – при необходимости изменения нескольких битов
на выходе порта следует либо проводить такое изменение одной операцией
(работая с портом как с байтом), либо в явном виде считывать байт из порта,
102
модифицировать в нем биты по отдельности и записывать готовый байт
обратно в порт также в явном виде (отдельной командой).
7.2.4. Особенности языка ассемблера и системы команд
Микроконтроллер PIC16F74 имеет систему команд с сокращенным
набором инструкций (RISC). Все 35 команд микроконтроллера перечислены
ниже. Команды либо не имеют операндов, либо работают с прямо
адресуемыми регистрами внутренней памяти данных ("файла регистров")
или непосредственно указываемыми в теле команды константами. Код любой
команды умещается в 14-разрядное слово в памяти программ.
Для организации условных переходов имеется безусловный переход и
команды, обеспечивающие пропуск следующей команды по условию.
Мнемоническое обозначение команд в языке ассемблера микроконтроллеров
PIC также своеобразно.
Далее применяются следующие обозначения:
k означает литеральную константу (непосредственно адресуемый операнд).
f – адрес ячейки памяти данных (прямо адресуемый операнд).
d – уточняющий флаг направления, принимающий значение W или F и
означающий, должен ли результат операции быть помещен в аккумулятор
или в указанную в команде ячейку памяти. Данная особенность
(возможность помещать результат операции аккумулятор-регистр как в
аккумулятор, так и в регистр) обеспечивает системе команд существенную
дополнительную гибкость.
Команды пересылки данных
MOVLW k
Заносит в аккумулятор число k.
MOVWF f
Заносит значение из аккумулятора в ячейку f.
MOVF f,d
Заносит содержимое ячейки f в аккумулятор или оставляет его в ячейке f, в
зависимости от флага направления. Флаг нуля (Z) выставляется в
соответствии с переносимым числом, что нехарактерно для операций
пересылки в микроконтроллерах других семейств и может служить
источником ошибок программиста. Эта команда позволяет, в частности,
просто выполнить проверку нулевого значения в ячейке памяти, указав в
качестве приемника данных саму ячейку (например, movf 100,f).
Арифметические команды
ADDWF f,d
103
Складывает содержимое аккумулятора с указанной ячейкой памяти f,
результат помещает в аккумулятор или в ячейку f в зависимости от флага d.
Влияет на флаги C, DC, Z.
SUBWF f,d
Вычитает содержимое аккумулятора из ячейки памяти f (обратите внимание!
– ячейка минус аккумулятор), результат помещает в аккумулятор или в
ячейку f в зависимости от флага d. Влияет на флаги C, DC, Z.
ADDLW k
Прибавляет к содержимому аккумулятора константу k. Влияет на флаги C,
DC, Z.
SUBLW k
Вычитает из константы k содержимое аккумулятора (обратите внимание! –
константа минус аккумулятор), результат заносит в аккумулятор. Влияет на
флаги C, DC, Z.
ANDWF f,d
Выполняет операцию побитового И над содержимым аккумулятора и
указанной ячейкой памяти f, результат помещает в аккумулятор или в ячейку
f в зависимости от флага d. Влияет на флаг Z.
IORWF f,d
Выполняет операцию побитового ИЛИ над содержимым аккумулятора и
указанной ячейкой памяти f, результат помещает в аккумулятор или в ячейку
f в зависимости от флага d. Влияет на флаг Z.
XORWF f,d
Выполняет операцию побитового исключающего ИЛИ над содержимым
аккумулятора и указанной ячейкой памяти f, результат помещает в
аккумулятор или в ячейку f в зависимости от флага d. Влияет на флаг Z.
ANDLW k
Выполняет операцию побитового И над содержимым аккумулятора и
константой k, результат помещает в аккумулятор. Влияет на флаг Z.
IORLW k
Выполняет операцию побитового ИЛИ над содержимым аккумулятора и
константой k, результат помещает в аккумулятор. Влияет на флаг Z.
XORLW k
Выполняет операцию побитового исключающего ИЛИ над содержимым
аккумулятора и константой k, результат помещает в аккумулятор. Влияет на
флаг Z.
INCF f,d
Прибавляет единицу к содержимому ячейки f, результат помещает в
аккумулятор или в ячейку f в зависимости от флага d. Обратите внимание: в
системе команд нет команды инкремента аккумулятора. Влияет на флаг Z.
DECF f,d
Вычитает единицу из содержимого ячейки f, результат помещает в
аккумулятор или в ячейку f в зависимости от флага d. Обратите внимание: в
системе команд нет команды декремента аккумулятора. Влияет на флаг Z.
SWAPWF f,d
104
Переставляет местами тетрады в значении, содержащемся в ячейке f,
результат помещает в аккумулятор или в ячейку f в зависимости от флага d.
Обратите внимание: в системе команд нет команды перестановки тетрад в
аккумуляторе. Влияет на флаг Z.
RLF f,d
Осуществляет сдвиг влево через перенос значения ячейки f (старший бит
попадает в во флаг переноса, младший бит берется из флага переноса),
результат помещает в аккумулятор или в ячейку f в зависимости от флага d.
Обратите внимание: в системе команд нет команд сдвига аккумулятора.
Влияет на флаг C.
RRF f,d
Осуществляет сдвиг вправо через перенос значения ячейки f (младший бит
попадает в во флаг переноса, старший бит берется из флага переноса),
результат помещает в аккумулятор или в ячейку f в зависимости от флага d.
Обратите внимание: в системе команд нет команд сдвига аккумулятора.
Влияет на флаг C.
CLRF f
Помещает в ячейку f нулевое значение (очищает ячейку). Устанавливает флаг
Z.
CLRW
Помещает в аккумулятор нулевое значение (очищает аккумулятор).
Устанавливает флаг Z.
COMF f,d
Образует дополнение для значения ячейки f (т.е. вычисляет "минус f", аналог
команды NEG в i8086), результат помещает в аккумулятор или в ячейку f в
зависимости от флага d. Обратите внимание: в системе команд нет
аналогичной команды для аккумулятора. Влияет на флаг Z.
Битовые команды
Обратите внимание: битовые операции над аккумулятором не
предусмотрены.
BCF f,b
Сбрасывает бит номер b в ячейке памяти f в значение "0". Результат – в
ячейке f. Не влияет на флаги.
BSF f,b
Устанавливает бит номер b в ячейке памяти f в значение "1". Результат – в
ячейке f. Не влияет на флаги.
Управляющие команды
NOP
Пустая команда.
GOTO k
105
Безусловный переход на адрес k (адрес в команде кодируется 11 разрядами).
Старшие биты адреса берутся из PCLATH (актуально при переходах межу
2k-словными страницами).
CALL k
Вызов процедуры по адресу k (адрес в команде кодируется 11 разрядами).
Старшие биты адреса берутся из PCLATH (актуально при переходах межу
2k-словными страницами). Текущее значение счетчика команд помещается в
стек. Стек программно недоступен и имеет кольцевую структуру, 8 ячеек.
RETURN
Возврат из процедуры. Значение счетчика команд восстанавливается из
стека.
RETLW k
Возврат из процедуры с возвратом значения. Значение счетчика команд
восстанавливается из стека. Дополнительно в аккумулятор заносится
значение k. Обратите внимание – с помощью этой команды кодируются
массивы констант в памяти программ.
RETFIE
Возврат из прерывания. Аналогично RETURN, но дополнительно разрешает
прерывания путем занесения единицы в бит GIE.
SLEEP
Переводит процессор в спящий режим (см. документацию).
CLRWDT
Сбрасывает сторожевой таймер. Если при прошивке программы был
установлен бит использования сторожевого таймера, то эту команду
необходимо периодически вызывать для предотвращения сигнала сброса (см.
документацию).
Команды организации условных переходов (условный пропуск)
BTFSC f,b
Если бит b в ячейке f сброшен (равен нулю), то команда, расположенная
непосредственно за данной, не исполняется, а исполняется следующая. Часто
следующая команда – GOTO, CALL или RETURN.
Для проверки состояния флагов используется, например, такая конструкция,
использующая явное обращение к регистру флагов STATUS:
BTFSC STATUS, Z
GOTO metka ; переход, если флаг Z установлен, иначе эта команда
игнорируется
BTFSS f,b
Если бит b в ячейке f установлен (равен единице), то команда,
расположенная непосредственно за данной, не исполняется, а исполняется
следующая. См. примечание выше.
INCFSZ f,d
Прибавляет единицу к содержимому ячейки f, результат помещает в
аккумулятор или в ячейку f в зависимости от флага d. Не влияет на флаги.
106
Если в результате операции получается нулевое значение, то команда,
расположенная непосредственно за данной, не исполняется, а исполняется
следующая. Данная команда иногда применяется для организации циклов со
счетчиком.
DECFSZ f,d
Вычитает единицу из содержимого ячейки f, результат помещает в
аккумулятор или в ячейку f в зависимости от флага d. Не влияет на флаги.
Если в результате операции получается нулевое значение, то команда,
расположенная непосредственно за данной, не исполняется, а исполняется
следующая. Данная команда часто применяется для организации циклов со
счетчиком.
Следующие примеры поясняют, каким образом в системе команд PIC
может быть закодирован традиционный условный переход по "больше" или
"меньше или равно":
1. Переход, если аккумулятор больше константы X
sublw x ; w=x-w
btfss STATUS,C ; перенос сброшен при отрицательном результате!
goto lbl
2. Переход, если аккумулятор меньше или равен ячейке по адресу Addr
subwf Addr,w ; w=[Addr]-w
btfsc STATUS,C ; перенос сброшен при отрицательном результате!
goto lbl
7.2.5. Особенности ассемблера MPASM
Язык ассемблера MPASM имеет ряд особенностей, которые делают его
несколько
нестандартным
среди
прочих
ассемблерных
языков
микроконтроллеров. Эти особенности следующие.
В идентификаторах большие и малые буквы являются различимыми.
Однако при записи мнемоник команд и директив ассемблера допустимо
пользоваться и большими, и малыми буквами.
Двоеточие после метки не ставится. Метка располагается на строке
одна, команда в той же строке не пишется.
В MPASM действует соглашение, согласно которому метки
начинаются с начала строки, а мнемоники команд пишутся через пробелы
или символы табуляции от начала строки.
Это требование не является жестким требованием синтаксиса (его
можно нарушать), однако ассемблер выдает предупреждение, если встречает
метку не в начале строки и/или код операции или директиву – в начале
строки без ведущих пробелов.
Комментарии записываются после точки с запятой.
Десятичные константы записываются после символа точки, например
movlw .16 ; занести в аккумулятор число 16
107
Шестнадцатеричные константы записываются с префиксом 0x,
например
movlw 0x10 ; в аккумулятор заносится число 16=10h
Двоичные константы записываются в апострофах и с префиксом b,
напрмер
movlw b'00010000' ; в аккумулятор заносится число 16=10000b
Очень часто при кодировании алгоритмов управления в программе
требуется задать какие-то данные в виде массивов, обращение к элементам
которых строится по индексному принципу (по номеру элемента массива). В
микроконтроллерах PIC16F74 данная задача сопряжена с существенными
трудностями, так как память программ напрямую недоступна для
считывания, а кроме того разрядность слова в памяти программ не равна 8
битам. Для решения проблемы используется команда RETLW, производящая
возврат из процедуры с занесением в аккумулятор указанной константы,
директива ассемблера DT, а также некоторая на первый взгляд
нетривиальная программная конструкция.
Директива DT (Define Table), после которой через запятую
перечисляются однобайтовые значения, позволяет разместить в
последовательных словах памяти программ коды команды RETLW с
указанными значениями в качестве аргументов.
Например, в ассемблере микроконтроллера семейства MCS51 программист
написал бы конструкцию:
table DB 10,20,30,40
что привело бы к расположению в памяти программ четырех байтов со
значениями 10, 20, 30 и 40, откуда они в дальнейшем могут быть считаны
напрямую, например, с помощью конструкции:
mov DPTR, #table
movx A,@DPTR
В ассемблере PIC вместо этого записывается конструкция
Table DT .10,.20,.30,.40
которая на самом деле эквивалентна
table
RETLW .10
RETLW .20
RETLW .30
RETLW .40
Кроме того, для доступа к этой таблице следует написать специальную
псевдопроцедуру, разместив ее в пределах одной 256-словной страницы
памяти программ с таблицей table:
GetTable
ADDLW table
MOVWF PCL
Теперь, чтобы наконец прочитать в аккумулятор значение какого-то элемента
таблицы, программист должен поместить номер элемента в аккумулятор и
вызвать псевдопроцедуру по адресу GetTable:
108
MOVLW 2
CALL GetTable
В результате приведенной последовательности команд происходит
следующее:
– в аккумулятор помещается двойка;
– происходит переход к метке GetTable с сохранением в стеке адреса
возврата;
– к аккумулятору прибавляется адрес начала таблицы table, таким
образом, в нем теперь содержится адрес команды RETLW .30, элемента
номер 2 считая с нуля;
– в младший байт счетчика команд в явном виде заносится адрес команды
RETLW .30, и осуществляется переход на нее в пределах 256-байтовой
страницы памяти программ;
– команда RETLW .30 помещает в аккумулятор число 30 и возвращает
управление в точку, следующую за вызовом процедуры GetTable.
Приведенный код, способный привести в ужас любого сторонника
структурного подхода к программированию, иллюстрирует негативные
побочные
эффекты,
способные
возникнуть
при
использовании
сокращеннного набора команд в RISC-процессорах.
Ассемблер семейства PIC16 позволяет объявлять константы с помощью
традиционной директивы EQU, например
const1 EQU 0x55
Часто возникает необходимость объявить блок констант, числовые значения
которых увеличиваются на единицу в порядке перечисления. Самый
распространенный случай, когда возникает такая необходимость, это
назначение адресов переменным в памяти данных.
Первые 20h адресов в каждой странице памяти данных – это регистры
специальных функций. Следовательно, пользовательские данные могут быть
размещены по адресам 20h..7Fh. Пусть в программе используется всего три
переменные d1,d2 и d3, и пользователь желает разместить их по адресам 20h,
21h и 22h. Тогда это может быть закодировано средствами ассемблера PIC16
двояко:
d1 EQU 0x20
d2 EQU 0x21
d3 EQU 0x22
или
CBLOCK 0x20
d1,d2,d3
ENDC
Следует подчеркнуть, что директива CBLOCK прямого отношения к
распределению ячеек в памяти данных не имеет, и может быть использована
для назначения последовательных значений именованным константам для
любых целей, определяемых кодируемым алгоритмом.
109
Лекция 15
8. Цифровая обработка сигналов
8.1. Общие сведения о цифровой обработке сигналов
В настоящее время во многих областях техники осуществляется замена
аналоговых устройств на цифровые. В этом случае возникает необходимость
преобразования амплитуд входных аналоговых величин, поступающих через
определенные (чаще равные) временные промежутки, в число.
Преобразование аналоговой величины в цифровую производится с помощью
АЦП, и затем цифровая величина программным способом обрабатывается в
компьютере. В качестве цифровой обработки может быть приведен пример
выделения полезного сигнала из помех с помощью фильтра.
На рис.8.1.1 показана реализация аналогового фильтра с
использованием операционного усилителя. Входной сигнал X(t), на который
воздействуют помехи, поступает на вход фильтра. На выходе фильтра
полезный сигнал Y(t) показан жирной линией.
Rf
X(t)
X(t)
R
Cf
Y(t)
Y(t)
t
t
Рис. 8.1.1. Аналоговый фильтр
Амплитудно-частотная характеристика фильтра и его частота среза fc
определяются параметрами цепочки RfCf. На рис.8.1.2 показаны амплитудночастотные характеристики идеального фильтра и реального фильтра,
построенного на основе операционного усилителя.
Характеристики аналогового фильтра сильно зависят от внешних
факторов, таких как изменение температуры, старения элементов фильтра.
Кроме того, возникают дополнительные трудности, если потребуется
изменить частотные характеристики фильтра. В этом случае надо установить
емкость Cf и резистор Rf с другими параметрами.
110
Если применить теорему Котельникова, то аналоговая величина Х(t)
может быть представлена совокупностью дискретных отсчетов X(n), взятых
через интервалы ∆t.
А
f
А
fc
f
fc
Рис.8.1.2. Амплитудно-частотная характеристика фильтра
Существует математическое описание фильтров низкой частоты
(ФНЧ), с помощью которых может быть рассчитана любая амплитудночастотная характеристика и построен цифровой фильтр с конечной
импульсной характеристикой (КИХ). Фильтр КИХ описывается
выражением:
N
Y(n) = ∑ C(k)X(n-k),
k=0
где X(n-k) – дискретные отсчеты амплитуды аналоговой величины, C(k) –
коэффициенты фильтра, заранее рассчитанные, Y(n) – значение дискретной
величины на выходе фильтра.
Амплитудно-частотная
характеристика
фильтра
определяется
коэффициентами
C(k).
Качественные
характеристики
фильтрации
определяются числом k.
На рис. 8.1.3 показана структурная схема цифрового фильтра с
конечной импульсной характеристикой.
111
N
∑ C(k)X(n-k)
АЦП
ЦАП
k=0
Операция ЦОС
Рис. 8.1.3. Структурная схема цифрового фильтра
На рис.8.1.4 показан пример вычислительного устройства для
реализации цифрового фильтра КИХ. В память устройства записываются две
таблицы: таблица коэффициентов C(k) и таблица значений X(n-k), причем
при каждом поступлении нового значения дискретного отсчета амплитуды
аналоговой величины все предыдущие значения сдвигаются на один отсчет.
Таблица
Значений
Таблица
Коэффициентов
Y(n)
С(0)
Х
+
С(1)
Х
+
С(2)
Х
+
С(3)
Х
+
С(k)
Х
+
С(N-1)
Х
X(n)
X(n-1)
X(n-2)
X(n-3)
X(n-k)
X(n-N+1)
Рис. 8.1.4. Реализация цифрового фильтра КИХ
112
Самое старое значение при сдвиге теряется. Для вычисления значения
Y(n) необходимо произвести
N последовательных
умножений и
суммирования их результатов за короткое время ∆t, если цифровая обработка
сигнала осуществляется в реальном масштабе времени.
Процесс вычисления может быть разбит на операции умножения с
накоплением, которые обозначаются аббревиатурой МАС (S=А*В+S).
Укажем еще два примера ЦОС, часто встречающихся на практике.
Один пример относится к спектральному анализу с использованием
преобразования Фурье. Анализатор спектра позволяет определить
зависимости параметров входного сигнала от частот, т.е. любой сигнал
может быть представлен в частотной области как совокупность графиков в
координатах частота –амплитуда (X(f)). Дискретное преобразование Фурье в
частотной области задается формулой:
+∞
X(f) =∆t∑ x(n∆t)e-j2πfn∆t,
n=-∞
где x(nT) дискретные значения отсчетов сигнала, взятых через интервалы ∆t.
Для сокращения объема вычислений используют алгоритмы быстрого
преобразования Фурье (БПФ), в которых число временных отсчетов n
ограничивают в зависимости от точности вычислений. Для реализации
дискретного преобразования Фурье кроме операции МАС требуется быстрое
вычисление значений функции типа y=exp(x).
Второй
пример относится к задаче управления скоростью
электродвигателя. В этом случае может быть использован цифровой
регулятор, в основу которого положена модель пропорциональноинтегрально-дифференциального
регулятора
(ПИД).
Управляющее
воздействие u(k) ПИД регулятора описывается выражением:
u(k) = u(k-1)+ ∆u(k),
где к предыдущему значению управляющего воздействия u(k-1) добавляется
приращение ∆u(k), рассчитанное по формуле:
∆u(k)=с0u(k)- с1u(k-1)+ с2u(k-2),
где с0, с1, с2 – коэффициенты, рассчитанные заранее. В выражении для
вычисления управляющего воздействия u(k) присутствуют операции
умножения с накоплением, причем их также необходимо выполнять в
реальном масштабе времени.
Анализ приведенных примеров показывает, что цифровая обработка
сигналов ЦОС должна выполняться в реальном масштабе времени с заданной
точностью при ограничении времени обработки.
Преимущества цифровых методов обработки сигналов по сравнению с
аналоговыми состоит в расширении используемых математических
операций, усложнения алгоритмов обработки и повышения точности
вычислений. К недостаткам ЦОС следует отнести нехватку времени
113
обработки для некоторых приложений. Для преодоления указанного
недостатка многими производителями вычислительной техники разработан
ряд специализированных процессоров с высокой производительностью.
Такие процессоры называют сигнальными (DSP).
Лекция 16
8.2. Сигнальные микропроцессоры
Для повышения производительности сигнальных процессоров широко
используются все преимущества архитектуры RISC. Большинство команд
выполняются за один машинный такт. Для сокращения времени выполнения
команд применяются аппаратные способы вычисления некоторых
математических операций: умножение, сдвиг влево или вправо на несколько
разрядов, вычисление экспоненциальных функций, операции над
комплексными числами. Для большей эффективности выполнения
математических операций в состав операционного устройства включают
несколько АЛУ. В систему команд закладывают специализированные
операции. Например, в команде умножения с накоплением МАС может быть
указано правило изменения адресов ячеек памяти, где хранятся операнды
массивов А и В, и число циклов выполнения команды МАС. Реализация
указанных решений позволяет использовать сравнительно низкие тактовые
частоты работы сигнальных процессоров, что облегчает их применение в
промышленных условиях.
Сигнальные процессоры производятся многими компаниями.
Сложившееся к настоящему времени распределение рынка между ведущими
поставщиками (табл. 8.2.1) показывает, что 4 компании, стоящие в начале
списка, поставляют более 80% всех используемых в мире DSP. Именно эти
компании наиболее известны и на российском рынке, и их продукция часто
упоминается.
Таблица 8.2.1
Основные производители DSP и принадлежащие им доли рынка
№ п/п
1
2
3
4
5
6
7
8
9
Наименование компании
Texas Instruments
Freescale Semiconductor
Analog Devices
Philips Semiconductors
Agere Systems
Toshiba
DSP Group
NEC Electronics
Fujitsu
Доля рынка DSP
54,3%
14,1%
8,0%
7,5%
7,3%
4,9%
2,2%
0,6%
0,4%
114
10
11
Intersil
Другие
0,3%
0,5%
Из таблицы 8.2.1 видно, что в настоящее время наибольшее
распространение получили сигнальные процессоры компаний Analog Device,
Texas Instruments, Freescale. Сигнальные процессоры компании Analog
Devices удобны для приложений, требующих выполнения больших объемов
математических вычислений (таких как цифровая фильтрация сигнала,
вычисление
корреляционных
функций
и
т.п.),
поскольку
их
производительность на подобных задачах выше, чем у процессоров других
компаний. В то же время для задач, требующих выполнения интенсивного
обмена с внешними устройствами, предпочтительнее использовать
процессоры
Texas
Instruments,
обладающие
высокоскоростными
встроенными интерфейсными устройствами. Сигнальные процессоры
компании и Freescale более дешевы, и используются в промышленных
роботах, бытовых приборах, средствах беспроводной связи.
Перечислим основные характеристики сигнальных процессоров.
Формат данных и разрядность – одна из основных характеристик цифровых
сигнальных процессоров. В сигнальных процессорах используется формат с
фиксированной точкой (целые числа со знаком) либо формат с плавающей
точкой. Разрядность данных 16 или 32 бита.
На производительность процессора DSP влияет организация
внутренней памяти. Это связано с тем, что ключевые команды DSP являются
многооперандными, и для уменьшения времени их выполнения требуется
одновременное чтение нескольких ячеек памяти. Например, команда MAC
требует одновременного чтения 2 операндов и самой команды для того,
чтобы ее можно было выполнить за 1 такт. Это достигается различными
методами, среди которых применение многопортовой памяти, разделение на
память программ и память данных (Гарвардская архитектура), использование
кэша команд и т.д. DSP-процессоры широко используются в мобильных
устройствах, где потребление мощности является основной характеристикой.
Для снижения энергопотребления используется множество методов, в
том числе уменьшение напряжения питания и введение функций управления
потреблением, например, динамического изменения тактовой частоты,
переключения в спящий или дежурный режим или отключения
неиспользуемой в данный момент периферии.
Большое значение для микропроцессорных систем приобретает
возможность отладки и коррекции программ в готовом устройстве. Почти все
современные процессоры DSP поддерживают внутрисхемную эмуляцию в
соответствии со стандартом IEEE 1149.1 JTAG. При использовании
технологии JTAG осуществляется переход от эмуляции процессора внешним
устройством к непосредственному контролю над процессором при
115
выполнении программы, что позволяет значительно увеличить степень
соответствия макета реальному устройству и, следовательно, повысить
надежность процесса отладки.
8.3. Сигнальные процессоры фирмы Texas Instruments
Сигнальные процессоры компания Texas Instruments производит с 1982
года. К наиболее распространенным относятся процессоры семейства
TMS320, которые разделяются на процессоры с фиксированной точкой и на
процессоры с плавающей точкой. К процессорам с фиксированной точкой
относятся семейства TMS320С2ххх, TMS320С5ххх, TMS320С6ххх. К
процессорам с плавающей точкой относятся семейства TMS320С3ххх,
TMS320С4ххх,
TMS320С8ххх.
Каждое
семейство
содержит
высокопроизводительное ядро центрального процессорного устройства
(CPU), встроенную комбинированную память и широкий набор встроенных
периферийных устройств.
Обладая производительностью до 40 MIPS, 16-битные контроллеры
семейства C24x позволяют реализовывать различные алгоритмы управления.
Набор однотактовых инструкций обеспечивает быстрое выполнение
сложных математических вычислений в режиме реального времени, а
гарвардская архитектура имеет ряд удобств при использовании векторной
математики, часто используемой в задачах промышленной автоматизации.
Модернизированная
гарвардская
архитектура
контроллеров
C24x
обеспечивает максимальную скорость обработки данных благодаря наличию
раздельных шин для программы и данных, позволяя одновременно читать
данные и программные инструкции. Передача данных между двумя
пространствами
поддерживается
программно.
Структурная
схема
сигнального процессора TMS320C24x показана на рис.8.2.5.
116
Рис. 8.2.5. Структурная схема сигнального процессора TMS320C24x
В процессор встроена высокопроизводительная память ОЗУ (DRAM), в
которой осуществляются две операции за один цикл. Память программ
внутрисхемно перепрограммируемая (Flash-память). С этой целью в ПЗУ
зашита загрузочная программа.
Семейство процессоров TMS320C2000 обладает высокой степенью
интеграции периферийных устройств.
Три устройства ШИМ (PWM), САР, Таймеры выполняют роль модуля
обработчиков событий (РСА – массив программируемых счетчиков):
до 16 выходов ШИМ;
до четырех входов захвата состояния таймера (САР);
до шести 32-разрядных/шести 16-разрядных таймеров.
В состав процессора входит 10-разрядный 16-канальный АЦП. Время
преобразования 375 нс, запуск начала преобразования по внутренним или по
внешним сигналам. Внутренний или внешний источник опорного
напряжения.
В состав последовательных интерфейсов входят:
многоканальный буферизованный последовательный порт (McBSP), котрый
включает модули синхронных SCI и асинхронных UART приемников
передатчиков;
до 4 модулей последовательных периферийных интерфейсов SPI;
до двух модулей интерфейса САN, версии 2.0В;
шина I2C (версия 2.1).
В состав семейства TMS320C5000 входит цифровой сигнальный
процессор TMS320C54x, который является на сегодняшний день одним из
самых популярных в мире, обладая полноценной линейкой из 15
117
разнообразных устройств с диапазоном производительности от 30 до 532
MIPS. Передовая архитектура и набор инструкций семейства C54x
обеспечивает исключительно малый объем кода для типовых задач ЦОС,
позволяя использовать встроенное ОЗУ с максимальной эффективностью.
Широкие возможности цифровых сигнальных процессоров позволяют
использовать их в мобильных устройствах для подключения к сети Internet,
высокоскоростной радиосвязи и многих других.
Семейство 16-битных цифровых сигнальных процессоров с
фиксированной точкой C5000 обладает широчайшим выбором требуемых
разработчикам встроенных периферийных устройств (рис.8.2.6).
Рис. 8.2.6. Структурная схема процессоров семейства TMS320C5000
Ориентированное на высокоэффективные портативные устройства с
батарейным питанием, семейство процессоров C5000 обеспечивает высокую
гибкость при разработке микропроцессорных систем.
В состав периферийных устройств входят:
универсальный последовательный интерфейс USB 2.0 Full-Speed;
последовательны интерфейс UART;
последовательный интерфейс Inter Integrated-Circuit (I2C);
аналогово-цифровой преобразователь (АЦП)
поддержка карт Multimedia Card / Secure Digital (MMC/SD)
аппаратная поддержка видео
многоканальные буферизованные последовательные порты (McBSP)
непосредственный доступ к памяти (DMA)
параллельный 8/16-битный интерфейс Enhanced Host Port Interface (EHPI)
Сигнальные процессоры семейства TMS320C6000 применяются в
медицине, промышленных приложениях, системах многоканальной
телефонии, домашних охранных системах, цифровой обработке
изображений, 3D-графике и распознавании голоса
118
Процессоры выполнены на основе архитектуры VelociTI очень
длинного слова инструкции (VLIW). На тактовой частоте 200 МГц
процессоры C62х позволяют развить производительность 1600 миллионов
инструкций в секунду, что делает их эффективным инструментом для
решения сложных задач цифровой обработки. Процессоры C62х обладают
операционной
гибкостью
высокоскоростных
контроллеров
и
вычислительными способностями матричных процессоров. Процессор
содержит 32 32-разрядных регистра общего назначения и 8 независимых
функциональных блоков. В состав этих 8 блоков входят: 6 арифметикологических устройств (АЛУ) для достижения высокой степени параллелизма
и два 16-разрядных умножающих устройства с формированием 32разрядного результата. Процессоры могут выполнить за один цикл два
умножения-накопления
(MAC),
что
позволяет
достичь
общей
производительности 466 млн. MAC в секунду. Процессор также содержат
специфическую аппаратную логику, встроенную память и дополнительные
периферийные устройства. Процессор содержат большой банк встроенной
памяти и содержат мощный и разнообразный набор периферийных
устройств, в том числе многоканальные буферизованные последовательные
порты (McBSP), таймеры общего назначения, параллельный интерфейс хостпорта (TMS320C6201, TMS320C6211), 32-разрядную шину расширения
(6203, 6204), интерфейс PCI (TMS320C6205) и интерфейс внешней памяти
для непосредственного подключения к SDRAM или SBSRAM, а также
асинхронной памяти. Процессор C62x поддерживается полным набором
инструментальных средств для проектирования, в том числе: новый Сикомпилятор,
оптимизатор
ассемблирования
для
упрощения
программирования и распределения процессорного времени, а также
Windows-интерфейс отладчика для визуализации выполнения программного
кода.
Лекция 17
9. Комплексная отладка МПС
Особенность написания и отладки программного обеспечения для
однокристальных микро-ЭВМ (микроконтроллеров) и процессоров цифровой
обработки сигналов (ЦОС) состоит в том, что для этого, как правило,
совершенно недостаточно иметь системы, состоящей только из
программируемого микроконтроллера или процессора ЦОС.
Все это заставляет при разработке программ для микроконтроллеров
использовать специальные средства, называемыми инструментальными
средствами разработки и отладки. Инструментальные средства отладки
микроконтроллеров предназначены для повышения эффективности труда
разработчика.
119
Существуют различные варианты построения инструментальных
средств разработки и отладки. К ним относятся:
–– Внутрисхемные эмуляторы (ВСЭ);
–– Программные симуляторы; •
–– Платы разработки и отладки (ПРО);
–– Мониторы отладки; •
– Эмуляторы ПЗУ.
В настоящее время проектирование различных цифровых устройств
на базе микропроцессоров и микроконтроллеров невозможно представить без
применения разнообразных программных и аппаратно-программных
отладочных средств. К наиболее развитым аппаратно-программным
средствам комплексной отладки относятся внутрисхемные эмуляторы.
Внутрисхемные эмуляторы подключаются к отлаживаемой или тестируемой
системе вместо целевого микропроцессора или микроконтроллера и
позволяют гибко управлять поведением системы на протяжении процесса
отладки, собирать данные о состоянии ее различных объектов, выполнять
программы пользователя в различных режимах: в режиме реального времени
(непрерывное выполнение программы с заданного адреса), в пошаговом
режиме, в режиме с остановками функционирования по заданному условию.
Зачастую они позволяют эмулировать не только целевой процессор, но и
память, тактовый генератор, устройства ввода - вывода. Обычно в самом
начале отладка ведется с применением узлов эмулятора, функционирующих
вместо блоков отлаживаемой системы. В процессе отладки происходит
постепенная замена узлов внутрисхемного эмулятора на соответствующие
блоки устройства пользователя.
Таким образом, внутрисхемные эмуляторы представляют собой
весьма мощные средства для комплексной отладки микропроцессорных
систем.
Внутрисхемный эмулятор содержит следующие функциональные
блоки:
1. Отладчик;
2. Блок эмуляции микроконтроллера;
3. Эмуляционная память;
4. Процессор точек останова;
5. Трассировщик;
6. Анализатор эффективности программного кода;
7. Таймер реального времени;
8. Программно-аппаратные средства, обеспечивающие возможность чтения
и модификации ресурсов эмулируемого процессора в реальном масштабе
времени.
Функционально внутрисхемные эмуляторы делятся на стыкуемые с
ПЭВМ и функционирующие автономно. Автономные внутрисхемные
эмуляторы имеют индивидуальные вычислительные ресурсы, средства
ввода-вывода
120
Внутрисхемный эмулятор стыкуется с отлаживаемой системой при
помощи специальной эмуляционной головки. Эмуляционная головка
вставляется вместо микроконтроллера в отлаживаемую систему.
Внутрисхемный эмулятор точно воспроизводит электрические и временные
характеристики работы микроконтроллера, заменив отлаживаемый
микроконтроллер на внутрисхемный эмулятор
Симулятор – программное средство, способное имитировать работу
микроконтроллера и его памяти. Как правило, симулятор содержит в своем
составе отладчик и модель ЦПУ и памяти.
Более продвинутые симуляторы содержат в своѐм составе модели
встроенных периферийных устройств, таких, как таймеры, порты, АЦП и
системы прерываний.
Симулятор должен уметь загружать файлы программ во всех популярных
форматах, максимально полно отображать информацию о состоянии
ресурсов симулируемого микроконтроллера, а также предоставлять
возможности по симуляции выполнения загруженной программы в
различных режимах. В процессе отладки модель "выполняет" программу, и
на экране компьютера отображается текущее состояние модели.
Загрузив программу в симулятор, пользователь имеет возможность
запускать еѐ в пошаговом или непрерывном режимах, задавать условные или
безусловные точки останова, контролировать и свободно модифицировать
содержимое ячеек памяти и регистров симулируемого микропроцессора. С
помощью симулятора можно быстро проверить логику выполнения
программы, правильность выполнения арифметических операций.
В зависимости от класса используемого отладчика различные симуляторы
могут поддерживать высокоуровневую символьную отладку программ.
Некоторые модели симуляторов могут содержать ряд дополнительных
программных средств, таких, например, как интерфейс внешней среды,
встроенную интегрированную среду разработки.
В реальной системе микроконтроллер обычно занимается считыванием
информации с подключенных внешних устройств (датчиков), обработкой
этой информации и выдачей управляющих воздействий на исполнительные
устройства.
Чтобы в симуляторе, не обладающем интерфейсом внешней среды,
смоделировать работу датчика, нужно вручную изменять текущее состояние
модели периферийного устройства, к которому в реальной системе
подключѐн
датчик. Если, например, при приѐме байта через
последовательный порт взводится некоторый флажок, а сам байт попадает
в определѐнный регистр, то оба эти действия нужно производить в таком
симуляторе вручную. Наличие же интерфейса внешней среды позволяет
пользователю создавать и гибко использовать модель внешней среды
микроконтроллера,
функционирующую
и
взаимодействующую
с
отлаживаемой программой по заданному алгоритму.
Платы разработки и отладки (ПРО) являются конструкторами для
макетирования прикладных систем. В последнее время при выпуске новой
121
модели микроконтроллера фирма-производитель обязательно выпускает и
соответствующую плату ПРО. Обычно это печатная плата с установленным
на ней микроконтроллером плюс вся необходимая ему стандартная обвязка.
На этой плате также устанавливают схемы связи с внешним компьютером.
Как правило, там же имеется свободное поле для монтажа прикладных схем
пользователя. Иногда имеется уже готовая разводка для установки
дополнительных устройств, рекомендуемых фирмой. Например, ПЗУ, ОЗУ,
ЖКИ-дисплей, клавиатура, АЦП и др. Кроме учебных или макетных целей,
такие доработанные пользователем платы используются в качестве
одноплатных контроллеров, встраиваемых в мало серийную продукцию.
Для большего удобства платы ПРО комплектуются ещѐ и простейшим
средством отладки на базе монитора отладки. Однако здесь проявились два
разных подхода: один используется для микроконтроллеров, имеющих
внешнюю шину, а второй – для микроконтроллеров, не имеющих внешней
шины.
В первом случае отладочный монитор поставляется фирмой в виде
микросхемы ПЗУ, которая вставляется в специальную розетку на плате ПРО.
Плата также имеет ОЗУ для программ пользователя и канал связи
с внешним компьютером или терминалом.
Во втором случае плата ПРО имеет встроенные схемы
программирования
внутреннего
ПЗУ
микроконтроллера,
которые
управляются от внешнего компьютера. В этом случае программа монитора
просто заносится в ПЗУ микроконтроллера совместно с прикладными кодами
пользователя. Прикладная программа при этом специально должна быть
подготовлена: в нужные еѐ места вставляют вызовы отладочных
подпрограмм монитора. Затем осуществляется пробный прогон. Чтобы
внести в программу исправления пользователю надо стереть ПЗУ и
произвести повторную запись. Готовую прикладную программу получают
из отлаженной путѐм удаления всех вызовов мониторных функций и
самого монитора отладки. Примерами могут служить платы ПРО фирмы
Microchip для своих PIC контроллеров. Такой же принцип и у плат для
отладки микроконтроллеров 80С750 Philips или 89C2051 Atmel.
Важно отметить, что плюс к монитору, иногда платы ПРО комплектуются
ещѐ и программами отладки, которые запускаются на внешнем компьютере в
связке с монитором. Эти программы в последнее время заметно усложнились
и зачастую имеют высокопрофессиональный набор отладочных функций,
например отладчик- симулятор, или различные элементы, присущие в чистом
виде интегрированным средам разработки. В состав поставляемых
комплектов могут входить и программы прикладного характера, наиболее
часто встречающиеся на практике.
Эмулятор ПЗУ – программно-аппаратное средство, позволяющее
замещать ПЗУ на отлаживаемой плате и подставляющее вместо него ОЗУ, в
которое может быть загружена программа с компьютера через один из
стандартных каналов связи. Это устройство позволяет пользователю
избежать многократных циклов перепрограммирования ПЗУ. Эмулятор ПЗУ
122
имеет смысл только для микроконтроллеров, которые в состоянии
обращаться к внешней памяти программ. Эмулятор ПЗУ может работать с
любыми типами микроконтроллеров.
Сейчас появились модели интеллектуальных эмуляторов ПЗУ, которые
позволяют
контролировать
состояние
внутренних
элементов
микроконтроллера на плате пользователя и вообще, по управлению отладкой,
стали похожими на внутрисхемный эмулятор.
Интеллектуальные эмуляторы ПЗУ представляют собой гибрид из
обычного эмулятора ПЗУ, монитора отладки и схем быстрого переключения
шины от эмулятора к монитору и наоборот. Этим создаѐтся эффект, как если
бы монитор отладки был установлен на плате пользователя.
Таким образом, ещѐ каких-нибудь 15 – 20 лет назад наиболее
распространѐнным способом создания макета (прототипа) будущего
устройства был "живой": подобрав электронные компоненты, разработчик
брал в руки паяльник и собирал на макетных платах отдельные узлы или
устройство в целом. Затем начинался процесс отладки: исправление
ошибок принципиальной схемы, установка режимов работы, уточнение
параметров применяемых компонентов и т.д.
Этот вариант не потерял своей актуальности и по сей день, но применяется
сейчас в модифицированном виде:по блок-схеме прибора с учѐтом
планируемых технических характеристик выбирается микроконтроллер;
выбирается отладочная плата для данного микроконтроллера;
на основе анализа аналоговой части устройства принимается решение либо о
полном еѐ макетировании, либо использовании подходящих модулей с
макетированием схемы их объединения и схем дополнительных устройств,
входящих в прибор. Этот этап макетирования выполняется "в живую".
К преимуществам такого способа разработки можно отнести:
уменьшение времени выхода готовой продукции; уменьшение материальных
затрат и риска при разработке; использование собственных ресурсов для
ускорения разработки; свободное использование собственных разработок в
дальнейшем.
123