2.4 Разработка и описание общего алгоритма функционирования устройства

Представим алгоритм функционирования фильтра следующим образом:


Аппаратно- реализуемые операции Программно- реализуемые операции

 


вкл. питания

 

 

 

сброс при включении питания

 

 

 

 

 

 

 


Прерывание от TC/0

 

 

 

Запрос данных

 

Сигнал о готовности данных

Передача данных

Импульс считывания

Вычисленный отсчет

 

Выходной аналоговый сигнал

При включении фильтра происходит формирование импульса сброса, который обнуляет счетчик команд и приводит фильтр к исходному состоянию.

При инициализации настраивается таймер счетчик, загружается PSW основной программы, очищаются память выделенная под остчеты, устанавливается вершина стека. Необходимо, чтобы программа инициализации начиналась с нулевого адреса (0000h).

Основная программа представляет собой бесконечный цикл

После идет программа вычисления отсчета. В которой предусмотрено: ввод данных (xn), их обработка, в соответствии с разностным уравнением, и вывод данных (yn).

 

2.5 Электрическая принципиальная схема фильтра.


По линии 1 происходит запуск внешнего устройства. Линия 2 служит для сообщения от внешнего устройства о готовности входных данных. По линии 4 подается импульс, который заставляет внешнее устройство подать готовые данные на вход микроконтроллера.

Между микроконтроллером и ЦАП существует 2 линии связи: линия номер 5 – служит для выдачи готовых данных с МК, а по линии 6 подается импульс, инициирующий чтение готовых данных ЦАП.

По линии 7 преобразованный в аналоговый сигнал поступает на «Преобразователь выходного сигнала», который преобразует сигнал к заданному виду.



В состав схемы, в соответствии с теоретическим заданием, входит микроконтроллер КР1830BE51 и ЦАП АD9708. Подсоединим к микроконтроллеру кварцевый резонатор с частотой 12 МГц, для задания тактовой частоты микроконтроллера. Для его сброса, к входу RST подсоединим RC-цепочку, которая при замыкании ключа будет формировать импульс сброса микропроцессора. Поставим между микроконтроллером и входным устройством буфер К555АП6, служащий для развязки данных, умощнения входного сигнала и повышения помехоустойчивости.

На выходе ЦАП будем использовать дифференциальное включение выходов ЦАП, при котором напряжение UДИФ = UOUT А – UOUT В изменяется в пределах от +0,5 В до -0,5 В. Что бы преобразовать выходное напряжение к заданному виду ((0… + 2,5)) необходимо подать напряжение смещения +1.75В и усилить выходной сигнал в 2.5 раза. Для этого используем ДУ AD8072.

Для повышения помехоустойчивости между входным внешним устройством и МК в линии ПУСК, ЧТЕНИЕ, ГОТОВ поставим триггеры Шмитта.


3. Разработка и отладка программы на языке ассемблера

Первым делом необходимо разработать секцию инициализации, которая обязательно должна начинаться с нулевого адреса. В секции инициализации предусмотрим следующие макросы:

InitSteck – инициализация стека, запись вершины стека

InitInt – инициализация прерываний, разрешение всех прерываний и прерываний от таймера счетчика, в частности.

InitTimer – инициализация таймера, выбор первого таймера/счетчика, выбор первого режима работы, запрет внешнего управления. Выбираем функцию таймера.

InitCoeff – инициализация коэффициентов, запись констант значений коэффициентов в память (при этом коэффициенты располагаются в памяти последовательно)

InitPSW – инициализация PSW основной программы и программы вычисления отсчетов. В память программы записываются соответствующие значения PSW.

ClearXn – инициализация отсчетов, очистка памяти выделенной под отсчеты.

ReloadTimer – инициализация таймера, остановка таймера, загрузка значений младшего и старшего байтов интервала дискредитации.

После инициализации идет основная программа.

MainProgramm – бесконечный цикл основной программы. Выход по прерыванию от TC0.

Дальше идет секция исполнения, в которой происходит обработка входных данных и вывод их на выходной порт.

RunACP - макрос запуска внешнего устройства. По линии P3.0 на соответствующий контакт устройства подается импульс нулевого уровня.  

ReloadTimer – то же что и в секции инициализации

SavePSW – сохранение PSW основной программы и загрузка PSW рабочей программы.

