![]() | |
![]() |
Электронные компоненты Мануалы Анализ последовательности выполнения операций в этой программе позволяет составить следующее выражение для определения Тз : Тз = 2Густ + Кв (Тав + Тсч) + (Кс + \) [2 (Тдв + Тсч) + + Тдс + Тсч] + Где + Тсч + 7дк. (7.3) Так как число выбираемых параметров в выражении (7.3) велико,, то возможно множество вариантов обеспечения точного значения Тз . Из этого множества вариантов лучшим является тот, который требует меньшее число байтов для записи команд, реализующих дополнительные задержки. Пример 7.3. Выбрать значения параметров Кв , Кс, Тдв, Тдс ч Гдк для получения Тз =2.107" = 1 с помощью приведенной выше програм мы. Для удобства расчетов выражение (7.3) преобразуем к виду 5Гз= 256(:с- 1 )(Гдв + Щ + Кс(Тс+ 15) + /(в(7дБ+ 15). (7-4) Поскольку основной вклад в создание задержки вносит первый член суммы (7.4), то расчет начинаем с выбора /Сс. Значение Гз велико, поэтому полагаем Кс близким к максимальному, например, Кс = 251. Тогда получаем разложение: 2 . W = 256 . 250 • 31-]- 16000. (7.5) Отсюда Гдв =31 - 15 = 16. Для выбора остальных параметров из (7.4) и (7.5) получаем 16000 = 251 ( Т-дс + 15) + /Св 31 + + 14. (7.6) Поскольку < 256, то, выбирая максимальное значение К, получаем 251 (Тдс+ 15)= 16000-256 31 - Гд.+ 14, (7.7) где Гдк - дополнительная задержка в конце программы, служащая для установки точного значения задержки Тз , Тдк должна быть по возможности малой (т. е. составлять единицы или десятки тактов); в общем случае целесообразно выбирать Гдк < (Гдв -\- Тсч), причем ТдК не должно быть равным Т, 2т, ЗТ или 6Г. С учетом этого из (7.7) получаем Где = ПТ и Гдк = I8T. Таким образом, с помощью МП можно реализовать точную задержку практически любой длительности, кратной Т, причем можно обеспечить изменение задержки ступенями заданного значения. Отметим, что для организации управляемой задержки с числом ступеней до 2 удобно использовать пару регистров. При этом факт появления нулевого значения в ней может быть зафиксирован с помощью различных приемов, один из которых отражен в блок-схеме алгоритма (рис. 7.2). Сложение и вычитание чисел. Сначала рассмотрим выполнение этих операций над Рис. 7.2. Блок-схема ал- числами без знаков, что соответствует, напри-горитма реализации уп- j f равляемой временной ер, операциям над кодами или положитель-задержки ными числами. ![]() уЗагрузтадрёса а УшанаВт ыетчит В Если операнды являются однобаитовыми числами, то их сложение и вычитание осуществляется командами ADDrvi SUB г. При выполнении команды сложения возможно переполнение разрядной сетки, о чем свидетельствует значение флага переноса СУ. Особенное гькэ выполнения команды вычитания является то, что ее результат представлен в дополнительном коде. Напомним, что при положительном числе дополнительный код совпадает с прямым, а при отрицательном он равен дополнению данного числа до 2". Для двоичных отрицательных чисел дополнительный код вычисляют путам инверсии всех разрядов прямего кода с последующим добавлением единицы. Если прямой код числа содержится в аккумуляторе, то переход к дополнительному коду в соответствии с (7.8) осуществляется с помощью команд инверсии СМ А и инкремента INR А. Обратный переход от дополнительного кода к прямому осуществляется аналогичным образом. Если хотя бы один из операндов занимает более п разрядов (где п - разрядность МП), то говорят, что вычисления производятся с повышенной точностью. В МП серии К580 для сложения двухбайтовых слов предусмотрена команда DAD гр. В общем же случае сложение и вычитание многобайтовых слов осуществляется путем многократного использования команд ADC г и SBB г. Cfpoc флага переноса ЁВод !321§21-1 изВУ Сложение Запись результата вОЗ Подготовка нового значения адреса Счет В В ![]() Рис. 7.3. Блок-схема алгоритма сложения модулей чисел Пример 7.4. Сложение двух целых положительных гЛ-разрядных десятичных чисел: а = {ag,... ...agaj} и Р={Р9уу ... PaPi}- Пусть число а хранится в ОЗ.У, занимая там следующих друг за другом восьмиразрядных ячеек, а число [3 вводится в ЦПЭ из ВУ последовательно, т. е. побайтно, начиная с младших разрядов. Результат v = а + Р записывают в те же ячейки ОЗУ, в которых хранилось число а. Так как используемый ЦПЭ одновременно оперирует только с двумя двоично-десятичными цифрами, то процедуру сложения выполняют в виде Л-крат-ного повторения циклов сложения двух цифр с учетом переноса из младших разрядов. Блок-схема программы дана на рис. 7.3. Присвоим адресу ячейки ОЗУ, в которой хранятся младшие цифры числа а, символическое обозначение ALPHA. Для хранения ALPHA в ЦПЭ целесообразно выделить пару регистров Н-L, чтобы иметь возможность использовать команды, оперирующие содержимым внешнего регистра М. Для организации циклов Вычислений выделим РОН В. В каждом i-м (i = 1, 2, .... Л) цикле должна производиться операция: {(VzHzi-i} = {«2i«2i-i} + {Paifei-ii + CY, причем в начальном цикле суммирования следует обеспечить CY = 0. Присвоим символическое обозначение PORT В восьмиразрядному двоичному номеру (адресу) В У, являющегося источником числа р. Полагаем, что работа ВУ организована во времени так, что в моменты выполнения команд ввода IN каждый раз в буферном регистре ввода будут содержаться требуемые две цифры числа р. Теперь составим программу сложения указанных чисел.
SUM: LXI H. ALPHA ; Запись адреса aa, о Я - Z,. Начальная установка счетчика циклов Сброс флага СУ (и аккумулятора) LOOP: [N PORTB ; Ввод цифр {ЭггРгг-!} из ВУ Сложение {hi?2i-i} с {a2,-«2<-i}-Десятичная коррекция результата. Запись hiit2i-i} в ОЗУ. Подготовка адреса следующих цифр а Счет циклов. Переход, если счет не закончен. Программа занимает 16 ячеек ПЗУ, а время ее выполнения Тьш = 21 + + 48-/V тактов. Например, сложение двух 12-разрядных десятичных чисел занимает ЗОЭГ, т. е. около 155 мкс. Эту же программу можно использовать для сложения многоразрядных двоичных чисел, если из нее исключить команду десятичной коррекции DAA. Факт переполнения разрядной сетки при необходимости может быть обнаружен путем проверки содержимого флага CY после выполнения всех вычислений. В этом случае программу дополняют командой JC /И2, где меткой М2 обозначен ее фрагмент, представляющий собой реакцию МП на переполнение разрядной сетки. Рассмотренный вариант программы сложения многобайтных чисел иллюстрирует организацию вычислительного цикла в программе, в которой требуется многократное повторение некоторой последовательности команд. Еще возможен вариант записи такой программы, когда цикл не используется, а заданная последовательность команд непосредственно повторяется в программе требуемое число раз. Использование вычислительного цикла обычно позволяет сократить статическую длину программы Lrp, определяемую числом ячеек памяти, требуемым для хранения программы. Однако при этом время выполнения программы Гвыл увеличива- Сложение ![]() Вычитание Изменение знака fi Знака Формирование дополнительного кода а SHOKfi Формирование дополнительного кодаЗ К метке OVER Формирование дополнительного кода ![]() © Рис. 7.4. Блок-схема алгоритма сложения чисел со знаками ется на 7 -Ь 15Л тактов, что вызвано необходимостью выполнения команд MVI, DCR и JNZ, с помощью которых устанавливается начальное состояние счетчика циклов и осуществляется счет. Целесообразность использования того или иного варианта программы зависит от имеющихся ограничений на объем ПЗУ программ и на время выполнения програм- 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 [ 67 ] 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |