это язык программирования общего назначения,
Язык программирования C – это язык программирования общего назначения, предназначенный для написания программ, эффективных по исполняемому коду с элементами структурного программирования и богатым набором операторов. Язык программирования C практически не имеет ограничений, что позволяет использовать язык программирования C для эффективного решения широкого круга задач. Однако при написании программ для микроконтроллеров необходимо учитывать особенности построения аппаратуры этих микросхем.
В состав языка программирования С-51 введён ряд изменений, отображающих особенности построения памяти микроконтроллеров семейства MCS-51. Кроме того, эти изменения позволяют непосредственно обращаться к встроенным портам, таймерам и другим устройствам микроконтроллеров указанного семейства. Особенности микроконтроллеров этого семейства в основном отображаются через описания переменных.
Язык программирования С-51 удовлетворяет стандарту ANSI-C. Этот язык программирования предназначен для получения компактных и быстродействующих программ, предназначенных для микроконтроллеров семейства MCS-51. Язык С-51 обеспечивает гибкость программирования на широко известном языке программирования C, при скорости работы и компактности, сравнимой с программами, написанными на языке программирования ассемблер.
Так как язык программирования C не имеет собственных средств ввода и вывода, то он обращается к соответствующим функциям операционных систем. В языке программирования С51 вместо этого имеется возможность изменять библиотечные функции, и тем самым обращаться к конкретным ячейкам памяти микроконтроллера, для которого пишется программа.
Компилятор c51.exe - это программное средство, которое транслирует исходный текст, написанный на языке программирования C51 в перемещаемые объектные модули. Эти модули затем могут объединяться с другими модулями, написанными на языках программирования C51, PLM-51 или ASM-51. Компилятор выводит на экран дисплея или в файлы листингов сообщения об ошибках и вспомогательную информацию, которая может быть использована при отладке и разработке программ.
Компилятор c51. exe может быть установлен на компьютерах серии IBM или совместимых с ними в операционной системе DOS 3.Х и выше и использоваться для генерации команд микроконтроллеров семейства MCS-51.
Применение.
Язык программирования C-51 и его библиотеки являются частью интегрированного набора средств разработки программного обеспечения для микроконтроллеров семейства MCS-51. Язык программирования C51 поддерживает модульное написание программ. Процесс разработки программ на языке программирования C-51 показан на рисунке 1.
![](image/c51_7.gif)
Рисунок 1. Процесс написания программы на языке программирования С-51.
При разработке программного обеспечения выполняются следующие этапы:
- постановка задачи (полное определение решаемой проблемы);
- разработка принципиальной схемы и выбор необходимого программного обеспечения;
- разработка системного программного обеспечения. Этот важный шаг состоит из нескольких этапов, включающих: описание последовательности выполняемых каждым блоком задач, выбор языка программирования и используемых алгоритмов;
- написание текста программы и подготовка к трансляции при помощи любого текстового редактора;
- компиляция программы;
- исправление синтаксических ошибок, выявленных компилятором, в текстовом редакторе с последующей перетрансляцией;
- создание и сохранение библиотек часто используемых объектных модулей при помощи программы lib51.ехе;
- связывание полученных перемещаемых объектных модулей в абсолютный модуль и размещение переменных в памяти микроконтроллера при помощи редактора связей bl51.exe;
- создание программы, записываемой в ПЗУ микроконтроллера (загружаемый модуль) в hex формате, при помощи программы oh.exe;
- проверка полученной программы при помощи символьного отладчика или других программных или аппаратных средств.
В интегрированную среду программирования кроме текстового редактора обычно входят отладчик программ, менеджер проектов и средства запуска программ-трансляторов.
В интегрированной среде программирования процесс трансляции исходного текста программы проходит намного проще. Для получения объектного модуля достаточно нажать на кнопку трансляции файла, как это показано на рисунке 2.
![](image/c51_8.gif)
Рисунок 2. Кнопка трансляции исходного текста файла в интегрированной среде программирования keil-c.
Готовый оттранслированный участок программы обычно хранится на диске в виде файла, записанного в объектном формате. Такой файл называется объектным модулем. Получить объектный модуль можно, указав имя исходного модуля программы в качестве параметра программы-транслятора в DOS строке или строке командного файла, как это показано в следующем примере:
c51.exe modul.c
В этом примере в результате трансляции исходного текста программы, содержащегося в файле modul.c будет получен объектный модуль, который будет записан в файл с именем modul.obj. Как показано на рисунке 1, объектный модуль не может быть загружен в память программ микроконтроллера. В память микроконтроллера загружается исполняемый модуль.
Программа, которая может быть выполнена микроконтроллером, получается после соединения объектных модулей в единый исполняемый модуль. Получить исполняемый модуль программы можно, указав все имена объектных модулей программы в качестве параметров программы редактора связей в DOS строке или строке командного файла, как это показано в следующем примере:
bl51.exe main.obj, modul1.obj, modul2.obj
Имя исполняемого модуля программы по умолчанию совпадает с именем первого объектного файла в списке параметров строки запуска редактора связей. Исполняемый модуль программы записывается в файл без расширения. При выполнении приведённой выше в качестве примера командной строки будет получен исполняемый модуль, который будет записан в файл с именем main.
В интегрированной среде программирования процесс получения исполняемого модуля не сложнее предыдущего варианта.
Для трансляции всего программного проекта достаточно нажать на соответствующую кнопку, как это показано на рисунке 3.
![](image/c51_9.gif)
Рисунок 3. Кнопка получения исполняемого и загрузочного модулей в интегрированной среде программирования keil-c.
Большинство программаторов, предназначенных для записи информации в память программ микроконтроллеров, не может работать с объектным форматом исполняемого модуля программы, поэтому для загрузки машинного кода в процессор необходимо преобразовать объектный формат исполняемого модуля в общепринятый для программаторов HEX-формат. При преобразовании форматов вся отладочная информация теряется. Машинный код процессора в HEX-формате называется загрузочным модулем.
Загрузочный модуль программы можно получить при помощи программы-преобразователя программы oh.exe, передав ей в качестве параметра имя файла исполняемого модуля программы, например:
oh.exe main
В результате выполнения этой командной строки будет получен загрузочный модуль программы, который будет записан в файл с именем main.hex.
В интегрированной среде программирования загрузочный файл получается автоматически при выполнении трансляции программного проекта, так как интегрированная среда программирования сама выполняет перечисленные выше действия в соответствии с настройками программного проекта.
Отладка программ.
После того, как программные модули были успешно оттранслированы, размещены по конкретным адресам и связаны между собой, для отладки программы можно воспользоваться любым из методов, показанных на рисунке 1:
- внутрисхемным эмулятором
- встроенным программным отладчиком
- внешним программным отладчиком
- отлаживаемым устройством с записанным в память программ двоичным кодом программы
Необходимое для отладки программ оборудование показано на рисунке 2.
![](image/c51_4.jpg)
Рисунок 2. Пример системы отладки программного обеспечения для микроконтроллеров.
При отладке программы с использованием внутрисхемного эмулятора необходимо включать в объектные модули символьную информацию. Для этого используются директивы компилятора. (При использовании интегрированной среды программирования достаточно установить соответствующую галочку в свойствах проекта) В компиляторе языка программирования C-51 возможны следующие действия:
- включение информации о типе переменных для проверки типов при связывании модулей. Эта же информация используется внутрисхемным эмулятором. Исключение информации о переменных пользователя может использоваться для создания прототипов или для уменьшения размера объектного модуля;
- включение или исключение таблиц символьной информации;
- конфигурация вызовов подпрограмм для обеспечения связывания с модулями, написанными на языке программирования ASM-51;
- определение желаемого содержания и формата выходного листинга программы. Распечатка промежуточных кодов на языке ассемблер после компилирования программ, написанных на языке программирования PLM-51. Включение или исключение листингов отдельных блоков исходного текста.