Археология об основании Рима: Новые раскопки проясняют и такой острый дискуссионный вопрос, как дата самого возникновения Рима...
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...
Топ:
Когда производится ограждение поезда, остановившегося на перегоне: Во всех случаях немедленно должно быть ограждено место препятствия для движения поездов на смежном пути двухпутного...
Определение места расположения распределительного центра: Фирма реализует продукцию на рынках сбыта и имеет постоянных поставщиков в разных регионах. Увеличение объема продаж...
Эволюция кровеносной системы позвоночных животных: Биологическая эволюция – необратимый процесс исторического развития живой природы...
Интересное:
Лечение прогрессирующих форм рака: Одним из наиболее важных достижений экспериментальной химиотерапии опухолей, начатой в 60-х и реализованной в 70-х годах, является...
Берегоукрепление оползневых склонов: На прибрежных склонах основной причиной развития оползневых процессов является подмыв водами рек естественных склонов...
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Дисциплины:
2020-04-01 | 92 |
5.00
из
|
Заказать работу |
|
|
Как уже оговаривалось, при рестарте микропроцессор начинает исполнять инструкции, находящиеся в области векторов прерываний ПЗУ в зависимости от типа рестарта. При включении питания исполняется команда, записанная в ячейке с адресом 0000(16), а при аппаратном прерывании RST 7.5. - начальный адрес 003С(16). В эти ячейки следует поместить команды безусловного перехода на определенный адрес JMP. В первом случае ссылка осуществляется на программу инициализации, во втором – на основную программу обработки оцифрованного сигнала. Обе программы ориентировочно небольшие по сравнению с размером ПЗУ (2кбайт), поэтому их можно рассредоточить в адресном пространстве. Например, программу инициализации поместить с адреса 0200(16), а основную программу – начиная с адреса 0500(16). Тогда ориентировочная карта памяти выглядит следующим образом:
0000 | JMP 0200 |
0001 | |
… | |
003C | JMP 0500 |
003D | |
… | |
0200 | Инициализация |
0201 | … |
… | |
0500 | Осн. программа |
0501 | … |
… | |
5000 | ОЗУ |
5001 | |
… | |
7001 | Порт А |
7002 | Порт В |
7003 | |
… |
ПЗУ, ОЗУ и порты ввода-вывода имеют одно адрестое пространство, поэтому обращение к ним можно производить с помощью одних и тех же инструкций: LDA (загрузка) и STA (запоминание). При этом данные соответственно загружаются в аккумулятор и копируется из него.
Алгоритм программы инициализации имеет следующий вид:
Основная программа должна начинаться с загрузки в аккумулятор входного отсчета из порта А. Входные данные, получаемые от АЦП, представлены в беззначном коде (минимальное число 00000000(2), максимальное 11111111(2)). Чтобы перейти к рабочему коду процессора – дополнительному, достаточно прибавить к входному число 80(16) = 10000000(2), это эквивалентно отсечению постоянной составляющей. Далее предстоит умножение числа на коэффициенты и суммирование согласно выражению (1). Для этих целей необходимо хранить предыдущие отсчеты в памяти ОЗУ. Возможен следующий вариант организации оперативной (рабочей) памяти:
|
Отсчет*0.4 | *коэффиц. | Адрес(16) | ||
Xi-4 | 0.1 | 5000 | ||
Xi-3 | 1 | 5001 | ||
0.65 | 5002 | |||
0.1 | 5003 | |||
| 1 | 5004 | ||
0.65 | 5005 | |||
0.1 | 5006 | |||
Xi-1 | 1 | 5007 | ||
0.65 | 5008 | |||
0.1 | 5009 | |||
Xi | 1 | 500А | ||
0.65 | 500В | |||
0.1 | 500С |
ОЗУ начинается с адреса 5000(16), тут и можно разместить рабочую область. Преобразованный отсчет умножается на 0.4, помещается в ячейку с адресом 500А, далее умножается на 0.65 и помещается в ячейку 500В. Эти два умножения выполняются стандартно – сдвигом множителя и сложением.
Коэффициент 0.4 можно представить в 8-разрядной сетке приближенно: 0.0110011 = 0.25+0.125+0.015625+0.0078125 = 0.3984325. Алгоритм умножения на 0.4:
Аналогично производится умножение на коэффициент 0.65, который в двоичном виде можно представить как 0.1010011 = 0.5+0.125+0.015625+0.0078125=0.6484375.
Как видно, алгоритмы схожи. Деление на два может быть реализовано с помощью арифметического сдвига аккумулятора путем сочетания инструкций RLC, RAR, RAR. Такая последовательность команд исключает потерю знака из 7-го разряда, а значит, может применяться для положительных и отрицательных чисел. Округление представляет собой сложение с элементом, оказавшимся после деления вне разрядной сетки. При арифметическом сдвиге этот элемент переходит во флаг переноса С, следовательно, для округления может быть использована команда сложения с переносом ADC E, где Е – заранее обнуленный регистр, либо ADC B, когда непосредственно за округлением в алгоритме следует сложение с регистром В. Чтобы не потерять множитель-отсчет, перед сложением с регистром В его необходимо сохранить, например, в регистр С, после сложения восстановить в аккумулятор и продолжать операции арифметического сдвига.
Умножение на 0.1 можно выполнить более просто, если учесть, что С(b0+b1+b2+b3+b4)=С(2b0+2b1+b2)=1 – это легко проверить. Домножив обе части равенства на величину преобразованного в дополнительный код отсчета, получим:
|
Xi = 2Cb0Xi + 2Cb1Xi +Cb2Xi = 2*0.4*0.1Xi + 2*0.4*0.65Xi +0.4Xi
Значение 0.4*0.1*Xi является искомым и должно быть записано в ячейку 500С:
Алгоритм умножения на 0.1 должен реализовать данное выражение, причем исходные данные в числителе известны, если преобразованный отсчет Xi перед умножением на 0.4 сохранить в регистре, например, D. Значение 0.4*0.65*Xi на данном этапе находится в аккумуляторе. Умножение его на 2 можно выполнить последовательностью инструкций RAL, RAL, RRC, ANI 11111110(2) , позволяющей сохранить знак числа и исключить нечетность из-за перехода единицы в нулевой разряд аккумулятора из флага переноса.
Теперь рабочая область ОЗУ подготовлена к суммированию в соответствии с выражением (1), как показано на рис.. Суммируется содержимое ячеек с адресами 500С, 5008, 5004, 5002, 5000. Для этого можно использовать инструкцию ADD M, а в качестве указателя на адреса – регистр HL. После суммирования данные готовы к выводу в порт.
Далее содержимое ячеек 5003 – 500С подлежит переносу на три ячейки вверх – таким образом текущий отсчет становится предыдущим, предыдущий – препредыдущим и т. д. Сдвиг удобно осуществлять парами, используя для этого инструкции LHLD и SHLD.
Последней операцией основной программы является сброс входного триггера входа микропроцессора RST 7.5., после чего вход будет воспринимать сигнал прерывания как команду рестарта микропроцессора. Для сброса триггера просто переустанавливается маска прерываний, описанная выше.
Алгоритм работы основной программы (алгоритм фильтрации) выглядит следующим образом:
|
|
Своеобразие русской архитектуры: Основной материал – дерево – быстрота постройки, но недолговечность и необходимость деления...
История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...
Историки об Елизавете Петровне: Елизавета попала между двумя встречными культурными течениями, воспитывалась среди новых европейских веяний и преданий...
Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!