FILLCHAR 00h ;записать в пропуски между секциями 00
Инициализация по сигналу RST
S0: .SECTION
ORG 0000h ;переход к программе инициализации
LJMP INIT
S1: .SECTION
ORG 00A0h
INIT: MOVTMOD, #STMOD;настройка режима Т/С0
MOVTH0, #STH0 ;задание частоты дискретизации
SETB TR0 ;пуск Т/С0
MOV A, #SRU ;настройка порта
MOV DPTR, #RGRU ;РВ РУ 55
MOVX @DPTR, A ;на ввод данных
MOV A, #SRF ;настройка порта
MOV DPTR, #RGRF ;РВ РФ 55
MOVX @DPTR, A ;на вывод данных
MOV IE, #SIE ;настройка прерываний
STOP: SJMP STOP ;останов МК
Формирование импульса по внутреннему прерыванию от Т/С0
S2: .SECTION
ORG 000Bh
LJMP START ;переход к п/п формирования импульсазапуска внешнего источника данных
S3: .SECTION
ORG 00D0h
START: CLR B0 ;сброс бита В0
SETB B0 ;установка бита В0
RETI ;возврат из п/п обслуживанияпрерывания от Т/С0
Вычисление выходного отсчета по сигналу внешнего прерывания по входу
, рабочий цикл фильтраS4: .SECTION
ORG 0003h
LJMP XYOUT
S5: .SECTION
ORG 0100h
XYOUT: MOV DPTR, #PBRU ;вводданныхчерез
MOVX A, @DPTR ;РВРУ 55
Программный модуль масштабирования:
вычисление произведения
=входной отсчет - в аккумуляторе, масштабированныйотсчет записать в ОЗУ
RLC A ;анализ знака
JC M1 ;переход к программе умножения отрицательного отсчета
наRRC A ;восстановление положительного отсета
в аккумулятореMOV B, #Km ;вычисление произведения
MUL AB ;
MOV X, B ;запоминание масштабированногоотсчета
в памятиSJMP M2 ;переход к продолжению
M1: RRC A ;восстановление отрицательного отсчета
в аккумулятореCPL A ;получение положительного
INC A ;отсчета
(смена знака)MOV B, #Km ;вычисление произведе-
MUL AB ;ния
и пересылкаMOV A, B ;в аккумулятор
CPL A ;получение отрицательного
INC A ;произведения
(смена знака) MOV X, A ;запоминание масштабированного отсчета в памяти программный модуль вычисленияпроизведения хранится в ячейке ОЗУ с адресом X2 записать в ячейку ОЗУ с адресом P1M2: MOV A, X2 ;копирование
в аккуму-RLC A ;лятор и анализ знака
JC M3 ;переход к программеумножения отрицательногоотсчета
наRRC A ;восстановление положительного отсчета
в аккумулятореMOV B, #k1 ;вычисление произведе-
MUL AB ;ния
MOV P1, B ;запоминание
в памятиSJMP M4 ;переход к продолжению
M3: RRC A ;восстановление отрицательного отсчета
в аккумулятореCPL A ;получение положительного
INC A ;отсчета
(смена знака)MOV B, #k1 ;вычисление произведе-
MUL AB ;ния
и пересылкаMOV A, B ;в аккумулятор
CPL A ;получение отрицательного
INC A ;отсчета
(смена знака)MOV P1, A ;запоминание
в памятипрограммный модуль вычисленияпроизведения
хранится в ячейке ОЗУ с адресом Y1 записать в ячейку ОЗУ с адресом P2M4: MOV A, Y1 ;копирование
в акку-RLC A ;мулятор и анализ знака
JC M5 ;переход к программе умножения отрицательногоотсчета
наRRC A ;восстановление положительного отсчета
в аккумулятореMOV B, #k2 ;вычисление произведе-
MUL AB ;ния
MOV P2, B ;запоминание
в памятиSJMP M6 ;переход к продолжению
M5: RRC A ;восстановление отрицательного отсчета
в аккумулятореCPL A ;получение положительного
INC A ;отсчета
(смена знака)MOV B, #k2 ;вычисление произведе-
MUL AB ;ния
и пересылкаMOV A, B ;в аккумулятор
CPL A ;получение отрицательного
INC A ;произведения
(смена знака)MOV P2, A ;запоминание
в памятипрограммный модуль вычисления выходного
отсчета
, слагаемыехранятся в ячейках ОЗУ, результат записать
в ячейку ОЗУ и вывести на ЦАП
M6: MOV A, X ;вычисление отсчета
ADD A, P1 ;и сохранение в памяти
ADD A, P2 ;
MOV Y, A ;
ADD A, #80h ;получение смещённого
кода
для ЦАПMOV DPTR, #PBRF ;вывод кода Y через порт
MOVX @DPTR, A ;РВ РФ55
программный модуль сдвига отсчетовв памяти, подготовка следующего рабочегоцикла
MOV X2, X1 ;
MOV X1, X ;
MOV Y1, Y ;
RETI ;возврат из подпрограммы
обслуживания прерывания
по входу
END
Исходные определения и ручной расчёт результатов работы программы: "Цифровой фильтр (нижних частот)".
Разностное уравнение имеет вид:
Представим уравнение в виде:
, где ,1)Реализуемый коэффициент масштабирования
(число без знака) при 8-разрядном формате беззнаковых коэффициентов: ; , = = =2)Реализуемые коэффициенты разностного уравнения
и (числа без знака ) при 8-разрядном формате беззнаковых коэффициентов: ; ;3) Входной положительный отсчет максимальной амплитуды (немасштабированный отсчет):
4)Масштабированный входной положительный отсчет максимальной амплитуды:
:= =