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

3.3. Программирование временной задержки с использованием библиотечных функций

Недостатком программной реализации задержки с помощью циклов for( ) или while( ) является сложность расчета времени. В компиляторе C18 имеются библиотечные функции, которые позволяют реализовать временные задержки с большой точностью. Все доступные функции задержки приведены в таблице.

Функция

Действие

Delay1TCY( )

Задержка на один командный цикл TCY

Delay10TCYx(unsigned char n)

Задержка на время, кратное 10 циклам TCY

Delay100TCYx(unsigned char n)

Задержка на время, кратное 100 циклам TCY

Delay1KTCYx(unsigned char n)

Задержка на время, кратное 1000 циклам TCY

Delay10KTCYx(unsigned char n)

Задержка на время, кратное 10000 циклам TCY

Здесь n – однобайтное целое число в диапазоне от 1 до 255.

В функциях задержки фигурирует командный (по-другому, машинный) цикл TCY, который определяется частотой тактового генератора МК следующим образом:

TCY = 4 / FOSC,

где FOSC – частота работы тактового генератора (обычно равна частоте внешнего кварцевого резонатора).

Например, при FOSC = 4 МГц длительность командного (машинного) цикла будет TCY = 1 мкс.

Допустим, что надо получить временную задержку на 0,5 с, т.е. 500000 мкс при частоте генератора 4 МГц и соответственно TCY = 1 мкс. Для данного случая можно выбрать функцию Delay10KTCYx(n), которая позволяет получить задержку, кратную 10000 командных циклов TCY, т.е. величине 10000 мкс. Число n в функции можно определить из соотношения:

n = 500000 / 10000 = 50.

Таким образом, окончательно функция задержки будет иметь вид:

Delay10KTCY(50).

Так как функции задержки находятся в библиотеках компилятора С18, то необходимо их подключить в программе с помощью заголовочного файла delays.h.

Текст программы управления светодиодом VD1 с частотой мигания 1 Гц (периодом 1 с) может иметь вид:

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

led3.c – программа управления светодиодом VD1

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

#include<p18f242.h>

#include<delays.h>

#pragma config WDT = OFF, OSC = HS

Void main(void)

{

PORTC = 0;

TRISC = 0;

while( 1 )

{

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

Delay10KTCYx(50); // задержка на 0,5 с

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

Delay10KTCYx(50); // задержка на 0,5 с

}

}

3.3.1. Создайте проект с именем pr6 в новой папке, которую можно назвать proj6.

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

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

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

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

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

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

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

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

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

Сбросьте секундомер нажатием на кнопку Zero. Вновь запустите программу в режиме Run. Выполнение программы остановится на второй точке останова. Секундомер покажет 500,001 миллисекунды. Это число и будет определять величину задержки, реализуемой функцией Delay10KTCYx(50). Как видно, задержка реализована с очень высокой точностью.

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

3.3.11. Сверните окно программы MPLAB IDE.

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