Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методические указания к практическим работам по ВТиИТ

.pdf
Скачиваний:
22
Добавлен:
22.03.2016
Размер:
518.1 Кб
Скачать

Лабораторная работа № 1 Изучение программной среды Keil для

программирования микроконтроллеров. Работа с портами ввода-вывода.

Лабораторный практикум знакомит слушателей с интерфейсом и возможностями программы Keil для программирования микроконтроллеров.

1Цель работы изучить интерфейс программной среды Keil для программирования микроконтроллеров. Научиться работать с портами ввода-вывода, на примере программы включения светодиода

2Средства используемые при выполнении практической работы

Практическая работа выполняется на персональном

компьютере с установленной программой средой Keil.

3 Порядок выполнения практической работы

3.1 Создание и настройка проекта для работы с микроконтроллером 1901ВЦ1Т

Запустим Keil uVision4. Главное окно программы, представленное на рисунке 1, состоит из нескольких частей: 1 – окно программы на языке С++, 2 – окно результата компиляции и загрузки программы, в котором также отображаются ошибки, возникающие в процессе компиляции либо загрузки программы, 3 – окно дерева проекта, где отображаются структура и файлы, используемые проектом.

Панель управления содержит следующие кнопки: - кнопки компиляции проекта

- загрузка программы в кристалл микроконтроллера

8

Рисунок 1 – Главное окно программы.

В режиме отладки главное окно программы выглядит в соответствии с рисунком 2, где представлены следующие элементы: 1 – дизассемблер, представляет текст программы в машинном виде, 2 – окно с текстом программы на С++, 3 – окно просмотра состояния переменных программы, которое организовано в виде четырёх страниц. Страница Locals отображает локальные переменные текущей выполняемой подпрограммы, две следующие страницы служат для отображения любых переменных, заданных пользователем, последняя страница Call Stack отображает последовательность вызова вложенных подпрограмм. 4 – окно команд, 5 – отображения состояния регистров микроконтроллера.

Панель управления в режиме отладки содержит следующие кнопки:

- сброс микроконтроллера

9

- пошаговая отладка программы.

- установка и удаление точек останова.

Рисунок 2 – Окно отладки программы

Создадим проект в меню Project->New uVision Project.

Выберем путь для хранения файлов проекта на диске и создадим папку проекта, не используя в названии русских символов,

например D:\Keil\project\Lab_1.

После создания проекта в появившемся окне (рисунок 3) выбираем микроконтроллер Milandr->MDR1986BE93

10

Рисунок 3 – Окно выбора микроконтроллера

Нажимаем ОК, попадаем в следующее окно, где оставляем все без изменений и нажимаем ОК.

Переходим в меню Project-> Options for Target на вкладку

Debug, где выбираем отладчик J-LINK/J-Trace Cortex и ставим галочку напротив Run to main() в соответствии с рисунком 4.

Рисунок 4 – Окно настройки проекта

11

Рядом с названием отладчика нажимаем кнопку Settings, появляется предупреждение, которое мы игнорируем и нажимаем кнопку No, далее в появившемся окне Debug выбираем порт SW и максимальную скорость 1 МГц, в соответствии с рисунком 5.

Рисунок 5 – Окно выбора порта и скорости JTAG

Переходим во вкладку Flash Download, выбираем пункт Erase Full Chip и нажимаем кнопку Add, в появившемся окне выбираем строчку 1986BE IAP, после чего закрываем все окна кнопкой ОК.

Для дальнейшей настройки и добавления файлов переходим в дерево проектов, где нажимаем правой кнопкой мыши по папке “Target 1” в появившемся списке выбираем пункт Manage Project Items и настраиваем его в соответствии с рисунком 6, после чего подтверждаем изменения кнопкой ОК.

12

Рисунок 6 – настройка структуры проекта.

Скопируем необходимые файлы для работы из папки Project\Lib в корень папки созданного проекта.

Добавим скопированные файлы в проект. Для этого нажмем правой кнопкой мыши на папке User в дереве проектов, выберем пункт Add Existing Files to Group и в появившемся окне выберем файл main.c. Аналогичным образом добавим в папку Flash файл

«Flash\MilFlash.c», а в папку Drivers добавим все файлы с расширением «*.c» из папки

«Libraries\1986BE9x_StdPeriph_Driver\src», а также файлы «Libraries\CMSIS\CM3\DeviceSupport\1986BE9x\startup\arm- >startup_1986be9x.s» и «Libraries\CMSIS\CM3\DeviceSupport\1986BE9x\startup\arm- >startup_1986be9x.с». В конечном итоге после всех манипуляций должен получиться результат как на рисунке 7.

Рисунок 7 – Окно файлов проекта

13

Для дальнейшей работы открываем файл «main.c» и скомпилируем его кнопкой F7, после чего компилятор выдаст ошибки в окне Build Output, как на рисунке 8.

Рисунок 8 – Сообщения об ошибках.

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

Переходим в меню Project-> Options for Target на вкладку С/С++, ставим галочку напротив «C99 Mode», либо в строке

Mist Controls добавляем параметр «--C99», в строке Include Patch

