ВКР Шавро В.В. (1228554), страница 3
Текст из файла (страница 3)
- генерация прерывания по переполнению от 0хFF к 0х00 в 8-разрядном режиме и от 0xFFFF к 0x0000 в 16-разрядном режиме, рисунок (2.2, 2.3);
- выбор активного фронта внешнего тактового сигнала (T0CON<T0SE>).
2.4 Работа таймера TMR0
Модуль TMR0 может работать в режиме таймера или счетчика.
Выбор режима таймера осуществляется сболсом бита T0CKL в «0». В режиме таймера приращение происходит на каждом машинном цикле микроконтроллера (если предделитель включен). После записи в TMR0 приращение счетчика запрещено два следующих цикла. Пользователь должен скорректировать эту задержку перед записью нового значения в TMR0.[1, 2, 8]
Если бит T0CS установлен в «1», TMR0 работает в режиме счетчика с приращением от внешнего источника тактового сигнала на входе RA4/T0CKL. Активный фронт внешнего тактового сигнала выбирается битом T0SE. Если T0SE = 0, то активным является передний фронт сигнала). Основные требования к внешнему источнику тактового сигнала приведены ниже.[8]
При использовании внешнего тактового сигнала для TMR0 необходимо учитывать некоторые детали работы таймера. Активный фронт внешнего тактового сигнала синхронизируется с внутренней тактовой частотой микроконтроллера (FOSC), из-за чего возникает задержка от получения активного фронта сигнала для приращения TMR0.[1, 2, 8]
Рисунок 2.2. Структурная схема таймера TMR0 в 8-разрядном режиме
После сброса микроконтроллера TMR0 работает в 8-разрядном режиме с внешним тактовым сигналом (вывод T0CKL) и максимальным коэффициентом деления предделителя.[2, 8]
Рисунок 2.3 – Структурная схема таймера TMR0 в 16-разрядном режиме
2.5 Предделитель
8-разрядный счетчик может работать как предделитель TMR0, он не доступен для чтения/записи.
Коэффициент деления предделителя определяется битами PSA и T0PS2:T0PS0.
Сброс бита PSA в «0» отключает предделитель от таймера TMR0. Кода предделитель включен, то можно программно настроить его коэффициент деления 1:2 до 1:256.
Если предделитель включен перед TMR0, любые команды записи в TMR0 (например, CLRF TMR0, MOVWF TMR0, BSF TMR0 и т.д.) сбрасывают предделитель.
Запись в TMR0 сбросит предделитель, если он включен, но коэффициент предделителя не изменится.
2.6 Прерывания от TMR0
В 8-разрядном режиме таймера TMR0 при переполнении TMR0 (переход от FFh к 00h) происходит установка флага прерываний TMR0IF. В 16-разрядном режиме флаг прерывания TMR0IF устанавливается в «1», когда происходит переполнение сдвоенного регистра TMR0H:TMR0L (переход от FFFFh к 0000h). Прерывание может быть разрешено/запрещено битом TMR0IE. Бит TMR0IF должен быть программно сброшен в обработчике прерываний перед разрешением прерываний. Прерывание от TMR0 не может вывести микроконтроллер из режима SLEEP, т.к. модуль TMR0 в SLEEP режиме выключен.[8]
2.7 Чтение и запись таймера в 16-разрядном режиме
Регистр TMR0H не является старшим битом таймера/счетчика TMR0 в 16-разрядном режиме, функции буфера. Старший бит TMR0 не доступен для непосредственного чтения В TMR0H загружается старший байт TMR0 при чтении TMR0L. Это позволяет читать 16-разрядное значение полностью без необходимости проверки возможного переполнения младшего байта.[8]
Запись старшего байта TMR0 должна выполняться через буферный регистр TMR0H. В старший байт TMR0 переписывается значение из TMR0H при записи в регистр TMR0L. Это позволяет сразу записывать 16-разрядное значение.[8]
Рисунок 2.4 – Регистры и биты, связанные с работой модуля таймера TMR0
2.8 Прерывания
Обобщенная структура, иллюстрирующая основные аппаратные принципы прерываний, показана на рисунке (2.5)
Слева на рисунке показан один из нескольких источников прерываний – прерывание Х. Если происходит прерывание, то оно устанавливает S-R триггер. Таким образом регистрируется возникшее прерывание, даже если оно носит мгновенный характер. Выход триггера, то есть сохраненная версия прерывания, называется флагом прерывания. Выход триггера стробируется сигналом разрешения прерывания – разрешение прерывания Х. Если сигнал стробирования имеет состояние, соответствующее логической 1, то сигнал прерывания идет на логический элемент ИЛИ. Если же сигнал стробирования имеет состояние, соответствующее логическому 0, то сигнал прерывания дальше никуда не поступает. Если сигнал прерывания разрешен, то он подается на схемы логического ИЛИ вместе с другими разрешенными сигналами прерываний микроконтроллера. Выход логического ИЛИ будет соответствовать логической 1, когда любое прерывание на входе логического ИЛИ будет находиться в состоянии, соответствующем логической 1. Выход первичного каскада логического ИЛИ стробируется сигналом Глобальное разрешение прерываний. Только в случае, если значение этого сигнала соответствует логической 1, любой сигнал прерываний может достигнуть ЦП. Когда ЦП отреагировал на прерывания, то необходимо сбросить флаг прерывания, то необходимо сбросить флаг прерывания.[1, 2, 8]
Рисунок 2.5 – Простая схема прерываний общего назначения
2.9 Структура прерываний
Микроконтроллер имеет четыре источника прерывания, каждый из которых можно индивидуально разрешить или запретить:
- внешнее прерывание;
- переполнение таймера. Это прерывание, вызываемое модулем таймера 0 при переполнении счетчика таймера;
- прерывание по изменению состояния порта В. Это прерывание возникает, когда обнаружено изменение состояния любого из старших 4 разрядов порта В;
- завершение записи в ЭСППЗУ. Это прерывание возникает, когда команда записи в память EEPROM (или ЭСППЗУ) завершена.
Микроконтроллер PIC18F452 реализует усложненную структуру прерываний. Улучшения включают введение второго вектора прерывания, при этом различается вектор прерывания высокого приоритета и вектор прерывания низкого приоритета, а также имеется большое количество внешних прерываний.[8]
2.10 Вывод информации на двухстрочный алфавитно – цифровой жидко – кристалический дисплей
Алфавитно-цифровые жидко-кристаллические дисплеи (ЖКД) предназначены для отображения большого объема информации при низком энергопотреблении. Широкое распространение получили конструкции жидкокристаллических дисплеев, базирующихся на формате семисегментных и точечных матриц. Как правило, алфавитно-цифровые ЖКД состоят из внутреннего контроллера управления и ЖК панели. В схеме моделирования измерителя коэффициента мощности используется алфавитно-цифровой ЖКД LM016L, позволяющий отображать 2 строки по 16 символов, отображающихся в матрице 5/8 точек (рисунок 2.6).[8]
Рисунок 2.6 – Внешний вид алфавитно-цифрового ЖКД LM016L
Изучив устройство микроконтроллера, семейства PIC18F452, его конструкцию и модули, переходим к разработке алгоритма программы измерителя мощности.
3 РАЗРАБОТКА АЛГОРИТМА РАБОТЫ ГЛАВНОЙ ФУНКЦИИ
В данном пункте будет произведено изучение алгоритма работы программы измерителя мощности в виде блок – схемы (рисунок 3.1а, 3.1б, 3.1в, 3.1г, 3.2).
Рисунок 3.1а – Алгоритм работы главной фунцкии
Рисунок 3.1б – Алгоритм работы главной функции
Рисунок 3.1в – Алгоритм работы главной фунцкии
Рисунок 3.1г – Алгоритм работы главной фунцкии
Рисунок 3.2 – Упрощенная схема алгоритма основной фунцкии
3.1 Разработка алгоритма работы прерываний
Алгоритм прерывания по модулю TMR0 изображен на рисунке 3.3.
Рисунок 3.3 – Алгоритм работы прерываний по TMR0
Алгоритм прерываний по внешнему сигналу изображен на рисунке 3.4а, 3.4б.
Рисунок 3.4а – Алгоритм работы прерывания по внешнему сигналу
Заключение: исследовав алгоритм работы главной программы и функции прерывания, является возможным написание программного кода, используя программное обеспечение.
Упрощенный алгоритм работы прерывания изображен на рисунке 3.5
Рисунок 3.4б – Алгоритм работы прерываний по внешнему сигналу
Рисунок 3.5 – Упрощенный вид алгоритма работы прерываний
4 РАЗРАБОТКА ПРОГРАММЫ РАБОТЫ ИЗМЕРИТЕЛЯ МОЩНОСТИ В СРЕДЕ MPLAB
4.1 Введение в систему разработки MPLAB IDE
Цель данного раздела: изучить программное обеспечение, разработать программу работы измерителя мощности в среде MPLAB и проанализировать программный код.
MPLAB – это интегрированная среда разработки, позволяющая осуществлять написание программ на языках ассемблера и С, а также производить тестирование и имитацию программного кода с использованием инструментальных средств отладки. MPLAB включает в себя ряд отдельных компонентов:
- текстовый редактор – обеспечивает возможность ввода текста и позволяет распознавать основные элементы языка программирования, обозначая команды, метки, комментарии разными цветами, что делает программный код более наглядным и читаемым;
- менеджер проекта – группирует все файлы, относящиеся к одному проекту вместе, а также обеспечивает их обновление и корректное взаимодействие друг с другом;
- компоновщик – объединяет файлы проекта воедино, присваивая каждому фрагменту правильные адреса памяти, обеспечивая при этом корректные переходы и обращения от одного файла к другому;
- программный имитатор – позволяет тестировать программу, которая находится в стадии разработки, при этом могут имитироваться входные и выходные сигналы, а также наблюдаться состояния ячеек памяти;
- программный отладчик – включает средства, обеспечивающие полный контроль за выполнением программы, например,: пошаговая реализация программы, запуск её с пониженной скоростью исполнения либо остановка по конкретному адресу памяти.[8]
При создании проекта любой сложности интегральная среда разработки MPLAB создает значительное число файлов, которые обозначаются соответствующими расширениями, приведенными на рисунке 4.1. При объявлении проекта создаются файлы типа .mcp и .mcw. Если исходный текст будет успешно скомпонован, то будут сгенерированы файлы с расширением .lst, .cof и .hex, а в случае возникновения ошибки – .err.[8]
Рисунок 1.1 – Основные файловые расширения, используемые в MPLAB
4.2 Анализ программного кода
Для исследования программного кода измерителя мощности, составленного на языке программирования С (Си), используется раздел Приложение 4.














