Микропроцессорная техника. Введение в Keil C51
Покупка
Тематика:
Микроэлектроника. Наноэлектроника
Издательство:
Издательство Уральского университета
Автор:
Огородников Игорь Николаевич
Год издания: 2021
Кол-во страниц: 100
Дополнительно
Вид издания:
Учебное пособие
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-7996-3301-1
Артикул: 799103.01.99
Учебное пособие нацелено на формирование у студентов практических навыков разработки и программирования микропроцессорных устройств автоматики физических установок, приборов радиационной безопасности человека и окружающей среды, а также различных приборов биофизического и медицинского назначения. Предназначено для студентов технических специальностей Физико-технологического института Уральского федерального университета всех уровней обучения
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 12.03.04: Биотехнические системы и технологии
- 14.03.02: Ядерные физика и технологии
- ВО - Специалитет
- 14.05.04: Электроника и автоматика физических установок
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Министерство науки и высшего образования Российской Федерации Уральский федеральный университет имени первого Президента России Б. Н. Ельцина И. Н. Огородников МИКРОПРОЦЕССОРНАЯ ТЕХНИКА. ВВЕдЕНИЕ В Keil C51 Учебное пособие Рекомендовано методическим советом Уральского федерального университета для студентов вуза, обучающихся по направлениям подготовки 14.03.02 «Ядерные физика и технологии», 12.03.04 «Биотехнические системы и технологии», 14.05.04 «Электроника и автоматика физических установок» Екатеринбург Издательство Уральского университета 2021
УДК 004.31:004.42(075.8) ББК 32.973.26-04я73 О-39 Рецензенты: кафедра высшей математики и физики Уральского технического института связи и информатики СибГУТИ (завкафедрой высшей математики и физики, канд. физ.-мат. наук, доц. В. Т. Куанышев); директор ООО «Инжетех» С. В. Богушевич Научный редактор — канд. физ.-мат. наук, доц. И. Н. Анцыгин Для оформления обложки использовано изображение из личного архива автора. О-39 Огородников, И. Н. Микропроцессорная техника. Введение в Keil C51 : учебное пособие / И. Н. Огородников ; М-во науки и высшего образования РФ. — Екатеринбург : Изд-во Урал. ун-та, 2021. — 100 с. ISBN 978-5-7996-3301-1 Учебное пособие нацелено на формирование у студентов практических навыков разработки и программирования микропроцессорных устройств автоматики физических установок, приборов радиационной безопасности человека и окружающей среды, а также различных приборов биофизического и медицинского назначения. Предназначено для студентов технических специальностей Физико-технологи- ческого института Уральского федерального университета всех уровней обучения. Библиогр.: 11 назв. Табл. 20. Рис. 28. УДК 004.31:004.42(075.8) ББК 32.973.26-04я73 ISBN 978-5-7996-3301-1 © Уральский федеральный университет, 2021
Содержание Предисловие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 1. Синтаксис Keil C51 . . . . . . . . . . . . . . . . . . . . . . . . . . 7 1.1. Символы, ключевые слова и идентификаторы . . . . . . 7 1.2. Форматы данных . . . . . . . . . . . . . . . . . . . . . . . 12 1.3. Специальные ключевые слова . . . . . . . . . . . . . . . 14 1.4. Операторы и выражения . . . . . . . . . . . . . . . . . . 19 1.5. Указатели . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 1.6. Передача параметров и возвращение данных . . . . . . . 21 2. Взаимодействие A- и C-программ . . . . . . . . . . . . . . . . 23 2.1. Соглашения по взаимодействию программ . . . . . . . . 23 2.1.1. Настройка стартового адреса C-программы . . . . 23 2.1.2. Обращение к регистрам в C-программе . . . . . . 24 2.1.3. Вызов A-подпрограммы из C-программы . . . . . 25 2.1.4. Доступ к регистрам ПЛИС из C-программы . . . . 28 2.1.5. Программирование прерываний . . . . . . . . . . 29 2.2. Доступ к стандартным библиотекам . . . . . . . . . . . . 36 2.3. Дополнительные возможности . . . . . . . . . . . . . . . 39 2.3.1. Поддержка языка PL/M-51 . . . . . . . . . . . . . 39 2.3.2. Реентерабельные функции . . . . . . . . . . . . . 40 3. Библиотека функций sdk_base . . . . . . . . . . . . . . . . . 41 3.1. Библиотечные A-функции доступа к оборудованию . . . 41 3.1.1. Функции досупа к регистрам ПЛИС . . . . . . . . 42 3.1.2. Внешний параллельный порт ПЛИС . . . . . . . . 46 3.1.3. Последовательный порт UART . . . . . . . . . . . 46 3.1.4. Последовательный порт I2C . . . . . . . . . . . . 47 3.1.5. Аналого-цифровые и цифро-аналоговые преобразователи . . . . . . . . . . . . . . . . . . . . . . . 53 3.2. Вызов библиотечных A-функций из С-программы . . . . 56 3.2.1. Доступ к регистрам ПЛИС . . . . . . . . . . . . . 56 3.2.2. Доступ к внешнему параллельному порту . . . . 59 3.2.3. Доступ к последовательному порту UART . . . . . 59 3.2.4. Доступ к последовательному порту I2C . . . . . 61 3.2.5. Доступ к АЦП и ЦАП . . . . . . . . . . . . . . . 64 3
Содержание 4. Требования к оформлению C-программ . . . . . . . . . . . . 67 4.1. Соглашения по идентификаторам . . . . . . . . . . . . . 67 4.1.1. Подбор идентификаторов . . . . . . . . . . . . . . 69 4.1.2. Написание идентификаторов . . . . . . . . . . . . 70 4.2. Соглашения по самодокументированности C-программ . 70 4.2.1. Комментарии . . . . . . . . . . . . . . . . . . . . . 70 4.2.2. Спецификация функций . . . . . . . . . . . . . . . 71 4.2.3. Спецификация программного файла или модуля . 72 4.3. Соглашения по читаемости программ . . . . . . . . . . . 73 4.3.1. Длина строк программного текста . . . . . . . . . 73 4.3.2. Количество операторов в строке . . . . . . . . . . 73 4.3.3. Отступы . . . . . . . . . . . . . . . . . . . . . . . . 74 4.3.4. Операторные скобки . . . . . . . . . . . . . . . . . 76 4.3.5. Пробелы . . . . . . . . . . . . . . . . . . . . . . . 78 4.3.6. Пустые строки . . . . . . . . . . . . . . . . . . . . 78 4.3.7. Улучшение читаемости программ . . . . . . . . . 79 Алфавитный указатель . . . . . . . . . . . . . . . . . . . . . . . . . 81 Список библиографических ссылок . . . . . . . . . . . . . . . . . 84 Приложение А. Подключение стенда к usb-порту компьютера 85 Приложение Б. Функции и константы библиотеки sdk_base 86 Приложение В. Курсовая работа по микропроцессорной технике . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 Приложение Г. Документы для выполнения курсовой работы 97 4
Предисловие Представляемое учебное пособие подготовлено на практическом материале, накопленном автором при преподавании в Уральском федеральном университете двухсеместрового курса по основам микропроцессорной техники, который изучается студентами Физико-технологического института УрФУ, специализирующимися в областях электроники и автоматики физических установок, приборов для применения в области радиационной безопасности человека и окружающей среды, защиты от излучений, радиационной экологии, биомедицинской инженерии. Пособие может быть полезно студентам других родственных специальностей. Рассмотрены практические вопросы программирования микропроцессорных устройств, а также оформления программ, разработанных при проектировании микропроцессорных устройств. Данное учебное пособие касается лишь практической части учебного курса по основам микропроцессорной техники. Оно содержит дополнительный теоретический материал и техническую информацию, которые необходимы студентам при программировании микропроцессорных устройств на платформе x51 во время практических занятий, лабораторного практикума, а также при выполнении индивидуального домашнего задания и курсовой работы. Отсюда название — введение в Keil C51. При подготовке учебного пособия и подборе материалов к нему автор полагал, что читатель уже знаком (в объеме программы технического вуза) с основами следующих дисциплин: теория цепей и сигналов, физические основы и элементная база электронной техники, аналоговая схемотехника, цифровая и импульсная техника, основы микропроцессорной техники, программирование на языках высокого и низкого уровней. Для углубленного восприятия излагаемого материала желательно предварительное знакомство читателя с теоретическими и практическими основами микропроцессорной техники, краткое изложение которых содержится в ранее изданных автором учебнике [1] и учебном пособии [2]; основами программирования микроконтроллеров семейства x51 на языках ассемблера [3] и C51 [4]; возможностями инструментальных средств для платформы x51: руководство [5], а также прил. А. Следует отметить, что микропроцессорная техника представляет собой обширную, динамично развивающуюся область знаний. В пособие включен лишь ограниченный круг вопросов, выбор и глубина освещения которых продиктованы требованиями федеральных государственных образовательных стандартов высшего образования по направлениям подготовки 14.03.02 «Ядерные физика и технологии», 12.03.02 «Биотехнические системы и технологии» и специальности 14.05.04 «Электроника и автоматика физических установок». 5
Предисловие В первой главе приведены необходимые сведения о синтаксисе языка программирования Keil C51. После общей характеристики и описания синтаксиса, используемых символов, ключевых слов и идентификаторов обсуждаются форматы данных и подробно раскрывается значение наиболее важных ключевых слов, включая директивы и модификаторы памяти. Далее идет обсуждение операторов языка программирования и выражения. Уделено внимание понятию указателей, используемых в архитектуре микроконтроллера x51: нетипизированные (generic pointer) и память-зависимые (memory-specific) указатели. Специальное внимание уделено обсуждению различий в объявлениях этих указателей, форматы, получаемый ассемблерный код, быстродействие фрагментов кода, в котором применяются данные указатели, явный и неявный способы преобразования типов указателей. В завершении главы рассматриваются механизмы передачи параметров и возвращения данных при взаимодействии программ и функций. Вторая глава посвящена особенностям взаимодействия программных модулей, написанных на языка ассемблера (A-программа) и Keil C51 (C-программа): соглашение по взаимодействию, настройка стартового адреса, обращение к регистрам, программирование прерываний, вызову A-программ из C-программ. Кратко обсуждаются стандартные библиотеки компилятора Keil C51. Третья глава посвящена разработке и описанию авторской библиотеки учебных программ sdk_base, предназначенных для доступа к оборудованию учебного стенда: регистрам ПЛИС, параллельным и последовательным (UART и I2C) портам, дисплею, клавиатуре и т. п. Приведены примеры вызова различных библиотечных процедур (A-функция) из C-программы. Обсуждаются организация и исходные тексты библиотечных модулей, краткая сводка которых дана в прил. Б. В четвертой главе сформулированы общие требования к оформлению учебных C-программ: соглашения по идентификаторам, самодокументированности и читаемости C-программ. Для закрепления теоретического материала в рамках учебной дисциплины предусмотрена курсовая работа. В прил. В и Г обсуждаются вопросы организации курсовой работы и оформления отчета: общие положения, нормативные документы, цели, задачи и тематика работ, порядок выполнения, общие требования к составу работы и оформлению отчета, этапы контроля и отчетности по курсовой работе. Отметим, что рассматриваемый двухсеместровый курс основ микропроцессорной техники является вводным курсом перед последующим изучением более сложного профессионально-ориентированного курса «Микропроцессорные системы». 6
1. Синтаксис Keil C51 Keil C51 – это язык программирования высокого уровня, предназначенный для применения в качестве инструмента структурно-модульного программирования платформы x51. В общем случае в состав любой программы, написанной на языке С51, могут входить несколько различных модулей. Наличие в программе хотя бы одного модуля является обязательным, поэтому в крайнем случае программа на С51 должна состоять как минимум из одного модуля. Исходный текст каждого модуля при этом компилируется отдельно и размещается в отдельном файле. Структура любой программы, созданной компилятором x51, состоит из нескольких подпрограмм, одна из которых получает обязательное имя main, содержит одноименную точку входа и называется далее основной программой. Выполнение любой программы, созданной компилятором Keil C51, всегда начинается с основной программы main, которая может вызывать другие подпрограммы, размещенные в различных модулях. Программный проект может содержать несколько объектных модулей, сохраненных в разных файлах и написанных, возможно, на разных языках программирования, но удовлетворяющих соглашения о передаче параметров и возвращаемых значениях, принятых в Keil C51. При разработке любых программ для компилятора Keil C51 необходимо обязательно учитывать требования синтаксиса этого языка, которые рассматриваются ниже. 1.1. Символы, ключевые слова и идентификаторы При назначении ключевых слов и идентификаторов используются буквы английского алфавита, цифры и символ подчеркивания _ . Отметим, что компилятор различает прописные и строчные буквы. Так, например, bytes и Bytes в языке C51 являются двумя различными идентификаторами. Для создания операторов языка и организации вычислительного процесса в Keil C51, так же, как и в стандартном ANSI C, используются специальные символы (табл. 1.1). Помимо ключевых слов и идентификаторов, исходный текст программы содержит также разделительные и управляющие символы. К разделительным символам относятся пробел, символы табуляции, перевода строки, возврата каретки, символы новой страницы и новой строки. Все они служат для разделения лексических единиц языка программирования, таких как ключевые слова, константы, идентифи 7
1. Синтаксис Keil C51 Таблица 1.1 Специальные символы языка Keil C51 Символ Наименование Символ Наименование , Запятая ) Круглая скобка правая . Точка ( Круглая скобка левая ; Точка с запятой } Фигурная скобка правая : Двоеточие { Фигурная скобка левая ? Вопросительный знак < Меньше Апостроф > Больше ! Восклицательный знак [ Квадратная скобка правая | Вертикальная черта ] Квадратная скобка левая / Дробная черта # Октоторп (решетка) \ Обратная черта % Процент ~ Тильда & Амперсанд * Астериск (звездочка) ^ Исключающее ИЛИ + Плюс = Равно Минус " Кавычки каторы и т. п. Если в тексте программы встречается подряд несколько одинаковых разделительных символов (например, последовательность пробелов или символов табуляции), то компилятор интерпретирует их как один разделительный символ. Особую группу символов составляют управляющие последовательности языка Keil C51, которые представляют собой специальные символьные комбинации, используемые в функциях ввода-вывода данных. Управляющая последовательность всегда начинается с символа «обратный слеш» \ (англ. backslash), за которым следует комбинация латинских букв и цифр (табл. 1.2). Так, любой символ из кодовой таблицы ASCII или ANSI можно представить в виде последовательности восьмеричных или шестнадцатеричных цифр, используя управляющие последовательности \OOO или \xHHH (табл. 1.2). Например, символ возврата каретки, для которого определена индивидуальная управляющая последовательность \r, можно представить также через восьмеричный (\015) или шестнадцатеричный (\x00D) коды. В табл. 1.2 приведен исчерпывающий список управляющих последовательностей компилятора C51. Если попытаться записать произвольную последовательность, состоящую из обратного слеша и какоголибо символа, который не перечислен в табл. 1.2 и не является цифрой, то компилятор попросту проигнорирует знак обратного слеша, а следующий за ним символ будет трактовать как литеральный (т. е. одиночный) символ. 8
1.1. Символы, ключевые слова и идентификаторы Таблица 1.2 Управляющие последовательности языка Keil C51 Управляющая Шестнадца последоваНаименование теричный тельность код \a Звонок 007 \b Возврат на шаг 008 \t Горизонтальная табуляция 009 \n Переход на новую строку 00A \v Вертикальная табуляция 00B \r Возврат каретки 00D \f Новая страница 00C \" Кавычки 022 \’ Апостроф 027 \0 Нуль-символ 000 \\ Обратная дробная черта 05C \000 8-ричный код ASCII- или ANSI-символа — \xHHH 16-ричный код ASCII- или ANSI-символа HHH Для примера составим последовательность \c . Компилятор будет воспринимать ее как одиночный символ с . Если эту последовательность указать в строке среди других символов, то компилятор воспримет ее как символ с в составе строковой или символьной константы, т. е. "Ab\cdef" = "Abcdef". На практике обратный слеш можно использовать в качестве символа продолжения, когда длинную строку необходимо разбить на две короткие строки. Если за символом \ следует управляющий символ возврата каретки, то оба эти символа игнорируются и компилятор считает следующую строку продолжением предыдущей. Для определения имени переменной, подпрограммы, символической константы или метки оператора в языке Keil C51 используются идентификаторы, длина которых может достигать 255 символов. Однако при распознавании идентификаторов компилятор различает только первые 31 символ и игнорирует все остальные символы. Идентификатор состоит из последовательности символов, в которую могут входить любые прописные или строчные буквы латинского алфавита, символ подчеркивания _ , цифры. При определении идентификатора следует учитывать два ограничения: 1) первым символом идентификатора должна быть буква или символ подчеркивания _ , но не цифра; 2) компилятор Keil C51 различает регистр букв. Непосредственное создание идентификатора происходит при объявлении переменной, функции, структуры, объединения и т. п. Идентификатор не должен совпадать ни с ключевыми словами, ни с за 9
1. Синтаксис Keil C51 резервированными словами, ни с именами функций из библиотеки компилятора языка Keil C51. Отметим, что символ подчеркивания _ широко используется в именах системных функций и переменных, поэтому настоятельно не рекомендуется использовать его в качестве первого символа в создаваемых пользователем идентификаторах, поскольку такой идентификатор может совпасть с именем какой-либо системной функции или переменной, которая в результате этого станет недоступной. В языке программирования Keil C51 определены те же самые ключевые слова, которые применяют в стандартном ANSI C. Однако в дополнение к этому в Keil C51 используется целый ряд новых ключевых слов, используемых только при программировании платформы x51, которых в большинстве своем нет в стандартном ANSI C (табл. 1.3). Таблица 1.3 Ключевые слова Keil C51 для платформы x51 № п/п Слово № п/п Слово № п/п Слово № п/п Слово 1. _at_ 6. compact 11. pdata 16. sfr16 2. alien 7. data 12. _priority_ 17. small 3. bdata 8. far 13. reentrant 18. _task_ 4. bit 9. idata 14. sbit 19. using 5. code 10. interrupt 15. sfr 20. xdata Идентификаторы пользователя не должны совпадать с ключевыми словами. Далее будет проведено подробное обсуждение смысла каждого из ключевых слов, перечисленных в табл. 1.3. В языке Keil C51 предусмотрено определение констант, которые так же, как и в классическом ANSI C, предназначены для введения чисел в состав выражений операторов языка программирования C51. Константы всегда начинаются с цифры в отличие от идентификаторов, которые всегда начинаются с буквы. В языке C51 можно использовать следующие типы констант: целые знаковые и беззнаковые константы; константы с плавающей точкой; символьные константы и литеральные строки. Для записи целочисленных констант используются восьмеричная, десятичная или шестнадцатеричная формы представления. При этом десятичная константа, состоящая из одной или нескольких десятичных цифр, не может начинаться с нуля, иначе компилятор интерпретирует это число как восьмеричное. Восьмеричная константа всегда начинается с обязательного нуля. За ним могут следовать одна или несколько восьмеричных цифр, каждая из которых лежит в диапазоне от 0 до 7. Шестнадцатеричная константа всегда начинается с обязательного префикса – после 10