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

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

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

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

Установки программаторапри записи программы во флэш-память программДля написания программы на языке Си создадим файл main.c,для чего на вкладке Project в списке Source Group 1 с помощью правой кнопки мыши выберем меню Add New Item to Group ’SourceGroup1’… (рисунок 2.13). В появившемся окне (рисунок 2.14) выберем C File (.c), запишем имя main и нажмем кнопку Add (добавить).22Рисунок 2.13 – Создание файла для написания программы на языке СиРисунок 2.14 – Присвоение имени файлуВ созданном файле и будем писать программу. Но для началаскопируем ее текст из настоящего лабораторного практикума и вставим в окно редактирования программ.23#include <MDR32F9Qx_port.h>#include <MDR32F9Qx_rst_clk.h>#define DELAY(T) for (i = T; i > 0; i--)int i;int main(){RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE);PORT_InitTypeDef Nastroyka;Nastroyka.PORT_Pin= PORT_Pin_0;Nastroyka.PORT_OE= PORT_OE_OUT;Nastroyka.PORT_FUNC = PORT_FUNC_PORT;Nastroyka.PORT_MODE = PORT_MODE_DIGITAL;Nastroyka.PORT_SPEED = PORT_SPEED_SLOW;PORT_Init (MDR_PORTC, &Nastroyka);while (1){PORT_SetBits(MDR_PORTC, PORT_Pin_0);DELAY(100000);PORT_ResetBits(MDR_PORTC, PORT_Pin_0);DELAY(100000);}}Обратите внимание, что после последней фигурной скобки следует поставить одну пустую строку.Теперь нажмем кнопку Rebuild (перестроить) на панели инструментов (рисунок 2.15).Рисунок 2.15 – Присвоение имени файлуПри этом в окне Build Output, расположенном в нижней частиэкрана, появится текст:*** Using Compiler 'V5.06 update 5 (build 528)',folder: 'C:\Keil_v5\ARM\ARMCC\Bin'Rebuild target 'Target 1'assembling startup_MDR32F9Qx.scompiling system_MDR32F9Qx.ccompiling main.ccompiling MDR32F9Qx_port.ccompiling MDR32F9Qx_rst_clk.c24linking...Program Size: Code=1252 RO-data=224 RW-data=8 ZI-data=1632FromELF: creating hex file...".\Objects\BEGINNING.axf" - 0 Error(s), 0 Warning(s).Build Time Elapsed: 00:00:02Главное, что мы должны увидеть в этом тексте: 0 Error(s), 0Warning(s), то есть: ошибок нет, предостережений нет.Далее нажимаем кнопку LOAD (загрузить во флэш-память программ), – см.

рисунок 2.15.Здесь отчет в окне Build Output будет подлиннее. Пока для насглавное:Full Chip Erase Done.Programming Done.Verify OK.Application runningТо есть всё, что необходимо, исполнено; приложение работает.И в самом деле, светодиод VD3, расположенный на плате, сталмигать.Мы уже говорили о том, что микроконтроллер может работать иавтономно, без участия компьютера. Чтобы убедиться в этом, необходимо сначала отключить питание от отладочной платы, затем отсоединить разъем шлейфа JTAG-B от отладочной платы, а затем вновьподключить к плате источник питания. Но пока делать этого не будем.Сделаем первый шаг в программировании: заменим строки впрограмме DELAY(100000) на DELAY(10000), после чего вновь последовательно нажмем кнопки Rebuild и LOAD. Частота миганий светодиода изменилась. Вот так! Не сложно?КОНТРОЛЬНЫЕ ВОПРОСЫ1.

Каково назначение интегрированной среды разработки KeilμVision?2. Как создать проект в среде разработки Keil μVision?3. Как изменить частоту миганий светодиодов в приведенномпримере программы?25ЛАБОРАТОРНАЯ РАБОТА 3.УПРАВЛЕНИЕ ПОРТАМИ МИКРОКОНТРОЛЛЕРАЦЕЛЬ РАБОТЫУметь настраивать порты микроконтроллера.

Овладеть навыками записи программ в микроконтроллер.ТЕОРЕТИЧЕСКАЯ ЧАСТЬПорт микроконтроллера представляет собой параллельный регистр, через который микроконтроллер обменивается информацией свнешними устройствами. У микроконтроллера К1986ВЕ92QI имеется6 портов ввода/вывода: A, B, C, D, E, F. Порты имеют соответствующиеимена:MDR_PORTA,MDR_PORTB,MDR_PORTC,MDR_PORTD, MDR_PORTE, MDR_PORTF.Каждый порт является 16-разрядным, а его выводы (линии) могут использоваться различными функциональными блоками. Для тогочтобы выводы порта перешли под управление того или иного периферийного блока, необходимо задать для нужных выводов выполняемуюфункцию и настройки.

