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

}

void  diagn(void)                   // функция диагностики светодиодов

{

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

PORTCbits.RC7 = 1;       // включить светодиод VD2

Delay10KTCYx(100);     // задержка на 1 с

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

PORTCbits.RC7 = 0;       // выключить VD2

Delay10KTCYx(100);      // задержка на 1 с

}

3.8.1. Создайте проект с именем pr12  в новой папке, которую можно назвать proj12.

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

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

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

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

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

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

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

3.8.9. В программе  check.c  проверяется состояние линий  RB0 и RB7  порта  В  при различном положении контактов переключателей  SB1 и  SB2. Для моделирования логических сигналов на входах порта  В  будем использовать асинхронные стимулы.  Для создания асинхронных стимулов выберите пункт меню Debugger > Stimulus > NewWorkbook, при этом на экране появится диалоговое окно Stimulus. В этом окне выберите вкладку “Asynch”. Установите для линий портов  RB0  и  PB7 опции  Set High,  Set Low  и  Toggle по методике, изложенной в п. 3.6.2. Вид окна асинхронных стимулов для линий  RB0 и  RB7 должен иметь вид, приведенный на рис. 5.

Рис. 5. Вид окна асинхронных стимулов для линий RB0 и RB7

После выбора настроек нажмите кнопку  Apply  в диалоговом окне с целью разрешения их использования.

3.8.10.  Активизируйте окно редактирования  файла  …..\check.c  и поставьте точки останова в функции  diagn( ), как показано на рис. 6.

Рис. 6. Точки останова в функции диагностики  diagn( )

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

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

Остановите выполнение программы нажатием на кнопку Halt. Уберите точки останова в функции diagn( ).

3.8.12. Теперь исследуйте работу программы в режиме Animate. С этой целью щелкните по одноименному значку в меню управления отладкой. Зеленая стрелка будет перемещаться внутри оператора цикла while(1). Щелкая мышью по кнопкам “>” поля  Fire  в окне  Stimulus  подавайте на входы RB0  и  RB7 различные уровни сигналов. Наблюдайте в окне  Watch  за значениями битов  RB0, RB7 порта  В  и битов  RC0, RC7  порта  С. Попытайтесь понять, правильно ли работает программа?