Изменения периода и ширины следования входных импульсов с помощью циклов и с помощью таймера

Тип работы:
Контрольная
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

КОНТРОЛЬНАЯ РАБОТА

Изменения периода и ширины следования входных импульсов с помощью циклов и с помощью таймера

Введение

Программы можно писать не только для x86 компьютеров. Более того, большая часть процессоров в мире — НЕ x86. Основная часть микропроцессоров сейчас — это микроконтроллеры. В большинстве учебных заведений бывшего СССР изучение микроконтроллеров начинается с легендарного Intel 8051 (официальное название — MCS 51, также он известен как i8051 и MCS-51). У этого микроконтроллера есть assembler, очень похожий на ассемблер привычных нам процессоров x86 архитектуры. Этот контроллер применялся в старых клавиатурах, да и вообще много где он применялся. Будем называть этот микропроцессор Intel 8051 или MCS 51, потому что во всем мире он известен именно под этим названием.

Цель работы:

Есть входные импульсы с неким периодом = T и скважностью Q, с помощью цикла можно организовать их задержку, т. е. допустим пропускать каждый второй, что эквивалентно изменению периода следования в два раза. также в большинстве МК присутствуют таймеры общего назначения. Как правило, они используются для формирования различных интервалов времени и прямоугольных импульсов заданной частоты. Мало того, они могут работать в режиме счетчика и подсчитывать тактовые импульсы заданной частоты, либо измеряя таким образом длительность внешних сигналов, либо подсчитывать количество любых внешних импульсов. По переполнению таймера в режиме счета импульсов можно формировать «любой» необходимый интервал, синхронно привязанный к входным импульсам, что эквивалентно изменению периода их следования.

1. Особенности микроконтроллера

Intel 8051 — это 8 разрядный однокристальный микроконтроллер гардвардской архитектуры, впервые произведенный компанией Intel в 1980 году и предназначенный для использования во встраиваемых (embedded) системах. Он состоит из процессорного ядра (CPU), ОЗУ, ПЗУ, последовательного и параллельного порта, и еще небольшого количества дополнительных элементов. Программы для него можно писать на специализированном ассемблере, который очень напоминает ассемблер для x86-процессоров, или на языке С. Но, конечно, есть ограничения. У нас в распоряжении всего 128 байт ОЗУ (называется память DATA), 4 кбайта встроенного ПЗУ для хранения самой программы (память программ), и 64 кбайта в ПЗУ (называется XDATA — external data, или память данных). Зато есть прерывания.

Восьмиразрядные высокопроизводительные однокристальные микроЭВМ (ОМЭВМ) семейства МК51 выполнены по высококачественной n-МОП технологий (серия 1816) и КМОП технологии (серия 1830).

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

ОМЭВМ КР1816ВЕ51 и КР1830ВЕ51 содержат масочно-программируемое в процессе изготовления кристалла ПЗУ памяти программ емкостью 4096 байт и рассчитаны на применение в массовой продукции. За счет использования внешних микросхем памяти общий объем памяти программ может быть расширен до 64 Кбайт.

ОМЭВМ КМ1816ВЕ751 содержит ППЗУ емкостью 4096 байт со стиранием ультрафиолетовым излучением и удобна на этапе разработки системы при отладке программ, а также при производстве небольшими партиями или при создании систем, требующих в процессе эксплуатации периодической подстройки. За счет использования внешних микросхем памяти общий объем памяти программ может быть расширен до 64 Кбайт.

ОМЭВМ КР1816ВЕ31 и КР183ОВЕ31 не содержат встроенной памяти программ, однако могут использовать до 64 Кбайт внешней постоянной или перепрограммируемой памяти программ и эффективно использоваться в системах, требующих существенно большего по объему (чем 4 Кбайт на кристалле) ПЗУ памяти программ.

Каждая из перечисленных выше микросхем является соответственно аналогом БИС 8051, 80С51, 8751, 8031, 80С31 семейства MCS-51 фирмы Intel (США).

