Александр Микушин - Занимательно о микроконтроллерах стр 57.

Шрифт
Фон

Занимательно о микроконтроллерах

Рис. 9.3.Кнопка получения исполняемого и загрузочного модулей в интегрированной среде программирования Keil-C

Большинство программаторов не может работать с объектным форматом исполняемого модуля программы, поэтому для загрузки машинного кода в микроконтроллер необходимо преобразовать объектный формат исполняемого модуля в общепринятый для программаторов НЕХ-формат. При преобразовании форматов вся отладочная информация, содержащаяся в исполняемом модуле, теряется. Машинный код процессора, записанный в отдельном файле в НЕХ-формате, называется загрузочным модулем.

Загрузочный модуль программы можно получить при помощи программы-преобразователя oh.exe, передав ей в качестве параметра имя файла исполняемого модуля программы в командной строке операционной системы или строке командного файла, как это показано в следующем примере:

oh.exe main

В интегрированной среде программирования загрузочный файл получается автоматически при выполнении трансляции программного проекта, т. к. интегрированная среда программирования сама выполняет перечисленные выше действия в соответствии с настройками программного проекта.

После того как программные модули были успешно оттранслированы, размещены по конкретным адресам и связаны между собой, для отладки программы можно воспользоваться любым из методов, показанных на рис. 9.1:

- внутрисхемным эмулятором;

- встроенным программным отладчиком;

- внешним программным отладчиком;

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

Внутрисхемный эмулятор с отображением переменных языка программирования на дисплее компьютера оказывает значительную помощь при отладке программ непосредственно на разрабатываемой аппаратуре. Этот метод отладки предоставляет наиболее удобную среду, когда можно непосредственно в отлаживаемом устройстве останавливать программу, контролировать ее выполнение непосредственно по исходному тексту, отслеживать состояние внешних портов и внутренних переменных, как входящих в состав микросхемы, так и объявленных при написании исходного текста программы. Необходимое для отладки программ оборудование показано на рис. 9.4.

Александр Микушин - Занимательно о микроконтроллерах

Рис. 9.4. Пример системы отладки программного обеспечения для микроконтроллеров

При отладке программы с использованием внутрисхемного эмулятора необходимо включать в объектные модули символьную информацию. Для этого используются директивы компилятора. (При использовании интегрированной среды программирования достаточно установить соответствующую галочку в свойствах проекта.) В компиляторе языка программирования С-51 возможны следующие действия:

- включение информации о типе переменных для проверки типов при связывании модулей. Эта же информация используется внутрисхемным эмулятором. Исключение информации о переменных пользователя может использоваться для создания прототипов или для уменьшения размера объектного модуля;

- включение или исключение таблиц символьной информации;

- конфигурация вызовов функций для обеспечения связывания с модулями, написанными на языке программирования ASM-51;

- определение желаемого содержания и формата выходного листинга программы. Распечатка промежуточных кодов на языке ассемблер после компилирования программ, написанных на языке программирования PLM-51. Включение или исключение листингов отдельных блоков исходного текста.

Структура программ С-51

Язык программирования С-51 является структурно-модульным языком. Каждая программа, написанная на языке программирования С-51, состоит из одного или более модулей. Каждый модуль записывается в отдельном файле и компилируется отдельно.

В модуле помещаются операторы, составляющие программу. Эти операторы выполняют необходимые действия, а также объявляют константы или переменные. Операторы, выполняющие действия, обязательно должны быть помещены в функции. В главе 7 при описании ассемблера было введено понятие подпрограммы и рассмотрены две разновидности подпрограмм: процедуры и функции. В С-51 применяется другая терминология. Все подпрограммы, независимо от того, возвращают они значения или нет, называются функциями. Исполнение программы всегда начинается с функции с именем main (т. е. в простейшем случае достаточно написать только эту функцию).

Функция начинается с заголовка, в который входит тип возвращаемого значения, имя функции и круглые скобки, внутри которых объявляются параметры функции. Параметр - это определяемая функцией переменная, которая принимает передаваемый функции аргумент. Во всех функциях, которые ничего не возвращают, вместо типа возвращаемого значения указывается ключевое слово void. Исполняемые операторы, составляющие тело функции, заключаются в фигурные скобки.

Все переменные и константы обязательно должны быть объявлены до первого использования.

При разработке программы для микроконтроллеров всегда необходимо иметь перед глазами принципиальную схему устройства, для которого пишется программа, т. к. схема и программа тесно связаны между собой и дополняют друг друга. Для иллюстрации простейшей программы, написанной на языке программирования С-51, воспользуемся схемой, приведенной на рис. 9.5.

Александр Микушин - Занимательно о микроконтроллерах

Рис. 9.5.Пример простейшей схемы устройства, построенного с использованием микроконтроллера

Для примера заставим гореть светодиод VD1. Этот светодиод будет светиться только, если через него будет протекать ток. Для этого на шестом выводе порта Р0 должен присутствовать нулевой потенциал. Для его получения служит первая же команда программы, приведенной ниже:

#include<reg51.h>

void main (void)

{P0"=0; //Зажигание светодиода

while(1); //Бесконечный цикл

}

Программа начинается с оператора присваивания P0 = 0. Следующий оператор, while (1), обеспечивает зацикливание программы. Это сделано для того, чтобы микроконтроллер не выполнял больше никаких действий. В противном случае он перейдет к следующей ячейке памяти программ и будет выполнять команды, которые мы не записывали.

Обратите внимание на то, что язык программирования "знает", где находится порт Р0. Эту информацию он получает из команды включения файла, содержащейся в операторе #inciude<reg5i.h>.

Для того чтобы получить более полное представление о структуре программ, написанных на языке программирования С-51, приведем пример исходного текста программы с использованием нескольких функций.

#include<reg51.h>

void svGorit(void)

{P0=0; //Зажигание светодиода

}

void main(void)

{svGorit(); //Вызов функции с именем svGorit

while(1); //Бесконечный цикл

}

В приведенном примере использование функции никаких преимуществ не дает, но в более сложных программах использование "говорящих" имен функций и переменных может приблизить исходный текст программы к алгоритму и, тем самым, сделать программу более понятной. Это в свою очередь значительно уменьшит время отладки программы.

Элементы языка С-51

В предыдущих главах мы уже выяснили, что программы пишутся как обычные текстовые файлы. При этом программа-транслятор с языка программирования должна однозначно преобразовывать этот текст в машинные коды процессора. Для этого в исходном тексте программы должны быть использованы только определенные символы кодовых таблиц. Недопустимо использование форматирования (выделение жирным, подчеркивание или курсив). Рассмотрим набор символов, допустимых при написании программ на языке С-51.

Используемые символы алфавита

В исходном тексте программы, написанной на языке программирования С-51, используется часть ASCII- или ANSI-символов. Множество символов, используемых в языке программирования С, можно разделить на пять групп:

1. Символы, используемые для образования ключевых слов и идентификаторов, приведены в табл. 9.1. В эту группу входят прописные и строчные буквы английского алфавита, а также символ подчеркивания. Следует отметить, что в языке программирования С-51 различаются прописные и строчные буквы. Например, идентификаторы start и Start будут считаться различными. Цифры, кроме применения в ключевых словах и идентификаторах, могут быть использованы для записи числовых констант, хотя могут быть использованы и в идентификаторах констант и переменных.

Александр Микушин - Занимательно о микроконтроллерах

2. Группа прописных и строчных букв русского алфавита приведена в табл. 9.2. Эти буквы могут быть использованы в комментариях к исходному тексту программы и строковых константах.

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке