Курсовая работа: Цифровой сглаживающий фильтр

Попарно разряды этого слова, начиная с младшего, означают следующее:

Порт А работает на ввод, порт В – на вывод;

порт С работает как порт служебных сигналов;

разрешить прерывания по портам А и В;

запуск таймера.

Линии порта С передают следующие сигналы:

PC0 – INTRA – запрос прерывания по порту А;

PC1 – BFA – состояние буфера порта А;

PC2 – STBA – строб записи в порт А;

PC3 – INTRB – запрос прерывания по порту В;

PC4 – BFB – состояние буфера порта В;

PC5 – STBB – сигнал квитирования с периферии.

4-й и 5-й биты управляющего слова разрешают вывод сигналов INTRAи INTRB.

Управляющее слово необходимо для инициализации записать по адресу 7000(16) .

Конечный шаг инициализации - устанавливается маска прерываний и с них снимается запрет. В случае, если используется аппаратное прерывание RST7.5, маска имеет вид:

0 0 0 0 1 0 1 1 (2)

0-й и 1-й разряды содержат единицы, маскирующие прерывания 5.5 и 6.5, нуль во 2-м оставляет доступным прерывание 7.5; единица в 3-м разряде разрешает прерывания.

Для установки этой маски используется специальная команда SIMмикропроцессора ВМ85.

Программа инициализации заканчивается стандартно – командой HLT – останов. После этого процессор будет запускаться только аппаратным прерыванием RST 7.5 – при положительном перепаде напряжения на соответствующем входе. Сигналом запуска для микропроцессора должен служить сигнал наличия данных в буфере порта А BFA. Данный сигнал переходит на высокий уровень по положительному (заднему) фронту сигнала готовности данных АЦП RAD, представляющего собой импульс низкого уровня длительностью чуть больше такта АЦП tmin , то есть когда оцифрованный отсчет загружается в буфер порта А. Сигнал BFAобнуляется, когда происходит программное обращение к порту А с целью считать данные во внутренний регистр микропроцессора (аккумулятор).

При перепаде на высокий уровень, если прерывание не замаскировано и разрешено, произойдет сохранение счетчика команд в стеке, и микропроцессор начнет работу с ячейки 003С(16) . В эту ячейку следует записать инструкцию перехода на начальный адрес основной программы, которая будет считывать входной отсчет из порта А, обрабатывать его согласно алгоритму фильтрации и выводить в порт В. Основная программа должна отработать до прихода в порт А очередных данных, а до этого не прерываться. Первое обеспечивается эффективностью алгоритма и быстродействием программы. Второе – хранением высокого уровня на входе RST 7.5 триггером, поэтому ложная импульсная помеха, попавшая на этот вход во время выполнения программы, не прервет и не перезапустит ее. Но чтобы обеспечить возможность нового запуска программы при приходе очередных данных, необходимо сбросить триггер, что осуществляется переустановкой маски, описанной выше. Кроме того, необходимо записать исходное число 50FFв указатель стека, так как при каждом прерывании в стек записывается счетчик команд, а указатель стека дважды декрементируется, что в конечном итоге приведет к достижению им рабочей области и засорению ее неверной информацией. Завершается основная программа командой HLT, и процессор ожидает поступления на вход RST 7.5 очередного положительного перепада.

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:

К-во Просмотров: 301
Бесплатно скачать Курсовая работа: Цифровой сглаживающий фильтр