3. Разработка конкретных алгоритмов работы устройства

Как уже оговаривалось, при рестарте микропроцессор начинает исполнять инструкции, находящиеся в области векторов прерываний ПЗУ в зависимости от типа рестарта. При включении питания исполняется команда, записанная в ячейке с адресом 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

S

 
Xi-2
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., после чего вход будет воспринимать сигнал прерывания как команду рестарта микропроцессора. Для сброса триггера просто переустанавливается маска прерываний, описанная выше.

Алгоритм работы основной программы ( алгоритм фильтрации ) выглядит следующим образом:

 


Информация о работе «Цифровой сглаживающий фильтр»
Раздел: Коммуникации и связь
Количество знаков с пробелами: 29613
Количество таблиц: 4
Количество изображений: 3

Похожие работы

Скачать
26364
7
10

... интервал дискретизации Так как, tmax <Tд, то быстродействие устройства вполне достаточно для обработки выборки в реальном масштабе времени . Составление принципиальной схемы устройства и ее описание   Принципиальная схема цифрового фильтра содержит след. микросхемы: DD1 – МП К1821ВМ85 DD2 – ПЗУ К1821РФ55 DD3 – ОЗУ К1821РУ55 DD4 – ЦАП К1108ПА1Б DА5 - ОУ К574УД1 DD6- К174ЛЕ5 ...

Скачать
52542
6
12

... С2 и транзистор оптрона VT1.2 образуют обратную связь для регулирования ШИМ, которая подается на вывод "С" микросхемы DA1 через полосовой фильтр, образованный на R1, С4, С5 и устраняющем коммутационные помехи оптроне. Резистором R5 осуществляется ограничение выходного тока преобразователя, а при помощи R4 устанавливается входной диапазон напряжений. Вторичная обмотка трансформатора TV1 разбита ...

Скачать
20682
3
7

... данных в режиме простого обмена данными; q  таймер (РУ55) останавливается; q  содержимое ячеек ОЗУ и буферных регистров портов (РУ55) сохраняется. 3. Разработка общего алгоритма функционирования фильтра Общий алгоритм функционирования фильтра строится на основе выводов и определений, сделанных при анализе задачи, и включает в себя все функции устройства, реализуемые аппаратно и реализуемые ...

Скачать
20489
1
3

... , b2i , a2i определяют характеристики фильтра. При значениях коэффициентов фильтр имеет АЧХ фильтра верхних частот b 20 = 1;b 21 = 0;b 22 = 1.1; a 21 = 0.999;a 22 = 0.000 Разностное уравнение задает во временной области порядок получения выходной последовательности отсчетов из входной. В z-плоскости свойства цифрового фильтра описывает передаточная функция H(z), которая при двухкаскадной ...

0 комментариев


Наверх