- •Раздел I. Общие сведения о микроконтроллерах. Тема 1.1. Понятие микроконтроллера.
- •Тема 1.2. Типы микроконтроллеров.
- •Встраиваемые микроконтроллеры.
- •16-И 32-разрядные микроконтроллеры (микроконтроллеры с внешней памятью).
- •Цифровые сигнальные процессоры.
- •Тема 1.3. Архитектура процессоров. Cisc и risc процессоры.
- •Гарвард против принстона.
- •Тема 1.4. Типы памяти микроконтроллеров
- •Память программ
- •Память данных
- •Тема 1.5. Регистры микроконтроллера. Пространство ввода-вывода
- •Внешняя память
- •Раздел II. Аппаратные средства микроконтроллеров Тема 2.1. Корпуса устройств
- •Тема 2.2. Питание микроконтроллеров.
- •Потребляемая мощность.
- •Подключение питания.
- •Тема 2.3. Запуск микроконтроллера (сброс в начальное состояние). Тактирование системы.
- •Тактирование системы
- •Тема 2.4. Командные циклы. Программный счетчик. Алу. Командные циклы.
- •Программный счетчик.
- •Арифметико-логическое устройство
- •Тема 2.5. Сторожевые таймеры. Прерывания. Сторожевые таймеры.
- •Прерывания.
- •Раздел III. Средства обмена в микроконтроллерах. Тема 3.1. Таймеры.
- •Тема 3.2. Параллельный ввод-вывод данных. Преобразование логических уровней. Параллельный ввод-вывод данных
- •Преобразование логических уровней.
- •Тема 3.3. Последовательный ввод-вывод данных.
- •Асинхронный последовательный обмен.
- •Синхронный последовательный обмен.
- •Тема 3.4. Протоколы передачи данных. Протокол microwire.
- •Протокол spi.
- •Протокол i2с
- •Раздел IV. Микроконтроллеры семействаMcs-51 Тема 4.1. Фирмы-производители микроконтроллеров. Типовые характеристики семейства mcs-51.
- •Тема 4.2. Структура микроконтроллеров mcs-51 и функции выводов
- •Тема 4.3. Организация памяти и программно доступные ресурсы.
- •Тема 4.4. Синхронизация, магистральные циклы.
- •Тема 4.5. Методы адресации и система команд.
- •Методы адресации
- •Регистровая адресация.
- •Прямая адресация.
- •Косвенно-регистровая адресация.
- •Непосредственная адресация.
- •Система команд семейства mcs-51
- •Арифметические команды.
- •Логические команды.
- •Команды пересылки данных.
- •Команды работы с битами.
- •Команды передачи управления.
- •Тема 4.6. Система прерываний
- •Особенности запросов внешних прерываний.
- •Тема 4.7. Параллельные порты
- •Обновление данных в портах
- •Операции типа «чтение-модификация-запись»
- •Тема 4.8. Таймеры-счетчики
- •Тема 4.9. Последовательный порт
- •Синхронный обмен (режим 0)
- •Асинхронный обмен (режимы 1, 2, 3)
- •Обмен в многопроцессорных системах
Раздел III. Средства обмена в микроконтроллерах. Тема 3.1. Таймеры.
Если вы знакомы с микропроцессорами, то, возможно, считаете, что таймеры используются только для обеспечения заданной задержки. В микроконтроллерах таймеры используются для решения гораздо более широкого круга задач.
Обычно для переключения таймера используются тактовые импульсы процессора. Загрузив в таймер начальное значение, можно отсчитывать определенные интервалы времени, фиксируя окончание интервала по моменту переполнения таймера.
Часто перед таймером включают предварительный делитель тактовой частоты, чтобы иметь возможность отсчитывать более длинные интервалы времени. Делитель обеспечивает инкремент содержимого таймера после поступления определенного числа тактовых импульсов.
Если требуется реализовать задержку в 10 mc (0.01с) в системе с тактовой частотой 10 МГц, то можно использовать схему, показанную на рис. 3.1, следующим образом. Сначала надо определить требуемый коэффициент деления. При тактовой частоте 10 МГц таймер должен переключиться до переполнения 10000 раз, что невозможно для 8-разрядного счетчика. Чтобы обеспечить заданную задержку, необходимо выбрать коэффициент деления для предварительного делителя, который обычно является степенью двойки (то есть 1, 2, 4, 8,...256). Если выбрать коэффициент деления 64, то таймер переключится 156 раз при поступлении на вход делителя 64 х 156 = 9984 тактовых импульсов, что достаточно близко к требуемой величине. Более точное значение задержки может быть достигнуто путем добавления команд NOP или других команд, используемых для заполнения определенных промежутков времени. Для отсчета заданного времени таймер можно очистить, а затем непрерывно сравнивать его содержимое со значением 156.
Рис. 3.1 - Структура таймера в микроконтроллере.
Более эффективный способ отсчета - загрузить в таймер число 100 = 256 - 156 и ждать, когда флаг прерывания по переполнению таймера установится в 1. Используя данный метод, можно реализовать мультизадачный режим выполнения программ. Переключение задач будет производиться, когда таймер отсчитает 10 мс.
Не рекомендуется использовать этот метод для создания часов реального времени. Так как при перезагрузке таймера значение коэффициента деления делителя неизвестно, а его содержимое сбрасывается в 0 при записи в регистр таймера, то при отсчете времени могут возникать ошибки. Вместо этого лучше дать возможность таймеру считать непрерывно (тогда делитель никогда не сбрасывается), а при его переполнении увеличивать содержимое счетчика часов реального времени. Когда программе требуется узнать текущее время, она выбирает и преобразует содержимое этого счетчика, получая правильное значение времени. Такой метод используется в IBM PC, где переключение («тик») таймера происходит 18,2 раз в секунду.
Глядя на рис.3.1 можно заметить, что таймер может быть использован для подсчета внешних событий, если использовать для его переключения внешний сигнал.
Если микроконтроллер содержит два таймера, то можно легко реализовать простой тахометр - счетчик числа событий, происходящих за единицу времени (рис. 3.2). Программа реализации тахометра сначала сбрасывает в 0 содержимое счетчика TMR2, а затем устанавливает определенный интервал времени для срабатывания таймера TMR1. По истечении этого интервала TMRI срабатывает (устанавливается в 1 бит переполнения TMR1) , вызывая считывание текущего содержимого из TMR2.
Рис. 3.2 - Реализация тахометра.
Таймеры в микроконтроллерах часто используются для ввода-вывода сигналов с широтно-импульсной модуляцией PWM (Pulse Width Modulated). PWM сигнал часто используется для передачи значения аналогового сигнала в цифровую систему или из нее. Сигнал имеет повторяющуюся форму, где длительность импульса пропорциональна значению передаваемой аналоговой величины (рис. 3.3).
PWM-сигналы часто используется для управления электродвигателями, задавая скорость вращения или положение вала в сервоприводе. На рис. 3.4 показана схема генерации PWM-сигнала на выходе микроконтроллера. Пока заданное значение «длительности импульса» больше, чем содержимое таймера, на выходе этой схемы будет поддерживаться высокий потенциал (вершина импульса). Когда содержимое таймера станет равно или больше, чем заданное значение «периода», то таймер сбрасывается в 0, и процесс повторяется. Такой метод получения PWM-сигнала требует минимального участия процессора - надо только задать необходимые значения периода и длительности импульса. При этом значение длительности импульса может изменяться процессором в любое время без остановки процесса вывода.
Рис. 3.3 - Сигнал с широтно-импульсной модуляцией PWM.
Рис. 3.4 - Схема генератора PWM-сигнала
Если необходимо сформировать прямоугольный импульсный сигнал определенной частоты, то можно использовать ту же схему, задав период в два раза больше длительности импульса.
Измерение длительности импульса PWM-сигнала может быть произведено с помощью схемы, приведенной на рис. 3.5. В этой схеме на вход RESET таймера подается сигнал сброса до тех пор, пока входной сигнал имеет низкий уровень. При поступлении высокого уровня входного сигнала таймер запускается, и его содержимое поступает в регистр длительности импульса. По окончании импульса, когда на входе снова устанавливается низкий уровень, содержимое таймера сохраняется в регистре длительности импульса, а таймер сбрасывается в 0 до прихода следующего импульса. Для упрощения на схеме не показаны некоторые элементы задержки, которые гарантируют, что значение таймера будет записано в регистр длительности до его сброса.
Рис. 2.5 - Схема измерения длительности импульса.
Самостоятельная работа № 1.