CheckACP – проверка готовности данных от внешнего устройства. Если по линии P3.2 установлен 0, то данные готовы.

InputData – Ввод входных данных. Т.к. выводы внешнего входного устройство имеют третье состояние, то для того что бы данные попали на порт МК, необходимо по линии P3.1 сформировать импульс низкого уровня.

PrepareData – макрос, необходимый для упрощения разностного уравнения. Здесь происходит суммирование отсчетов стоящих у симметричных коэффициентов и запись суммы последовательно в память.

ComputeSample – макрос вычисления отсчета. Содержит в себе макрос очистки двухбайтовой суммы и макрос суммирования с ее накоплением.

ShiftL – сдвиг результата на 1 разряд влево.

OutputData – макрос вывода данных. Здесь результат переводится из дополнительного кода в прямой и затем старший байт отправляется на выходной порт. Формируется импульс по линии P1.0, для фиксации выходного отсчета на ЦАП.

PrepareCycl – последовательный сдвиг отсчетов в памяти.

ReloadPSW – запись PSW рабочий программы и восстановление PSW основной.

RETI – возвращение в основную программу.


Текст программы

*********************************************************************************

* Цифровой фильтр высокой частоты *

* Курсовой проект по дисциплине "Цифровые устройства и микропроцессоры" *

* Код F0b12_70 *

* Выполнил студент группы 410 Косс Андрей Владимирович *

* *

*********************************************************************************

SPACES ON ;Разрешить пробелы между операндами

FILLCHAR 00h ;Заполнить промежутки между секциями символами 00

************ ОПРЕДЕЛЕНИЕ КОНСТАНТ ************

Time0L: EQU 70h ;Младший байт числа -400 в ДК

Time0H: EQU FEh ;Старший байт числа -400 в ДК

Order: EQU 07h ;Число циклов суммирования (общее число слагаемых)

MODE1: EQU 01h ;установка TC0 в режим 1, таймер, НЕ разрешено внешн. упр

Datab1: EQU 06h ;значение коэффициента b1

Datab2: EQU 03h ;значение коэффициента b2

Datab3: EQU 91h ;значение коэффициента b3

Datab4: EQU 0Eh ;значение коэффициента b3

Datab5: EQU 16h ;значение коэффициента b3

Datab6: EQU CBh ;значение коэффициента b3

Datab7: EQU E5h ;значение коэффициента b3

MRBank: EQU 01h ;регистровый банк основной прграммы

RRBank: EQU 18h ;регистровый банк прграммы вычисления отсчёта

Maska1: EQU 7Fh ;маска для получения беззнаковых чисел

Maska2: EQU 00h ;маска для очистки двухбайтового сумматора

Maska3: EQU 00h ;маска для очистки ячеек хранения отсчёта

Shift: EQU 01h ;количество разрядов на которое необходимо сдвинуть результат вычисления

************ ОПРЕДЕЛЕНИЕ НЕПЕРЕМЕЩАЕМЫХ РЕГИСТРОВ ************

IE: REG A8h ;Присвоить имя IE регистру разрешения прерываний (ячейка A8h)

TCON: REG 88h ;Присвоить имя TCON регистру управления таймерами/счетчиками

TMOD: REG 89h ;Присвоить имя TMOD регистру режима таймеров/счетчиков

InPort: REG P0 ;Присвоить имя InPort порту P0

OutPort: REG P1 ;Присвоить имя OutPort порту P1

SP: REG 81h ;Присвоить имя SP указателю стека (ячейка 81h)

PSW: REG D0h ;Присвить имя PSW регистру слова состояния МК

************ ОПРЕДЕЛЕНИЕ НЕПЕРЕМЕЩАЕМЫХ БИТ ************

ET0: REG IE.1 ;Присвоить имя ET0 биту 1 регистра IE

EA: REG IE.7 ;Присвоить имя EA биту 7 регистра IE

ITO: REG TCON.0 ;Присвоить имя IT0 биту 0 регистра TCON

IEO: REG TCON.1 ;Присвоить имя IE0 биту 1 регистра TCON

TR0: REG TCON.4 ;Присвоить имя TR0 биту 4 регистра TCON

RD: REG P3.1 ;Присвоить имя RD биту 0 порта P3

B0: REG P3.0 ;Присвоить имя B0 биту 1 порта P3

CheckBit: REG P3.2 ;Присвоить имя CheckBit биту 2 порта P3

