Выбрать главу

Частота тактового генератора делится на четыре с помощью схемы, показанной на Рис. 2.25 (стр. 54), чтобы получить четыре не перекрывающихся тактовых сигнала. Каждый из этих сигналов используется схемой дешифратора для управления внутренними узлами процессора в требуемой последовательности. Соответственно длительность одного машинного цикла равна четырем периодам внешнего сигнала fOSC (см. Рис. 4.4). Таким образом, при использовании резонатора с частотой 4 МГц частота машинных циклов составляет fOSC/4, или один миллион циклов в секунду, что соответствует периоду машинного цикла, равному 1 мкс.

В зависимости от текущей фазы машинного цикла блок выборки выполняет следующие операции:

Q1: Инкрементирование счетчика команд и выставление его содержимого на шину адреса памяти программ.

Q4: Считывание кода команды с шины данных памяти программ в регистр команд IR1 и одновременно с этим пересылка предыдущей команды по конвейеру в регистр команд IR2, подключенный к дешифратору команд.

Стек

Стек представляет собой отдельный блок из восьми 13-битных регистров, который подключен к счетчику команд. В 6-й главе мы увидим, что стек используется для хранения предыдущего значения счетчика команд, т. е. «запоминает» точку возврата при вызове подпрограммы.

Исполнительный блок

Исполнительный блок (Рис. 4.5) осуществляет извлечение данных из памяти данных или непосредственно из кода команды и выполняет обработку этого значения, используя АЛУ. Режим работы АЛУ определяется сигналами, формируемыми дешифратором команд. Результат помещается либо в рабочий регистр W, либо обратно в память данных, перезаписывая исходное значение.

Арифметико-логическое устройство (АЛУ)

Основным элементом исполнительного блока является АЛУ (см. Рис. 2.10 на стр. 39), которое осуществляет обработку данных, поступающих из двух источников. Одним из этих источников является 8-битный рабочий регистр W. В качестве другого источника может выступать:

• Регистр данных, указанный в команде. Например, команда addwf h’20’,f прибавляет содержимое рабочего регистра к содержимому регистра h’20’.

• Константа, являющаяся частью слова команды (см. Рис. 3.6 на стр. 69). К примеру, команда addlw 5 прибавляет число 5 к содержимому рабочего регистра.

В первом случае результат может быть помешен либо обратно в память данных, если бит адресата равен 0 (см. Рис. 3.5 на стр. 68), либо в рабочий регистр, если этот бит равен 1, например в случае команд типа addwf h'20',w

Рис. 4.5. Исполнительный блок микроконтроллера PIC16F84

Регистр STATUS

Этот регистр, тесно связанный с АЛУ, содержит три бита-флага, которые используются для информирования программы о результате выполнения команды. В частности, не было ли переноса при выполнении операции сложения.

Флаг переноса

Бит 0 регистра STATUS используется в качестве флага переноса С (от англ. carry — перенос). Основное его назначение — хранение бита переноса предыдущей операции сложения. При операциях вычитания значение этого бита соответствует инвертированному биту заема (см. Пример 4.2). Например, 24–12 = 12В¯1, а 12–24 = 88B¯0. Флаг С также используется в операциях сдвига, как показано на Рис. 5.13 (стр. 148). Пометка «R/W?» на Рис. 4.6 отражает тот факт, что этот бит доступен как для чтения (R), так и для записи (W), а после сброса по питанию его состояние не определено (при любом другом сбросе состояние этого бита не изменяется).

Рис. 4.6. Формат регистра STATUS микроконтроллера PIC16F84

Флаг десятичного переноса

Бит 1 регистра STATUS используется в качестве флага десятичного переноса DC (от англ. digit carry). Этот флаг функционирует точно так же, как и обычный флаг С, только содержит бит переноса из младшего полубайта в старший, т. е. из 3-го бита в 4-й. Аналогично флагу С, флаг DC содержит дополнение бита заема из 3-го бита в 4-й.

Информация о наличии или отсутствии переноса между полубайтами полезна при работе с данными, представленными в двоично-десятичном коде (посмотрите хотя бы на Пример 4.5). При использовании этого кода в каждом полубайте хранится 4-битное представление десятичного числа от 0 до 9 (см. стр. 20), и флаг десятичного переноса указывает на возникновение переноса между десятичными разрядами.