Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Основные режимы работы микропроцессорной системы: выполнение основной программы, обслуживание прерываний, прямой доступ к памяти.



Практически любая МПС (в том числе и компьютер) имеет три основных режима работы:

1) выполнение основной программы;

2) обслуживание прерываний;

3) прямой доступ к памяти.

Выполнение основной программы. В этом режиме процессор выбирает из памяти очередную команду программы и выполняет соответствующую операцию, читая данные из памяти или из УВВ, записывая данные в память или УВВ. В этом режиме процессор является единоличным ведущим (хозяином – Master) магистрали (системной шины) МПС. Все операции обмена информацией инициируются только процессором, все они выполняются строго в порядке, определяемом исполняемой программой.

Для хранения адреса очередной команды служит специальный регистр МП – счетчик команд или программный счетчик PC (Program Counter), содержимое которого автоматически увеличивается на 1 (инкрементируется) после выборки очередного байта команды. Таким способом обеспечивается последовательность выборки команд в процессе выполнения программы. При выборке очередной команды содержимое PC поступает на шину адреса, обеспечивая считывание из памяти следующей команды выполняемой программы. При реализации безусловных или условных переходов (ветвлений) или других изменений последовательности выполнения команд производится загрузка в PC нового содержимого, в результате чего происходит переход к другой ветви программы или подпрограмме.

Обращение к подпрограмме реализуется при поступлении в МП специальной команды вызова подпрограммы, которая указывает адрес первой команды вызываемой подпрограммы. Этот адрес загружается в PC, обеспечивая выборку первой команды подпрограммы. Предварительно выполняется процедура сохранения в специальной области ОЗУ текущего содержимого PC, где в этот момент хранится адрес следующей команды основной программы, чтобы обеспечить возвращение к ней после выполнения подпрограммы. Возврат в основную программу реализуется при поступлении команды возврата, завершающей подпрограмму. По этой команде сохранявшееся содержимое PC снова загружается в счетчик команд, обеспечивая выполнение команды, которая в основной программе следовала за командой вызова подпрограммы.

Для реализации процедуры вызова подпрограммы и возврата из нее используется стек (stack) – часть ОЗУ, предназначенная для временного хранения данных, и работающая по принципу LIFO (Last In-First Out – последним пришел, первым ушел).

Особенность стека – это заданный и неизменный способ адресации. Адресация к ячейкам стека производится с помощью специального регистра – указателя стека SP (Stack Pointer), который входит в состав МП. При записи любого числа (кода) в стек число записывается по адресу, определяемому как содержимое регистра SP, предварительно уменьшенное на единицу (декрементированное), т.е. (SP) = (SP) – 1. При чтении из стека число читается из ячейки с адресом, определяемым содержимым указателя стека, после чего это содержимое увеличивается на единицу (инкрементируется), т.е. (SP) = (SP) + 1. В результате получается, что число, записываемое последним, будет прочитано первым, а число, записанное первым, будет прочитано последним.

Обслуживание прерываний. При работе МПС часто возникают ситуации, когда требуется прервать выполнение текущей программы и перейти к подпрограмме, обеспечивающей реакцию системы на создавшиеся обстоятельства. Прерывания можно разделить на программные, аппаратные и исключения.

Программные прерывания возникают при поступлении в МП соответствующих команд. Аппаратные прерывания активизируются при поступлении сигналов от внешних устройств. Исключениями являются ошибки, возникающие при работе МП.

Во всех этих ситуациях МП завершает выполнение очередной команды и заносит в стек текущее содержимое счетчика команд PC, которое является адресом возврата к прерванной программе после выполнения подпрограммы обслуживания, и содержимое регистра состояния PSW (EFLAGS). Затем в PC загружается из памяти вектор прерывания – начальный адрес соответствующей подпрограммы обслуживания, которая часто называется обработчиком прерывания. Эти вектора являются входами в подпрограммы обслуживания и хранятся в таблице векторов прерываний, которая записывается в памяти МПС. Завершается подпрограмма обслуживания специальной командой возврата из прерывания, которая извлекает из стека хранившееся содержимое PC и PSW (EFLAGS) и загружает его обратно в эти регистры, обеспечивая возвращение к выполнению прерванной программы.

Прямой доступ к памяти. Режим прямого доступа к памяти ПДП (англоязычный термин DMA – Direct Memory Access) используется, если необходимо произвести пересылку значительного объема информации между ОЗУ и каким-либо внешним устройством. Реализация такой пересылки с помощью соответствующей программы требует использования отдельной команды для пересылки каждого байта или слова и значительного времени на ее выполнение.

Для пересылки больших массивов информации в МПС используются специальные микросхемы – контроллеры ПДП, которые реализуют режим прямого доступа к памяти. При поступлении запроса от внешнего устройства контроллер выдает соответствующий сигнал микропроцессору. Получив этот сигнал, процессор завершает очередной цикл обмена по системной шине и отключается от нее, то есть переводит выходы своих буферов, присоединенных к шинам адреса, данных и управления в Z-состояние. При этом процессор выдает контроллеру ПДП сигнал разрешения на реализацию прямого доступа. Получив этот сигнал, контроллер принимает на себя управление системной шиной. Он выдает на шину адреса ячеек ОЗУ, с которыми выполняется текущий цикл обмена, формирует необходимые сигналы, определяющие режим работы ОЗУ (запись или чтение) и портов ввода и вывода, через которые производится пересылка информации (ввод или вывод). Предварительно контроллер ПДП программируется для выполнения указанных функций. В него вводятся начальные адреса массивов памяти в ОЗУ, с которых начинается процесс обмена, и размеры массивов, подлежащих пересылке.

