Рис. 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.
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.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.