Поскольку микроконтроллер К1986ВЕ92QIразмещен в корпусе, имеющем 64 вывода, то не все разряды портовсвязаны с этими выводами (таблица 3.1). Всего задействовано 43 линии для подключения внешних устройств: порт А имеет 8 линий, портB – 11, порт С – 3, порт D – 8, порт E – 6, порт F – 7.Для настройки портов микроконтроллеров используют регистрыспециального назначения, и в зависимости от информации, помещаемой в них, порт будет работать в том или ином режиме.

Такой подходпредполагает скрупулезное изучение устройства микроконтроллера,что по мере роста сложности последних становится проблематичным.Разработчик предлагает более простой путь: работать не с регистрамимикроконтроллера, а с заранее подготовленными функциями, которыеим сведены в библиотеку.Для настройки порта воспользуемся библиотекой MDR32F9Qx.hи пошагово настроим порт.Порт не может работать без подключения к тактовому генератору, и это надо сделать в самом начале настройки порта. Подключениеосуществляется посредством специальной функции из другого библиотечного модуля – MDR32F9Qx_rst_clk.c:RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE);26Отнеситесь к этой записи как к шаблону, в котором вы можетеменять только две вещи: выбрать порт (например, PORTC или PORTA) иразрешить тактирование порта (ENABLE). Если потребуется запретитьтактирование, вместо слова ENABLE в функции следует записатьDISABLE.Таблица 3.1 – Линии порта, связанные с выводами микросхемы40MDR_PORTDPC2ПортMDR_PORTEPA0PA1PA2PA3PA4PA5PA6PA7PB0PB1PB2PB3PB4PB5PB6PB7PB8PB9PB10PC0PC1Номер вывода микросхемы636261605958575643444546475051525352544241ЛинияпортаMDR_PORTFMDR_PORTCMDR_PORTBMDR_PORTAПортPD0PD1PD2PD3PD4PD5PD6PD7PE0PE1PE2PE3––PE6PE7PF0PF1PF2PF3PF4PF5Номервыводамикросхемы313233343035362926252221––1615234567PF68ЛинияпортаЕсли требуется подключить несколько портов, то используетсялогическая функция ИЛИ:RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTA | RST_CLK_PCLK_PORTC |RST_CLK_PCLK_PORTD | RST_CLK_PCLK_PORTF,ENABLE);Знак « | » обозначает логическую функцию ИЛИ, он находитсяна верхнем регистре той же клавиши, что и слеш « / », но при английской раскладке клавиатуры.27Для инициализации порта потребуется структура следующеготипа: PORT_InitTypeDef.

После указания типа структуры необходимопридумать и указать имя, например, Nastroyka или, скажем, PortInit.Тогда описание структуры с именем будет выглядеть так:PORT_InitTypeDef Nastroyka;Теперь необходимо описать поля, входящие в структуру. Это ибудет настройкой порта.Сначала выберем линию порта, которую нужно настроить. Допустим, это линия 0. Тогда нужно сделать следующую запись:Nastroyka.PORT_Pin = PORT_Pin_0;То есть сначала имя структуры, затем – точка, следом – имянастраиваемого поля, знак равенства, значение поля.Если требуется настроить сразу несколько линий порта, скажем,первую, третью и пятую, то запись будет такой:Nastroyka.PORT_Pin = PORT_Pin_1 | PORT_Pin_3 | PORT_Pin_5;Если требуется настройка всех (по-английски – all) линий порта,то запись потребуется такая:Nastroyka.PORT_Pin = PORT_Pin_All;Мы уже знаем, что линиями порта могут воспользоваться различные периферийные блоки, и об этом тоже нужно сообщить микроконтроллеру. Пока мы хотим использовать порт как порт, т.е.

как параллельный регистр для хранения и выдачи информации. Описывается это так:Nastroyka.PORT_FUNC = PORT_FUNC_PORT;Информация, с которой имеет дело порт, может быть аналоговой (ANALOG) или цифровой (DIGITAL). Пусть – цифровой, тогда:Nastroyka.PORT_MODE = PORT_MODE_DIGITAL;У порта может быть два режима: передача информации (OUT) иее прием (IN):Nastroyka.PORT_OE = PORT_OE_OUT;28Значит, если к порту микроконтроллера нужно подключить индикаторный светодиод, то – OUT, а если кнопку для подачи логическихнулей и единиц в микроконтроллер, то – IN.Переход из логического нуля в логическую единицу и обратно влинии порта происходит не мгновенно.

