Главная » Просмотр файлов » А.П.Евдокимов, Л.Л.Владимиров Программирование микроконтроллера К1986ВЕ92QI компании Миландр

А.П.Евдокимов, Л.Л.Владимиров Программирование микроконтроллера К1986ВЕ92QI компании Миландр (1186478), страница 6

Файл №1186478 А.П.Евдокимов, Л.Л.Владимиров Программирование микроконтроллера К1986ВЕ92QI компании Миландр (А.П.Евдокимов, Л.Л.Владимиров Программирование микроконтроллера К1986ВЕ92QI компании Миландр) 6 страницаА.П.Евдокимов, Л.Л.Владимиров Программирование микроконтроллера К1986ВЕ92QI компании Миландр (1186478) страница 62020-08-29СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 6)

При этом микроконтроллер работает (задающий генератор выдает импульсы, ведет свой подсчет таймер...), но блок операций не исполняется ввиду его отсутствия.Главная функция нашей программы имеет вид:int main()Здесь int (от integer – целый) указывает тип данных – целочисленный. Иногда в скобках после главной функции пишут void (пустой), чем подчеркивают, что тип данных, с которым будет иметь делофункция, – произвольный.Внутри главной функции – названия двух процедур:PortsInit();TimerInit();Первая инициализирует порт, вторая – таймер.

Описание этих процедур должно быть выполнено до обращения к главной функции.44Процедура LED() также должна быть описана до обращения кней. Внутри процедуры объявляется переменная i:static uint8_t i;То есть переменная i – беззнаковая (u – unsigned), целая (int – integer),8-битная. Спецификатор static позволяет переменной сохранять своезначение между вызовами процедуры, а не инициализировать ее повторно при каждом вызове.Далее познакомимся с оператором switch.switch (переменная){case константа 1:Блок операторов 1break;case константа 2:Блок операторов 2break;...default:Блок операторов 3break;}Оператор switch сравнивает значение переменной с несколькими константами.

В случае (case), если переменная равна константе 1,выполняется блок операторов 1, после этого выполняется операторbreak, программа выходит из блока оператора switch и выполняетследующий после блока switch оператор. Если переменная равнаконстанте 2, то будет выполнен блок операторов 2, затем – выход изблока switch по оператору break и так далее. Если же переменная неравна ни одной из прописанных констант (default), то будет выполнен блок операторов 3, а затем break – выход. В нашем случае значение переменной i увеличивается на единицу, результат делится на 2, азатем определяется остаток от деления.

Ясно, что остаток будет принимать значения то 0, то 1. При этом, исходя из текста программы, впервом случае на линии порта будет выставлен логический 0, а вовтором – логическая единица.ПРАКТИЧЕСКАЯ ЧАСТЬ1. Подключите отладочную плату к компьютеру.2. Подайте питание на плату.3.

Запустите среду программирования Keil μVision.454. Занесите программу в микроконтроллер с помощью программатора. Удостоверьтесь в правильности работы устройства.5. По заданию преподавателя измените частоту мигания светодиода, соотношение длительности свечения и паузы.КОНТРОЛЬНЫЕ ВОПРОСЫ1. Что представляет собой таймер общего назначения микроконтроллера К1986ВЕ92QI?2. Для чего нужен делитель тактовой частоты? Как настроитьего работу?3. Для чего нужен предделитель? Как настроить его работу?4. Как организовать прерывание от таймера?5. Поясните логику работы программы, приведенной в даннойлабораторной работе.46ЛАБОРАТОРНАЯ РАБОТА 6.РЕЖИМ ШИРОТНО-ИМПУЛЬСНОЙ МОДУЛЯЦИИЦЕЛЬ РАБОТЫУметь настраивать таймер в режиме широтно-импульсной модуляции.ТЕОРЕТИЧЕСКАЯ ЧАСТЬКак вы помните из предыдущей работы, в режиме ШИМ микроконтроллер вырабатывает последовательность прямоугольных импульсов, у которых амплитуда и период являются постоянными, а ширина импульса изменяется в соответствии с программой (рисунок 6.1).При этом чем больше длительность импульса, тем выше среднееза период значение сигнала.