WR: REG P1.0 ;Присвоить имя WR биту 0 порта Р1

SignA: REG E0h.7 ;Присвоить имя SignA (знак регистра А) старшему биту аккумулятора

SignB: REG F0h.7 ;Присвоить имя SignB (знак регистра B) старшему биту регистра В

************ ОПРЕДЕЛЕНИЕ ПЕРЕМЕЩАЕМЫХ РЕГИСТРОВ ************

RSECT ;Секция байт, располагается в DSEG

b1: DS 1 ;Коэффициенты числителя

b2: DS 1 ;

b3: DS 1 ;

b4: DS 1 ;

b5: DS 1 ;

b6: DS 1 ;

b7: DS 1 ;

DS 09h ;

Xn1: DS 1 ;Текущие отсчеты

Xn2: DS 1 ;

Xn3: DS 1 ;

Xn4: DS 1 ;

Xn5: DS 1 ;

Xn6: DS 1 ;

Xn7: DS 1 ;

Xn8: DS 1 ;

Xn9: DS 1 ;

Xn10: DS 1 ;

Xn11: DS 1 ;

Xn12: DS 1 ;

Xn13: DS 1 ;

ds 01h ;

X1: DS 1 ;Отсчеты соответствующие упрощенному уравнению

X2: DS 1 ;

X3: DS 1 ;

X4: DS 1 ;

X5: DS 1 ;

X6: DS 1 ;

X7: DS 1 ;

DS 09h ;

Yn1 DS 1 ;Выходной отсчет

MainPSW: DS 1 ; Регистр для записи PSW основной программы

RunPSW: DS 1 ; Регистр для записи PSW программы вычисления отчёта

VarA: DS 1 ;Байт для промежуточного хранения аккумулятора

SumH: DS 1 ;Старший байт суммы

SumL: DS 1 ;Младший байт суммы

AddrSP: DS 1 ;Начало стека

************ ОПРЕДЕЛЕНИЕ ПЕРЕМЕЩАЕМЫХ БИТ ************

SignM: DS 1 ;Регистр для хранения знака произведения

************************* МАКРОСЫ *************************

;---------------------------------------------------------------------------------------------------------------;Определение знака произведения

;Определяет знак произведения двух множителей, представленных в прямом

;коде и расположенных в регистрах А и В. SignM = SignA XOR SignB

;Автор: библиотека

;---------------------------------------------------------------------------------------------------------------SignMUL: MACRO

MOV C, SignA

ANL C, /SignB

MOV SignM, C

MOV C, SignB

ANL C, /SignA

ORL C, SignM

MOV SignM, C

ENDM

;---------------------------------------------------------------------------------------------------------------;Преобразование произведения в дополнительный код

;[B,A](БезЗн)=>

;Автор: библиотека

;---------------------------------------------------------------------------------------------------------------PK_DK_MUL: MACRO

JNB SignM, M1#

CPL A

ADD A, #01h

MOV VarA, A

MOV A, B

CPL A

ADDC A, #00h

MOV B, A

MOV A, VarA

M1#: ENDM

;---------------------------------------------------------------------------------------------------------------;Накапливающий сумматор двухбайтовых чисел [B,A]+[SumH,SumL]=>[SumH,SumL]

;Автор: библиотека

;---------------------------------------------------------------------------------------------------------------Sum2Byte: MACRO

ADD A, SumL

MOV SumL, A

MOV A, B

ADDC A, SumH

MOV SumH, A

ENDM

;---------------------------------------------------------------------------------------------------------------;Умножение C накоплением двух чивел, адреса которых находятся в регистрах R0 и R1

;текущего регистрового банка

;Автор:библиотека

;---------------------------------------------------------------------------------------------------------------MAC: MACRO

MOV A, @R0

MOV B, @R1

SignMUL

ANL A,#Maska1

ANL B,#Maska1

MUL AB

PK_DK_MUL

Sum2Byte

ENDM

;---------------------------------------------------------------------------------------------------------------;Очистка 2-байтового накопительного сумматора

;Автор: библиотека

;---------------------------------------------------------------------------------------------------------------ClearSum2Byte: MACRO

MOV SumH, #Maska2

MOV SumL, #Maska2

ENDM

;---------------------------------------------------------------------------------------------------------------;Вычисление отсчетов упрощенного уравнения

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------PrepareData: MACRO

