Программирование PIC-микроконтроллеров на языке Си. Программирование на языке Си в среде MPLABIDE, страница 5

3.6.5. Вновь осуществите сброс МК, щелкнув по значку  Reset. Теперь выполните программу в режиме  Animate. Наблюдайте, как сначала выполняется программа  c018i.c, а затем происходит переход на программу  primer1.c. После зацикливания программы содержимое  counter  и  PORTB  будет непрерывно инкрементироваться. Остановите выполнение программы, щелкнув по значку  Halt.

3.6.6. Выберите пункт меню  View > Disassembly  Listing. На экране появится одноименное окно,  в котором можно увидеть исходный код на Си и заменивший его код на Ассемблере. Левая колонка hex-чисел – это адреса ячеек памяти программ, рядом с которыми находятся коды команд.

Можно заметить, что некоторые строки кода на Си были транслированы в одну строку Ассемблера. Однако в большинстве случаев одна строка на Си заменяется несколькими строками Ассемблера. Это первый признак того, что при программировании на Си создаются более простые исходные файлы. По мере того, как увеличивается сложность кода на Си, коэффициент масштабирования между кодом на Си и листингом дизассемблирования становится все большим.

Из листинга можно также увидеть, что адрес ячейки памяти данных  0x8a (8ah)  в банке 0 предназначен для переменной  counter. Пересылка содержимого  counter  в  PORTB  выполняется командой Ассемблера

MOVFF  0x8a, 0xf81 , где   0xf81 – адрес порта В.

3.6.7. После тестирования программы закройте проект, выбрав пункт меню  Project > Close… . На экране останется пустое окно MPLAB IDE.

4. Задания для самостоятельной работы

Задание 1. Необходимо проверить работу программы, которая выводит в порт В микроконтроллера PIC18F242 двоичный код 01011010.

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

primer2.c – программа вывода кода в порт В

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

#include<p18f242.h>

#pragma  config  WDT = OFF, OSC = HS

void  main(void)

{

PORTB = 0;                       // очистить регистр данных порта В

TRISB = 0;                        // настроить порт В на вывод

PORTB = 0b01011010;    // вывод кода 01011010 в порт В

while( 1 )                           // зацикливание программы

;

}

В этой программе после строки вывода кода в порт В стоит оператор while(1), который в данном случае просто зацикливает выполнение программы. Это необходимо, так как микроконтроллер продолжает работать и должен что-то делать, в данном случае выполнять бесконечный цикл после единственной задачи вывода заданного кода в порт В.

Для выполнения задания создайте в MPLAB IDE новый проект с именем  pr2  и  поместите его в новую папку proj2. Затем запишите текст программы в файл с именем primer2.c и добавьте его в проект. Не забудьте про файл сценария линкера 18f242.lkr. Обязательно установите опции для построения проекта. Выполните компиляцию созданного проекта. После этого с помощью симулятора проверьте правильность работы программы.

Задание 2. Разработайте и протестируйте программу, которая после инициализации выполняет бесконечный цикл вывода в порт С микроконтроллера PIC18F242 сначала кода 11111111, а затем кода 00000000.

Указание. Программу назовите  primer3.c. Создайте новый проект с именем  pr3, который будет в папке proj3.

                                         5.  Содержание отчета

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

                                          Контрольные вопросы

1.  Какие средства используются в MPLAB IDE для программирования на языке Си?

2.  Что такое проект при использовании MPLAB C18?

3.  Как можно проверить правильность размещения программных средств в MPLAB C18?

4.  Как можно проверить правильность путей к используемым включаемым файлам?

5.  Как выполняется проверка работы программы на симуляторе?

6.  Для каких целей служит файл  c018i.c?

7.  Как можно посмотреть листинг дизассемблирования разработанной программы?