Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учб.-мтд. псб..doc
Скачиваний:
233
Добавлен:
22.03.2016
Размер:
3.6 Mб
Скачать

7.4.4. Выполнение программы

При включении напряжения питания, а также после сброса микроконтроллера в счетчик команд PC автоматически загружается значение 0x0000- это адрес вектора сброса. По этому адресу в памяти программ находится команда безусловного перехода к инициализационной части программы - к подпрограмме обработки сброса, команды которой программно осуществляют сброс регистра состояния SREG и установку указателя стека SP. Если в программе не используются прерывания, то эта подпрограмма может начинаться непосредственно с адреса 0x0001. При нормальном выполнении программы содержимое счетчика команд автоматически увеличивается на 1 или 2 (в зависимости от выполняемой команды) в каждом машинном цикле.

Адрес команды, размещенный в счетчике команд PC (рис.7.2 ), выставляется на шину адреса и по этому адресу из памяти программ производится выборка кода команды. Код команды записывается в регистр команд и по адресному полю команды инициируется соответствующий РОН (или область памяти ОЗУ), операционное поле команды анализируется дешифратором со схемой управления выполнением команд и на этой основе формируются управляющие сигналы, поступающие через шину управления в обрабатывающую часть МК (АЛУ и др.). Как уже отмечалось, все РОН непосредственно доступны АЛУ. Такое решение позволяет АЛУ выполнять одну операцию (извлечение операнда из регистрового файла, выполнение команды и запись результата обратно в регистровый файл) за один машинный цикл T (рис. 7.15). Длительность машинного цикла составляет один период T системного тактового сигнала МК.

.

Рис. 7.15.

В МК при выполнении программы реализован так называемый двухуровневый конвейер. Работа этого конвейера в течение машинных циклов показана на рис. 7.16. Во время первого машинного цикла происходит вы-

Рис. 7.16

борка команды и ее декодирование. Во время второго цикла эта команда выполняется, а параллельно происходит выборка и декодирование второй команды и т. д. В результате фактическое время выполнения команды получается равным одному машинному циклу.

7.4.5. Порты ввода/вывода

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

Обращение к портам (рис. 7.12) производится через регистры ввода/вывода. Под каждый порт ввода-вывода PORTx в адресном пространстве ввода/вывода (рис. 7.14) зарезервировано 3 адреса, по которым размещены следующие регистры: регистр данных PORTx, регистр направления данных DDRx и регистр вывода PINx. Действительные названия регистров получаются подстановкой названия порта вместо символа x, соответственно регистры порта A называются PORTA, DDRA, PINA, порта B - PORTB, DDRB, PINB и т. д. Поскольку с помощью регистров PINx осуществляется доступ к физическим значениям сигналов на выводах порта, они доступны только для чтения, тогда как остальные два регистра доступны и для чтения и для записи. Упрощенная структура одного из каналов порта ввода-вывода приведена на рис. 7.17. Каждому выводу n порта PORTx соответствуют три разряда

Рис. 7.17

регистров ввода/вывода: PORTxn, DDRxn и PINxn. Действительные названия разрядов регистров получаются подстановкой названия порта вместо символа x и номера разряда вместо символа n. Порядковый номер вывода порта соответствует порядковому номеру разряда регистров этого порта.

Разряд n регистра DDRx определяет направление передачи данных через контакт (вывод) Pxn. Если этот разряд установлен в «1», то вывод Pxn является выходом, если же сброшен в «0» - входом.

Разряд PORTxn регистра PORTx выполняет двойную функцию. Если вывод Pxn функционирует как выход (DDxn=1), этот разряд определяет состояние вывода порта PORTx, если разряд PORTxn, установлен в «1», на выводе Pxn устанавливается напряжение высокого уровня, если же разряд сброшен в «0», на выводе Pxn устанавливается напряжение низкого уровня.

Если же вывод Pxn функционирует как вход (DDRxn=0), то драйвер Dr переходит в так называемое высокоимпедансное состояние «z», при котором его выход как бы электрически изолируется от других участков цепи. Если в этом случае разряд PORTxn установлен в «1», то схема управления внутренним резистором R подключает его к напряжению источника питания Uи.п. и вывод Pxn становится источником тока.

Состояние вывода МК независимо от установок разряда DDRxn может быть получено путем чтения разряда PINxn регистра PINx.