Каждая ОМЭВМ рассматриваемого семейства содержит встроенное ОЗУ памяти данных емкостью 128 байт с возможностью расширения общего объема оперативной памяти данных до 64 Кбайт за счет использования внешних микросхем ЗУПВ.

Общий объем памяти ОМЭВМ семейства МК51 может достигать 128 Кбайт: 64 Кбайт памяти программ и 64 Кбайт памяти данных.

При разработке на базе ОМЭВМ более сложных систем могут быть использованы стандартные ИС с байтовой организацией, например, серии КР580. В дальнейшем обозначение «МК51» будет общим для всех моделей семейства, за исключением случаев, которые будут оговорены особо. ОМЭВМ содержат все узлы, необходимые для автономной работы:

1) центральный восьмиразрядный процессор;

2) память программ объемом 4 Кбайт (только КМ1816ВЕ751, КР1816ВЕ51 и КР1830ВЕ51);

3) память данных объемом 128 байт;

4) четыре восьмиразрядных программируемых канала ввода-вывода;

5) два 16-битовых многорежимных таймера / счетчика;

6) систему прерываний с пятью векторами и двумя уровнями;

7) последовательный интерфейс;

8) тактовый генератор.

Аккумулятор. АСС — регистр аккумулятора. Команды, предназначенные для работы с аккумулятором, используют мнемонику «А», например, MOV А, Р2. Мнемоника «АСС» используется, к примеру, при побитовой адресации аккумулятора. Так, символическое имя пятого бита аккумулятора при использовании ассемблера ASM51 будет следующим: АСС.5.

Регистр В. Используется во время операций умножения и деления. Для других инструкций регистр В может рассматриваться как дополнительный сверхоперативный регистр.

Регистр состояния программы. Регистр PSW содержит информацию о состоянии программы.

Указатель стека SP. 8-битовый регистр, содержимое которого инкрементируется перед записью данных в стек при выполнении команд PUSH и CALL. При начальном сбросе указатель стека устанавливается в 07Н, а область стека в ОЗУ данных начинается с адреса 08Н. При необходимости путем переопределения указателя стека область стека может быть расположена в любом месте внутреннего ОЗУ данных микроЭВМ.

Указатель данных. Указатель данных (DPTR) состоит из старшего байта (DPH) и младшего байта (DPL). Содержит 16-битовый адрес при обращении к внешней памяти. Может использоваться как 16-битовый регистр или как два независимых восьмибитовых регистра.

Порт0-ПортЗ. Регистрами специальных функций Р0, Р1, Р2, РЗ являются регистры — «защелки» соответственно портов Р0, Р1, Р2, РЗ.

Буфер последовательного порта. SBUF представляет собой два отдельных регистра: буфер передатчика и буфер приемника. Когда данные записываются в SBUF, они поступают в буфер передатчика, причем запись байта в SBUF
автоматически инициирует его передачу через последовательный порт. Когда данные читаются из SBUF, они выбираются из буфера приемника.

Регистры таймера. Регистровые пары (TH0. TL0) и (TH1. TL1) образуют 16 — битовые счетные регистры соответственно таймера / счетчика 0 и таймера / счетчика 1.

Регистры управления. Регистры специальных функций IP, IE, TMOD, TCON, SCON и PCON содержат биты управления и биты состояния системы прерываний, таймеров / счетчиков и последовательного порта. ОМЭВМ при функционировании обеспечивает:

— минимальное время выполнения команд сложения — 1 мкс;
— аппаратное умножение и деление с минимальным временем выполнения команд умножения / деления — 4 мкс

2. Блок-схема алгоритма работы программы

Сначала программа записывает данные во внешнюю память. После этого она считывает исходные числа из внешней памяти во внутреннюю и одновременно сортирует их.

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

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

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

Процесс продолжается до использования всех чисел из внешней памяти.

После этого отсортированные элементы переписываются обратно во внешнюю память.

Использование памяти

