Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабРабота_2.docx
Скачиваний:
18
Добавлен:
04.05.2019
Размер:
252.62 Кб
Скачать

3.2. Программирование и исследование временных задержек

В программе led1.c изменение состояний линии порта RC0 происходит очень быстро, практически за время выполнения одной команды МК. Для того, чтобы переключение светодиода было видно человеческому глазу, нужно ввести временную задержку между переключениями порядка долей секунды.

На языке Си временную задержку можно реализовать с помощью, например, следующей функции:

void delay(void)

{

unsigned int i; // объявить переменную i как целое

// беззнаковое двухбайтное число

for( i = 0; i < 30000; i++)

;

}

В функции delay объявляется переменная i как целое беззнаковое двухбайтное число. Оно может изменяться в программе от 0 до 65535. В цикле for производится инкремент переменной i, начиная от i = 0 и заканчивая i = 30000. Никаких других действий, кроме инкремента i, функция delay на производит. Определить теоретически величину задержки, реализуемой функцией delay, довольно затруднительно, так как неизвестна ее реализация, выполненная компилятором C18. Поэтому обычно величину задержки определяют экспериментально с помощью симулятора.

3.2.1. Создайте проект с именем pr5 в новой папке, которую можно назвать proj5. С этой целью выберите пункт меню Project > New. На рабочем столе MPLAB IDE откроется окно New Project. Введите имя создаваемого проекта pr5 в строку Project Name. Затем переведите курсор в строку Project Directory и запишите полный путь к проекту, который будет находиться в новой папке с именем proj5:

e:\Users\MPT\PM-41\Ivanov\proj5

Щелкните по кнопке OK для подтверждения выбора.

3.2.2. Наберите текст программы led2.c в окне редактора (с использованием цветовой кодировки текста при наборе).

/*****************************************************

led2.c – программа переключения светодиода VD1 с использованием

временной задержки

********************************************/

#include<p18f242.h>

#pragma config WDT = OFF, OSC = HS

void delay(void); // прототип функции задержки delay

Void main(void)

{

PORTC = 0;

TRISC = 0;

while(1)

{

PORTCbits.RC0 = 1; // включить VD1

delay( ); // задержка

PORTCbits.RC0 = 0; // выключить VD1

delay( ); // задержка

}

}

void delay(void) // функция задержки

{

unsigned int i;

for( i = 0; i < 30000; i++)

;

}

3.2.3. Теперь необходимо внести исходный файл led2.c и файл сценария линкера 18f242.lkr в созданный проект pr5.

3.2.4. Далее необходимо проверить установки опций для создания проекта с помощью пункта меню Project > Build Options... > Project.

3.2.5. После того, как были выполнены все указанные выше пункты по предварительной подготовке проекта, можно приступить к его построению, используя пункт меню Project > Build All .

3.2.6. В случае успешной компиляции проекта выполните тестирование программы с помощью симулятора MPLAB SIM. С этой целью выберите пункт меню Debugger > Select Tool > MPLAB SIM . Затем с помощью пункта меню View > Watch откройте окно наблюдения Watch и занесите в него переменную PORTC (выбрать из списка SFR – регистры специальных функций).

3.2.7. Далее нужно подготовить средства для измерения временных параметров программы led2.c. С этой целью необходимо установить тактовую частоту работы МК. Для этого выберите пункт меню Debugger > Settings…. В открывшемся окне Simulator Settings выберите вкладку Osc/Trace. Установите в поле Processor Frequency число 4, что соответствует тактовой частоте 4 МГц. Вид окна для установки частоты процессора приведен на рис. 2.

Рис. 2. Вид окна для установки частоты работы микроконтроллера

3.2.8. С помощью пункта меню Debugger > Stopwatch откройте окно секундомера Stopwatch, как показано на рис. 3.

Рис. 4. Окно секундомера

Теперь нужно установить в окне редактора с текстом программы led2.c точки останова. С этой целью подведите курсор к строке программы с текстом PORTCbits.RC0 = 1; и дважды щелкните левой кнопкой мыши. В строке (в области серого цвета) должен появиться красный кружок с буквой B – breakpoint (точка останова). Далее переместите курсор на строку с текстом PORTCbits.RC0 = 0; и установите на ней вторую точку останова. На рис. 5 приведено окно редактора Edit после установки точек останова.

Примечание. Удалить точку останова можно, щелкнув по этой строке два раза левой кнопкой мыши.

Рис. 5. Окно редактора с точками останова

3.2.10. Выполните программу в автоматическом режиме. С этой целью щелкните по значку Reset, а затем по значку Run. Выполнение программы остановится на первой точке останова, что индицируется зеленой стрелкой внутри нее. В окне секундомера индицируется время (Time) в микросекундах, которое прошло от момента запуска до момента останова программы. Секундомер покажет 40 мкс.

Сбросьте секундомер нажатием на кнопку Zero. Вновь запустите программу в режиме Run. Выполнение программы остановится на второй точке останова. Секундомер покажет 450,03 миллисекунды. Это число и будет определять величину задержки, реализуемой функцией delay( ).

Вновь запустите программу в режиме Run. Выполнение программы остановится на первой точке останова.

3.2.11. Выберите пункт меню View > Disassembly Listing. На экране появится окно, в котором можно увидеть исходный код на Си и заменивший его код на Ассемблере. Подведите курсор к строке листинга e:\....\proj5\led2.c и просмотрите текст программы. Убедитесь, что функция задержки delay(void), выполненная двумя строками на Си, реализована с помощью более 20 команд Ассемблера. Это подтверждает эффективность программирования на языке Си.

3.2.12. Закройте все окна на рабочем столе MPLAB IDE и закройте проект, выбрав пункт меню Project > Close.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]