Средний уровень сигнала может бытьвыделен с помощью фильтра нижних частот либо период T выбирается таким, что в силу инерционности объекта воздействия последнийреагирует не на каждый импульс, а на средний уровень сигнала.Например, при частоте импульсов, подаваемых на светодиод, выше40-50 Гц глаз человека перестает замечать мерцания и реагирует насредний уровень яркости свечения светодиода.Рисунок 6.1 – Широтно-импульсная модуляция:T = const – период сигнала;  = var – длительность импульса;Uср = var – среднее значение сигнала за периодНапомним, что принцип широтно-импульсной модуляции часто применяют в автоматизации при необходимости цифровогоуправления такими величинами, как скорость вращения двигателяпостоянного тока, яркость свечения лампы, температура электронагревателя и т.п.47Рассмотрим программу, при выполнении которой микроконтроллер вырабатывает последовательность прямоугольных импульсов, у которых ширина сначала плавно возрастает до максимума,а затем резко спадает до минимума.

Ряд блоков программы был изучен ранее и пояснений не требует, тем не менее внимательно прочитайте каждый комментарий.// Подключение заголовочных файлов тех библиотек,// которые непосредственно используются в данной программе#include <MDR32F9Qx_port.h>#include <MDR32F9Qx_rst_clk.h>#include <MDR32F9Qx_timer.h>// Определение макроса задержки#define DELAY(T) for (i = T; i > 0; i--)// Глобальная переменная счетчика,// которая используется в макросе DELAY()int i;// Глобальная переменная длительности импульса по каналу 1uint16_t CCR1_Val;// Процедура инициализация портаvoid PortInit(){// Создание структуры для инициализации портаPORT_InitTypeDef Nastroyka;// Включение тактирования порта ARST_CLK_PCLKcmd(RST_CLK_PCLK_PORTA, ENABLE);// Сброс установок порта АPORT_DeInit(MDR_PORTA);// Настройка порта А, линия 1Nastroyka.PORT_Pin = PORT_Pin_1;// Работа линии на передачуNastroyka.PORT_OE = PORT_OE_OUT;// Альтернативная функция: TMR1_CH1Nastroyka.PORT_FUNC = PORT_FUNC_ALTER;// Цифровой режимNastroyka.PORT_MODE = PORT_MODE_DIGITAL;// Крутой фронтNastroyka.PORT_SPEED = PORT_SPEED_FAST;// Инициализация порта А объявленной структуройPORT_Init(MDR_PORTA, &Nastroyka);}// Процедура инициализация таймераvoid TimerInit(){48// Включение тактирования таймера 1RST_CLK_PCLKcmd(RST_CLK_PCLK_TIMER1, ENABLE);// Сброс установок таймера 1TIMER_DeInit(MDR_TIMER1);// Создание структуры конфигурации таймераTIMER_CntInitTypeDef sTIM_CntInit;// Заполнение структуры значениями по умолчаниюTIMER_CntStructInit(&sTIM_CntInit);// Предделитель частоты таймера равен 1sTIM_CntInit.TIMER_Prescaler = 0x0;// Установка максимально возможного периода импульсов ШИМsTIM_CntInit.TIMER_Period = 0xFFF;// Инициализация таймера 1 объявленной структуройTIMER_CntInit (MDR_TIMER1, &sTIM_CntInit);// Инициализация канала СН1 таймера 1 объявленной структуройTIMER_ChnStructInit (&sTIM_ChnInit);// Создание структуры конфигурации каналаTIMER_ChnInitTypeDef sTIM_ChnInit;// Режим работы канала – генерация ШИМsTIM_ChnInit.TIMER_CH_Mode = TIMER_CH_MODE_PWM;// Для получения сигнала ШИМ следует установить// формат выработки сигнала REF номер 6sTIM_ChnInit.TIMER_CH_REF_Format = TIMER_CH_REF_Format6;// Выбор канала 1sTIM_ChnInit.TIMER_CH_Number = TIMER_CHANNEL1;// Инициализация канала 1 объявленной структуройTIMER_ChnInit(MDR_TIMER1, &sTIM_ChnInit);// Установка длительности импульсов по первому каналуTIMER_SetChnCompare(MDR_TIMER1, TIMER_CHANNEL1, CCR1_Val);// Создание структуры конфигурации выходов каналаTIMER_ChnOutInitTypeDef sTIM_ChnOutInit;// Заполнение элементов структуры значениями по умолчаниюTIMER_ChnOutStructInit(&sTIM_ChnOutInit);// Выбор источника сигнала для прямого выхода CHx - сигнал REFsTIM_ChnOutInit.TIMER_CH_DirOut_Source = TIMER_CH_OutSrc_REF;// Настройка прямого выхода канала таймера CHx на вывод данныхsTIM_ChnOutInit.TIMER_CH_DirOut_Mode =TIMER_CH_OutMode_Output;// Настройка выходов канала 1sTIM_ChnOutInit.TIMER_CH_Number = TIMER_CHANNEL1;TIMER_ChnOutInit (MDR_TIMER1, &sTIM_ChnOutInit);// Включение делителя тактовой частоты таймера 149TIMER_BRGInit(MDR_TIMER1, TIMER_HCLKdiv1);// Разрешение работы таймера 1TIMER_Cmd(MDR_TIMER1, ENABLE); }// Объявление главной функцииint main(){// Установка начальной длительности импульса ШИМCCR1_Val = 0x001;// Вызов процедуры инициализации портаPortInit();// Вызов процедуры инициализации таймераTimerInit();// Главный циклwhile (1){// Инкремент переменной CCR1_Val (длительность импульса)CCR1_Val++;DELAY(5000); // Задержка// Установка новой длительности импульсаTIMER_SetChnCompare(MDR_TIMER1, TIMER_CHANNEL1, CCR1_Val);if (CCR1_Val == 0xFFF){CCR1_Val = 0x001;}}}Итак, главная функция main() начинается с вызова процедурыинициализации порта.