Участки памяти:

Xdata: 0000h…0019h — область сортируемых чисел

data: 40h…53h — область, используемая для промежуточного хранения и сортировки чисел

Регистры:

DPTR: хранит адрес байта в XDATA (0000 h. 0019h).

A: используется как буфер для передачи данных из XDATA в DATA и для копирования данных из одного участка памяти в другой.

R0: хранит адрес обрабатываемого элемента в DATA (40 h. 53h)

R1: используется как локальный счетчик цикла.

R2: хранит данные из DPL для запоминания адреса текущего самого большего элемента.

Участок 36h: хранит текущее самое большое число.

/

/

Рис. 1.

3. Листинг программы

org 00h; смещение от начала

jmp start; переход к началу

org 50h; память данных

Start:

; ИНИЦИАЛИЗАЦИЯ

module_create_data:; Модуль устанавливает начальные значения байтам в XDATA с адресами 00 h. 09h

dataL equ 40h; Результаты измерения (2 байта)

dataH equ 41h

init_T0 equ 01b; Таймер Т0 — в конфигурации 16 бит

init_IE equ 0; Все прерывания запрещены

mov TMOD,#init_T0; Настройка таймеров и прерываний

mov IE,#init_IE

PWM: mov TL0,#0; Цикл измерений — обнуление таймера

mov TH0,#0

jb P1. 0,$; Ожидание завершения предыдущего импульса

jnb P1. 0,$; Ожидание начала нового импульса

setb TR0; Начало измерения — включение таймера

jb P1. 0,$; Ожидание завершения текущего импульса

clr TR0; Окончание измерения — выключение таймера

mov dataL, TL0; Фиксация результата измерений в памяти

mov dataH, TH0; Необходимая обработка данных

jmp PWM; Возврат к началу цикла измерений

Примечание: символ $ означает переход на адрес текущей команды — т. е. зацикливание Очевидное достоинство такого подхода — простота программной реализации за счет линейности программы и строгой последовательности проверок.

Серьезный недостаток — непроизводительное ожидание смены фаз импульса, причем длительность ожидания непостоянна, зависит от ширины импульса.

Измерение длительности ШИМ-импульсов с автоматическим запуском таймера

В микроконтроллерах семейства MCS-51 имеется возможность управлять запуском таймера с помощью уровня внешнего сигнала, подаваемого на вход INTx. Эта возможность активна при установке бита GATE=1 в регистре TMOD. При этом таймер следует включить программно один раз в блоке инициализации, а текущие запуски и остановы будут производиться в соответствии с фазой входного ШИМ-импульса.

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

микроконтроллер алгоритм программа

; Измерение длительности ШИМ с автоматическим запуском таймера

dataL equ 40h; Результаты измерения (2 байта)

dataH equ 41h

init_T0 equ 1001b; Таймер Т0 — в конфигурации 16 бит; и запуска по внешнему сигналу INT0

init_IE equ 1 000 0001b; Разрешено прерывание INT0

org 0

jmp main_prog; Переход на основную программу

org 0003h; Обработчик прерывания INT0

mov dataL, TL0; Фиксация результата измерений в памяти

mov dataH, TH0

mov TL0,#0; Обнуление таймера для следующего цикла

mov TH0,#0

reti; Возврат в основную программу

main_prog:; Основная программа

mov TMOD,#init_T0; Настройка таймеров и прерываний

mov IE,#init_IE

setb IT0; Прерывание INT0 будем принимать по срезу

mov TL0,#0; Начальное обнуление таймера

mov TH0,#0

jb P1. 0,$; Ожидание завершения предыдущего импульса

setb TR0; Включение таймера — но он еще не работает

main_calc:; Вычисления по алгоритмам,; выполняемые с нужным периодом дискретности

jmp main_calc

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

Обработчик прерывания INT0 в данном примере реализован непосредственно на векторе прерывания (адрес 0003h). В сложных программах с необходимостью обработки других прерываний может потребоваться перенос обработчика в другое место в памяти программ.

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

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

