Программирование на языке Си процедур управления. Основы разработки и отладки управляющих программ на языке Си для микроконтроллеров семейства PIC18, страница 3

    

Рис. 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.