Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Программирование микропроцессоров семейства МСS-51

Покупка
Новинка
Артикул: 824653.01.99
Доступ онлайн
350 ₽
В корзину
Монография содержит описание языка C-51, используемого для создания загрузочных кодов для микропроцессоров семейства MCS-51. Книга содержит всю необходимую информацию для программирования на языке C-51 и объясняет особенности использования программы-компилятора. В ней приводятся общие сведения об операторах языка программирования C-51, типах данных, используемых в этом языке программирования, управляющих директивах, кроме того, в ней рассмотрены примеры программ. Она может быть полезной при изучении программирования для любого микроконтроллера семей-ства микроконтроллеров MCS-51, в том числе для отечественных микро-контроллеров серии 1816 и 1830 или для наиболее распространенных в настоящее время микроконтроллеров серии AT89xx фирмы Atmel.
Микушин, А. В. Программирование микропроцессоров семейства МСS-51 : монография / А. В. Микушин, В. И. Сединин. - Новосибирск : СибГУТИ, 2016. - 161 с. - ISBN 978-5-91434-034-3. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2136514 (дата обращения: 27.04.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов. Для полноценной работы с документом, пожалуйста, перейдите в ридер.
Федеральное агентство связи 

 

Федеральное государственное бюджетное образовательное 

 учреждение высшего образования  

«Сибирский государственный университет телекоммуникаций и информатики»  

(СибГУТИ) 

 

 
 

А.В. Микушин 

 

В.И. Сединин 

 
 
 
 

ПРОГРАММИРОВАНИЕ МИКРОПРОЦЕССОРОВ  

СЕМЕЙСТВА MCS - 51 

 
 
 

Монография 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Новосибирск  

2016
УДК 681.325.5-181.8(07) 
 
Программирование микропроцессоров семейства МСS-51.  
Монография / А.В. Микушин, В.И. Сединин. – Новосибирск: СибГУТИ,  
2016 г. – 161 с. 

Монография содержит описание языка C-51, используемого для создания 

загрузочных кодов для микропроцессоров семейства MCS-51. Книга содержит 
всю необходимую информацию для программирования на языке C-51 и объясняет 
особенности использования программы-компилятора. В ней приводятся 
общие сведения об операторах языка программирования C-51, типах данных, 
используемых в этом языке программирования, управляющих директивах, 
кроме того, в ней рассмотрены примеры программ. Она может быть полезной 
при изучении программирования для любого микроконтроллера семейства 
микроконтроллеров MCS-51, в том числе для отечественных микроконтроллеров 
серии 1816 и 1830 или для наиболее распространенных в настоящее 
время микроконтроллеров серии AT89xx фирмы Atmel. 

 
 
 
Иллюстраций – 26, список литературы – 12 названий. 
 
ISBN 978-5-91434-034-3 

 

Рецензенты: д.т.н., профессор, В.Д. Фроловский, 

 
д.т.н., профессор, Ю.А. Пальчун. 

 
                      
 
Утверждено РИС СибГУТИ в качестве монографии. 
 
 
 
 
 

© Сибирский государственный университет  
    телекоммуникаций и информатики, 2016  
© А.В. Микушин, В.И. Сединин., 2016 
Оглавление 

Введение ............................................................................................................................................. 4 

1. Язык программирования C-51 ...................................................................................................... 6 

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

1.2. Символы языка программирования С-51 ........................................................................... 13 

1.3. Лексические единицы, разделители и использование пробелов. ..................................... 16 

1.4. Выражения в операторах языка программирования C-51 ................................................ 22 

1.5. Операторы языка программирования C-51 ........................................................................ 26 

1.6. Объявление переменных в языке программирования C-51 .............................................. 38 

1.7. Объявление массивов в языке программирования C-51 ................................................... 44 

1.8. Структуры. ............................................................................................................................. 45 

1.9. Поля битов. ............................................................................................................................ 47 

1.10. Объединения (смеси). ......................................................................................................... 48 

1.11. Объявление указателей в языке программирования C-51. ............................................. 49 

1.12. Объявление новых типов переменных.............................................................................. 52 

1.13. Инициализация данных. ..................................................................................................... 53 

1.14. Использование функций в языке программирования С-51. ........................................... 56 

1.15. Области действия переменных и подпрограмм ............................................................... 65 

2. Работа с интегрированной средой программирования ............................................................ 67 

2.1. Написание программы .......................................................................................................... 67 

2.2. Работа с текстовым редактором интегрированной среды программирования keil-С .... 68 

2.3. Создание программных проектов ........................................................................................ 71 

2.4. Трансляция программных модулей и программных проектов ......................................... 77 

2.5. Отладка программ во встроенном отладчике программ ................................................... 86 

3. Особенности ввода и вывода информации в микроконтроллерных системах ...................... 90 

3.1. Вывод информации через параллельные порты ................................................................ 90 

3.2. Ввод информации через параллельный порт ..................................................................... 95 

3.3. Обмен информацией через последовательный порт ....................................................... 100 

4. Пример реализации микроконтроллерного устройства ..................................................... …104 

4.1. Разработка структурной схемы .......................................................................................... 104 

4.2. Разработка принципиальной схемы .................................................................................. 106 

4.3. Разработка программы устройства .................................................................................. ..107 

Заключение ..................................................................................................................................... 124 

Приложения .................................................................................................................................... 125 

П.1. Система команд микроконтроллеров семейства MCS-51 .............................................. 125 

П.2. Программа часов ................................................................................................................ 146 

Список литературы ........................................................................................................................ 160 
Введение 

 

Большинство устройств современной техники связи построено с использо-

ванием микропроцессорной техники. Наиболее распространенными микропро-

цессорами, используемым для этой цели являются микроконтроллеры, принад-

лежащие семейству MCS-51. Управление микроконтроллерами осуществляется 

при помощи программы, записанной во внутреннюю память этих микросхем. 

Создание программного обеспечения для микропроцессоров по трудоемко-

сти в настоящее время значительно превышает трудоемкость создания самого 

устройства. Более того! Даже после завершения процесса разработки микро-

процессорного устройства и начала его производства продолжает оставаться 

актуальной задача модернизации программы, приспосабливание ее к конкрет-

ным условиям его эксплуатации. В большинстве случаев эти условия с течени-

ем времени изменяются. 

До сих пор основным языком создания программного обеспечения для 

микропроцессорной техники остаются различные варианты ассемблеров. Одна-

ко программа, написанная на языке программирования ассемблер достаточно 

громоздка и трудна для понимания человеком, ведь этот язык программирова-

ния ориентирован, в первую очередь, на сам микропроцессор. 

Использование языка программирования высокого уровня позволяет уве-

личить понятность программы, а это, в свою очередь, позволяет сократить вре-

мя разработки программы и облегчить процесс ее сопровождения (модерниза-

цию программы в процессе производства и эксплуатации). Наиболее распро-

страненным языком программирования высокого уровня в настоящее время яв-

ляется язык C. 

Существует распространенное мнение о том, что программы, написанные 

на языке программирования C, значительно превышают по объему машинного 

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

сделана попытка показать, что в большинстве случаев в увеличении объема 

машинного кода виноват сам программист. 
При правильном выборе типов переменных и подборе операторов размер 

программы, написанной на языке программирования C, отличается от размера 

программы, написанной на языке программирования ассемблер, буквально на 

несколько процентов. При этом не следует особенно надеяться на работу опти-

мизаторов кода, которые присутствуют в большинстве компиляторов с языка 

программирования C. 

Достаточно часто препятствием в освоении языка программирования C 

становится непонимание принципов создания программ на этом языке. В книге 

описывается язык программирования высокого уровня C–51. Описание начина-

ется с описания основных операторов языка C. Каждый оператор иллюстриру-

ется примерами его использования при разработке устройств техники связи. 

В книге большое внимание уделяется созданию многомодульных про-

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

они нужны, и как ими можно управлять. 

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

рования C–51, причем в качестве примера выбрано создание часов. Выбор та-

кого устройства позволит, как я надеюсь, научиться создавать микропроцес-

сорные устройства специалистам в различных областях техники.  

Книга ориентирована как на начинающих разработчиков микропроцессор-

ной аппаратуры, так и на достаточно опытных специалистов, желающих осво-

ить программирование на языке C-51. 

 
1.  Язык программирования C-51 

 

C – это язык программирования общего назначения, предназначенный для 

написания программ, эффективных по исполняемому коду, с элементами 
структурного программирования и богатым набором операторов. Язык программирования 
C практически не имеет ограничений, что позволяет использовать 
его для эффективного решения широкого круга задач. Однако при написании 
программ для микроконтроллеров, принадлежащих к семейству MCS-51, 
необходимо учитывать особенности построения аппаратуры этих микросхем, 
поэтому был создан диалект этого языка. 

В состав языка программирования С-51 по сравнению со стандартным язы-

ком программирования C введён ряд изменений, отображающих особенности 
построения памяти микроконтроллеров семейства 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. 
Язык программирования C-51 и его библиотеки являются частью интегри-

рованного набора средств разработки программного обеспечения для микроконтроллеров 
семейства MCS-51. Язык программирования C-51 поддерживает 
модульное написание программ. Процесс разработки программ на языке программирования 
C-51 показан на рисунке 1. 
При разработке программного обеспечения выполняются следующие эта-

пы: 
 Постановка задачи (полное определение решаемой проблемы);  
 Разработка принципиальной схемы и выбор необходимого программного 

обеспечения;  

 Разработка системного программного обеспечения. Этот важный шаг состоит 

из нескольких этапов, включающих: описание последовательности выполняемых 
каждым блоком задач, выбор языка программирования и используемых 
алгоритмов;  

 Написание текста программы и подготовка к трансляции при помощи любого 

текстового редактора;  

 Компиляция программы;  
 Исправление синтаксических ошибок, выявленных компилятором, в тексто-

вом редакторе с последующей перетрансляцией;  

 Создание и сохранение библиотек часто используемых объектных модулей 

при помощи программы lib51.ехе;  

 Связывание полученных перемещаемых объектных модулей в абсолютный 

модуль и размещение переменных в памяти микроконтроллера при помощи 
редактора связей bl51.exe;  

 Создание программы, записываемой в ПЗУ микроконтроллера (загружаемый 

модуль) в hex формате, при помощи программы oh.exe;  

 Проверка полученной программы при помощи символьного отладчика или 

других программных или аппаратных средств.  

 

 

 

Рисунок 1. Процесс написания программы на языке С-51 

 
Файл, в котором хранится программа, написанная на языке C51 (исходный 

текст программы), называется исходным модулем. Для исходного текста программы 
принято использовать расширения файла: '*.c'. Исходный текст программы 
можно написать, используя любой текстовый редактор, однако намного 
удобнее воспользоваться интегрированной средой программирования, подобной 
keil-C. В интегрированную среду программирования кроме текстового редактора 
обычно входят отладчик программ, менеджер проектов и средства запуска 
программ-трансляторов. 
В интегрированной среде программирования процесс трансляции исходно-

го текста программы проходит намного проще. Для получения объектного модуля 
достаточно нажать на кнопку трансляции файла, как это показано на рисунке 
2. 

 

 

 

Рисунок 2. Кнопка трансляции исходного текста файла  

 
Готовый оттранслированный участок программы обычно хранится на дис-

ке в виде файла, записанного в объектном формате. Такой файл называется 
объектным модулем. Получить объектный модуль можно, указав имя исходного 
модуля программы в качестве параметра программы-транслятора в DOS 
строке или строке командного файла, как это показано в следующем примере: 

 

c51.exe modul.c 

 
В этом примере в результате трансляции исходного текста программы, со-

держащегося в файле modul.c будет получен объектный модуль, который будет 
записан в файл с именем modul.obj. Как показано на рисунке 1, объектный модуль 
не может быть загружен в память программ микроконтроллера. В память 
микроконтроллера загружается исполняемый модуль. 

Программа, которая может быть выполнена микроконтроллером, получа-

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

 

bl51.exe main.obj, modul1.obj, modul2.obj 

 
Имя исполняемого модуля программы по умолчанию совпадает с именем 

первого объектного файла в списке параметров строки запуска редактора связей. 
Исполняемый модуль программы записывается в файл без расширения. 
При выполнении приведённой выше в качестве примера командной строки будет 
получен исполняемый модуль, который будет записан в файл с именем 
main. 

В интегрированной среде программирования процесс получения исполня-

емого модуля не сложнее предыдущего варианта. Для трансляции всего программного 
проекта достаточно нажать на соответствующую кнопку, как это показано 
на рисунке 3. 
Рисунок 3. Кнопка получения исполняемого и загрузочного модулей  

в интегрированной среде программирования keil-c 

 
Большинство программаторов, предназначенных для записи информации в 

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

Загрузочный модуль программы можно получить при помощи програм-

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

 

oh.exe main 

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

ный модуль программы, который будет записан в файл с именем main.hex. 

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

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

Отладка программ. 
После того, как программные модули были успешно оттранслированы, 

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

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

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

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

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

 

 

 

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

для микроконтроллеров 

 
При отладке программы с использованием внутрисхемного эмулятора 

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

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

 
конфигурация вызовов подпрограмм для обеспечения связывания с моду-

лями, написанными на языке программирования ASM-51;  
 
определение желаемого содержания и формата выходного листинга про-

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

 
Ну а теперь, прежде чем начать знакомство со средой программирования, 

рассмотрим основные принципы построения языка программирования С-51 и 
его отличие от стандартного языка ANSI C. 

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

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

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

В модуле помещаются операторы, составляющие программу. Эти операто-

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

Функция начинается с заголовка подпрограммы, в который входит тип 

возвращаемой переменной, имя подпрограммы и круглых скобок, внутри которых 
объявляются переменные – параметры подпрограммы. В подпрограмме 
main (а также во всех подпрограммах, где не нужно возвращать переменные) 
вместо типа переменной указывается слово void. Вот уже и начались отличия в 
программировании микроконтроллеров! В стандартной программе, написанной 
на языке C, подпрограмма main может быть int типа. Здесь это не так. Ведь программа 
микроконтроллера никогда не должна завершаться! Исполняемые операторы 
подпрограммы заключаются в фигурные скобки. 

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

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

При написании программы для микроконтроллеров всегда необходимо ви-

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

 
Доступ онлайн
350 ₽
В корзину