Автоматическое измерение частоты импульсов с захватом значения таймера

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

Если эту задачу решать на основе таймеров Т0 и Т1, то необходимо их совместное использование (один таймер реализует цикл измерений — эталонный интервал ТЭ, а на другом подсчитывается количество внешних импульсов N за этот интервал). Еще один возможный вариант — воспринимать внешние импульсы с помощью внешнего прерывания (INT0 или INT1), в обработчике которого брать текущее значение таймера Т0 или Т1 и перезапускать его с нуля.

В микроконтроллерах 80×52 имеется возможность большей автоматизации измерений частоты импульсов за счет использования специального режима захвата текущего значения для таймера Т2.

В этом случае входные импульсы следует подавать на вход T2EX, который управляет захватом — копированием текущего состояния таймера Т2 в регистры RCAP2H, RCAP2L

При настройке таймера Т2 с помощью регистра T2CON нужно активировать биты EXEN2 (разрешение восприятия сигнала по входу T2EX) и CP/RL2# (задание режима захвата). Байт для настройки таймера Т2 будет иметь вид: 1001b.

Период эталонных импульсов от ГТИ, поступающих на таймер, известен — ТГТИ = 12/FT. Тогда измеряемая частота внешних импульсов может быть выражена через количество подсчитанных импульсов N как:

FИ = 1 / (NЧТГТИ).

Минимальное значение измеряемой частоты составляет FИ min = 1 / (NmaxЧТГТИ), а максимальное — FИ max = 1 / ТГТИ, где Nmax = 65 535 для 16-битного таймера Т2.

Программная реализация указанного способа может быть следующей:

; Измерение частоты (периода) импульсов на основе таймера Т2

FdataL equ 40h; Результаты измерения (2 байта)

FdataH equ 41h

init_T2 equ 1001b; Конфигурация таймера Т2 — 16 бит; и запуск по внешнему сигналу T2EX

init_IE equ 1 010 0001b; Разрешено прерывание от Т2 и T2EX

org 0

jmp main_prog; Переход на основную программу

org 002Bh; Обработчик прерывания от входа T2EX

mov FdataL, RCAP2L; Копирование значений из регистров захвата

mov FdataH, RCAP2H

mov TL2,#0; Обнуление таймера Т2 для следующего цикла

mov TH2,#0; измерения периода импульсов

clr EXF2; Сброс флага прерывания EXF2

reti; Возврат в основную программу

main_prog:; Основная программа

mov TMOD,#init_T2; Настройка таймеров и прерываний

mov IE,#init_IE

mov TL2,#0; Начальное обнуление таймера

mov TH2,#0

setb TR2; Включение таймера Т2

main_calc:; Вычисления по алгоритмам,; выполняемые с нужным периодом дискретности

jmp main_calc

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

FИФ max = 1 / (14 ТГТИ)

Заключение

Данный подход основан на программном опросе уровня сигнала на входной линии микроконтроллера, на которую поступают ШИМ-импульсы. Когда программно фиксируется высокий (активный) уровень ШИМ-сигнала, включается средство измерения — таймер. При программной фиксации низкого уровня — завершении активной фазы импульса — таймер выключается и накопленное в таймере значение выражает длительность импульса в единицах. Измеряемая последовательность ШИМ-импульсов может подаваться на любой вход микроконтроллера, который можно программно проверить — например, Р1.0. Измерения производятся циклически. Поскольку обычно кроме измерения длительности импульсов необходимо производить некоторые вычисления, то возврат к очередному измерению может попасть на середину активной фазы текущего импульса. Поэтому в программе нужно обеспечить включение таймера именно по началу активной фазы импульса.

Литература

1. Герасимов В. В. «Микропроцессорное устройство и управление роботов» лекции 2012

2. Герасимов В.В. «Система команд микроконтроллеров MCS-51»,

ПоказатьСвернуть
Заполнить форму текущей работой