Конспект лекций по курсам "Проектирование центральных и периферийных устройств ЭВС", "Микропроцессоры и ЭВМ в микросистемах". Лукьяненко Е.Б. - 45 стр.

UptoLike

Составители: 

В основе формирования задержки лежит задание количества тактов и посте-
пенное уменьшение этого значения до нуля. Если число больше 255, то мы долж-
ны распределить это число по нескольким регистрам и последовательно их обра-
батывать. Младший байт при этом уменьшается на 1 до тех пор, пока его значение
не изменится с 00 до FF. При этом устанавливается флаг переноса. Затем умень-
шается на 1 следующий по порядку старший байт и т.д. Пример уменьшения при-
веден в таблице 8.
Табл. 8
Старший
байт
Младший
байт
Перенос
0х1А 0х02 Нет
0х1А 0х01 Нет
0х1А 0х00 Нет
0х1А 0хFF Да
0х19 0хFF Нет
0х19 0хFE да
Пусть мы хотим получить секундную задержку при частоте тактового генера-
тора 4 МГц. Период тактовой частоты равен
T=1/Ft=1/4 Мгц=0,25 мкс.
Для создания задержки нам потребуется 1с*10
6
мкс/0,25мкс=4*10
6
импуль-
сов тактовой частоты.
Если в цикле содержится столько команд, что они выполняются за 5 тактов, то
количество подсчитываемых импульсов равно:
4*10
6
:5=800 000.
В шестнадцатеричном коде это число запишется 0х0С3500. Делим это число
на группы по два разряда:
0х00; 0х35; 0х0С.
Загружаем эти числа в рабочие регистры:
Ldi delay1,0x00
Ldi delay2,0x35
Ldi delay3,0x0C
Для организации цикла воспользуемся командами:
Sbci reg,number (Subtract Immediate with Carry) – вычитание константы num-
ber (0…255) и флага переноса из регистра reg, сохраняя результат в этом же реги-
стре.
Subi reg,number ; вычитание константы number без учета переноса.
Например, команда cbci delay2,0 вычитает 1 из регистра delay2, если флаг
переноса установлен, и 0 – в противном случае.
Цикл задержки в 1 с запишется следующим образом:
Loop:
1 такт subi delay1,1 ; вычитаем 1 из delay1
1 такт sbci delay2,0 ; вычитаем 1 из delay2, если флаг С=1
1 такт sbci delay3,0 ; вычитаем 1 из delay3, если флаг С=1
45