Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Консп лек по ЭиУА.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
934.4 Кб
Скачать

6 Конвейер и подпрограмма задержки

Цель лекции: объяснить совместный механизм работы счетчика команд, стека, конвейера, основной программы и подпрограмм.

Краткое содержание лекции. Конвейер и его назначение, совместный механизм работы счетчика команд, стека, конвейера, основной программы и подпрограмм. Время выполнения команд. Программа задержки и её расчет.

6.1 Конвейер

Конвейер реализован в виде двух 14-битных регистров. В первом регистре находится команда, только что считанная из памяти программ по адресу, определяемому значением счетчика команд. Второй регистр подключен к дешифратору и соответственно содержит исполняемую в данный момент команду. Такое исполнение позволяет осуществлять выборку команды одновременно с исполнением команды, выбранной в предыдущем цикле. Что ускоряет работу микроконтроллера. Естественно, при этом предполагается, что последовательность выполнения команд имеет линейный характер. В случае команды, выполняющих переход к другому месту памяти программ, команда, находящаяся на вершине конвейера, должна быть заменена другой командой. Это называется сбросом конвейера, сброс увеличивает время исполнения команды на машинный цикл. Как видно из рисунка 6.1, обычно команда выполняется за один машинный цикл.

Рисунок 6.1 - Конвейер

Из рисунка также видно, почему первые три команды в программах пустые (инструкция NOP). В это время в память данных записывается «мусор».

6.2 Программа задержки

Напишем подпрограмму Timer для формирования за­держки. Её блок-схема представлена на рисунке 6.2.

Рисунок 6.2 – Блок – схемы подпрограмм задержки

Программное фор­мирование задержки заключается в простом «ничего не делании» в течение требуе­мого времени. Обычно это реализуется с помощью цикла, в котором заданная константа декрементируется до нуля, как показано на рисунке 6.2 слева.

Выбирая соот­ветствующее значение константы N, можно сформировать задержку определенной дли­тельности. Понятно, что эта задержка будет зависеть от частоты тактового сигна­ла микроконтроллера. У нас тактовая частота равна 12 МГц, следовательно, длительность машинного цикла, содержащего 4 такта ТМ=4/F=4/(12106) =0,333 мкс.

Фрагмент текста программы:

MOVLW D'N'; аргумент для подпрограммы (для константы Sch_in).

CALL Timer

Timer; подпрограмма Timer. Применен один цикл.

MOVWF Sch_in; устанавливаем значение счетчика равное N.

M_in; метка счетчика.

DECF Sch_in, F; уменьшаем значение счетчика Sch_in на 1.

BTFSS STATUS, Z; если оно равно нулю (Z=1), пропускаем GOTO.

GOTO M_in; срабатывает только при Z=0.

RETURN; конец подпрограммы Timer.

6.3 Расчет времени задержки

Чтобы определить величину задержки Tz, нужно учесть, сколько времени выполняется та или иная команда подпрограммы, и вычислять общее число машинных циклов, которое тратится на вы­полнение подпрограммы.

Команда CALL Timer, используемая для перехода к подпрограмме, выполняется за два машинных цикла из-за сброса конвейера.

Команда MOVWF Sch_in выполняется за один ма­шинный цикл.

Команды DECF Sch_in, F, декрементирующие содержимое счетчика, за­трачивают и в общей сложности N проходов цикла.

Команда BTFSS STATUS, Z, проверяющая состояние флага Z (не стал ли W равен нулю после предыдущего декрементирования?), также выполняется N раз. Однако при последнем проходе происходит выход из цикла за счет пропуска команды перехода, что добавляет один цикл из-за сброса конвейера. Таким образом, общая задержка, вносимая этой командой, состав­ляет N + 1 циклов.

Команда GOTO. Выполняется только N-1 раз, поскольку выход из цикла происходит за счет пропуска команды Goto. Каждое ее выполнение занимает 2 цикла из-за сброса конвейера. Она, таким образом, выполняется 2(N- 1) раз.

Команда RETURN выполняется за 2 цикла.

Подсчет количества циклов приведен в таблице 6.1. Напишем выражение для расчета времени задержки: TZМ(4+4N)=0,333(4+4N).

Таблица 6.1 - Число циклов выполнения команд

Команда

Call

Movwf

Decf

Btfss

Goto

Return

Сумма

Количество циклов

2

1

N

N+1

2(N-1)

2

4+4N

Максимальное значение N может быть только D’255’. При этом получится задержка: TZ=0,333(4+4225)=341 мкс. В действительности максимальная задержка будет при N=0. Рассчитайте её самостоятельно. Поэтому для задержек больше чем 341 мкс, придется создавать дополнительно еще один или два внешних цикла как показано на рисунке 6.2 справа.

Будем приближенно считать, ошибка составит всего 4 ТМ, что внешний цикл кратно увеличивает время задержки. Рассчитаем значение счетчика Sch_out необходимо для получения задержки в 0,05с методом пропорций:

Sch_out=1- - 341 мкс, Sch_out=? - - 50000. Получим Sch_out=147.

Задержку можно увеличить, добавляя в тело цикла команды Nор (нет операции). Каждая команда Nор добавляет один машинный цикл, не влияя при этом на флаги регистра STATUS.

Наша процедура задержки является примером подпро­граммы, которая имеет входной параметр W, определяющий время задержки, но она ничего не возвра­щает в главную программу. Эта подпрограмма просто выполняет свою задачу, заключающуюся в фор­мировании задержки, а также изменяет регистры данных, рабочий регистр и некоторые флаги регистра Status.