Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Принципы организации взаимодействия микропроцессора с внешними устройствами.
Функционирование микропроцессорной системы, особенно ориентированной на системы управления, во многом определяется взаимодействием микропроцессора с внешними устройствами. Такое взаимодействие может строиться по трем основным схемам: - программно управляемый обмен; - обмен по готовности внешнего устройства; - обмен по прерыванию. В первом случае микроконтроллер при возникновении необходимости обмена обращается к ВУ и производит обмен информацией. Однако при этом программа МК должна быть составлена таким образом, чтобы к моменту обмена внешнее устройство было безусловно к нему готово. Второй механизм обмена (обмен по готовности) предполагает перед началом обмена проверку состояния готовности внешнего устройства. Обмен производится лишь при положительном результате такой проверки. Этот способ используется в основном в тех случаях, когда микроконтроллер не занят выполнением каких-либо иных задач и его работа строится по циклу "считывание показаний датчика - обработка - выдача управляющих воздействий - считывание показаний датчика -...". Если при разработке МП системы необходимо подключить к ОМК ВЕ51 внешнюю память данных (ОЗУ), или внешнюю память программы (ПЗУ), или дополнительное устройство ввода/вывода информации, то ОМК предварительно формирует внешнюю системную магистраль. Наиболее часто используют трех шинную внешнюю системную магистраль, состоящую из: –ША(максимальношестнадцатиразрядная); –ШД(восьмиразрядная); –ШУ. Общая схема формирования внешней системной магистрали имеет вид, изображенный на рисунке 20.1
Рисунок 20.1 – Схема формирования внешней системной магистрали
Формирование ША Для формирования разрядов ША используется порт Р2 и Р0, при этом передача адреса по линиям порта Р0 сопровождается активным сигналом ALE. Для сохранения адресной информации на время выполнения команды используется регистр защелка DD2. Формирование ШД Для формирования используется разряды порта Р0. В то время, когда по ним не передается адресная информация. Формирование ШУ Используется разряды Р3 в альтернативном режиме работы, а также сигнал PSEN– чтение информации из внешнего ПЗУ. Основными сигналами ШУ является ЧТПП (PSEN) –чтениевнешней памяти программы (ПЗУ).
ЧТПДчтение внешней памяти данных (ОЗУ). ЗППДзапись информации во внешней памяти данных (ОЗУ). IO/M- сигнал выбора устройства для обмена информацией. Если IO/M=0, то обмен осуществляется с внешней памятью данных (ОЗУ). Если IO/M=1, то обмен осуществляется с внешними устройствами ввода/вывода. Замечание: Сигнал IO/M формируется пользователем программно с использованием любой свободной линии порта Р1. Наличие этого сигнала IO/M объясняется тем, что внешние ячейки ОЗУ и внешние устройства ввода/вывода подключаются к системной магистрали одинаково и используется единое адресное пространство. Тема 3 Программирование на языке Си
Лекция 21 Лексические основы языка C++ Цели лекции: Изучение лексических основ: алфавита, лексем, идентификаторов, предложений.
Состав языка В тексте на любом естественном языке можно выделить четыре основных элемента: символы, слова, словосочетания и предложения. Подобные элементы содержит и алгоритмический язык, только слова называют лексемами (элементарными конструкциями), словосочетания — выражениями, а предложения — операторами. Лексемы образуются из символов, выражения — из лексем и символов, а операторы — из символов, выражений и лексем: - Алфавит языка, или его символы — это основные неделимые знаки, с помощью которых пишутся все тексты на языке. - Лексема, или элементарная конструкция, — минимальная единица языка, имеющая самостоятельный смысл. - Выражение задает правило вычисления некоторого значения. - Оператор задает законченное описание некоторого действия.
Рисунок 21.1 - Состав алгоритмического языка
Для описания сложного действия требуется последовательность операторов. Операторы могут быть объединены в составной оператор, или блок (Блоком в языке С++- считается последовательность операторов, заключенная в фигурные скобки { }). В этом случае они рассматриваются как один оператор. Операторы бывают исполняемые и неисполняемые. Исполняемые операторы задают действия над данными. Неисполняемые операторы служат для описания данных, поэтому их часто называют операторами описания или просто описаниями.
Каждый элемент языка определяется синтаксисом и семантикой. Синтаксические определения устанавливают правила построения элементов языка, а семантика определяет их смысл и правила использования. Объединенная единым алгоритмом совокупность описаний и операторов образует программу на алгоритмическом языке. // HELLO.CPP - имя файла с программой #include void main() { cout << "\nHello, World!\n"; } Основная программная единица на языке Си++ - это текстовый файл с названием <имя>.срр, где cpp - принятое расширение для программ на Си++, а имя выбирается достаточно произвольно. Для удобства ссылок и сопоставления программ с их внешними именами целесообразно помещать в начале текста каждой программы строку комментария с именем файла, в котором она находится. Текстовый файл с программой на Си++ вначале обрабатывает препроцессор, который распознает команды (директивы) препроцессора (каждая такая команда начинается с символа '#') и выполняет их. В приведенной выше программе использована препроцессорная команда include <имя вставляемого файла> Выполняя препроцессорные директивы, препроцессор изменяет исходный текст программы. Команда вставляет в программу заранее подготовленные тексты из включаемых файлов. Сформированный таким образом измененный текст программы поступает на компиляцию. Компилятор, во-первых, выделяет из поступившего к нему текста программы лексические элементы, т.е. лексемы, а затем на основе грамматики языка распознает смысловые конструкции языка (выражения, определения, описания, операторы и т.д.), построенные из этих лексем. Фазы работы компилятора здесь рассматривать нет необходимости. Важно только отметить, что в результате работы компилятора формируется объектный модуль программы. Компилятор, выполняя лексический анализ текста программы на языке Си++, для распознавания начала и (или) конца отдельных лексем использует пробельные разделители. К пробельным разделителям относятся собственно символы пробелов, символы табуляции, символы перехода на новую строку. Кроме того, к пробельным разделителям относятся комментарии. Для того чтобы выполнить программу, требуется перевести ее на язык, понятный процессору — в машинные коды. Этот процесс состоит из нескольких этапов. Рисунок 21.2 иллюстрирует эти этапы для языка С++.
Рисунок 21.2 - Этапы создания исполняемой программы
Сначала программа (текстовый файл с расширением имя.cpp) передается препроцессору, который выполняет директивы, содержащиеся в ее тексте (например, включение в текст так называемых заголовочных файлов — текстовых файлов, в которых содержатся описания используемых в программе элементов).
Получившийся полный текст (файл с расширением.cpp) программы поступает на вход компилятора, который выделяет лексемы, а затем на основе грамматики языка распознает выражения и операторы, построенные из этих лексем. При этом компилятор выявляет синтаксические ошибки и в случае их отсутствия строит объектный модуль. (создается файл – имя.obj). Компоновщик, или редактор связей, формирует исполняемый модуль программы, подключая к объектному модулю другие объектные модули, в том числе содержащие функции библиотек, обращение к которым содержится в любой программе (например, для осуществления вывода на экран). Если программа состоит из нескольких исходных файлов, они компилируются по отдельности и объединяются на этапе компоновки.
Исполняемый модуль имеет расширение имя.ехе и запускается на выполнение обычным образом.
Для описания языка в документации часто используется некоторый формальный метаязык, например, формулы Бэкуса—Наура или синтаксические диаграммы. Для наглядности и простоты изложения будем использовать широко распространенный неформальный способ описания, при котором необязательные части синтаксических конструкций заключаются в квадратные скобки, текст, который необходимо заменить конкретным значением, пишется по-русски, а выбор одного из нескольких элементов обозначается вертикальной чертой. Например, запись [ void | int ] имя(): означает, что вместо конструкции имя необходимо указать конкретное имя в соответствии с правилами языка, а перед ним может находиться либо void, либо int, либо ничего. Фигурные скобки используются для группировки элементов, из которых требуется выбрать только один. В тех случаях, когда квадратные скобки являются элементом синтаксиса, это оговаривается особо.
Алфавит языка С (С++) Алфавит языка С (С++) включает в себя: Прописные и строчные буквы латинского алфавита и знак подчёркивания Цифры от 0 до 9 Специальные знаки: " { }, | [ ] () + - / % *. \? < = >! & # ~; ' ' Пробельные символы: пробел, символы табуляции, символ перехода на следующую строку. Лексемы Из символов алфавита формируются лексемы: 1) идентификаторы 2) ключевые (зарезервированные) слова 3) знаки операций 4) константы 5) разделители Идентификаторы – имя программного объекта. Используются латинские буквы, цифры, знак подчеркивания. Первый символ имени – буква или знак подчеркивания. Пробелов не должно быть, длина имени не ограничивается. В Borland C++ -- 1-32 символов. Идентификатор не должен совпадать с ключевыми словами. Ключевые слова – слова, имеющие специальные значения для компилятора. !!! Все ключевые слова пишутся только строчными буквами. Примеры некоторых ключевых слов: asm class inline return auto double int static bool do new this break enum operator try case friend public typedef Знаки операций – один или более символов, определяющих действия над операндами. Знаки операций делятся на: - унарные - бинарные - терарные Один и тот же знак может интерпретироваться по-разному, в зависимости от контекста.
Унарные операции приведены в таблице 21.1.
Таблица 21.1 - Унарные операции
Бинарные операции. Эти операции делятся на следующие группы: - аддитивные; - мультипликативные; - сдвигов; - поразрядные; - операции отношений; - логические; - присваивания; - выбора компонента структурированного объекта; - операции с компонентами классов; - операция "запятая"; - скобки в качестве операций. Бинарные аддитивные операции приведены в таблице 21.2.
Таблица 21.2 - Аддитивные операции
Бинарные мультипликативные операции приведены в таблице 21.3.
Таблица 21.3 - Мультипликативные операции
Операции сдвига (определены только для целочисленных операндов). Формат выражения с операцией сдвига: операнд_левый операция сдвига операнд_правый. Операции сдвига приведены в таблице 21.4.
Таблица 21.4 – Операции сдвига
Поразрядные операции приведены в таблице 21.5.
Таблица 21.5 – Поразрядные операции
Следующая программа иллюстрирует особенности операций сдвига и поразрядных операций. //Р2.СРР - операции сдвига и поразрядные операции #include <iostream.h> void main() { cout << "\n 4<<2 равняется " << (4<<2); coot << "\t 5 >>l равняется " << (5>>1); coou << "\n 6&5 равняется " << (6&5); coat << "\t 6|5 равняется " << (6|5); coot «"\t 6^5 равняется " << (6^5); }
Результат выполнения программы: 4<<2 равняется 16 5>>1 равняется 2 6&5 равняется 4 6|5 равняется 7 6^5 равняется 3
Операции отношения (сравнения) приведены в таблице 21.6
Таблица 21.6 - Операции отношения (сравнения)
Операнды в операциях отношения арифметического типа или указатели. Результат целочисленный: 0 (ложь) или 1 (истина). Логические бинарные операции приведены в таблице 21.7
Таблица 21.7 - Логические бинарные операции
Операции присваивания приведены в таблице 21.8. В качестве левого операнда в операциях присваивания может использоваться только модифицируемое первое-значение - ссылка на некоторую именованную область памяти, значение которой доступно изменениям. Термин первое-значение (left value), иначе - леводопустимое выражение, происходит от объяснения действия операции присваивания, в которой операнд слева от знака операции присваивания может быть только модифицируемым первым-значением. Примером модифицируемого первого-значения служит имя переменной, которой выделена память и соответствует некоторый класс памяти.
Таблица 21.8 – Операции присваивания
Обратите внимание, что для всех операций сокращенная форма присваивания El ор= Е2 эквивалентна E1 = E1 ор (Е2), где ор обозначение операции. Операции выбора компонентов структурированного объекта приведены в таблице 21.9
Таблица 21.9 - Операции выбора компонентов структурированного объекта
Так как операции выбора компонентов структурированных объектов используются со структурами, объединениями, классами, то необходимые пояснения и примеры мы приведем позже, введя перечисленные понятия и, кроме того, определив указатели.
Операции разадресации(*) и адреса(&) Эти операции используются для работы с переменными типа указатель. Операция разадресации (*) осуществляет косвенный доступ к адресуемой величине через указатель. Операнд должен быть указателем. Результатом операции является величина, на которую указывает операнд. Типом результата является тип величины, адресуемой указателем. Результат не определен, если указатель содержит недопустимый адрес. Рассмотрим типичные ситуации, когда указатель содержит недопустимый адрес: - указатель является нулевым; - указатель определяет адрес такого объекта, который не является активным в момент ссылки; - указатель определяет адрес, который не выровнен до типа объекта, на который он указывает; - указатель определяет адрес, не используемый выполняющейся программой. Операция адрес (&) дает адрес своего операнда. Операндом может быть любое именуемое выражение. Имя функции или массива также может быть операндом операции "адрес", хотя в этом случае знак операции является лишним, так как имена массивов и функций являются адресами. Результатом операции адрес является указатель на операнд. Тип, адресуемый указателем, является типом операнда. Операция адрес не может применятся к элементам структуры, являющимися полями битов, и к объектам с классом памяти register. Примеры: int t, f=0, *adress; adress = &t; /* переменной adress, объявляемой как указатель, присваивается адрес переменной t */ *adress =f; /* переменной находящейся по адресу, содержащемуся в переменной adress, присваивается значение переменной f, т.е. 0, что эквивалентно t=f; т.е.t=0;*/
Операции с компонентами классов приведены в таблице 21.10.
Таблица 21.10 - Операции с компонентами классов
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Последнее изменение этой страницы: 2021-02-07; просмотров: 241; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.19.56.45 (0.079 с.) |