Теоретически обмен с помощью прямого доступа к памяти может обеспечить более высокую скорость передачи информации, чем программный обмен, так как процессор передает данные медленнее, чем контроллер ПДП. Однако на практике это преимущество реализуется далеко не всегда. Скорость обмена в режиме ПДП обычно ограничена возможностями магистрали. Кроме того, необходимость программного задания режимов контроллера ПДП также уменьшает реальную скорость пересылки данных в режиме ПДП. Поэтому режим ПДП обычно применяется в системах, где часто необходимо пересылать очень большие объемы данных, например, в персональных компьютерах. В простых МПС режим ПДП применяется редко.

 

34. Оператор выбора switch в языке mikroC. Выполняемые функции, примеры использования в программах.

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

Общий вид оператора switch:

switch ( выражение)

{

case константа1:

оператор1;

break;

case константа2:

оператор2;

break;

…………………

case константаN:

операторN;

break;

default:

оператор(N+1);

}

Оператор switch выполняется так. Сначала вычисляется выражение, стоящее в скобках после ключевого слова switch. Вычисленное значение сравнивается со значением констант: константа1, константа2, …, константаN. При совпадении вычисленного значения с некоторой константой выполняется соответствующий ей оператор. Затем управление передается оператору break (прервать), который производит немедленный выход из оператора switch. Если вычисленное значение не совпадает ни с одной из констант, выполняется оператор в ветви, помеченной default (по умолчанию).

Правила использования оператора switch.

1. Switch требует выражения целого типа. Это значение может быть константой, переменной или выражением. Оператор switch не работает с типами данных с плавающей точкой.

2. Значение после каждой метки case должно быть константой.

3. Язык Си не поддерживает метки case, содержащие диапазон значений. Каждое значение должно указываться с отдельной меткой case.

4. Необходимо использовать оператор break после каждого набора выполняемых операторов. Оператор break вызывает продолжение выполнения программы после завершения текущего оператора switch. Если не использовать оператор break, то выполнение программы продолжится на последующих метках case.

5. Ветвь, помеченная словом default (по умолчанию), выполняется тогда, когда ни одна из констант ветвей case не подходит. Ветвь default не является обязательной и, если она отсутствует, оператор switch ничего не выполнит.

6. Набор операторов в каждой ветви case не нужно заключать в фигурные скобки.

Замечание. В связи с тем, что в ветвях, помеченных словом case, можно указывать только константу, для анализа принадлежности к диапазону значений следует использовать оператор if … else множественного выбора.

В следующем примере проверяется значение переменной counter. Если counter равно 1, то переменной A присваивается значение 1. Если counter равно 10, то переменной B присваивается значение 1. Если counter равно 100, то переменная C устанавливается в 1. Если же counter не равно ни 1, ни 10. ни 100, тогда переменная D устанавливается в 1.

int counter, A = B = C = D = 0;

switch(counter)

{

case 1:

A = 1;

break;

case 10:

B = 1;

break;

case 100:

C = 1;

break;

default:

D = 1;

}

 

35. Операторы цикла while и do…while в языке mikroC. Выполняемые функции, примеры использования в программах.

Цикл while является разновидностью условного цикла, повторяющегося до тех пор, пока условие выполнено. Таким образом, цикл while может не выполняться ни разу, если условие проверки изначально ложно. Форма записи оператора цикла while имеет вид:

while( условие )

{

блок операторов;

}

 

Пример. Следующий цикл выводит в порт C числа от 1 до 100:

 

int x = 1;

while( x < = 100 )

{

PORTC = x;

x++;

}

 

Оператор цикла do…while

 

В цикле do… while условие повторения проверяется после каждого прохождения тела цикла. Следовательно, цикл do… while выполняется, по крайней мере, один раз.

Форма записи цикла do… while имеет вид:

do

{

блок операторов;

}

while( условие);

 

Пример. Следующий цикл выводит в порт C значения квадратов чисел от 2 до 10:

 

int x = 2;

do

{

PORTC = x * x;

x++;

}

while( x < = 10);


Поделиться:



Популярное:

  1. B. Основной кодекс практики для всех обучающих тренеров
  2. D. НОВЫЕ ТЕХНОЛОГИИ ДЛЯ ОБЕСПЕЧЕНИЯ ХРАНЕНИЯ И ДОСТУПА К ИНФОРМЦИИ О ПРОМЫШЛЕННОЙ СОБСТВЕННОСТИ
  3. I. Методические принципы физического воспитания (сознательность, активность, наглядность, доступность, систематичность)
  4. I. Основные решения по рекламе
  5. I.2. Структура педагогической науки и её основные отрасли
  6. II Основные общие и обзорные представления, понятия, положения психологии
  7. II. ЭКЗАМЕН ПО ОБЩЕСТВОЗНАНИЮ: ОСНОВНЫЕ ЭЛЕМЕНТЫ ПРОВЕРКИ
  8. III. Список основной литературы.
  9. А - плоский, односторонний; б - плоский двусторонний; в - трехгранный прямой; г - фасонный (трехгранный изогнутый); д - составной; е -многолезвийный (фасонный) со сменными пластинками; ж - дисковый.
  10. А. Основные клинические формы
  11. Авторское право: понятие, объекты, признаки и основные разновидности
  12. Административно – правовые режимы: понятие, признаки, назначения, правовое регулирование, виды


Последнее изменение этой страницы: 2016-03-17; Просмотров: 2188; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.031 с.)
Главная | Случайная страница | Обратная связь