MOv A, Xn1

ADD A, Xn13

MOV X1, A

MOv A, Xn2

ADD A, Xn12

MOV X2, A

MOv A, Xn3

ADD A, Xn11

MOV X3, A

MOv A, Xn4

ADD A, Xn10

MOV X4, A

MOv A, Xn5

ADD A, Xn9

MOV X5, A

MOv A, Xn6

ADD A, Xn8

MOV X6, A

MOV X7, Xn7

ENDM

;---------------------------------------------------------------------------------------------------------------;Вычисление отсчета

;Автор: библиотека

;---------------------------------------------------------------------------------------------------------------ComputeSample: MACRO

ClearSum2Byte

MOV R0, #b1

MOV R1, #X1

MOV R4, #Order

M2# MAC

INC R0

INC R1

DJNZ R4, M2#

ENDM

;---------------------------------------------------------------------------------------------------------------;Подготовка цикла

;Автор: библиотека

;---------------------------------------------------------------------------------------------------------------PrepareCycl: MACRO

MOV Yn1, SumH

MOV Xn13, Xn12

MOV Xn12, Xn11

MOV Xn11, Xn10

MOV Xn10, Xn9

MOV Xn9, Xn8

MOV Xn8, Xn7

MOV Xn7, Xn6

MOV Xn6, Xn5

MOV Xn5, Xn4

MOV Xn4, Xn3

MOV Xn3, Xn2

MOV Xn2, Xn1

MOV Xn1, InPort

ENDM

;---------------------------------------------------------------------------------------------------------------;Инициализация прерываний

;EA=1 - разрешить все прерывания

;ET0=1 - разрешить прерываний TC0

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------InitInt: MACRO

SETB EA

SETB ET0

ENDM

;---------------------------------------------------------------------------------------------------------------;Перезагрузка таймера

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------ReloadTimer: MACRO

CLR TR0

MOV TL0, #Time0L

MOV TH0, #Time0H

SETB TR0

ENDM

;---------------------------------------------------------------------------------------------------------------;Инициализация таймера

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------InitTimer: MACRO

ANL TMOD,#F0h

ORL TMOD,#MODE1

ENDM

;---------------------------------------------------------------------------------------------------------------;Инициализация стека ;установка вершины стека

;Автор: библиотека

;---------------------------------------------------------------------------------------------------------------

InitSteck: MACRO

MOV SP, #AddrSP

DEC SP

ENDM

;---------------------------------------------------------------------------------------------------------------;Инициализация PSW

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------InitPSW: MACRO

MOV MainPSW,#MRBank

MOV RunPSW,#RRBank

ENDM

;---------------------------------------------------------------------------------------------------------------;Инициализация коэффициентов

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------InitCoeff: MACRO

MOV b1, #Datab1

MOV b2, #Datab2

MOV b3, #Datab3

MOV b4, #Datab4

MOV b5, #Datab5

MOV b6, #Datab6

MOV b7, #Datab7

ENDM

;---------------------------------------------------------------------------------------------------------------;Инициализация отсчётов

;Автор: библиотека

;---------------------------------------------------------------------------------------------------------------ClearXn: MACRO

MOV Xn1, #Maska3

MOV Xn2, #Maska3

MOV Xn3, #Maska3

MOV Xn4, #Maska3

MOV Xn5, #Maska3

MOV Xn6, #Maska3

MOV Xn7, #Maska3

MOV Xn8, #Maska3

MOV Xn9, #Maska3

MOV Xn10, #Maska3

MOV Xn11, #Maska3

MOV Xn12, #Maska3

MOV Xn13, #Maska3

ENDM

;---------------------------------------------------------------------------------------------------------------;Основная программа

;Автор: библиотека

;---------------------------------------------------------------------------------------------------------------MainProgramm: MACRO

M3#: SJMP M3#

ENDM

;---------------------------------------------------------------------------------------------------------------;Преобразование данных из дополнительного в прямой код

; InByte(ДК)=> OutByte(ПК)

;Автор: библиотека

;---------------------------------------------------------------------------------------------------------------DK_PK: MACRO InByte, OutByte

MOV A, InByte

JNB SignA, M4#

XRL A, #7Fh

INC A

M4#: MOV OutByte, A

ENDM

;---------------------------------------------------------------------------------------------------------------;Сохранение PSW основной программы и загрузка PSW программы вычисления отчета

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------SavePSW: MACRO

