Антиплагиат полный Деревенко П.А. (1230293), страница 4
Текст из файла (страница 4)
МикроконтроллерPIC18F452, используемый в лабораторной работе, содержит пять портов: A, B,C, D, E.Каждый бит регистра TRISx определяет направление передачи данных через 31канал ввода/вывода. Если 31 бит установлен в 1, то вывод порта является 36 входом,если же сброшен в 0 – 36 выходом. Например, для того 42 чтобы разряды 6 и 7 портаС были 42 выходами, а все остальные – входами, в регистр TRISC необходимозаписать значение 0b'00111111' (рисунок 2.2).Биты регистра PORTx при конфигурации канала вывода как выхода (TRISx= 0b'00000000') определяют состояние вывода порта.
Если бит 31 сброшен в 0, 31 тона выводе устанавливается напряжение низкого уровня. Если 31 бит установлен в1, то 31 на выводе устанавливается напряжение высокого уровня. 3126 31Рисунок 2.2 – Регистры TRISC и PORTC2.5 ПрерыванияВо время работы микроконтроллер должен постоянно взаимодействовать сразличными внешними событиями, которые требуют незамедлительной реакциимикроконтроллера. Чтобы с этими событиями разобраться, используетсяфункция прерывания.Прерыванием называют вызов определенных функций, генерируемыйглавным образом аппаратной частью микроконтроллера. В моментвозникновения прерывания выполнение основной программы останавливаетсяи происходит переход к соответствующей подпрограмме обработки прерывания.Прерывания 42 разделяются на две группы: внешние и внутренние.
Внешниепрерывания могут быть вызваны сбросом МК (RESET) или сигналамипредустановленного уровня на выходах INT. Причинами внутреннихпрерываний являются встроенные модули микроконтроллера ( 42 таймер/счетчикили сторожевой таймер и 42 др.).Семейство микроконтроллеров PIC18 имеет два уровня прерываний:низкоприоритетное и высокоприоритетное. Вектор низкоприоритетногопрерывания располагается в памяти программ по адресу 0х000018, а вектор27высокоприоритетного – 0х000008. Когда одновременно возникает двапрерывания, в первую очередь обслуживается то, приоритет которого выше. Вслучае если оба прерывания имеют равный приоритет, то они будутобслуживаться по очереди. Если в момент обслуживания низкоприоритетногопрерывания возникает высокоприоритетное – в этом случаевысокоприоритетное прерывание прервет обработку низкоприоритетного.Каждому прерыванию соответствует свой флаг (оповещение), которыйнеобходимо сбрасывать программно после выполнения подпрограммыобработки прерывания, поскольку в противном случае прерывание сразу жеповторится.
Также каждое прерывание можно разрешить или запретить припомощи регистров управления.В PIC18F452 для управления прерываниями используется десять регистров:- RCON – специальный функциональный регистр, содержащий битвключения приоритетной системы прерываний и флаги прерываний;- INTCON/INTCON2/INTCON3 – специальные функциональные регистры,содержащие биты разрешения прерываний, флаги прерываний и битыприоритета прерываний;- PIE1/PIE2 – специальные функциональные регистры, содержащиеиндивидуальные биты разрешения периферийных прерываний;- PIR1/PIR2 – специальные функциональные регистры, содержащиеиндивидуальные флаги периферийных прерываний;- IPR1/IPR2 – специальные функциональные регистры, содержащиеиндивидуальные биты приоритета периферийных прерываний.2.6 Таймеры/счетчикиОсновное применение таймера/счетчика – подсчет числа внешних событийи измерение времени.
Используемый микроконтроллер содержит 4таймера/счетчика TMR0, TMR1, TMR2, TMR3. Для реализации прерывания попереполнению таймера, используется таймер/счетчик TMR0. Особенностямиданного таймера являются возможность работы в 8-разрядном и 16-разрядном28режимах, а так же программируемый предделитель, способный делить частоту,входящего в него сигнала на 256. Работая в 16-ти разрядном режиме, таймеримеет два регистра хранения чисел – TMR0H и TMR0L.
Таймер можноиспользовать двумя способами. Первый способ – это работа по переполнению,то есть 8-разрядный таймер досчитает от 0 до 255 и прекратит свою работу, а16-разрядный – от 0 до 65535, не использовав функции предделителя. Второйспособ – изначально посчитать по формуле 2.1 исходное значение, котороедолжно быть загружено в регистр TMR0H и TMR0L в двоичном виде, домомента переполнения таймера., (2.1)где – время до момента переполнения, мкс;K – коэффициент деления частоты, предделитель;– тактовая частота кварцевого резонатора, МГц;B –количество чисел, которые вмещает таймер.2.7 Семисегментные индикаторыСемисегментные индикаторы, применяемые преимущественно дляотображения числовой информации, получили широкое распространение,поскольку являются очень удобными и простыми в использовании.
Индикаторпредставляет собой несколько объединенных в одном корпусе одиночныхсветодиодов, соединенных, как правило, вместе либо анодом (общий анод), 31либо катодом (общий катод). 31 На рисунке 2.3 а приведено общепринятоеобозначение сегментов светодиодного индикатора.В программе Proteus 7.5 SP3 имеется целый ряд семисегментныхиндикаторов. В качестве примера на рисунке 2.3 б приведен индикатор с общиманодом 7SEG-COM-AN и его электрическая схема.29Рисунок 2.3 – Семисегментный индикатор: а – обозначение сегментов;б – внешний вид в программе Proteus 7.5; в – электрическая схема2.8 Динамическая индикацияНа практике отображение информации при помощи одной единственнойцифры используется редко, в большинстве случаев возникает необходимостьиспользовать индикаторы, состоящие из нескольких цифр.
При этом зажиганиекаждой цифры индикатора осуществляется с помощью динамическогоуправления, предполагающего быстрый вывод чисел на все разряды индикаторапо очереди. Если этот процесс выполнить с правильной скоростью, то в силуинерционности человеческого зрения будет казаться, что все цифры разрядовиндикатора светятся одновременно. На рисунке 2.4 приведена временнаядиаграмма, поясняющая принцип метода динамической индикации на примеречетырехзначного индикатора.
Как видим, в момент времени, когда на разряд 1подается высокий уровень напряжения, все другие разряды (2–4) обесточены.После того как на первом разряде закончился переходной процесс иустановилась логическая единица, на каналы управления сегментамииндикатора подается код числа, которое необходимо зажечь.Продолжительность импульса управления разрядами должна находиться вдиапазоне от 5 до 15 мс. Выключение числа происходит в обратном порядке:сначала отключается код числа с каналов управления сегментами, затем наразряде 1 устанавливается низкое значение напряжения. Остальные разрядычисла (2–4) включаются аналогичным образом.30Рисунок 2.4 – Временная диаграмма управления разрядами четырехзначного индикатораОсновные преимущества метода динамической индикации заключаются вснижении потребляемой мощности и сокращении количества используемыхпортов ввода/вывода микроконтроллера.Рисунок 2.5 – Электрическая схема индикатора 7SEG-MPX4-CAВ данном дипломном проекте используется четырехзначныйсемисегментный индикатор 7SEG-MPX4-CA.
В названии индикатора последниедва символа обозначают тип соединения светодиодов: CA – общий анод31(Common Anode), CC – общий катод (Common Cathode). На рисунке 2.5приведена электрическая схема индикатора 7SEG-MPX4-CA. На рисунке 2.4видно, что аноды диодов каждой цифры 31 индикатора подключаются к шинепитания через свой транзистор (VT1-VT4), а 31 однотипные сегменты всехчетырех цифр объединяются на одном из выводов (A-G, DP – точка).32333 РАЗРАБОТКА АЛГОРИТМА ИЗМЕРЕНИЯ ЧАСТОТЫ3.1 Алгоритм основной функцииАлгоритм представляет собой блок схему, у которой обязательно есть началои конец.Для начала работы нужно подключить стандартные библиотеки. Этобиблиотека полного функционала микроконтроллера и библиотека функциизадержек.Затем настроить динамическое управления, для управления разрядамитысяч, сотен, десятков и единиц.Далее следует настроить такие параметры микроконтроллера, как выборрежим генератора, включить/отключить сторожевой таймер,разрешить/запретить переключения источника такового сигнала,разрешить/запретить работу таймера включения питания, разрешить/запретитьсброс микроконтроллера по снижению напряжения питания,разрешить/запретить сброс микроконтроллера при переполнении стека,разрешить/запретить низковольтное программирование.Затем нужно ввести переменные для подсчета входящих импульсов и самойчастоты электрического тока.Следом вводим массив для вывода цифр на экран.
Каждая цифрасемисегметного индикатора – это набор из семи 0 и 1.Затем следует настроить подпрограмму прерываний, то есть определитьпрерывание высокого уровня, дать понять микроконтроллеру куда следуетпереходить, если поднялся флаг прерывания, а так же куда вернуться послевыполнения прерывания.После следует настроить порты ввода и вывода сигналов, некоторые ножкинужно настроить на ввод информации в микроконтроллер, а некоторые навывод.Следом настраиваем прерывание по таймеру 0, для подсчета импульсов,поступающих в микроконтроллер в течении 1 секунды, а затем таймеру 1,34который через каждые 5 мс переключает разряд динамической индикации.После разрешаем глобальное прерывание и на этом алгоритм зацикливается.Рисунок 3.1 – Алгоритм основной функции3.2 Алгоритмы прерыванияАлгоритмы прерывания тесно связаны друг с другом, поэтому используютсяпереходы с алгоритма на алгоритм.Алгоритм подсчета входного сигнала по ножке RB0 представлен на рисунке3.2.
Если на ножку RB0 пришел сигнал, то флаг прерывания сбрасывается(программно) и значение counter становится больше на единицу. Значениеcounter будет расти до того момента, пока не произойдет прерывание по35таймеру 0.В таймер 0 записано значение, при котором только спустя ровно 1 секундупроизойдет прерывание, после чего флаг прерывания по таймеру 0 обнуляется ив него вновь записывается число, которое заставляет его через секундупрерваться.Следом мы обнуляем переменные thousand, hundred, ten и one. Еслизначение counter меньше тысячи, то переходим ниже на два блока.
Еслипеременная counter приобрела значение больше 1000, то от этого значениявычитаем тысячу и переменную thousand увеличиваем на единицу. Затемпроверяем не стало ли значение переменной counter меньше, либо равнотысячи, если равно или больше, то операции, описанные выше, повторяем, дотого момента, пока значение не станет меньше тысячи.Когда значение counter становится меньше тысячи, проверяем больше лионо сотни, если меньше, то переходим на два блока ниже, если нет, то вычитаемиз значения counter число 100, при этом увеличивая переменную hundred наединицу.
Это происходит до тех пор, пока значение counter не станет меньше100.Далее проверяем, чтобы значение counter было больше десяти, если условиене выполняется, то нужно перейти на два блока ниже, а если выполняется, товычитаем из значения counter число 10, при этом увеличивая значениепеременной ten на единицу. Это происходит до тех пор, пока значение counter нестанет менее 10.Когда это произошло, нужно проверить больше ли значение counter единицыили нет, если нет, то значение counter обнуляем и переходим к выводу на экранчастоты. Если больше единицы, то считаем так же, как описывалось выше.Алгоритм прерывания по таймеру 0, который отвечает за подсчета разрядовдинамической индикации, представлен на рисунке 3.3.Для вывода на экран используется таймер 1.
Если сработал флаг прерыванияпо переполнению таймера 1, то флаг сбрасывается, в таймер записываетсячисло, равно 5 мс, а затем по очереди выводятся на экран разряды thousand,36hundred, ten, one. Алгоритм прерывания по таймеру 1, который отвечает завывод на динамический индикатор, представлен на рисунке 3.4.37Рисунок 3.2 – Алгоритм прерывания по таймеру 038Рисунок 3.3 – Алгоритм подсчета входного сигнала по порту RB0Рисунок 3.4 – Алгоритм прерывания по таймеру 139404 РАЗРАБОТКА ПРОГРАММЫ РАБОТЫ ЧАСТОТОМЕРА4.1 Введение в систему разработки MPLAB IDEMPLAB – это интегрированная среда разработки, позволяющаяосуществлять написание программ на языках ассемблера и С, а такжепроизводить тестирование и имитацию программного кода с использованиеминструментальных средств отладки. MPLAB включает в себя ряд отдельныхкомпонентов:- текстовый редактор – обеспечивает возможность ввода текста и позволяетраспознавать основные элементы языка программирования, обозначая команды,метки, комментарии разными цветами, что делает программный код болеенаглядным и читаемым;- менеджер проекта – группирует все файлы, относящиеся к одному проектувместе, а также обеспечивает их обновление и корректное взаимодействие другс другом;- компоновщик – объединяет файлы проекта воедино, присваивая каждомуфрагменту правильные адреса памяти, обеспечивая при этом корректныепереходы и обращения от одного файла к другому;- программный имитатор – позволяет тестировать программу, котораянаходится в стадии разработки, 52 при этом могут имитироваться входные ивыходные сигналы, а также наблюдаться состояния ячеек памяти;- 52 программный отладчик – включает средства, обеспечивающие полныйконтроль за выполнением программы, например: 52 пошаговая реализацияпрограммы, запуск её с пониженной скоростью исполнения либо остановка поконкретному адресу памяти.При создании проекта любой сложности интегральная среда разработкиMPLAB создает значительное число файлов, которые обозначаютсясоответствующими расширениями, приведенными в таблице 4.1.