Таймер TIMER1 содержит 4 канала ШИМ. Какследует из таблицы 1.1 первый канал таймера TMR1_CH1 являетсяцифровой альтернативной функцией и закреплен за линией PA1 (вывод микросхемы – 62). В процедуре инициализации порта это прописано так:Nastroyka.PORT_FUNC = PORT_FUNC_ALTERПеременная CCR1_Val отвечает за длительность импульса, до вызова всех процедур ей присвоено значение 0x001. Когда начинаетсяосновной цикл, оператором CCR1_Val++ увеличивается на 1 значениепеременной CCR1_Val, которая отвечает за длительность импульса. Спомощью оператора if проверяем достигнуто ли предельное значениеширины импульса, равное периоду следования импульсов 0xFFF. Если достигнуто, то переменной CCR1_Val присваивается значение0x001, импульс становится минимальной ширины, и процесс начинается снова.50ПРАКТИЧЕСКАЯ ЧАСТЬ1.

Переведите мультиметр в режим измерения постоянногонапряжения. С помощью соединительных проводников подключитечерный вывод мультиметра к выводу 30 разъема X27 отладочной платы (рисунок 1.3), а красный вывод мультиметра – к выводу 12 того жеразъема платы.2. Подключите отладочную плату к компьютеру.3.

Подайте питание на плату.4. Запустите среду программирования Keil μVision.5. Занесите программу в микроконтроллер с помощью программатора. Наблюдая за изменением показаний мультиметра, удостоверьтесь в правильности работы устройства.6.

Отключите блок питания от отладочной платы и USB-кабель– от компьютера.7. Включите и настройте осциллограф. Подключите кабельосциллографа к отладочной плате: земля – к выводу 30 разъема X27(рисунок 1.3), потенциальный вывод – к выводу 12 того же разъемаплаты.8. Измерьте амплитуду, период следования, минимальную имаксимальную длительность импульсов.

Характеристики

Список файлов лабораторной работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6455
Авторов
на СтудИзбе
305
Средний доход
с одного платного файла
Обучение Подробнее