MOV MainPSW,PSW

MOV PSW,RunPSW

ENDM

;---------------------------------------------------------------------------------------------------------------;Восстановление PSW основной программы

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------ReloadPSW: MACRO

MOV RunPSW,PSW

MOV PSW,MainPSW

ENDM

;---------------------------------------------------------------------------------------------------------------;Запуск входного внешнего устройства

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------

RunACP: MACRO

CLR B0

SETB B0

ENDM

;---------------------------------------------------------------------------------------------------------------;Проверка готовности данных входного внешнего устройства

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------CheckACP: MACRO

M6#: JB CheckBit,M6#

ENDM

;---------------------------------------------------------------------------------------------------------------;Сдвиг результата вычисления на 1 разряд в лево

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------

ShiftL: MACRO

MOV R7, #Shift

M1#: CLR C

MOV A, SumL

RLC A

MOV SumL, A

MOV A, SumH

RLC A

MOV SumH, A

DJNZ R7, M1#

ENDM

;---------------------------------------------------------------------------------------------------------------;Ввод данных из P0 в Xn1

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------InputData: MACRO

SETB RD

DK_PK InPort, Xn1

CLR RD

ENDM

;---------------------------------------------------------------------------------------------------------------;Перевод двухбайтового числа (результат вычисления отсчёта) из дополнительного в прямой код

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------

DK_PK_Rez: MACRO

MOV A,SumH

JNB SignA,M1#

MOV A,SumL

CLR C

SUBB A,#01h

CPL A

MOV SumL,A

MOV A,SumH

SUBB A,#00h

XRL A,#7fh

M1#: MOV SumH,A

ENDM

;---------------------------------------------------------------------------------------------------------------

;Вывод данных

;Автор: Косс А.В.

;---------------------------------------------------------------------------------------------------------------

OutputData: MACRO

DK_PK_Rez

MOV OutPort, SumH

SETB WR

CLR WR

ENDM

************************ ПРОГРАММА ************************

.CODE ;Секция кода, располагается в СSEG

;Таблица векторов прерываний

;Прерывание RESET - стартовый адрес при сбросе микроконтроллера

ORG 0h

LJMP Init ;инициализация программы

;Прерывание TIMER0 - Прерывание таймера/счетчика 0

ORG 000Bh

LJMP Run

*****************************************************************

;Программа инициализации

InitSect: SECTION ;Секция инициализации

Init: InitSteck

InitInt

InitTimer

InitCoeff

InitPSW

ClearXn

ReloadTimer

MainProgramm

*****************************************************************

RunSect: SECTION ;Секция исполнения

Run: RunACP

ReloadTimer

SavePSW

CheckACP

InputData

PrepareData

ComputeSample

ShiftL

OutputData

PrepareCycl

ReloadPSW

RETI



Информация о работе «Цифровой фильтр высокой частоты»
Раздел: Коммуникации и связь
Количество знаков с пробелами: 33021
Количество таблиц: 5
Количество изображений: 9

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

Скачать
25073
5
6

... ; MOV X1, X ; MOV Y1, Y ; RETI ;возврат из подпрограммы обслуживания прерывания по входу END Исходные определения и ручной расчёт результатов работы программы: "Цифровой фильтр (нижних частот)". Разностное уравнение имеет вид: Представим уравнение в виде:  , где  , 1)Реализуемый коэффициент масштабирования (число без знака) при 8-разрядном формате беззнаковых коэффициентов:  ;, ...

Скачать
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), которая при двухкаскадной ...

Скачать
12072
0
12

... (активные компоненты), но в них нет катушек индуктивности. В дальнейшем активные фильтры почти полностью заменили пассивные. Сейчас пассивные фильтры применяются только на высоких частотах (выше 1МГц), за пределами частотного диапазона большинства ОУ широкого применения. Сейчас во многих случаях аналоговые фильтры заменяются цифровыми. Работа цифровых фильтров обеспечивается, в основном ...

Скачать
25583
3
10

... звеньев первого и второго порядка представлена на следующем рисунке: 3. Методы расчета БИХ-фильтров и вид целевой функции Расчет БИХ-фильтров можно вести в частотной и временной областях. При расчете в частотной области используется синтез по аналоговому и цифровому прототипам. Численные методы расчета разработаны для применения в частотной и временной областях. ...

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


Наверх