Длительность фронта и срезаустановим самой большой, т.е. скорость переключения будет самойнизкой, медленной (SLOW):Nastroyka.PORT_SPEED = PORT_SPEED_SLOW;И, наконец, определимся с портом, к которому имеют отношение все указанные настройки, созданные нами с помощью структурыNastroyka. Пусть это будет порт С, который называется MDR_PORTC:PORT_Init(MDR_PORTC, &Nastroyka);Всё, настройка завершена.Теперь научимся работать с разрядами (битами) порта. Чтобызаписать логическую единицу в определенном разряде порта (установить бит) необходимо указать порт и линию порта (вывод, «пин»).Пусть это будет порт C, линия 0:PORT_SetBits(MDR_PORTC, PORT_Pin_0);Если требуется записать там же логический ноль (сбросить бит):PORT_ResetBits(MDR_PORTC, PORT_Pin_0);Чтобы прочитать информацию, по линии 0 порта C, используется следующая функция:PORT_ReadInputDataBit(MDR_PORTC, PORT_Pin_0);Мы можем и сами создавать подобные программные элементы,используя директивы.Например, #define – это директива, которая определяет идентификатор и последовательность символов, которой будет замещатьсяданный идентификатор при его обнаружении в тексте программы.

Тоесть идентификатор – это макрос, который заменяет последовательность, часто очень большую, символов.Структура данной директивы имеет следующий вид:#define ИДЕНТИФИКАТОР последовательность_символов29Например,#define NOMER 25Таким образом, если компилятор обнаружит в тексте программыслово NOMER, он заменит его на 25. Количество символов для заменыне ограничено.Подобным образом можно определять функции, значения аргументов которых будут определяться в ходе выполнения программы.Например,#define DELAY(T) for (i = T; i > 0; i--)Теперь, если в программе встретится выражение DELAY(55), будут выполняться следующие действия.

Переменной i будет присвоенозначение 55, затем оно будет уменьшено на единицу, потом – вновь наединицу, и так до тех пор, пока i будет оставаться положительным.Как только i станет равным нулю, осуществится переход к следующей строке программы. На выполнение описанных действий будет затрачено время, поэтому описанный прием иногда применяют, чтобысоздать временную задержку. К сожалению, при этом тратится нетолько время: мы занимаем процессор рутинной процедурой, и он ужене может заниматься ничем другим, что, конечно же, неэффективно. Вдальнейшем мы найдем иные способы задавать интервалы времени, авремя – важнейший фактор в управлении технологическими процессами.Итак, вернемся к программе, которую в лабораторной работе№2 мы бездумно залили в микроконтроллер и наблюдали миганиесветодиода.

Ниже еще раз приведен текст программы, но теперь уже скраткими комментариями, смысл которых мы только что прояснили.// Мигание светодиода// Подключение заголовочных файлов необходимых библиотек#include <MDR32F9Qx_port.h>#include <MDR32F9Qx_rst_clk.h>// Определение функции задержки#define DELAY(T) for (i = T; i > 0; i--)// Глобальная переменная i счетчика для макроса DELAY()int i;// Объявление главной функции,// с которой начинается работа программыint main(){30// Включение тактирования порта CRST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC, ENABLE);// Указание типа структуры и имени структурыPORT_InitTypeDef Nastroyka;// Объявление номера линии порта, которая// настраивается данной структуройNastroyka.PORT_Pin = PORT_Pin_0;// Конфигурация линии порта как выходаNastroyka.PORT_OE = PORT_OE_OUT;// Работа в режиме порта ввода-выводаNastroyka.PORT_FUNC = PORT_FUNC_PORT;// Цифровой режимNastroyka.PORT_MODE = PORT_MODE_DIGITAL;// Низкая скорость переключения (пологий фронт)Nastroyka.PORT_SPEED = PORT_SPEED_SLOW;// Инициализация порта C объявленной структуройPORT_Init(MDR_PORTC, & Nastroyka);// Главный циклwhile(1){// Установка единицы на линии PC0PORT_SetBits (MDR_PORTC, PORT_Pin_0);DELAY(100000); // Задержка// Установка нуля на PC0PORT_ResetBits (MDR_PORTC, PORT_Pin_0);DELAY(100000); // Задержка}}ПРАКТИЧЕСКАЯ ЧАСТЬ1.

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

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

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