нажимаем значок «…» и в появившемся окне прописываем пути в соответствии с рисунком 9. После чего сохраняем изменения кнопкой ОК.

Рисунок 9 – Расположение файлов.

Теперь переходим в файл main.c и снова пытаемся его скомпилировать кнопкой F7, в результате компиляции не должно появляться ошибок, а значит можно приступить непосредственно к программированию микроконтроллера.

14

В первой программе настроим порт B на вывод и запишем в 15 вывод «1», а потом «0».

Перед настройкой порта необходимо подключить к нему внутреннее тактирование. Открываем спецификацию на микроконтроллер «project\spec_1901VC1.pdf» глава 9 «Сигналы тактовой частоты». Порт B в данном случае является периферией, соответственно нас интересует регистр отвечающий за периферию PER_CLOCK, находим описание данного регистра и ищем бит отвечающий за включение тактирования порта B PCLK[22], для его включения необходимо записать туда «1». В итоге получается следующий код:

RST_CLK -> PER_CLOCK |= (1<<22);

Далее необходимо непосредственно настроить сам порт. Для этого откроем главу 11 «Порты ввода-вывода». Нам нужно настроить 15 вывод порта В на вывод, с этой целью рассмотрим регистры для настройки.

Регистр RXTX – содержит данные для выдачи порта и для чтения

Регистр OE – направление передачи данных порта Регистр FUNC – Режим работы порта

Регистр ANALOG – Режим работы порта цифровой или аналоговый

Регистр PULL - Подтяжка порта вверх или вниз Регистр PD - Режим работы входа и выхода.

Регистр PWR - Скорость нарастания и спада фронтов Регистр GFEN - Режим работы входного фильтра

Настройки порта имеют следующий вид: Вывод 15 необходимо запрограммировать на вывод, режим работы «как порт», цифровой, подтяжка в верх и вниз выключена, триггер Шмитта выключен, контроллер работает в режиме управляемого драйвера с медленными фронтами без фильтрации.

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

15

PORTB -> OE |= (1<<15); PORTB -> ANALOG |= (1<<15); PORTB -> PWR |= (1<<30);

На этом настройка 15 вывода закончена, теперь в него можно записывать информацию. Для этого запишем в 15 бит регистра

RXTX «1».

PORTB->RXTX = (1<<15)|(PORTB->RXTX & (~JTAG_PINS(PORTB)));

Строка вида (PORTB->RXTX & (~JTAG_PINS(PORTB)))

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

Скомпилируем программу кнопкой «F7» и загрузим ее на кристалл кнопкой «F8», далее сбросим контроллер кнопкой «RESET» на плате. После проведенных процедур у нас должен загореться светодиод подключенный к выводу PB15.

После того как у нас заработала первая программа, можно усложнить задачу и попытаться погасить светодиод, однако при непосредственной записи «0» в порт В мы не только погасим светодиод, но и нарушим работу интерфейса JTAG-A, что приведет к невозможности прошивки микроконтроллера, поэтому для сброса определенного бита будем использовать следующую функцию

PORTB -> RXTX &= ~((1<<15) | JTAG_PINS(PORTB));

После добавления данной строчки заново скомпилируем программу и загрузим в микроконтроллер. При этом мы не будем наблюдать свечение светодиода, так как он загорается лишь на один такт. Для проверки работоспособности программы запустим отладчик в меню Debug->Start/Stop Debug Session либо нажатием комбинации «Сtrl+F5». В появившемся окне возможно пошаговое выполнение программы, при этом результаты можно наблюдать непосредственно на плате. Для пошагового выполнения необходимо нажать один раз кнопку «F11» при этом микроконтроллер выполнит одну инструкцию. Нажимая «F11» проконтролируем выполнение следующих инструкций на плате.

16

//Включаем светодиод

 

PORTB -> RXTX

= (1<<15) | (PORTB->RXTX &

(~JTAG_PINS(PORTB)));

//Выключаем светодиод

PORTB -> RXTX

&= ~((1<<15) | JTAG_PINS(PORTB));

Для удобства чтения основной программы оформим инициализацию порта В в виде функции. С этой целью создадим функцию Init_PORTB выше основной функции, перенесем в нее инструкции по настройке порта В. А саму функцию будем вызывать из основного тела программы, при этом программа

примет следующий вид:

 

void Init_PORTB(void)

 

{

 

RST_CLK -> PER_CLOCK |= (1<<22);

//Разрешаем порт В

PORTB -> OE |= (1<<15); //Настраиваем на вывод 15 пин

PORTB -> ANALOG|= (1<<15); //вывод цифровой PORTB -> PWR |= (1<<30); //с медленным фронтом

}

 

int main (void)

 

{

 

Init_PORTB();

 

//Зажигаем светодиод

 

PORTB-> RXTX

= (1<<15) | (PORTB->RXTX &

(~JTAG_PINS(PORTB)));

 

//Гасим светодиод

 

PORTB-> RXTX &= ~((1<<15) | JTAG_PINS(PORTB));

}

4 Содержание отчета

Итогом работы является текст программы для включения и выключения светодиодов подключенных к выводам 11 и 14 порта B, а также описание окон программной среды Keil.

В отчете необходимо привести: 1 Цель работы.

17